orderListVerify($param); if ($verifyResult['status'] != 1) { return $verifyResult; } //获取该用户的待支付订单id集合与倒计时 if ($param['order_status'] == '-1') { $stayResult = $this->stayPaymentOrder($param); $param['billId'] = $stayResult['data']['billId']; $param['waitPayTimeArr'] = $stayResult['data']['waitPayTimeArr']; } $where = $this->orderListTerm($param); //查询条件 $fields = [ 'id', 'all_money', 'add_time', 'order_no', 'refund_status', 'pay_state', 'status', 'pickup_type', 'remind_state', 'pick_code', 'refund_time', 'cancel_time', 'eval_status', 'delivery_type', 'delivery_record_id', 'delivery_fee', 'order_genre', 'store_id', 'order_type', 'refund_no', 'type' ]; $page = $param['page'] ? $param['page'] : 1; $OrderModel = new BillOrderViewModel(); $list = $OrderModel->getSelect($where, $fields, 'id desc', $page . ',10'); if (!empty($list)) { $data = [ 'list' => $list, 'billId' => $param['billId'] ? $param['billId'] : [], 'waitPayTimeArr' => $param['waitPayTimeArr'] ? $param['waitPayTimeArr'] : [] ]; $list = $this->orderListHandle($data); } return callBack(statusCode()['success'], '查询成功', $list); } /** * 线上线下订单列表字段转换 * @param $param * @return mixed */ public function orderListHandle($param) { $list = $param['list']; //列表 $billId = $param['billId']; $waitPayTimeArr = $param['waitPayTimeArr']; $UuOrderModel = new RetailUuOrderModel();//uu订单模型 $DaOrderModel = new RetailDaOrderModel();//达达订单模型 $SellModel = new RetailSellModel();//商品销售记录模型 $StoreModel = new RetailStoreModel();//门店表模型 $storeList = array(); $RetailBillAdvanceModel = new RetailBillAdvanceModel(); $BillGroupModel = new RetailBillGroupModel(); $plugClass = new Plug(); $ImageClass = new Image(); $data = array(); //购买订单 $fields = [ 'goods_id', 'goods_img_id', 'goods_name', 'price', 'sell_number', 'all_money' ]; foreach ($list as $val) { $add_time = date('Y-m-d H:i:s', $val['add_time']); if ($val['type'] == 1 && $val['order_type'] == 1) { //商城购买订单 $pick_code = $val['pick_code'] ? $val['pick_code'] : ''; $tail_start_time = ''; $group_desc_time = ''; $pay_desc_time = ''; $state_msg = ''; if ($val['order_genre'] == 4) {//预售订单 $advance_info = $RetailBillAdvanceModel->bill_advance(array('bill_id' => $val['id'])); $tail_start_time = date('m月d日 H:i', $advance_info['tail_start_time']); } //按钮 1开启 0关闭 $button = array( 'pick_code' => 0, //取货码按钮 'remind_send' => 0, //提醒发货按钮 'cancel_order' => 0,//(已支付)取消订单 'cancel_pay' => 0, //(未支付)取消订单 'see_rider' => 0, //查看骑手 'see_logistics' => 0,//查看物流 'receipt' => 0, //确认收货 'evaluate' => 0, //评价 'service' => 0, //售后 'pay_status' => 0, //支付 'tail_pay_status' => 0,//支付尾款 'extraction_code' => 0,//祝福语按钮 ); switch ($val['status']) { case '0': //未支付 if ($val['order_genre'] == 4 && $val['pay_state'] == 2) { //预售已支付定金 if ($advance_info['tail_end_time'] < time()) { $state_msg = '超出尾款支付时间'; } else if ($advance_info['tail_start_time'] > time()) { $state_msg = '未到尾款支付时间'; } else { $state_msg = '待付尾款'; $button['tail_pay_status'] = 1; } } else { //把不在待支付订单列表中的订单改为不能支付 $state_msg = '待付款'; $index = array_search($val['id'], $billId); if ($index === false) { $button['pay_status'] = 0; } else { $button['pay_status'] = 1; $pay_desc_time = $waitPayTimeArr[$index]; } if ($button['pay_status'] == 1) { $button['cancel_pay'] = 1; } else { $state_msg = '交易关闭'; } } break; case '1': //待发货、待自提 if ($val['refund_status'] == 0) { //正常订单 if ($val['order_genre'] == 2) { //拼团订单 $group = $BillGroupModel->getFind(array('bill_id' => $val['id']), 'state,end_time'); if ($group['state'] == 1) { $state_msg = '拼团中'; $group_desc_time = $group['end_time']; } else if ($group['state'] == 2) { $state_msg = '拼团成功'; } else { $state_msg = '拼团失败'; } } else { if ($val['pickup_type'] == 1) { // 自取 $state_msg = '待自取'; $button['pick_code'] = 1; } else { $state_msg = '待发货'; $button['remind_send'] = $val['remind_state'] == 1 ? 0 : 1; } if ($val['order_genre'] == 1 || $val['order_genre'] == 4) { $button['cancel_order'] = 1; } } } else if ($val['refund_status'] == 1) { $state_msg = '已申请售后'; } break; case '2': //待收货 $state_msg = '待收货'; $button['receipt'] = 1; break; case '3': //已收货 $state_msg = '交易完成'; if ($val['refund_status'] == 1) { $state_msg = '已申请售后'; } else { if ($val['eval_status'] != 1) { $state_msg = '待评价'; } } if ($val['eval_status'] != 1) { $button['evaluate'] = 1; } if (($val['order_genre'] == 1 || $val['order_genre'] == 4) && ($val['refund_status'] == 0 || $val['refund_status'] == 1)) { $button['service'] = 1; } break; } $order_status = 0; if ($val['pickup_type'] != 1) { switch ($val['delivery_type']) { case '1': //商家配送 break; case '2': //达达配送 $order_status = $DaOrderModel->getFindField(array('id' => $val['delivery_record_id']), 'order_status'); break; case '3': //uu跑腿 //转成达达状态显示 $state_uu = $UuOrderModel->getFindField(array('id' => $val['delivery_record_id']), 'state'); if ($state_uu == 1) { $order_status = 1; } else if ($state_uu == 3 || $state_uu == 4) { $order_status = 2; } else if ($state_uu == 5 || $state_uu == 6) { $order_status = 3; } else if ($state_uu == -1) { $order_status = 5; } break; case '4': //快递发货 if ($val['refund_status'] == 0) { $button['see_logistics'] = 1; } break; case '5': //码科配送 $MakeOrderModel = new MakeOrderModel();//码科订单模型 $status = $MakeOrderModel->getFindField(['id' => $val['delivery_record_id']], 'status'); switch ($status) { case 'payed': //待接单 $order_status = 1; break; case 'accepted': //'待取件 $order_status = 2; break; case 'geted': //待收件 $order_status = 3; break; case 'gotoed': //待评价 $order_status = 4; break; case 'completed': //订单已完成 $order_status = 4; break; case 'cancel': //已取消 $order_status = 5; break; } break; } } switch ($order_status) { case '1': $state_msg = '骑手接单中'; break; case '2': $button['see_rider'] = 1; $state_msg = '骑手取货中'; break; case '3': $button['see_rider'] = 1; $state_msg = '骑手配送中'; break; case '5': $state_msg = '骑手接单中'; break; } } if ($val['order_type'] == 1) { //判断这条订单所属门店,是否有权限 $storePlugStatusPost = [ 'store_id' => $val['store_id'], 'identification_arr' => ['blessing'],//插件标识 ]; $blessing = $plugClass->plugStoreStatus($storePlugStatusPost); if ($blessing === true) { //门店有权限,并开启插件,查询订单是否有祝福码 $extractionCode = new Index(); $extraction_code = $extractionCode->obtainExtractionCode($val['id']);//祝福码 //订单有祝福语,没过期 if ($extraction_code) { $button['extraction_code'] = 1; } } } $goods_list = $SellModel->getSelect(['bill_id' => $val['id']], $fields); foreach ($goods_list as &$v) { $v['goods_img'] = $ImageClass->getGoodsImageUrl(['img_id' => $v['goods_img_id'], 'store_id' => $val['store_id']]); } $val['goods_sell_species'] = count($goods_list); //门店信息 if (!$storeList[$val['store_id']]) { $store = $StoreModel->getFind(array('id' => $val['store_id']), 'storetag as store_name,shopimg_id'); $store['store_image'] = getImage($store['shopimg_id']); $storeList[$val['store_id']] = $store; } if (in_array($val['order_type'], ['2', '3'])) { //售后订单 if (($val['refund_status'] != 2 || $val['refund_status'] == 6) && $val['order_type'] == 2) { $val['all_money'] = round($val['all_money'] + $val['delivery_fee'], 2); } else { $val['all_money'] = floatval($val['all_money']); } } switch ($val['type']) { case 1: $type_name = '线上'; break; case 2: $type_name = '线下'; break; } $data[] = array( 'type_name' => $type_name, 'store_name' => $storeList[$val['store_id']]['store_name'], 'store_image' => $storeList[$val['store_id']]['store_image'], 'id' => $val['id'], 'store_id' => $val['store_id'], 'all_money' => $val['all_money'], 'order_genre' => $val['order_genre'] ? $val['order_genre'] : 0, 'order_no' => $val['order_no'], 'refund_no' => $val['refund_no'] ? $val['refund_no'] : '', 'add_time' => $add_time, 'state_msg' => $state_msg, 'pick_code' => $pick_code ? $pick_code : '', 'tail_start_time' => $tail_start_time ? $tail_start_time : '', 'group_desc_time' => $group_desc_time ? $group_desc_time : '', 'pay_desc_time' => $pay_desc_time ? $pay_desc_time : '', 'goods_info' => $goods_list, 'button' => $button ? $button : [], 'order_type' => $val['order_type'], 'status' => $val['status'], 'refund_status' => $val['refund_status'] ); } return $data; } /** * 线上线下订单列表的查询条件 * @param $param * [ * merchant_id * uid 小程序用户id * vip_id 会员id * order_type 1:购买订单 2:售后 * order_status 订单状态 -1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价 * order_genre 订单类型 1.线上普通订单 2.拼团订单 3.秒杀订单 4.预售订单 * billId 用户的待支付订单id集合 * * ] * @return mixed */ public function orderListTerm($param) { $where = [ 'merchant_id' => $param['merchant_id'], ]; switch ($param['order_type']) { case 1: //购买 $where['order_type'] = 1; $where['refund_status'] = ['in', '0,1']; if ($param['order_status'] != 1 || !empty($param['order_genre'])) { $where['type'] = 1; //订单状态 switch ($param['order_status']) { case '-1': $where['id'] = array('in', $param['billId'] ? $param['billId'] : [0]); //查询待支付订单 break; case '2': //自提或待发货订单 $where['status'] = 1; $where['refund_status'] = 0; break; case '3': //待收货 $where['pickup_type'] = ['in', '2,3']; $where['status'] = 2; $where['refund_status'] = 0; break; case '4': //待评价 $where['status'] = 3; $where['eval_status'] = 0; $where['refund_status'] = 0; break; } if (!empty($param['order_genre'])) { $where['order_genre'] = $param['order_genre']; } } break; case 2: //售后 $where['order_type'] = ['in', '2,3']; break; } if (!empty($param['vip_id'])) { $where[] = [ ['uid' => $param['uid']], ['vid' => $param['vip_id']], '_logic' => 'OR' ]; } else { $where['uid'] = $param['uid']; } return $where; } /** * 获取该用户的待支付订单集合与倒计时 * @param $param * [ * uid 小程序用户id * ] * @return array */ public function stayPaymentOrder($param) { $redis_key = 'retail_*_*_*_' . $param['uid'] . '_*'; $ApiRedis = new \Addons\Api\RedisController(); $wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key)); $billId = array();//存储在待支付列表里的订单ID $waitPayTimeArr = array();//待支付订单的付款倒计时 if (!empty($wait_pay_list)) { foreach ($wait_pay_list as $value) { $data = json_decode($value, true); if (!in_array($data['bill_id'], $billId)) { $billId[] = $data['bill_id']; $waitPayTimeArr[] = $data['expiration_time']; } } } return callBack(statusCode()['success'], '获取成功', [ 'billId' => $billId, 'waitPayTimeArr' => $waitPayTimeArr ]); } /** * 线上线下订单列表的参数验证 * @param $param * [ * merchant_id * uid 小程序用户id * vip_id 会员id * order_type 1:购买订单 2:退款订单 3换货订单 * order_status 订单状态 -1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价 * order_genre 订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单 * page 分页 * ] * @return mixed */ public function orderListVerify($param) { if (empty($param['merchant_id']) || empty($param['uid']) || empty($param['order_type'])) { return callBack(statusCode()['error'], '缺少唯一标识'); } if (empty($param['order_status']) && $param['order_type'] == 1) { return callBack(statusCode()['error'], '缺少唯一标识'); } return callBack(statusCode()['success'], '验证成功'); } /** * 依据订单id查询订单信息 * @param $id 订单id * @return mixed */ public function basisIdGetInfo($id) { try { $BillOrderModel = new RetailBillOrderModel(); $info = $BillOrderModel->getCashierOrder([ 'b.id' => $id ], "b.*,d.coupon_type,d.coupon_id"); if (!empty($info)) { return callBack(statusCode()['success'], "查询成功", $info); } else { return callBack(statusCode()['error'], "未找到该流水订单"); } } catch (\Exception $e) { return callBack(statusCode()['error'], "未找到该流水订单"); } } /** * 配送或者获取价格的订单状态验证 * @param $param * [ * platform_type 商户平台类型 1默认系统 2微礼平台 * order_no 订单号 * store_id * ] * @return mixed */ public function orderStateVerify($param) { $platform_type = $param['platform_type'] ? $param['platform_type'] : 1; try { $fields = [ 'b.id', 'b.refund_status', 'b.order_no', 'b.all_money', 'b.order_type', 'b.uid', 'b.add_time', 'b.refund_no', 'b.merchant_id', 'b.third_order', 'o.status', 'o.order_genre', 'o.user_address', 'o.user_name', 'o.user_phone', 'o.pickup_type', 'o.cancel_delivery_status', 'o.delivery_record_id', 'o.form_id', 'o.remark', ]; if ($platform_type == 2) { //第三方平台 $fields[] = 'b.third_order'; } $BillOrderModel = new RetailBillOrderModel(); $order = $BillOrderModel->getOrderLinkFind([ 'b.order_no' => strval($param['order_no']), 'b.store_id' => $param['store_id'], 'b.pay_state' => 1,//支付成功 'b.type' => 1,//商城订单 'b.order_type' => ['in', '1,3'], ], $fields); //订单信息 } catch (\Exception $e) { return callBack(statusCode()['error'], "查询失败"); } if (empty($order)) { return callBack(statusCode()['error'], "未找到该订单"); } if ($order['refund_status'] == 1) { return callBack(statusCode()['error'], "该订单存在退款申请,请先处理"); } switch ($order['status']) { case 2: return callBack(statusCode()['error'], "订单已在配送,请勿重复操作"); break; case 3: return callBack(statusCode()['error'], "订单已收货,请刷新页面查看"); break; } if ($order['order_genre'] == 2) { //拼团订单 $BillGroupModel = new RetailBillGroupModel(); $state = $BillGroupModel->getFindField([ 'bill_id' => $order['id'] ], 'state'); if ($state != 2) { return callBack(statusCode()['error'], "该订单未拼团成功,不能进行配送"); } } return callBack(statusCode()['success'], "验证成功", ['order_info' => $order]); } }