123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?php
- namespace app\store\model\card;
- use app\common\enum\order\DeliveryStatus as DeliveryStatusEnum;
- use app\common\enum\order\DeliveryStatus;
- use app\common\enum\order\ReceiptStatus as ReceiptStatusEnum;
- use \app\common\model\card\UserRiceDelivery as UserRiceDeliveryModel;
- use app\common\service\Kuaidi as KuaidiService;
- use app\store\model\card\UserRiceDeliveryExpress as UserRiceDeliveryExpressModel;
- use app\store\model\Express as ExpressModel;
- /**
- * 米卡配送模型
- * @package app\store\model
- */
- class UserRiceDelivery extends UserRiceDeliveryModel
- {
- /**
- * 获取列表
- * @param array $param 查询条件
- * @param int $listRows 分页数量
- * @return mixed
- * @throws \think\db\exception\DbException
- */
- public function getList(array $param = [], int $listRows = 15)
- {
- // 检索查询条件
- $filter = $this->getQueryFilter($param);
- // 执行查询
- $list = $this->with(['userRiceCard.riceCardGoods','userRiceDeliveryExpress'])
- ->alias('delivery')
- ->field('delivery.*')
- ->where($filter)
- ->order(['delivery_status'=>'asc','create_time'=>'desc'])
- ->paginate($listRows);
- return $list;
- }
- /**
- * 检索查询条件
- * @param array $param
- * @return \think\db\BaseQuery
- */
- private function getQueryFilter(array $param)
- {
- // 商品列表获取条件
- $params = $this->setQueryDefaultValue($param, [
- 'is_delete' => 0,
- ]);
- // 筛选条件
- $filter = [];
- // 兑换起止时间
- if (!empty($params['betweenTime'])) {
- $times = between_time($params['betweenTime']);
- $filter[] = ['create_time', 'between', [$times['start_time'], $times['end_time']]];
- }
- // 发货起止时间
- if (!empty($params['betweenDeliveryTime'])) {
- $times = between_time($params['betweenDeliveryTime']);
- $filter[] = ['delivery_time', 'between', [$times['start_time'], $times['end_time']]];
- }
- // 收件人
- !empty($params['name']) && $filter[] = ['name', 'like', "%{$params['name']}%"];
- // 收件人手机号码
- !empty($params['phone']) && $filter[] = ['phone', 'like', "%{$params['phone']}%"];
- //米卡名称
- if(isset($params['cardId'])&&$params['cardId']>-1){
- $filter[] = ['card_id','=',$params['cardId']];
- }
- //配送状态
- if(isset($params['statusText'])&&$params['statusText']>0){
- switch ($params['statusText']){
- case 1://待配送
- $filter[] = ['delivery_status','=',DeliveryStatusEnum::NOT_DELIVERED];
- break;
- case 2://配送中
- $filter[] = ['delivery_status','=',DeliveryStatusEnum::DELIVERED];
- $filter[] = ['receipt_status','=',ReceiptStatusEnum::NOT_RECEIVED];
- break;
- case 3://配送完成
- $filter[] = ['receipt_status','=',ReceiptStatusEnum::RECEIVED];
- break;
- }
- }
- // 实例化新查询对象
- return $filter;
- }
- /**
- * 确认发货/拆分发货
- * @param $data
- * @return array|bool|false
- * @throws \Exception
- */
- public function delivery($param)
- {
- $param = $this->setQueryDefaultValue($param, [
- 'is_update' => 0, //1更改物流 0去发货 不传默认0
- ]);
- // 验证订单是否满足发货条件
- if (!$this->verifyDelivery($param)) {
- return false;
- }
- // 请求快递100订阅接口
- foreach ($param['express_list'] as $item) {
- $express = ExpressModel::detail($item['express_id']);
- // 请求快递100订阅接口
- $subscribe = KuaidiService::subscribe($item['express_no'],4,$express['kuaidi100_code']??'');
- if(!$subscribe->result){
- if(stripos($subscribe->message,"重复订阅") === false){ //重复订阅允许提交物流
- $this->error = '物流单号订阅异常:'.$subscribe->message;
- return false;
- }
- }
- }
- //添加测试的时间
- if(env('SERVE_ENV')=='test'){
- }
- //事物处理
- $this->transaction(function () use ($param) {
- // 更新订单发货状态
- $this->save([
- 'is_split_package' => count($param['express_list'])>1?1:0,
- 'delivery_status' => DeliveryStatusEnum::DELIVERED,
- 'delivery_time' => time()
- ]);
- // 新增订单商品拆分包裹记录
- UserRiceDeliveryExpressModel::add($this,$param);
- });
- return true;
- }
- /**
- * 验证订单是否满足发货条件
- * @param $orderGoods
- * @param $param
- * @return bool
- */
- private function verifyDelivery($data)
- {
- if(!$this){
- $this->error = "不存在!";
- return false;
- }
- if($this['delivery_status']!=DeliveryStatus::NOT_DELIVERED){
- $this->error = "已经发货了";
- return false;
- }
- return true;
- }
- /**
- * 修改下单用户收货信息
- * @param array $param
- * @return int
- */
- public function updAddress(array $param)
- {
- if ($this['delivery_status'] != DeliveryStatus::NOT_DELIVERED) {
- $this->error = '未发货才能修改收货地址哦';
- return false;
- }
- // 更新收货地址
- return $this->save([
- 'name' => $param['name'],
- 'phone' => $param['phone'],
- 'province_id' => $param['province_id'],
- 'city_id' => $param['city_id'],
- 'region_id' => $param['region_id'],
- 'detail' => $param['detail'],
- ]);
- }
- }
|