327 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | ||
| // +----------------------------------------------------------------------
 | ||
| // | likeshop开源商城系统
 | ||
| // +----------------------------------------------------------------------
 | ||
| // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
 | ||
| // | gitee下载:https://gitee.com/likeshop_gitee
 | ||
| // | github下载:https://github.com/likeshop-github
 | ||
| // | 访问官网:https://www.likeshop.cn
 | ||
| // | 访问社区:https://home.likeshop.cn
 | ||
| // | 访问手册:http://doc.likeshop.cn
 | ||
| // | 微信公众号:likeshop技术社区
 | ||
| // | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
 | ||
| // |  likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
 | ||
| // | 禁止对系统程序代码以任何目的,任何形式的再发布
 | ||
| // | likeshop团队版权所有并拥有最终解释权
 | ||
| // +----------------------------------------------------------------------
 | ||
| // | author: likeshop.cn.team
 | ||
| // +----------------------------------------------------------------------
 | ||
| 
 | ||
| 
 | ||
| namespace app\api\logic;
 | ||
| 
 | ||
| 
 | ||
| use app\common\model\DevRegion;
 | ||
| use app\common\model\user\UserAddress;
 | ||
| use app\common\server\AreaServer;
 | ||
| use think\facade\Db;
 | ||
| use think\Exception;
 | ||
| 
 | ||
| class UserAddressLogic
 | ||
| {
 | ||
|     /**
 | ||
|      * 获取用户地址信息
 | ||
|      * @param $user_id
 | ||
|      * @return array
 | ||
|      * @throws \think\db\exception\DataNotFoundException
 | ||
|      * @throws \think\db\exception\ModelNotFoundException
 | ||
|      * @throws \think\exception\DbException
 | ||
|      */
 | ||
|     public static function infoUserAddress($user_id)
 | ||
|     {
 | ||
|         $UserAddress = new UserAddress();
 | ||
|         $info = $UserAddress
 | ||
|             ->where(['user_id' => $user_id, 'del' => 0])
 | ||
|             ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default')
 | ||
|             ->select()
 | ||
|             ->toArray();
 | ||
|         foreach ($info as &$item) {
 | ||
|             $item['province'] = AreaServer::getAddress($item['province_id']);
 | ||
|             $item['city'] = AreaServer::getAddress($item['city_id']);
 | ||
|             $item['district'] = AreaServer::getAddress($item['district_id']);
 | ||
|         }
 | ||
|         return $info;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 获取一条地址信息
 | ||
|      * @param $user_id
 | ||
|      * @param $get
 | ||
|      * @return array|\PDOStatement|string|\think\Model|null
 | ||
|      * @throws \think\db\exception\DataNotFoundException
 | ||
|      * @throws \think\db\exception\ModelNotFoundException
 | ||
|      * @throws \think\exception\DbException
 | ||
|      */
 | ||
|     public static function getOneAddress($user_id, $get)
 | ||
|     {
 | ||
|         $UserAddress = new UserAddress();
 | ||
|         $info = $UserAddress
 | ||
|             ->where(['id' => (int)$get['id'], 'user_id' => $user_id, 'del' => 0])
 | ||
|             ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default')
 | ||
|             ->find();
 | ||
| 
 | ||
|         $info['province'] = AreaServer::getAddress($info['province_id']);
 | ||
|         $info['city'] = AreaServer::getAddress($info['city_id']);
 | ||
|         $info['district'] = AreaServer::getAddress($info['district_id']);
 | ||
|         return $info;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 获取默认地址
 | ||
|      * @param $user_id
 | ||
|      * @return array
 | ||
|      */
 | ||
|     public static function getDefaultAddress($user_id)
 | ||
|     {
 | ||
|         $UserAddress = new UserAddress();
 | ||
|         $info = $UserAddress
 | ||
|             ->where(['is_default' => 1, 'user_id' => $user_id, 'del' => 0])
 | ||
|             ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default')
 | ||
|             ->findOrEmpty()->toArray();
 | ||
| 
 | ||
|         if (!$info) {
 | ||
|             return [];
 | ||
|         }
 | ||
| 
 | ||
|         $info['province'] = AreaServer::getAddress($info['province_id']);
 | ||
|         $info['city'] = AreaServer::getAddress($info['city_id']);
 | ||
|         $info['district'] = AreaServer::getAddress($info['district_id']);
 | ||
| 
 | ||
|         return $info;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 设置默认地址
 | ||
|      * @param $user_id
 | ||
|      * @param $post
 | ||
|      * @return int|string
 | ||
|      */
 | ||
|     public static function setDefaultAddress($user_id, $post)
 | ||
|     {
 | ||
| 
 | ||
|         try {
 | ||
|             Db::startTrans();
 | ||
|             $UserAddress = new UserAddress();
 | ||
|             $UserAddress
 | ||
|                 ->where(['del' => 0, 'user_id' => $user_id])
 | ||
|                 ->update(['is_default' => 0]);
 | ||
| 
 | ||
|             $result = $UserAddress
 | ||
|                 ->where(['id' => $post['id'], 'del' => 0, 'user_id' => $user_id])
 | ||
|                 ->update(['is_default' => 1]);
 | ||
| 
 | ||
|             Db::commit();
 | ||
|         } catch (\Exception $e) {
 | ||
|             Db::rollback();
 | ||
|             return false;
 | ||
|         }
 | ||
| 
 | ||
|         return $result;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 添加收货地址
 | ||
|      * @param $user_id
 | ||
|      * @param $post
 | ||
|      * @return int|string
 | ||
|      */
 | ||
|     public static function addUserAddress($user_id, $post)
 | ||
|     {
 | ||
|         try {
 | ||
|             Db::startTrans();
 | ||
|             $UserAddress = new UserAddress();
 | ||
|             if ($post['is_default'] == 1) {
 | ||
|                 $UserAddress
 | ||
|                     ->where(['del' => 0, 'user_id' => $user_id])
 | ||
|                     ->update(['is_default' => 0]);
 | ||
|             } else {
 | ||
|                 $is_first = $UserAddress
 | ||
|                     ->where(['del' => 0, 'user_id' => $user_id])
 | ||
|                     ->select();
 | ||
|                 if (empty($is_first)) {
 | ||
|                     $post['is_default'] = 1;
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
|             $data = [
 | ||
|                 'user_id' => $user_id,
 | ||
|                 'contact' => $post['contact'],
 | ||
|                 'telephone' => $post['telephone'],
 | ||
|                 'province_id' => $post['province_id'],
 | ||
|                 'city_id' => $post['city_id'],
 | ||
|                 'district_id' => $post['district_id'],
 | ||
|                 'address' => $post['address'],
 | ||
|                 'is_default' => $post['is_default'],
 | ||
|                 'create_time' => time()
 | ||
|             ];
 | ||
| 
 | ||
|             $result = $UserAddress->insert($data);
 | ||
| 
 | ||
|             Db::commit();
 | ||
|         } catch (Exception $e) {
 | ||
|             Db::rollback();
 | ||
|             return $e->getMessage();
 | ||
|         }
 | ||
| 
 | ||
|         return $result;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 编辑用户地址
 | ||
|      * @param $user_id
 | ||
|      * @param $post
 | ||
|      * @return int|string
 | ||
|      * @throws \think\Exception
 | ||
|      * @throws \think\exception\PDOException
 | ||
|      */
 | ||
|     public static function editUserAddress($user_id, $post)
 | ||
|     {
 | ||
| 
 | ||
|         try {
 | ||
|             Db::startTrans();
 | ||
|             $UserAddress = new UserAddress();
 | ||
|             if ($post['is_default'] == 1) {
 | ||
|                 $UserAddress->where(['del' => 0, 'user_id' => $user_id])
 | ||
|                     ->update(['is_default' => 0]);
 | ||
|             }
 | ||
| 
 | ||
|             $data = [
 | ||
|                 'contact' => $post['contact'],
 | ||
|                 'telephone' => $post['telephone'],
 | ||
|                 'province_id' => $post['province_id'],
 | ||
|                 'city_id' => $post['city_id'],
 | ||
|                 'district_id' => $post['district_id'],
 | ||
|                 'address' => $post['address'],
 | ||
|                 'is_default' => $post['is_default'],
 | ||
|                 'update_time' => time()
 | ||
|             ];
 | ||
| 
 | ||
|             $result = $UserAddress
 | ||
|                 ->where(['id' => $post['id'], 'del' => 0, 'user_id' => $user_id])
 | ||
|                 ->update($data);
 | ||
| 
 | ||
|             Db::commit();
 | ||
|         } catch (\Exception $e) {
 | ||
|             Db::rollback();
 | ||
|             return false;
 | ||
|         }
 | ||
| 
 | ||
|         return $result;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 删除用户地址
 | ||
|      * @param $user_id
 | ||
|      * @param $post
 | ||
|      * @return int|string
 | ||
|      * @throws \think\Exception
 | ||
|      * @throws \think\exception\PDOException
 | ||
|      */
 | ||
|     public static function delUserAddress($user_id, $post)
 | ||
|     {
 | ||
| 
 | ||
|         $data = [
 | ||
|             'del' => 1,
 | ||
|             'update_time' => time()
 | ||
|         ];
 | ||
|         $UserAddress = new UserAddress();
 | ||
|         return $UserAddress
 | ||
|             ->where(['id' => $post['id'], 'del' => 0, 'user_id' => $user_id])
 | ||
|             ->update($data);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     /**
 | ||
|      * 获取省市区id
 | ||
|      * @param $province
 | ||
|      * @param $city
 | ||
|      * @param $district
 | ||
|      * @return array
 | ||
|      */
 | ||
|     public static function handleRegion($province, $city, $district)
 | ||
|     {
 | ||
|         if (!$province || !$city || !$district) {
 | ||
|             return [];
 | ||
|         }
 | ||
|         $result = [];
 | ||
|         $result['province'] = self::handleRegionField($province, 1);
 | ||
|         if (!$result['province']) {
 | ||
|             return [];
 | ||
|         }
 | ||
|         $result['city'] = self::handleRegionField($city, 2);
 | ||
|         $result['district'] = self::handleRegionField($district, 3);
 | ||
| 
 | ||
|         return $result;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 获取对应省,市,区的id
 | ||
|      * @param $keyword
 | ||
|      * @param int $level
 | ||
|      * @return mixed|string
 | ||
|      * @throws \think\db\exception\DataNotFoundException
 | ||
|      * @throws \think\db\exception\ModelNotFoundException
 | ||
|      * @throws \think\exception\DbException
 | ||
|      */
 | ||
|     public static function handleRegionField($keyword, $level = 1)
 | ||
|     {
 | ||
|         $data = '';
 | ||
|         $DevRegion = new DevRegion();
 | ||
|         $list = $DevRegion->where('level', $level)->select();
 | ||
|         foreach ($list as $k => $v) {
 | ||
|             if ($keyword == $v['name']) {
 | ||
|                 $data = $v['id'];
 | ||
|             }
 | ||
|         }
 | ||
|         if (empty($data)) {
 | ||
|             foreach ($list as $k => $v) {
 | ||
|                 if (strpos($v['name'], $keyword) !== false) {
 | ||
|                     $data = $v['id'];
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         return $data;
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     /**
 | ||
|      * User: 意象信息科技 mjf
 | ||
|      * Desc: 获取用户指定id的地址
 | ||
|      * @param $address
 | ||
|      * @param $user_id
 | ||
|      * @return array|\PDOStatement|string|\think\Model|null
 | ||
|      * @throws \think\db\exception\DataNotFoundException
 | ||
|      * @throws \think\db\exception\ModelNotFoundException
 | ||
|      * @throws \think\exception\DbException
 | ||
|      */
 | ||
|     public static function getUserAddressById($address, $user_id)
 | ||
|     {
 | ||
|         $UserAddress = new UserAddress();
 | ||
|         $info = $UserAddress
 | ||
|             ->where(['id' => $address, 'user_id' => $user_id, 'del' => 0])
 | ||
|             ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default')
 | ||
|             ->find();
 | ||
| 
 | ||
|         if (!$info) {
 | ||
|             return [];
 | ||
|         }
 | ||
| 
 | ||
|         $info['province'] = AreaServer::getAddress($info['province_id']);
 | ||
|         $info['city'] = AreaServer::getAddress($info['city_id']);
 | ||
|         $info['district'] = AreaServer::getAddress($info['district_id']);
 | ||
| 
 | ||
|         return $info;
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| } |