ajaxReturn($res); } $BillOrderModel = D('RetailBillOrder'); $BillOnlineModel = D('RetailBillOnline'); $BillDiscountModel = D('RetailBillDiscount'); $map = array( 'b.' . $BillOrderModel::STORE_ID => $store_id, 'b.' . $BillOrderModel::UID => $uid, 'b.' . $BillOrderModel::MERCHANT_ID => $merchant_id, 'b.' . $BillOrderModel::TYPE => 1, 'b.' . $BillOrderModel::PAY_STATE => 1, 'b.' . $BillOrderModel::ORDER_TYPE => 1, 'b.' . $BillOrderModel::PAY_TYPE => array('in', '5,6,8'), 'b.' . $BillOrderModel::ADD_TIME => array('gt', time() - 86400 * 60), 'b.' . $BillOrderModel::REFUND_STATUS => 0, 'o.' . $BillOnlineModel::ORDER_GENRE => 1, ); if ($type == 2) { //自提或待发货订单 $map['o.' . $BillOnlineModel::STATUS] = 1; } else if ($type == 3) { //待收货 $map['o.' . $BillOnlineModel::PICKUP_TYPE] = 2; $map['o.' . $BillOnlineModel::STATUS] = 2; } else if ($type == 4) { //待评价 $map['o.' . $BillOnlineModel::STATUS] = 3; $map['o.' . $BillOnlineModel::EVAL_STATUS] = 0; } else { unset($map['b.' . $BillOrderModel::REFUND_STATUS]); } $limit = 15; $fields = array( 'b.' . $BillOrderModel::ID, 'b.' . $BillOrderModel::ALL_MONEY, 'b.' . $BillOrderModel::ADD_TIME, 'b.' . $BillOrderModel::ORDER_NO, 'b.' . $BillOrderModel::REFUND_STATUS, 'b.' . $BillOrderModel::PAY_STATE, 'o.' . $BillOnlineModel::REMARK, 'o.' . $BillOnlineModel::STATUS, 'o.' . $BillOnlineModel::PICKUP_TYPE, 'o.' . $BillOnlineModel::REMIND_STATE, 'o.' . $BillOnlineModel::PICK_CODE, 'o.' . $BillOnlineModel::REFUND_TIME, 'o.' . $BillOnlineModel::CANCEL_TIME, 'o.' . $BillOnlineModel::EVAL_STATUS, 'o.' . $BillOnlineModel::DELIVERY_TYPE, 'o.' . $BillOnlineModel::DELIVERY_RECORD_ID, 'o.' . $BillOnlineModel::DELIVERY_FEE, 'd.' . $BillDiscountModel::COUPON_MONEY, 'd.' . $BillDiscountModel::VIP_DIS_MONEY, ); $order_info = $BillOrderModel->getBillFind($map, $fields, 'b.' . $BillOrderModel::ADD_TIME . ' desc', $page . ',' . $limit); if ($order_info) { $orderList = array(); $UuOrderModel = D('RetailUuOrder'); $DaOrderModel = D('RetailDaOrder'); $SellModel = D('RetailSell'); foreach ($order_info as &$val) { $val[$BillOnlineModel::PICK_CODE] = $val[$BillOnlineModel::PICK_CODE] ? $val[$BillOnlineModel::PICK_CODE] : ''; $val[$BillOrderModel::ADD_TIME] = date('Y-m-d H:i:s', $val[$BillOrderModel::ADD_TIME]); if ($val[$BillOnlineModel::STATUS] == 1) { //门店配送 if ($val[$BillOrderModel::REFUND_STATUS] == 0) { //正常订单 $val['state'] = '待发货'; if ($val[$BillOnlineModel::PICKUP_TYPE] == 1) { // 自取 $val['state'] = '待自取'; } } else if ($val[$BillOrderModel::REFUND_STATUS] == 1) { $val['state'] = '待商家确认退款'; } else if ($val[$BillOrderModel::REFUND_STATUS] == 3) { $val['state'] = '部分退款'; } else { $val['state'] = '已退款'; } } else if ($val[$BillOnlineModel::STATUS] == 2) { $val['state'] = '待收货'; } else if ($val[$BillOnlineModel::STATUS] == 3) { $val['state'] = '交易完成'; if ($val[$BillOrderModel::REFUND_STATUS] == 1) { $val['state'] = '待商家确认退款'; } else if ($val[$BillOrderModel::REFUND_STATUS] == 2) { $val['state'] = '已退款'; } else if ($val[$BillOrderModel::REFUND_STATUS] == 3) { $val['state'] = '部分退款'; } else { $val['state'] = '已完成'; } } //达达配送delivery_type if ($val[$BillOnlineModel::DELIVERY_TYPE] == 2) { $clerkInfo = $DaOrderModel->getFind(array($DaOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID])); $val['order_status'] = $clerkInfo[$DaOrderModel::ORDER_STATUS]; } else if ($val[$BillOnlineModel::DELIVERY_TYPE] == 3) { //uu跑腿转成达达状态显示 $state_uu = $UuOrderModel->getFind(array($UuOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]), $UuOrderModel::STATE); if ($state_uu == 1) { $val['order_status'] = 1; } else if ($state_uu == 3 || $state_uu == 4) { $val['order_status'] = 2; } else if ($state_uu == 5 || $state_uu == 6) { $val['order_status'] = 3; } $val[$BillOnlineModel::DELIVERY_TYPE] = 2; } $goods_info = $SellModel->getFind(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]), '*', $SellModel::ALL_MONEY . ' desc'); $goodsItem = array(); $goodsItem['count'] = $SellModel->getCount(array($SellModel::BILL_ID => $val[$BillOrderModel::ID])); $goodsItem['goods_id'] = $goods_info[$SellModel::GOODS_ID]; $goodsItem['img'] = $this->getGoodsImage($goods_info[$SellModel::GOODS_IMG_ID]); $goodsItem['goods_name'] = $goods_info[$SellModel::GOODS_NAME]; $goodsItem['num'] = intval($goods_info[$SellModel::NUM]); $goodsItem['price'] = $goods_info[$SellModel::PRICE]; if (!empty($goods_info[$SellModel::SKU_JSON_INFO])) { $goodsItem[$SellModel::SKU_JSON_INFO] = $goods_info[$SellModel::SKU_JSON_INFO] ? json_decode($goods_info[$SellModel::SKU_JSON_INFO], true) : ''; } $val['goods_info'] = $goodsItem; $orderList[] = $val; } $res['status'] = 1; $res['count'] = $limit; $res['order_info'] = $orderList; } else { $res['status'] = 0; $res['msg'] = '暂无订单'; } $this->ajaxReturn($res); } /** * 订单列表 */ public function orderList_v1() { $store_id = self::$store_id; $uid = self::$uid; $merchant_id = self::$merchant_id; $type = I("post.type");//1:全部订单 2:待发货/自提 3:待收货 4:待评价 $page = I("post.page"); if (empty($uid) || empty($type) || empty($page)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $BillOrderModel = D('RetailBillOrder'); $BillOnlineModel = D('RetailBillOnline'); $BillDiscountModel = D('RetailBillDiscount'); $map = array( 'b.' . $BillOrderModel::STORE_ID => $store_id, 'b.' . $BillOrderModel::UID => $uid, 'b.' . $BillOrderModel::MERCHANT_ID => $merchant_id, 'b.' . $BillOrderModel::TYPE => 1, 'b.' . $BillOrderModel::PAY_STATE => 1, 'b.' . $BillOrderModel::ORDER_TYPE => 1, 'b.' . $BillOrderModel::PAY_TYPE => array('in', '5,6,8'), 'b.' . $BillOrderModel::ADD_TIME => array('gt', time() - 86400 * 60), 'b.' . $BillOrderModel::REFUND_STATUS => array('in', '0,1'), 'o.' . $BillOnlineModel::ORDER_GENRE => 1, ); if ($type == 2) { //自提或待发货订单 $map['o.' . $BillOnlineModel::STATUS] = 1; } else if ($type == 3) { //待收货 $map['o.' . $BillOnlineModel::PICKUP_TYPE] = 2; $map['o.' . $BillOnlineModel::STATUS] = 2; } else if ($type == 4) { //待评价 $map['o.' . $BillOnlineModel::STATUS] = 3; $map['o.' . $BillOnlineModel::EVAL_STATUS] = 0; } else { unset($map['b.' . $BillOrderModel::REFUND_STATUS]); } $limit = 15; $fields = array( 'b.' . $BillOrderModel::ID, 'b.' . $BillOrderModel::ALL_MONEY, 'b.' . $BillOrderModel::ADD_TIME, 'b.' . $BillOrderModel::ORDER_NO, 'b.' . $BillOrderModel::REFUND_STATUS, 'b.' . $BillOrderModel::PAY_STATE, 'o.' . $BillOnlineModel::REMARK, 'o.' . $BillOnlineModel::STATUS, 'o.' . $BillOnlineModel::PICKUP_TYPE, 'o.' . $BillOnlineModel::REMIND_STATE, 'o.' . $BillOnlineModel::PICK_CODE, 'o.' . $BillOnlineModel::REFUND_TIME, 'o.' . $BillOnlineModel::CANCEL_TIME, 'o.' . $BillOnlineModel::EVAL_STATUS, 'o.' . $BillOnlineModel::DELIVERY_TYPE, 'o.' . $BillOnlineModel::DELIVERY_RECORD_ID, 'o.' . $BillOnlineModel::DELIVERY_FEE, 'd.' . $BillDiscountModel::COUPON_MONEY, 'd.' . $BillDiscountModel::VIP_DIS_MONEY, ); $order_info = $BillOrderModel->getBillFind($map, $fields, 'b.' . $BillOrderModel::ADD_TIME . ' desc', $page . ',' . $limit); if ($order_info) { $orderList = array(); $UuOrderModel = D('RetailUuOrder'); $DaOrderModel = D('RetailDaOrder'); $SellModel = D('RetailSell'); foreach ($order_info as &$val) { $val[$BillOnlineModel::PICK_CODE] = $val[$BillOnlineModel::PICK_CODE] ? $val[$BillOnlineModel::PICK_CODE] : ''; $val[$BillOrderModel::ADD_TIME] = date('Y-m-d H:i:s', $val[$BillOrderModel::ADD_TIME]); if ($val[$BillOnlineModel::STATUS] == 1) { //门店配送 if ($val[$BillOrderModel::REFUND_STATUS] == 0) { //正常订单 $val['state'] = '待发货'; if ($val[$BillOnlineModel::PICKUP_TYPE] == 1) { // 自取 $val['state'] = '待自取'; } } else if ($val[$BillOrderModel::REFUND_STATUS] == 1) { $val['state'] = '已申请售后'; } } else if ($val[$BillOnlineModel::STATUS] == 2) { $val['state'] = '待收货'; } else if ($val[$BillOnlineModel::STATUS] == 3) { $val['state'] = '交易完成'; if ($val[$BillOrderModel::REFUND_STATUS] == 1) { $val['state'] = '已申请售后'; } else { $val['state'] = '已完成'; } } //达达配送delivery_type if ($val[$BillOnlineModel::DELIVERY_TYPE] == 2) { $clerkInfo = $DaOrderModel->getFind(array($DaOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID])); $val['order_status'] = $clerkInfo[$DaOrderModel::ORDER_STATUS]; } else if ($val[$BillOnlineModel::DELIVERY_TYPE] == 3) { //uu跑腿转成达达状态显示 $state_uu = $UuOrderModel->getFind(array($UuOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]), $UuOrderModel::STATE); if ($state_uu == 1) { $val['order_status'] = 1; } else if ($state_uu == 3 || $state_uu == 4) { $val['order_status'] = 2; } else if ($state_uu == 5 || $state_uu == 6) { $val['order_status'] = 3; } $val[$BillOnlineModel::DELIVERY_TYPE] = 2; } $goods_info = $SellModel->getFind(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]), '*', $SellModel::ALL_MONEY . ' desc'); $goodsItem = array(); $goodsItem['count'] = $SellModel->getCount(array($SellModel::BILL_ID => $val[$BillOrderModel::ID])); $goodsItem['goods_id'] = $goods_info[$SellModel::GOODS_ID]; $goodsItem['img'] = $this->getGoodsImage($goods_info[$SellModel::GOODS_IMG_ID]); $goodsItem['goods_name'] = $goods_info[$SellModel::GOODS_NAME]; $goodsItem['num'] = intval($goods_info[$SellModel::NUM]); $goodsItem['price'] = $goods_info[$SellModel::PRICE]; if (!empty($goods_info[$SellModel::SKU_JSON_INFO])) { $goodsItem[$SellModel::SKU_JSON_INFO] = $goods_info[$SellModel::SKU_JSON_INFO] ? json_decode($goods_info[$SellModel::SKU_JSON_INFO], true) : ''; } $val['goods_info'] = $goodsItem; $orderList[] = $val; } $res['status'] = 1; $res['count'] = $limit; $res['order_info'] = $orderList; } else { $res['status'] = 0; $res['msg'] = '暂无订单'; } $this->ajaxReturn($res); } /** * 2020-4-1 * 2020-05-11 * 订单列表整合预售 */ public function orderList_v2() { $uid = self::$uid; $store_id = self::$store_id; $merchant_id = self::$merchant_id; $type = I("post.type");//1:全部订单 2:待发货/自提 3:待收货 4:待评价 $page = I("post.page"); if (empty($uid) || empty($type) || empty($page)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $BillOrderModel = D('RetailBillOrder'); $BillOnlineModel = D('RetailBillOnline'); $BillDiscountModel = D('RetailBillDiscount'); $map = array( 'b.' . $BillOrderModel::STORE_ID => $store_id, 'b.' . $BillOrderModel::UID => $uid, 'b.' . $BillOrderModel::MERCHANT_ID => $merchant_id, 'b.' . $BillOrderModel::TYPE => 1, 'b.' . $BillOrderModel::PAY_STATE => array('in', '1,2'), 'b.' . $BillOrderModel::ORDER_TYPE => 1, 'b.' . $BillOrderModel::PAY_TYPE => array('in', '5,6,8'), 'b.' . $BillOrderModel::ADD_TIME => array('gt', time() - 86400 * 60), 'b.' . $BillOrderModel::REFUND_STATUS => array('in', '0,1'), 'o.' . $BillOnlineModel::ORDER_GENRE => array('in', '1,4'), ); if ($type == 2) { //自提或待发货订单 $map['o.' . $BillOnlineModel::STATUS] = 1; } else if ($type == 3) { //待收货 $map['o.' . $BillOnlineModel::PICKUP_TYPE] = 2; $map['o.' . $BillOnlineModel::STATUS] = 2; } else if ($type == 4) { //待评价 $map['o.' . $BillOnlineModel::STATUS] = 3; $map['o.' . $BillOnlineModel::EVAL_STATUS] = 0; } else { unset($map['b.' . $BillOrderModel::REFUND_STATUS]); } $limit = 10; $fields = array( 'b.' . $BillOrderModel::ID, 'b.' . $BillOrderModel::ALL_MONEY, 'b.' . $BillOrderModel::ADD_TIME, 'b.' . $BillOrderModel::ORDER_NO, 'b.' . $BillOrderModel::REFUND_STATUS, 'b.' . $BillOrderModel::PAY_STATE, 'o.' . $BillOnlineModel::REMARK, 'o.' . $BillOnlineModel::STATUS, 'o.' . $BillOnlineModel::PICKUP_TYPE, 'o.' . $BillOnlineModel::REMIND_STATE, 'o.' . $BillOnlineModel::PICK_CODE, 'o.' . $BillOnlineModel::REFUND_TIME, 'o.' . $BillOnlineModel::CANCEL_TIME, 'o.' . $BillOnlineModel::EVAL_STATUS, 'o.' . $BillOnlineModel::DELIVERY_TYPE, 'o.' . $BillOnlineModel::DELIVERY_RECORD_ID, 'o.' . $BillOnlineModel::DELIVERY_FEE, 'o.order_genre', 'd.' . $BillDiscountModel::COUPON_MONEY, 'd.' . $BillDiscountModel::VIP_DIS_MONEY, 'd.use_integral', 'b.store_id', ); $order_info = $BillOrderModel->getBillFind($map, $fields, 'b.' . $BillOrderModel::ADD_TIME . ' desc', $page . ',' . $limit); if ($order_info) { $orderList = array(); $UuOrderModel = D('RetailUuOrder'); $DaOrderModel = D('RetailDaOrder'); $SellModel = D('RetailSell'); foreach ($order_info as &$val) { $val[$BillOnlineModel::PICK_CODE] = $val[$BillOnlineModel::PICK_CODE] ? $val[$BillOnlineModel::PICK_CODE] : ''; $val[$BillOrderModel::ADD_TIME] = date('Y-m-d H:i:s', $val[$BillOrderModel::ADD_TIME]); switch ($val['order_genre']) { case 4: //预售订单 $advance_info = D("RetailBillAdvance")->bill_advance(array('bill_id' => $val['id'])); $val['tail_start_time'] = date('m月d日 H:i', $advance_info['tail_start_time']); break; } if ($val[$BillOnlineModel::STATUS] == 1) { //门店配送 if ($val[$BillOrderModel::REFUND_STATUS] == 0) { //正常订单 $val['state'] = '待发货'; if ($val[$BillOnlineModel::PICKUP_TYPE] == 1) { // 自取 $val['state'] = '待自取'; } } else if ($val[$BillOrderModel::REFUND_STATUS] == 1) { $val['state'] = '已申请售后'; } } else if ($val[$BillOnlineModel::STATUS] == 2) { $val['state'] = '待收货'; } else if ($val[$BillOnlineModel::STATUS] == 3) { $val['state'] = '交易完成'; if ($val[$BillOrderModel::REFUND_STATUS] == 1) { $val['state'] = '已申请售后'; } else { $val['state'] = '已完成'; } } else if ($val[$BillOnlineModel::STATUS] == 0 && $val['order_genre'] == 4 && $val['pay_state'] == 2) { if ($val['cancel_time'] > 0) { $val['state'] = '已申请售后'; $val['tail_money_state'] = 0; } else if ($advance_info['tail_end_time'] < time()) { $val['state'] = '超出尾款支付时间'; $val['tail_money_state'] = 0; } else if ($advance_info['tail_start_time'] > time()) { $val['state'] = '未到尾款支付时间'; $val['tail_money_state'] = 0; } else { $val['state'] = '待付尾款'; $val['tail_money_state'] = 1; } } //达达配送delivery_type if ($val[$BillOnlineModel::DELIVERY_TYPE] == 2) { $clerkInfo = $DaOrderModel->getFind(array($DaOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID])); $val['order_status'] = $clerkInfo[$DaOrderModel::ORDER_STATUS]; } else if ($val[$BillOnlineModel::DELIVERY_TYPE] == 3) { //uu跑腿转成达达状态显示 $state_uu = $UuOrderModel->getFind(array($UuOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]), $UuOrderModel::STATE); if ($state_uu == 1) { $val['order_status'] = 1; } else if ($state_uu == 3 || $state_uu == 4) { $val['order_status'] = 2; } else if ($state_uu == 5 || $state_uu == 6) { $val['order_status'] = 3; } $val[$BillOnlineModel::DELIVERY_TYPE] = 2; } $goods_info = $SellModel->getFind(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]), '*', $SellModel::ALL_MONEY . ' desc'); $goodsItem = array(); $goodsItem['count'] = $SellModel->getCount(array($SellModel::BILL_ID => $val[$BillOrderModel::ID])); $goodsItem['goods_id'] = $goods_info[$SellModel::GOODS_ID]; $goodsItem['img'] = $this->getGoodsImage($goods_info[$SellModel::GOODS_IMG_ID]); $goodsItem['goods_name'] = $goods_info[$SellModel::GOODS_NAME]; $goodsItem['num'] = intval($goods_info[$SellModel::NUM]); $goodsItem['price'] = $goods_info[$SellModel::PRICE]; if (!empty($goods_info[$SellModel::SKU_JSON_INFO])) { $goodsItem[$SellModel::SKU_JSON_INFO] = $goods_info[$SellModel::SKU_JSON_INFO] ? json_decode($goods_info[$SellModel::SKU_JSON_INFO], true) : ''; } $val['goods_info'] = $goodsItem; $orderList[] = $val; } $res['status'] = 1; $res['count'] = $limit; $res['order_info'] = $orderList; } else { $res['status'] = 0; $res['msg'] = '暂无订单'; } $this->ajaxReturn($res); } /** * 订单列表 不限制门店 * 2020-05-22 */ public function orderList_v3() { $uid = self::$uid; $merchant_id = self::$merchant_id; $type = I("post.type");//-1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价 $page = I("post.page"); $order_genre = I("post.order_genre");//订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单 if (empty($uid) || empty($type) || empty($page)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } //获取该用户的待支付列表 $redis_key = 'retail_*_*_*_' . $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']; } } } $map = array( 'uid' => $uid, 'merchant_id' => $merchant_id, 'type' => 1, 'order_type' => 1, 'refund_status' => array('in', '0,1'), 'order_genre' => array('in', '1,2,3,4'), );//查询条件 //订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单 if (!empty($order_genre)) { $map['order_genre'] = $order_genre; } //订单状态 switch ($type) { case '-1': $map['id'] = array('in', $billId ? $billId : array(0)); //查询待支付订单 break; case '1': //全部订单 break; case '2': //自提或待发货订单 $map['status'] = 1; $map['refund_status'] = 0; break; case '3': //待收货 $map['pickup_type'] = ['in', '2,3']; $map['status'] = 2; $map['refund_status'] = 0; break; case '4': //待评价 $map['status'] = 3; $map['eval_status'] = 0; $map['refund_status'] = 0; break; } $limit = 10; $fields = array( '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', 'store_id', ); $BillViewModel = new BillOrderViewModel(); $orderList = $BillViewModel->getSelect($map, $fields, 'id desc', $page . ',' . $limit); if ($orderList) { $UuOrderModel = new RetailUuOrderModel();//uu订单模型 $DaOrderModel = new RetailDaOrderModel();//达达订单模型 $SellModel = new RetailSellModel();//商品销售记录模型 $StoreModel = new RetailStoreModel();//门店表模型 $storeList = array(); $RetailBillAdvanceModel = new RetailBillAdvanceModel(); $BillGroupModel = new RetailBillGroupModel(); $plugClass = new Plug(); $data = array(); foreach ($orderList as &$val) { $pick_code = $val['pick_code'] ? $val['pick_code'] : ''; $add_time = date('Y-m-d H:i:s', $val['add_time']); $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,//祝福语按钮 ); //判断这条订单所属门店,是否有权限 $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; } } 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; } $goods_info = $SellModel->getFind(array('bill_id' => $val['id']), '*', 'all_money desc'); $goodsItem = array( 'count' => $SellModel->getCount(array('bill_id' => $val['id'])), 'goods_id' => $goods_info['goods_id'], 'goods_img' => $this->getGoodsImage($goods_info['goods_img_id']), 'goods_name' => $goods_info['goods_name'], 'num' => intval($goods_info['num']), 'price' => $goods_info['price'], ); if (!empty($goods_info['sku_json_info'])) { $goodsItem['sku_name'] = $goods_info['sku_json_info'] ? json_decode($goods_info['sku_json_info'], true)['name'] : ''; } //门店图片 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; } $data[] = array( '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'], 'order_no' => $val['order_no'], 'add_time' => $add_time, 'state_msg' => $state_msg, 'pick_code' => $pick_code, 'tail_start_time' => $tail_start_time, 'group_desc_time' => $group_desc_time, 'pay_desc_time' => $pay_desc_time, 'goods_info' => $goodsItem, 'button' => $button, ); } $res['status'] = 1; $res['msg'] = '获取成功'; $res['count'] = $limit; $res['data'] = $data; } else { $res['status'] = 1; $res['msg'] = '暂无订单'; $res['count'] = $limit; $res['data'] = array(); } $this->ajaxReturn($res); } /** * 订单列表 线上线下结合 */ public function orderList_v4() { $data = I('post.'); $BillOrderClass = new BillOrder(); $result = $BillOrderClass->orderList([ 'merchant_id' => self::$merchant_id, 'uid' => self::$uid, 'vip_id' => self::$user['vid'], 'order_type' => $data['order_type'], 'order_status' => $data['order_status'], 'order_genre' => $data['order_genre'], 'page' => $data['page'], ]); $this->ajaxReturn($result); } /** * 确认收货 */ public function confirmGoods() { if (IS_POST) { $uid = self::$uid; $id = I('post.order_id'); $BillModel = new RetailBillOrderModel(); $map = array( $BillModel::ID => $id, $BillModel::UID => $uid, $BillModel::MERCHANT_ID => self::$merchant_id, ); $order = $BillModel->getBillFind($map); if (empty($order)) { $res['status'] = 0; $res['msg'] = '订单有误'; } else { $OnlineModel = new RetailBillOnlineModel(); $data[$OnlineModel::STATUS] = 3; $data[$OnlineModel::PICK_CODE] = ""; $save = $OnlineModel->updateOrder(array($OnlineModel::BILL_ID => $id), $data); if ($save) { $up = array( $BillModel::FINISH_TIME => time() ); $BillModel->updateOrder($map, $up); $plugClass = new Plug(); //订单获取祝福码,判断该门店是否,有,并且开启 $storePlugStatusPost = [ 'store_id' => $order['store_id'], 'identification_arr' => ['blessing'], ]; $storePlugStatus = $plugClass->plugStoreStatus($storePlugStatusPost);//获取状态 if ($storePlugStatus === true) { //有权限,可以修改有效期 $index = new Index(); $index->validityTimeSave($id, 2);//修改有效期:$type == 1:首次扫码(id = 门店id),2:确认订单(id = 订单id) } $res['status'] = 1; $res['msg'] = '确认成功'; } else { $res['status'] = 0; $res['msg'] = '确认失败'; } } } else { $res['status'] = 0; $res['msg'] = '网络错误'; } $this->ajaxReturn($res); } /** * 获取订单详情 */ public function getOrderDetail_v1() { $order_no = I('post.order_no'); if (empty($order_no)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $uid = self::$uid; $merchant_id = self::$merchant_id; $BillModel = D('RetailBillOrder'); $oMap = array( $BillModel::ORDER_NO => strval($order_no), $BillModel::UID => $uid, $BillModel::MERCHANT_ID => $merchant_id, $BillModel::PAY_STATE => array('in', '0,1'), //0待支付 1已支付 $BillModel::ORDER_TYPE => 1,//购买订单 $BillModel::TYPE => 1, //商城订单 ); $fields = array( $BillModel::ID, //id $BillModel::ALL_MONEY, //订单总金额 $BillModel::PAY_TYPE, //支付类型 1现金 2银行卡 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付 $BillModel::PAY_STATE, //0交易关闭 1已支付 2待支付 $BillModel::REFUND_STATUS,//主要判断商品退款 0正常买单 1申请退款 2退款成功 3部分退款成功 -1退款失败 $BillModel::VID, //会员id $BillModel::ORDER_NO, //订单编号 $BillModel::UID, //小程序用户id $BillModel::REFUND_MONEY,//总退款金额 $BillModel::ADD_TIME, //下单时间 $BillModel::FINISH_TIME,//订单完成时间 ); $order_info = $BillModel->getFind($oMap, $fields); if (!empty($order_info)) { $time = time(); if ($order_info['pay_state'] == 1) { $StoreModel = D('RetailStore'); $refund_time_limit = self::$store[$StoreModel::REFUND_TIME_LIMIT]; $order_info['can_refund'] = 1; $order_info['can_refund_time'] = ($time - $order_info[$BillModel::FINISH_TIME]) / 86400; if (!empty($order_info[$BillModel::FINISH_TIME]) && ($time - $order_info[$BillModel::FINISH_TIME]) / 86400 > $refund_time_limit) { $order_info['can_refund'] = 0; } } else { $order_info['can_refund'] = 0; } $SellModel = D('RetailSell'); $sMap = array( $SellModel::BILL_ID => $order_info[$BillModel::ID] ); $sFields = array( $SellModel::ID, $SellModel::GOODS_ID, $SellModel::GOODS_IMG_ID, $SellModel::GOODS_NAME, $SellModel::NUM, $SellModel::PRICE, $SellModel::ORIGINAL_PRICE, $SellModel::VIP_PRICE, $SellModel::PLUS_VIP_PRICE, $SellModel::REFUND_NUM, $SellModel::SKU_JSON_INFO, $SellModel::WAIT_REFUND_NUM, ); $sellGoods = $SellModel->getSelect($sMap, $sFields); $can_refund_goods = array(); foreach ($sellGoods as &$sVal) { $sVal['goods_count'] = 0; $sVal['checked'] = false; $sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]); $sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3); if (!empty($sVal[$SellModel::SKU_JSON_INFO])) { $sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true); } $sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]); $sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]); $sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]); $sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]); $sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]); $sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]); if ($sVal['less_num'] > 0 && $order_info['pay_state'] == 1) { $can_refund_goods[] = $sVal; } } $DiscountModel = D('RetailBillDiscount'); $OnlineModel = D('RetailBillOnline'); $refund_bill = array(); $wait_refund_bill = array(); $waitRefundGoods = array(); //正在申请退的款商品 $refundGoods = array(); //已经退款成功的商品 //已经支付完成 switch ($order_info['order_genre']) { case '1': //普通订单 if ($order_info['pay_state'] == 1) { $wMap = array( $BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]), $BillModel::REFUND_STATUS => 1,//正在申请退款 $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::TYPE => 1, //商城订单 ); $wFields = array( $BillModel::ID, $BillModel::ALL_MONEY, $DiscountModel::USE_INTEGRAL, $DiscountModel::GET_INTEGRAL, $OnlineModel::DELIVERY_FEE, ); $wait_refund_bill_order = $BillModel->getOrderLinkSelect($wMap, $wFields);//正在申请退款的订单 if (!empty($wait_refund_bill_order)) { $wait_refund_bill_id = array(); $wait_refund_bill = array( $BillModel::ALL_MONEY => 0, $DiscountModel::USE_INTEGRAL => 0, $DiscountModel::GET_INTEGRAL => 0, $OnlineModel::DELIVERY_FEE => 0, ); foreach ($wait_refund_bill_order as $wB) { $wait_refund_bill_id[] = $wB[$BillModel::ID]; $wait_refund_bill[$BillModel::ALL_MONEY] += $wB[$BillModel::ALL_MONEY]; $wait_refund_bill[$DiscountModel::USE_INTEGRAL] += $wB[$DiscountModel::USE_INTEGRAL]; $wait_refund_bill[$DiscountModel::GET_INTEGRAL] += $wB[$DiscountModel::GET_INTEGRAL]; $wait_refund_bill[$OnlineModel::DELIVERY_FEE] += $wB[$OnlineModel::DELIVERY_FEE]; } $waitRefundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $wait_refund_bill_id))); foreach ($waitRefundGoods as &$wVal) { $wVal['goods_img'] = $this->getGoodsImage($wVal[$SellModel::GOODS_IMG_ID]); if (!empty($wVal[$SellModel::SKU_JSON_INFO])) { $wVal[$SellModel::SKU_JSON_INFO] = json_decode($wVal[$SellModel::SKU_JSON_INFO], true); } $wVal[$SellModel::PRICE] = floatval($wVal[$SellModel::PRICE]); $wVal[$SellModel::ORIGINAL_PRICE] = floatval($wVal[$SellModel::ORIGINAL_PRICE]); $wVal[$SellModel::VIP_PRICE] = floatval($wVal[$SellModel::VIP_PRICE]); $wVal[$SellModel::PLUS_VIP_PRICE] = floatval($wVal[$SellModel::PLUS_VIP_PRICE]); $wVal[$SellModel::NUM] = floatval($wVal[$SellModel::NUM]); $wVal[$SellModel::REFUND_NUM] = floatval($wVal[$SellModel::REFUND_NUM]); } } $rMap = array( $BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]), $BillModel::REFUND_STATUS => array('in', '2,3'), $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::TYPE => 1, //商城订单 ); $refund_bill_order = $BillModel->getOrderLinkSelect($rMap, $wFields);//正在申请退款的订单 if (!empty($refund_bill_order)) { $refund_bill_id = array(); $refund_bill = array( $BillModel::ALL_MONEY => 0, $DiscountModel::USE_INTEGRAL => 0, $DiscountModel::GET_INTEGRAL => 0, $OnlineModel::DELIVERY_FEE => 0, ); foreach ($refund_bill_order as $rB) { $refund_bill_id[] = $rB[$BillModel::ID]; $refund_bill[$BillModel::ALL_MONEY] += $rB[$BillModel::ALL_MONEY]; $refund_bill[$DiscountModel::USE_INTEGRAL] += $rB[$DiscountModel::USE_INTEGRAL]; $refund_bill[$DiscountModel::GET_INTEGRAL] += $rB[$DiscountModel::GET_INTEGRAL]; $refund_bill[$OnlineModel::DELIVERY_FEE] += $rB[$OnlineModel::DELIVERY_FEE]; } $refundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $refund_bill_id))); foreach ($refundGoods as &$rVal) { $rVal['goods_img'] = $this->getGoodsImage($rVal[$SellModel::GOODS_IMG_ID]); if (!empty($rVal[$SellModel::SKU_JSON_INFO])) { $rVal[$SellModel::SKU_JSON_INFO] = json_decode($rVal[$SellModel::SKU_JSON_INFO], true); } $rVal[$SellModel::PRICE] = floatval($rVal[$SellModel::PRICE]); $rVal[$SellModel::ORIGINAL_PRICE] = floatval($rVal[$SellModel::ORIGINAL_PRICE]); $rVal[$SellModel::VIP_PRICE] = floatval($rVal[$SellModel::VIP_PRICE]); $rVal[$SellModel::PLUS_VIP_PRICE] = floatval($rVal[$SellModel::PLUS_VIP_PRICE]); $rVal[$SellModel::NUM] = floatval($rVal[$SellModel::NUM]); $rVal[$SellModel::REFUND_NUM] = floatval($rVal[$SellModel::REFUND_NUM]); } } } break; case '2': //拼团订单 $order_info['act_state'] = D('RetailBillGroup')->getFindField(array('bill_id' => $order_info['id']), 'state'); break; case '3': //秒杀订单 $order_info['act_state'] = D('RetailBillSpike')->getFindField(array('bill_id' => $order_info['id']), 'state'); break; case '4': //预售订单 $order_info['advance_info'] = D("RetailBillAdvance")->bill_advance(array('bill_id' => $order_info['id'])); break; } $billDis = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $order_info[$BillModel::ID])); $billOnline = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $order_info[$BillModel::ID])); $order_info['wait_refund_order'] = $wait_refund_bill; $order_info['refund_order'] = $refund_bill; $order_info['all_money'] = floatval($order_info[$BillModel::ALL_MONEY]); $order_info['refund_money'] = floatval($order_info[$BillModel::REFUND_MONEY]); $order_info['less_money'] = round($order_info[$BillModel::ALL_MONEY] - $order_info[$BillModel::REFUND_MONEY], 2); $order_info['delivery_fee'] = floatval($billOnline[$OnlineModel::DELIVERY_FEE]); $order_info['sell_info'] = $sellGoods;//全部 $order_info['wait_refund_info'] = $waitRefundGoods;//售后中 $order_info['refund_info'] = $refundGoods;//售后完成 $order_info['can_refund_goods'] = $can_refund_goods;//售后完成 $order_info['add_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::ADD_TIME]); $order_info['finish_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::FINISH_TIME]); $order_info = array_merge($order_info, $billDis, $billOnline); if ($order_info['pay_state'] == 1) { if ($order_info[$OnlineModel::STATUS] == 1) { //门店配送 if ($order_info[$BillModel::REFUND_STATUS] == 0) { //正常订单 $order_info['state'] = '待发货'; if ($order_info[$OnlineModel::PICKUP_TYPE] == 1) { // 自取 $order_info['state'] = '待自取'; } } else if ($order_info[$BillModel::REFUND_STATUS] == 1) { $order_info['state'] = '待商家确认退款'; } else { $order_info['state'] = '已完成'; } } else if ($order_info[$OnlineModel::STATUS] == 2) { $order_info['state'] = '待收货'; } else if ($order_info[$OnlineModel::STATUS] == 3) { $order_info['state'] = '交易完成'; if ($order_info[$BillModel::REFUND_STATUS] == 1) { $order_info['state'] = '待商家确认退款'; } else if ($order_info[$BillModel::REFUND_STATUS] == 2) { $order_info['state'] = '已退款'; } else { $order_info['state'] = '已完成'; } } $order_info['payList'] = getPayTypeList($order_info[$BillModel::PAY_TYPE], $order_info[$BillModel::ALL_MONEY], $order_info[$BillModel::ID]); // 评价 if ($order_info[$OnlineModel::EVAL_STATUS] == 1) { $EvaluateModel = D('RetailEvaluate'); $evaluateContent = $EvaluateModel->getFindField(array('order_id' => $order_info['id']), 'content'); $order_info['evaluateContent'] = $evaluateContent ? $evaluateContent : '未发表评价内容'; } else { $order_info['evaluateContent'] = '未发表评价内容'; } if ($order_info[$OnlineModel::PICKUP_TYPE] == 2) { //获取配送信息 $delivery = $this->getDriver($order_info[$OnlineModel::DELIVERY_RECORD_ID], $order_info[$OnlineModel::DELIVERY_TYPE]); $order_info['delivery_status'] = $delivery['delivery_status']; $order_info['deliverInfo'] = $delivery; } } else { $order_info['state'] = '待付款'; if ($order_info['pickup_type'] == 2) { $order_info['deliverInfo'] = array( 'driver_name' => '商家配送', 'driver_mobile' => '', 'driver_type' => '商家配送' ); } } if ($order_info['pickup_type'] == 3) { $order_info['deliverInfo'] = array( 'driver_name' => '快递发货', 'driver_mobile' => '', 'driver_type' => '快递发货' ); } // 统计所有优惠 $order_info['dis_all_money'] = round($order_info[$DiscountModel::COUPON_MONEY] + $order_info[$DiscountModel::VIP_DIS_MONEY] + $order_info[$DiscountModel::VIP_LESS_MONEY], 2); $res['status'] = 1; $res['order_info'] = $order_info; } else { $res['status'] = 0; $res['msg'] = '未找到该订单'; } $this->ajaxReturn($res); } /** * 整合预售订单获取订单详情 */ public function getOrderDetail_v2() { $order_no = I('post.order_no'); if (empty($order_no)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $uid = self::$uid; $merchant_id = self::$merchant_id; $BillModel = D('RetailBillOrder'); $oMap = array( 'b.' . $BillModel::ORDER_NO => strval($order_no), 'b.' . $BillModel::UID => $uid, 'b.' . $BillModel::MERCHANT_ID => $merchant_id, 'b.' . $BillModel::ORDER_TYPE => 1,//购买订单 'b.' . $BillModel::TYPE => 1, //商城订单 ); $fields = array( 'b.' . $BillModel::ID, //id 'b.' . $BillModel::ALL_MONEY, //订单总金额 'b.' . $BillModel::PAY_TYPE, //支付类型 1现金 2银行卡 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付 'b.' . $BillModel::PAY_STATE, //0交易关闭 1已支付 2待支付 'b.' . $BillModel::REFUND_STATUS,//主要判断商品退款 0正常买单 1申请退款 2退款成功 3部分退款成功 -1退款失败 'b.' . $BillModel::VID, //会员id 'b.' . $BillModel::ORDER_NO, //订单编号 'b.' . $BillModel::UID, //小程序用户id 'b.' . $BillModel::REFUND_MONEY,//总退款金额 'b.' . $BillModel::ADD_TIME, //下单时间 'b.' . $BillModel::FINISH_TIME,//订单完成时间 'o.order_genre', //订单类型 'b.store_id', ); $order_info = $BillModel->getBillFind($oMap, $fields); if (!empty($order_info)) { $time = time(); if ($order_info['pay_state'] == 1) { $StoreModel = D('RetailStore'); $refund_time_limit = self::$store[$StoreModel::REFUND_TIME_LIMIT]; $order_info['can_refund'] = 1; $order_info['can_refund_time'] = ($time - $order_info[$BillModel::FINISH_TIME]) / 86400; if (!empty($order_info[$BillModel::FINISH_TIME]) && ($time - $order_info[$BillModel::FINISH_TIME]) / 86400 > $refund_time_limit) { $order_info['can_refund'] = 0; } } else { $order_info['can_refund'] = 0; } $SellModel = D('RetailSell'); $sMap = array( $SellModel::BILL_ID => $order_info[$BillModel::ID] ); $sFields = array( $SellModel::ID, $SellModel::GOODS_ID, $SellModel::GOODS_IMG_ID, $SellModel::GOODS_NAME, $SellModel::NUM, $SellModel::PRICE, $SellModel::ORIGINAL_PRICE, $SellModel::VIP_PRICE, $SellModel::PLUS_VIP_PRICE, $SellModel::REFUND_NUM, $SellModel::SKU_JSON_INFO, $SellModel::WAIT_REFUND_NUM, "integral_marketing", "mem_integral", "use_integral", "integral_dis_money" ); $sellGoods = $SellModel->getSelect($sMap, $sFields); $can_refund_goods = array(); foreach ($sellGoods as &$sVal) { $sVal['goods_count'] = 0; $sVal['checked'] = false; $sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]); $sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3); if (!empty($sVal[$SellModel::SKU_JSON_INFO])) { $sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true); } $sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]); $sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]); $sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]); $sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]); $sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]); $sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]); if ($sVal['less_num'] > 0 && $order_info['pay_state'] == 1) { $can_refund_goods[] = $sVal; } } $DiscountModel = D('RetailBillDiscount'); $OnlineModel = D('RetailBillOnline'); $refund_bill = array(); $wait_refund_bill = array(); $waitRefundGoods = array(); //正在申请退的款商品 $refundGoods = array(); //已经退款成功的商品 //已经支付完成 switch ($order_info['order_genre']) { case '1': //普通订单 if ($order_info['pay_state'] == 1) { $wMap = array( $BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]), $BillModel::REFUND_STATUS => 1,//正在申请退款 $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::TYPE => 1, //商城订单 ); $wFields = array( $BillModel::ID, $BillModel::ALL_MONEY, $DiscountModel::USE_INTEGRAL, $DiscountModel::GET_INTEGRAL, $OnlineModel::DELIVERY_FEE, ); $wait_refund_bill_order = $BillModel->getOrderLinkSelect($wMap, $wFields);//正在申请退款的订单 if (!empty($wait_refund_bill_order)) { $wait_refund_bill_id = array(); $wait_refund_bill = array( $BillModel::ALL_MONEY => 0, $DiscountModel::USE_INTEGRAL => 0, $DiscountModel::GET_INTEGRAL => 0, $OnlineModel::DELIVERY_FEE => 0, ); foreach ($wait_refund_bill_order as $wB) { $wait_refund_bill_id[] = $wB[$BillModel::ID]; $wait_refund_bill[$BillModel::ALL_MONEY] += $wB[$BillModel::ALL_MONEY]; $wait_refund_bill[$DiscountModel::USE_INTEGRAL] += $wB[$DiscountModel::USE_INTEGRAL]; $wait_refund_bill[$DiscountModel::GET_INTEGRAL] += $wB[$DiscountModel::GET_INTEGRAL]; $wait_refund_bill[$OnlineModel::DELIVERY_FEE] += $wB[$OnlineModel::DELIVERY_FEE]; } $waitRefundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $wait_refund_bill_id))); foreach ($waitRefundGoods as &$wVal) { $wVal['goods_img'] = $this->getGoodsImage($wVal[$SellModel::GOODS_IMG_ID]); if (!empty($wVal[$SellModel::SKU_JSON_INFO])) { $wVal[$SellModel::SKU_JSON_INFO] = json_decode($wVal[$SellModel::SKU_JSON_INFO], true); } $wVal[$SellModel::PRICE] = floatval($wVal[$SellModel::PRICE]); $wVal[$SellModel::ORIGINAL_PRICE] = floatval($wVal[$SellModel::ORIGINAL_PRICE]); $wVal[$SellModel::VIP_PRICE] = floatval($wVal[$SellModel::VIP_PRICE]); $wVal[$SellModel::PLUS_VIP_PRICE] = floatval($wVal[$SellModel::PLUS_VIP_PRICE]); $wVal[$SellModel::NUM] = floatval($wVal[$SellModel::NUM]); $wVal[$SellModel::REFUND_NUM] = floatval($wVal[$SellModel::REFUND_NUM]); } } $rMap = array( $BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]), $BillModel::REFUND_STATUS => array('in', '2,3'), $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::TYPE => 1, //商城订单 ); $refund_bill_order = $BillModel->getOrderLinkSelect($rMap, $wFields);//正在申请退款的订单 if (!empty($refund_bill_order)) { $refund_bill_id = array(); $refund_bill = array( $BillModel::ALL_MONEY => 0, $DiscountModel::USE_INTEGRAL => 0, $DiscountModel::GET_INTEGRAL => 0, $OnlineModel::DELIVERY_FEE => 0, ); foreach ($refund_bill_order as $rB) { $refund_bill_id[] = $rB[$BillModel::ID]; $refund_bill[$BillModel::ALL_MONEY] += $rB[$BillModel::ALL_MONEY]; $refund_bill[$DiscountModel::USE_INTEGRAL] += $rB[$DiscountModel::USE_INTEGRAL]; $refund_bill[$DiscountModel::GET_INTEGRAL] += $rB[$DiscountModel::GET_INTEGRAL]; $refund_bill[$OnlineModel::DELIVERY_FEE] += $rB[$OnlineModel::DELIVERY_FEE]; } $refundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $refund_bill_id))); foreach ($refundGoods as &$rVal) { $rVal['goods_img'] = $this->getGoodsImage($rVal[$SellModel::GOODS_IMG_ID]); if (!empty($rVal[$SellModel::SKU_JSON_INFO])) { $rVal[$SellModel::SKU_JSON_INFO] = json_decode($rVal[$SellModel::SKU_JSON_INFO], true); } $rVal[$SellModel::PRICE] = floatval($rVal[$SellModel::PRICE]); $rVal[$SellModel::ORIGINAL_PRICE] = floatval($rVal[$SellModel::ORIGINAL_PRICE]); $rVal[$SellModel::VIP_PRICE] = floatval($rVal[$SellModel::VIP_PRICE]); $rVal[$SellModel::PLUS_VIP_PRICE] = floatval($rVal[$SellModel::PLUS_VIP_PRICE]); $rVal[$SellModel::NUM] = floatval($rVal[$SellModel::NUM]); $rVal[$SellModel::REFUND_NUM] = floatval($rVal[$SellModel::REFUND_NUM]); } } } break; case '2': //拼团订单 $order_info['act_state'] = D('RetailBillGroup')->getFindField(array('bill_id' => $order_info['id']), 'state'); break; case '3': //秒杀订单 $order_info['act_state'] = D('RetailBillSpike')->getFindField(array('bill_id' => $order_info['id']), 'state'); break; case '4': //预售订单 $order_info['advance_info'] = D("RetailBillAdvance")->bill_advance(array('bill_id' => $order_info['id'])); $order_info['advance_info']['tail_money'] = round($order_info['all_money'] - $order_info['advance_info']['all_earnest_price'], 2); break; } $billDis = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $order_info[$BillModel::ID])); $billOnline = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $order_info[$BillModel::ID])); $order_info['wait_refund_order'] = $wait_refund_bill; $order_info['refund_order'] = $refund_bill; $order_info['all_money'] = floatval($order_info[$BillModel::ALL_MONEY]); $order_info['refund_money'] = floatval($order_info[$BillModel::REFUND_MONEY]); $order_info['less_money'] = round($order_info[$BillModel::ALL_MONEY] - $order_info[$BillModel::REFUND_MONEY], 2); $order_info['delivery_fee'] = floatval($billOnline[$OnlineModel::DELIVERY_FEE]); $order_info['sell_info'] = $sellGoods;//全部 $order_info['wait_refund_info'] = $waitRefundGoods;//售后中 $order_info['refund_info'] = $refundGoods;//售后完成 $order_info['can_refund_goods'] = $can_refund_goods;//售后完成 $order_info['add_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::ADD_TIME]); $order_info['finish_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::FINISH_TIME]); $order_info = array_merge($order_info, $billDis, $billOnline); if ($order_info['pay_state'] == 1) { if ($order_info[$OnlineModel::STATUS] == 1) { //门店配送 if ($order_info[$BillModel::REFUND_STATUS] == 0) { //正常订单 $order_info['state'] = '待发货'; if ($order_info[$OnlineModel::PICKUP_TYPE] == 1) { // 自取 $order_info['state'] = '待自取'; } } else if ($order_info[$BillModel::REFUND_STATUS] == 1) { $order_info['state'] = '待商家确认退款'; } else { $order_info['state'] = '已完成'; } } else if ($order_info[$OnlineModel::STATUS] == 2) { $order_info['state'] = '待收货'; } else if ($order_info[$OnlineModel::STATUS] == 3) { $order_info['state'] = '交易完成'; if ($order_info[$BillModel::REFUND_STATUS] == 1) { $order_info['state'] = '待商家确认退款'; } else if ($order_info[$BillModel::REFUND_STATUS] == 2) { $order_info['state'] = '已退款'; } else { $order_info['state'] = '已完成'; } } $order_info['payList'] = getPayTypeList($order_info[$BillModel::PAY_TYPE], $order_info[$BillModel::ALL_MONEY], $order_info[$BillModel::ID]); // 评价 if ($order_info[$OnlineModel::EVAL_STATUS] == 1) { $EvaluateModel = D('RetailEvaluate'); $evaluateContent = $EvaluateModel->getFindField(array('order_id' => $order_info['id']), 'content'); $order_info['evaluateContent'] = $evaluateContent ? $evaluateContent : '未发表评价内容'; } else { $order_info['evaluateContent'] = '未发表评价内容'; } if ($order_info[$OnlineModel::PICKUP_TYPE] == 2) { //获取配送信息 $delivery = $this->getDriver($order_info[$OnlineModel::DELIVERY_RECORD_ID], $order_info[$OnlineModel::DELIVERY_TYPE]); $order_info['delivery_status'] = $delivery['delivery_status']; $order_info['deliverInfo'] = $delivery; } } else if ($order_info[$OnlineModel::STATUS] == 0 && $order_info['order_genre'] == 4 && $order_info['pay_state'] == 2) { if ($billOnline['cancel_time'] > 0) { $order_info['state'] = '已申请售后'; $order_info['tail_money_state'] = 0; } else if ($order_info['advance_info']['tail_end_time'] < time()) { $order_info['state'] = '超出尾款支付时间'; $order_info['tail_money_state'] = 0; } else if ($order_info['advance_info']['tail_start_time'] > time()) { $order_info['state'] = '未到付尾款时间'; $order_info['tail_money_state'] = 0; } else { $order_info['state'] = '待付尾款'; $order_info['tail_money_state'] = 1; } } else { $order_info['state'] = '待付款'; } switch ($order_info['pickup_type']) { case 2: $order_info['deliverInfo'] = array( 'driver_name' => '商家配送', 'driver_mobile' => '', 'driver_type' => '商家配送' ); break; case 3: $order_info['deliverInfo'] = array( 'driver_name' => '快递发货', 'driver_mobile' => '', 'driver_type' => '快递发货' ); break; } // 统计所有优惠 $order_info['dis_all_money'] = round($order_info[$DiscountModel::COUPON_MONEY] + $order_info[$DiscountModel::VIP_DIS_MONEY] + $order_info[$DiscountModel::VIP_LESS_MONEY], 2); switch ($order_info['order_genre']) { case 4: if ($order_info['advance_info']['state'] == 2 && $order_info['advance_info']['advance_type'] == 2) { $trade_date = D("RetailPayOrder")->getFindField(array('id' => $order_info['advance_info']['tail_pay_order_id']), "trade_date"); $order_info['advance_info']['trade_date'] = date('Y-m-d H:i:s', $trade_date); } $order_info['advance_info']['tail_start_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_start_time']); $order_info['advance_info']['tail_end_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_end_time']); } $res['status'] = 1; $res['order_info'] = $order_info; } else { $res['status'] = 0; $res['msg'] = '未找到该订单'; } $this->ajaxReturn($res); } /** * 整合所有商城商品订单的订单详情 */ public function getOrderDetail_v3() { $order_no = I('post.order_no'); if (empty($order_no)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $uid = self::$uid; $merchant_id = self::$merchant_id; $BillModel = new RetailBillOrderModel(); $oMap = array( 'b.' . $BillModel::ORDER_NO => strval($order_no), 'b.' . $BillModel::MERCHANT_ID => $merchant_id, 'b.' . $BillModel::ORDER_TYPE => 1,//购买订单 'b.' . $BillModel::TYPE => ['in', '1,2'], //商城订单 [] => [ ['b.uid' => $uid], ['b.vid' => self::$user['vid']], '_logic' => 'OR' ] ); $fields = array( 'b.' . $BillModel::ID, //id 'b.' . $BillModel::ALL_MONEY, //订单总金额 'b.' . $BillModel::PAY_TYPE, //支付类型 1现金 2银行卡 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付 'b.' . $BillModel::PAY_STATE, //0交易关闭 1已支付 2待支付 'b.' . $BillModel::REFUND_STATUS,//主要判断商品退款 0正常买单 1申请退款 2退款成功 3部分退款成功 -1退款失败 'b.' . $BillModel::VID, //会员id 'b.' . $BillModel::ORDER_NO, //订单编号 'b.' . $BillModel::UID, //小程序用户id 'b.' . $BillModel::REFUND_MONEY,//总退款金额 'b.' . $BillModel::ADD_TIME, //下单时间 'b.' . $BillModel::FINISH_TIME,//订单完成时间 'o.order_genre', //订单类型 'b.store_id', 'b.type' ); $order_info = $BillModel->getBillFind($oMap, $fields); if (!empty($order_info)) { //获取该用户的待支付列表 $redis_key = 'retail_*_*_*_' . $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']; } } } $time = time(); if ($order_info['pay_state'] == 1) { $StoreModel = D('RetailStore'); $refund_time_limit = self::$store[$StoreModel::REFUND_TIME_LIMIT]; $order_info['can_refund'] = 1; $order_info['can_refund_time'] = ($time - $order_info[$BillModel::FINISH_TIME]) / 86400; if (!empty($order_info[$BillModel::FINISH_TIME]) && ($time - $order_info[$BillModel::FINISH_TIME]) / 86400 > $refund_time_limit) { $order_info['can_refund'] = 0; } } else { $order_info['can_refund'] = 0; } $SellModel = D('RetailSell'); $sMap = array( $SellModel::BILL_ID => $order_info[$BillModel::ID] ); $sFields = array( $SellModel::ID, $SellModel::GOODS_ID, $SellModel::GOODS_IMG_ID, $SellModel::GOODS_NAME, $SellModel::NUM, $SellModel::PRICE, $SellModel::ORIGINAL_PRICE, $SellModel::VIP_PRICE, $SellModel::PLUS_VIP_PRICE, $SellModel::REFUND_NUM, $SellModel::SKU_JSON_INFO, $SellModel::WAIT_REFUND_NUM, "integral_marketing", "mem_integral", "use_integral", "integral_dis_money", "goods_gifts_id" ); $sellGoods = $SellModel->getSelect($sMap, $sFields); $can_refund_goods = array(); foreach ($sellGoods as &$sVal) { $sVal['goods_count'] = 0; $sVal['checked'] = false; $sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]); $sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3); if (!empty($sVal[$SellModel::SKU_JSON_INFO])) { $sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true); } $sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]); $sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]); $sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]); $sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]); $sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]); $sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]); if ($sVal['less_num'] > 0 && $order_info['pay_state'] == 1) { $can_refund_goods[] = $sVal; } } $DiscountModel = D('RetailBillDiscount'); $OnlineModel = D('RetailBillOnline'); $refund_bill = array(); $wait_refund_bill = array(); $waitRefundGoods = array(); //正在申请退的款商品 $refundGoods = array(); //已经退款成功的商品 //已经支付完成 if ($order_info['type'] == 1) { $order_info['type_name'] = '线上'; //线上订单 switch ($order_info['order_genre']) { case '1': //普通订单 if ($order_info['pay_state'] == 1) { $wMap = array( $BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]), $BillModel::REFUND_STATUS => 1,//正在申请退款 $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::TYPE => 1, //商城订单 ); $wFields = array( $BillModel::ID, $BillModel::ALL_MONEY, $DiscountModel::USE_INTEGRAL, $DiscountModel::GET_INTEGRAL, $OnlineModel::DELIVERY_FEE, ); $wait_refund_bill_order = $BillModel->getOrderLinkSelect($wMap, $wFields);//正在申请退款的订单 if (!empty($wait_refund_bill_order)) { $wait_refund_bill_id = array(); $wait_refund_bill = array( $BillModel::ALL_MONEY => 0, $DiscountModel::USE_INTEGRAL => 0, $DiscountModel::GET_INTEGRAL => 0, $OnlineModel::DELIVERY_FEE => 0, ); foreach ($wait_refund_bill_order as $wB) { $wait_refund_bill_id[] = $wB[$BillModel::ID]; $wait_refund_bill[$BillModel::ALL_MONEY] += $wB[$BillModel::ALL_MONEY]; $wait_refund_bill[$DiscountModel::USE_INTEGRAL] += $wB[$DiscountModel::USE_INTEGRAL]; $wait_refund_bill[$DiscountModel::GET_INTEGRAL] += $wB[$DiscountModel::GET_INTEGRAL]; $wait_refund_bill[$OnlineModel::DELIVERY_FEE] += $wB[$OnlineModel::DELIVERY_FEE]; } $waitRefundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $wait_refund_bill_id))); foreach ($waitRefundGoods as &$wVal) { $wVal['goods_img'] = $this->getGoodsImage($wVal[$SellModel::GOODS_IMG_ID]); if (!empty($wVal[$SellModel::SKU_JSON_INFO])) { $wVal[$SellModel::SKU_JSON_INFO] = json_decode($wVal[$SellModel::SKU_JSON_INFO], true); } $wVal[$SellModel::PRICE] = floatval($wVal[$SellModel::PRICE]); $wVal[$SellModel::ORIGINAL_PRICE] = floatval($wVal[$SellModel::ORIGINAL_PRICE]); $wVal[$SellModel::VIP_PRICE] = floatval($wVal[$SellModel::VIP_PRICE]); $wVal[$SellModel::PLUS_VIP_PRICE] = floatval($wVal[$SellModel::PLUS_VIP_PRICE]); $wVal[$SellModel::NUM] = floatval($wVal[$SellModel::NUM]); $wVal[$SellModel::REFUND_NUM] = floatval($wVal[$SellModel::REFUND_NUM]); } } $rMap = array( $BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]), $BillModel::REFUND_STATUS => array('in', '2,3'), $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::TYPE => 1, //商城订单 ); $refund_bill_order = $BillModel->getOrderLinkSelect($rMap, $wFields);//正在申请退款的订单 if (!empty($refund_bill_order)) { $refund_bill_id = array(); $refund_bill = array( $BillModel::ALL_MONEY => 0, $DiscountModel::USE_INTEGRAL => 0, $DiscountModel::GET_INTEGRAL => 0, $OnlineModel::DELIVERY_FEE => 0, ); foreach ($refund_bill_order as $rB) { $refund_bill_id[] = $rB[$BillModel::ID]; $refund_bill[$BillModel::ALL_MONEY] += $rB[$BillModel::ALL_MONEY]; $refund_bill[$DiscountModel::USE_INTEGRAL] += $rB[$DiscountModel::USE_INTEGRAL]; $refund_bill[$DiscountModel::GET_INTEGRAL] += $rB[$DiscountModel::GET_INTEGRAL]; $refund_bill[$OnlineModel::DELIVERY_FEE] += $rB[$OnlineModel::DELIVERY_FEE]; } $refundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $refund_bill_id))); foreach ($refundGoods as &$rVal) { $rVal['goods_img'] = $this->getGoodsImage($rVal[$SellModel::GOODS_IMG_ID]); if (!empty($rVal[$SellModel::SKU_JSON_INFO])) { $rVal[$SellModel::SKU_JSON_INFO] = json_decode($rVal[$SellModel::SKU_JSON_INFO], true); } $rVal[$SellModel::PRICE] = floatval($rVal[$SellModel::PRICE]); $rVal[$SellModel::ORIGINAL_PRICE] = floatval($rVal[$SellModel::ORIGINAL_PRICE]); $rVal[$SellModel::VIP_PRICE] = floatval($rVal[$SellModel::VIP_PRICE]); $rVal[$SellModel::PLUS_VIP_PRICE] = floatval($rVal[$SellModel::PLUS_VIP_PRICE]); $rVal[$SellModel::NUM] = floatval($rVal[$SellModel::NUM]); $rVal[$SellModel::REFUND_NUM] = floatval($rVal[$SellModel::REFUND_NUM]); } } } break; case '2': //拼团订单 $order_info['act_state'] = D('RetailBillGroup')->getFindField(array('bill_id' => $order_info['id']), 'state'); break; case '3': //秒杀订单 $order_info['act_state'] = D('RetailBillSpike')->getFindField(array('bill_id' => $order_info['id']), 'state'); break; case '4': //预售订单 $order_info['advance_info'] = D("RetailBillAdvance")->bill_advance(array('bill_id' => $order_info['id'])); $order_info['advance_info']['tail_money'] = round($order_info['all_money'] - $order_info['advance_info']['all_earnest_price'], 2); break; } $billOnline = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $order_info[$BillModel::ID])); $order_info['delivery_fee'] = floatval($billOnline[$OnlineModel::DELIVERY_FEE]); } else { $order_info['type_name'] = '线下'; } $billDis = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $order_info[$BillModel::ID])); $order_info['wait_refund_order'] = $wait_refund_bill; $order_info['refund_order'] = $refund_bill; $order_info['all_money'] = floatval($order_info[$BillModel::ALL_MONEY]); $order_info['refund_money'] = floatval($order_info[$BillModel::REFUND_MONEY]); $order_info['less_money'] = round($order_info[$BillModel::ALL_MONEY] - $order_info[$BillModel::REFUND_MONEY], 2); $order_info['sell_info'] = $sellGoods;//全部 $order_info['wait_refund_info'] = $waitRefundGoods;//售后中 $order_info['refund_info'] = $refundGoods;//售后完成 $order_info['can_refund_goods'] = $can_refund_goods;//售后完成 $order_info['add_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::ADD_TIME]); $order_info['finish_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::FINISH_TIME]); $order_info = array_merge($order_info, $billDis, $billOnline ? $billOnline : []); $order_info['payList'] = getPayTypeList($order_info['pay_type'],$order_info['all_money'],$order_info['id']); if ($order_info['type'] == 1) { if ($order_info['pay_state'] == 1) { if ($order_info[$OnlineModel::STATUS] == 1) { //门店配送 if ($order_info[$BillModel::REFUND_STATUS] == 0) { //正常订单 $order_info['state'] = '待发货'; if ($order_info[$OnlineModel::PICKUP_TYPE] == 1) { // 自取 $order_info['state'] = '待自取'; } } else if ($order_info[$BillModel::REFUND_STATUS] == 1) { $order_info['state'] = '待商家确认退款'; } else { $order_info['state'] = '已完成'; } } else if ($order_info[$OnlineModel::STATUS] == 2) { $order_info['state'] = '待收货'; } else if ($order_info[$OnlineModel::STATUS] == 3) { $order_info['state'] = '交易完成'; if ($order_info[$BillModel::REFUND_STATUS] == 1) { $order_info['state'] = '待商家确认退款'; } else if ($order_info[$BillModel::REFUND_STATUS] == 2) { $order_info['state'] = '已退款'; } else { $order_info['state'] = '已完成'; } } $order_info['payList'] = getPayTypeList($order_info[$BillModel::PAY_TYPE], $order_info[$BillModel::ALL_MONEY], $order_info[$BillModel::ID]); // 评价 if ($order_info[$OnlineModel::EVAL_STATUS] == 1) { $EvaluateModel = D('RetailEvaluate'); $evaluateContent = $EvaluateModel->getFindField(array('order_id' => $order_info['id']), 'content'); $order_info['evaluateContent'] = $evaluateContent ? $evaluateContent : '未发表评价内容'; } else { $order_info['evaluateContent'] = '未发表评价内容'; } if ($order_info[$OnlineModel::PICKUP_TYPE] == 2) { //获取配送信息 $delivery = $this->getDriver($order_info[$OnlineModel::DELIVERY_RECORD_ID], $order_info[$OnlineModel::DELIVERY_TYPE]); $order_info['delivery_status'] = $delivery['delivery_status']; $order_info['deliverInfo'] = $delivery; } } else if ($order_info[$OnlineModel::STATUS] == 0 && $order_info['order_genre'] == 4 && $order_info['pay_state'] == 2) { if ($billOnline['cancel_time'] > 0) { $order_info['state'] = '已申请售后'; $order_info['tail_money_state'] = 0; } else if ($order_info['advance_info']['tail_end_time'] < time()) { $order_info['state'] = '超出尾款支付时间'; $order_info['tail_money_state'] = 0; } else if ($order_info['advance_info']['tail_start_time'] > time()) { $order_info['state'] = '未到付尾款时间'; $order_info['tail_money_state'] = 0; } else { $order_info['state'] = '待付尾款'; $order_info['tail_money_state'] = 1; } } else { $order_info['state'] = '待付款'; } if ($order_info['pay_state'] == 0) { if (!in_array($order_info['id'], $billId)) { $order_info['pay_state'] = -1; } } // switch ($order_info['pickup_type']) { // case 2: // $order_info['deliverInfo'] = array( // 'driver_name' => '商家配送', // 'driver_mobile' => '', // 'driver_type' => '商家配送' // ); // break; // case 3: // $order_info['deliverInfo'] = array( // 'driver_name' => '快递发货', // 'driver_mobile' => '', // 'driver_type' => '快递发货' // ); // break; // } switch ($order_info['order_genre']) { case 4: if ($order_info['advance_info']['state'] == 2 && $order_info['advance_info']['advance_type'] == 2) { $trade_date = D("RetailPayOrder")->getFindField(array('id' => $order_info['advance_info']['tail_pay_order_id']), "trade_date"); $order_info['advance_info']['trade_date'] = date('Y-m-d H:i:s', $trade_date); } $order_info['advance_info']['tail_start_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_start_time']); $order_info['advance_info']['tail_end_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_end_time']); } // 统计所有优惠 $order_info['dis_all_money'] = round($order_info[$DiscountModel::COUPON_MONEY] + $order_info[$DiscountModel::VIP_DIS_MONEY] + $order_info[$DiscountModel::VIP_LESS_MONEY], 2); } else { $order_info['state'] = '已完成'; // 统计所有优惠 $order_info['dis_all_money'] = round($billDis['coupon_money'] + $billDis['vip_dis_money'] + $billDis['cashier_dis_money'] + $billDis['small_changes_money'] + $billDis['cashier_manual_money'], 2); } $plugClass = new Plug(); //订单获取祝福码,判断该门店是否,有,并且开启 $storePlugStatusPost = [ 'store_id' => $order_info['store_id'], 'identification_arr' => ['blessing'], ]; $storePlugStatus = $plugClass->plugStoreStatus($storePlugStatusPost);//获取状态 if ($storePlugStatus === true) { //门店有权限,并开启插件,查询订单是否有祝福码 $extractionCode = new Index(); $order_info['extraction_code'] = $extractionCode->obtainExtractionCode($order_info['id']);//祝福码 } else { //门店无权限,或没开启 $order_info['extraction_code'] = null; } $res['status'] = 1; $res['order_info'] = $order_info; } else { $res['status'] = 0; $res['msg'] = '未找到该订单'; } $this->ajaxReturn($res); } /** * 获取配送员信息 * @param $id 配送id * @param $type 配送类型 * @return array|bool|mixed */ public function getDriver($id, $type) { if ($type == 1) { // 门店自己配送 $driver = array( 'driver_name' => '商家配送', 'driver_mobile' => '', 'driver_type' => '商家配送' ); return $driver; } else if ($type == 2) { //达达配送 $DaOrderModel = D('RetailDaOrder'); $fields = array( $DaOrderModel::DM_NAME . ' as driver_name', $DaOrderModel::DM_MOBILE . ' as driver_mobile', $DaOrderModel::CLIENT_ID . ' as driver_order', $DaOrderModel::ORDER_STATUS . ' as delivery_status' ); $driver = $DaOrderModel->getFind(array($DaOrderModel::ID => $id, $DaOrderModel::ORDER_STATUS => array('EGT', 3)), $fields); if ($driver) { $driver['driver_type'] = '达达配送'; return $driver; } } else if ($type == 3) { //uu跑腿 $UuOrderModel = D('RetailUuOrder'); $fields = array( $UuOrderModel::DRIVER_NAME . ' as driver_name', $UuOrderModel::DRIVER_MOBILE . ' as driver_mobile', $UuOrderModel::ORDER_CODE . ' as driver_order', $UuOrderModel::STATE . ' as delivery_status' ); $driver = $UuOrderModel->getFind(array($UuOrderModel::ID => $id, $UuOrderModel::STATE => array('EGT', 3)), $fields); if ($driver) { if ($driver['delivery_status'] == 1) { $driver['delivery_status'] = 1; } else if ($driver['delivery_status'] == 3 || $driver['delivery_status'] == 4) { $driver['delivery_status'] = 2; } else if ($driver['delivery_status'] == 5 || $driver['delivery_status'] == 6) { $driver['delivery_status'] = 3; } $driver['driver_type'] = 'UU跑腿'; return $driver; } } else if ($type == 6) { $billOrder = (new \Common\Model\RetailBillOrderModel)->field('order_no')->where(['id' => $id])->find(); $delivery = (new \Common\Model\RetailMaiyatianDeliveryModel)->where(['order_id' => $billOrder['order_no']])->find(); if ($delivery) { $driver = [ 'delivery' => 6, 'driver_name' => $delivery['rider_name'], 'driver_mobile' => '', 'driver_type' => $driver['driver_type'], 'driver_order' => $delivery['logistic_no'], ]; if ($delivery['status'] === 'PENDING') { $driver['delivery_status'] = 1; } else if (in_array($delivery['status'], ['GRABBED', 'PICKUP', 'DELIVERING'])) { $driver['delivery_status'] = 2; } else if ($delivery['status'] === 'DONE') { $driver['delivery_status'] = 3; } $driver['driver_type'] = \Common\Lib\MaiyatianEnum::getKey('delivery.logistic_tag', strtoupper($delivery['logistic_tag']))['value']; return $driver; } } return false; } /** * 申请退款(取消订单) */ public function doRefund_v1() { $order_no = I('post.order_no'); $refund_list = I('post.refund_list'); //退款sell列表 $type = I('post.type'); //类型 1取消订单 2退款(订单已完成) if (empty($order_no) || empty($type)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $uid = self::$uid; $merchant_id = self::$merchant_id; $BillModel = D('RetailBillOrder'); $bMap = array( $BillModel::ORDER_NO => strval($order_no), $BillModel::MERCHANT_ID => $merchant_id, $BillModel::UID => $uid, $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 1, $BillModel::REFUND_STATUS => 0 ); if ($type == 2) { //部分(全部)退款 if (empty($refund_list)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $refund_list = htmlspecialchars_decode($refund_list); $refund_list = json_decode($refund_list, true); if (!is_array($refund_list) || count($refund_list) == 0) { $result['status'] = 0; $result['msg'] = '退款商品信息有误'; $this->ajaxReturn($result); } $bMap[$BillModel::REFUND_STATUS] = array('not in', '1,2'); } else if ($type != 1) { $result['status'] = 0; $result['msg'] = '参数值有误'; $this->ajaxReturn($result); } $billOrder = $BillModel->getFind($bMap);//原订单 if (empty($billOrder)) { $result['status'] = 0; $result['msg'] = '请求有误,请刷新重试'; $this->ajaxReturn($result); } if ($billOrder[$BillModel::UPGRADE_STATE] == 1) { $result['status'] = 0; $result['msg'] = '升级为PLUS会员的订单无法退款'; $this->ajaxReturn($result); } $store_id = $billOrder['store_id']; // 判断是否为购买次卡 $CardOrder = D('RetailCardOrder'); $co_map = array( $CardOrder::MERCHANT_ID => $billOrder[$BillModel::MERCHANT_ID], $CardOrder::VIP_ID => $billOrder[$BillModel::VID], $CardOrder::BILL_ID => $billOrder[$BillModel::ID], ); $card_order = $CardOrder->getFind($co_map); if (!empty($card_order)) { $result['status'] = 0; $result['msg'] = '该订单为购买次卡活动订单,无法退款'; $this->ajaxReturn($result); } // 判断是否送次卡 if (!empty($billOrder[$BillModel::VID])) { $judge_refund = A('PayApi/Refund')->judgeRefund($billOrder); if ($judge_refund['status'] == 0) { $this->ajaxReturn($judge_refund); } } $BillOnlineModel = D('RetailBillOnline'); $oMap = array( $BillOnlineModel::BILL_ID => $billOrder[$BillModel::ID] ); $billOnline = $BillOnlineModel->getFind($oMap);//查询线上订单表 $BillDisModel = D('RetailBillDiscount'); $BillOnlineModel = D('RetailBillOnline'); $SellModel = D('RetailSell'); if ($type == 1) { if ($billOnline[$BillOnlineModel::STATUS] != 1) { $result['status'] = 0; $result['msg'] = '该订单已发货,不能取消'; $this->ajaxReturn($result); } $refundSellList = $SellModel->getSelect(array($SellModel::BILL_ID => $billOrder[$BillModel::ID])); $new_discount = $BillDisModel->getFind(array($BillDisModel::BILL_ID => $billOrder[$BillModel::ID])); $refundData = array( 'allMoney' => round($billOrder[$BillModel::ALL_MONEY] - $billOnline[$BillOnlineModel::DELIVERY_FEE], 2), 'refundSellList' => $refundSellList, 'new_discount' => $new_discount, 'status' => 1 ); } else { if ($billOnline[$BillOnlineModel::STATUS] != 3) { $result['status'] = 0; $result['msg'] = '该订单未完成,不能进行部分退款'; $this->ajaxReturn($result); } $rMap = array( $BillModel::REFUND_NO => strval($order_no), $BillModel::MERCHANT_ID => $merchant_id, $BillModel::UID => $uid, $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::REFUND_STATUS => 1,//正常正在等待退款的订单 $BillModel::PAY_STATE => 1,//正常正在等待退款的订单 ); $refundOrder = $BillModel->getFind($rMap); if (!empty($refundOrder)) { $result['status'] = 0; $result['msg'] = '正在进行的退款订单完成之后才能发起退款操作'; $this->ajaxReturn($result); } $refundData = getRefundList($refund_list, $billOrder[$BillModel::ID]); } if ($refundData['status'] == 0) { $this->ajaxReturn($refundData); } $allMoney = $refundData['allMoney'];//退款总金额 $refund_list = $refundData['refundSellList'];//退款列表 $new_discount = $refundData['new_discount'];//新优惠数据 $time = time(); $newBill = array( $BillModel::ALL_MONEY => $allMoney, $BillModel::PAY_STATE => 1, $BillModel::REFUND_STATUS => 1, $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 2, $BillModel::ADD_TIME => $time, $BillModel::REFUND_NO => $billOrder[$BillModel::ORDER_NO], $BillModel::REFUND_MONEY => $allMoney, $BillModel::UID => $billOrder[$BillModel::UID], $BillModel::VID => $billOrder[$BillModel::VID], $BillModel::STORE_ID => $billOrder['store_id'], $BillModel::MERCHANT_ID => $merchant_id, ); $newBill = $BillModel->addBillOrder($newBill); if ($newBill) { $new_discount[$BillDisModel::BILL_ID] = $newBill[$BillModel::ID]; $add_dis = $BillDisModel->addOrder($new_discount); $old_online = $BillOnlineModel->getFind(array($BillOnlineModel::BILL_ID => $billOrder[$BillModel::ID])); if ($type == 1) { $old_online[$BillOnlineModel::CANCEL_TIME]++; $online_save[$BillOnlineModel::CANCEL_TIME] = $old_online[$BillOnlineModel::CANCEL_TIME]; } else { $old_online[$BillOnlineModel::REFUND_TIME]++; $online_save[$BillOnlineModel::REFUND_TIME] = $old_online[$BillOnlineModel::REFUND_TIME]; } $old_online[$BillOnlineModel::BILL_ID] = $newBill[$BillModel::ID]; $old_online[$BillOnlineModel::DELIVERY_FEE] = 0;//先默认为不退换配送费 $add_online = $BillOnlineModel->addOrder($old_online); if ($add_dis && $add_online) { //可进行退换货操作 $success_array = array(); foreach ($refund_list as $key => $val) { $newSell = $val; unset($newSell[$SellModel::ID]); $newSell[$SellModel::SELL_TYPE] = 2;//退款 $newSell[$SellModel::PAY_STATE] = 0;//未成功退款 $newSell[$SellModel::BILL_ID] = $newBill[$BillModel::ID]; $newSell[$SellModel::SELL_ID] = $val[$SellModel::ID]; $newSell[$SellModel::ADD_TIME] = time(); $add_sell = $SellModel->addOrder($newSell); if ($add_sell) { $newSell[$SellModel::ID] = $add_sell; $success_array[] = $newSell; $SellModel->toSetInc(array($SellModel::ID => $val[$SellModel::ID]), $SellModel::WAIT_REFUND_NUM, $val[$SellModel::NUM]); } } if (count($success_array) == count($refund_list)) { $result['status'] = 1; $result['msg'] = '退款申请发起成功'; $data = array( 'refund_status' => 1, 'cancel_time' => 1, 'refund_time' => 1 ); $result['data'] = $data; $result['state'] = '待商家确认退款'; $BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 1));//修改原订单状态 $BillOnlineModel->updateOrder($oMap, $online_save); if ($type == 1) { sendsockets($store_id, "有线上订单申请取消订单", 1); //新版推送 $sockets = array( 'login_string' => '', 'username' => '', 'type' => 2, 'message' => "有线上订单申请取消订单", ); sendSockets($store_id, $sockets, -1); } else { sendsockets($store_id, "有线上订单申请退款", 2); //新版推送 $sockets = array( 'login_string' => '', 'username' => '', 'type' => 3, 'message' => "有线上订单申请退款", ); sendSockets($store_id, $sockets, -1); } } else { $BillModel->deleteOrder(array($BillModel::ID => $newBill[$BillModel::ID])); $SellModel->deleteOrder(array($SellModel::BILL_ID => $newBill[$BillModel::ID])); foreach ($success_array as $value) { $SellModel->toSetDec(array($SellModel::ID => $value[$SellModel::BILL_ID]), $SellModel::WAIT_REFUND_NUM, $value[$SellModel::NUM]); } $result['status'] = 0; $result['msg'] = '数据操作有误2'; } } else { $BillModel->deleteOrder(array($BillModel::ID => $newBill[$BillModel::ID])); $result['status'] = 0; $result['msg'] = '退款请求失败,请稍后重试'; } } else { $result['status'] = 0; $result['msg'] = '退款请求失败,请稍后重试1'; } $this->ajaxReturn($result); } /**获取满足售后条件的商品列表 * 2020/3/4 * @param order_no 订单号 */ public function getRefundGoods() { $order_no = I('post.order_no'); if (empty($order_no)) { $res['status'] = 0; $res['msg'] = '缺少订单号'; $this->ajaxReturn($res); } $uid = self::$uid; $merchant_id = self::$merchant_id; $BillModel = D('RetailBillOrder'); $oMap = array( $BillModel::ORDER_NO => strval($order_no), $BillModel::UID => $uid, $BillModel::MERCHANT_ID => $merchant_id, $BillModel::PAY_STATE => 1, //已支付 $BillModel::ORDER_TYPE => 1,//购买订单 $BillModel::TYPE => 1, //商城订单 ); $order_info = $BillModel->getFind($oMap); if (!empty($order_info)) { $overtime = overtime(self::$store, $order_info, 1); if ($overtime['status'] == 0) { $this->ajaxReturn($overtime); } $SellModel = D('RetailSell'); $RetailGoodsModel = D("RetailGoods"); $sMap = array( $SellModel::BILL_ID => $order_info[$BillModel::ID] ); $sFields = array( $SellModel::ID, $SellModel::GOODS_ID, $SellModel::GOODS_IMG_ID, $SellModel::GOODS_NAME, $SellModel::NUM, $SellModel::PRICE, $SellModel::ORIGINAL_PRICE, $SellModel::VIP_PRICE, $SellModel::PLUS_VIP_PRICE, $SellModel::REFUND_NUM, $SellModel::SKU_JSON_INFO, $SellModel::WAIT_REFUND_NUM, $SellModel::GOODS_GIFTS_ID, ); $sellGoods = $SellModel->getSelect($sMap, $sFields); $can_refund_goods = array(); foreach ($sellGoods as &$sVal) { $goods = $RetailGoodsModel->getFind(array('id' => $sVal['goods_id']), "refund_state,exchange_state"); if ($goods['refund_state'] == 0 && $goods['exchange_state'] == 0) { continue; } $sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3); if ($sVal['less_num'] <= 0) { continue; } $sVal['goods_count'] = 0; $sVal['checked'] = false; $sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]); if (!empty($sVal[$SellModel::SKU_JSON_INFO])) { $sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true); } $sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]); $sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]); $sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]); $sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]); $sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]); $sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]); $can_refund_goods[] = $sVal; } $res['msg'] = '暂无可退款换货商品'; $res['status'] = 1; $res['sell_list'] = $can_refund_goods; } else { $res['status'] = 0; $res['msg'] = '未找到该支付订单'; } $this->ajaxReturn($res); } /** * 申请退款换货(取消订单) 2020/3/5 * @param order_no 订单号 * @param refund_list 退款sell列表 * @param apply_reason 申请退款换货原因 * @param type 类型 1取消订单 2退款(订单已完成) 3换货(订单已完成) * @param user_address 换货的收货地址 * @param $user_name 姓名 * @param $user_phone 手机号 * @param $reason_img 图片id , 拼接 */ public function doRefund_v2() { $parameter = array( 'order_no' => I('post.order_no'), 'refund_list' => I('post.refund_list'), 'type' => I('post.type'), 'apply_reason' => I('post.apply_reason'), 'reason_img' => I("post.reason_img"), 'user_address' => I("post.user_address"), 'user_name' => I("post.user_name"), 'user_phone' => I("post.user_phone"), 'store' => self::$store, 'merchant_id' => self::$merchant_id, 'uid' => self::$uid, 'user_type' => 1, 'platform_type' => self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1 ); $result = A("Api/Customer")->order_cancel($parameter); $this->ajaxReturn($result); } /** * 取消退款申请 */ public function cancelRefund_v1() { $order_no = I('post.order_no'); if (empty($order_no)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $uid = self::$uid; $merchant_id = self::$merchant_id; $BillModel = D('RetailBillOrder'); $bMap = array( $BillModel::ORDER_NO => strval($order_no), $BillModel::MERCHANT_ID => $merchant_id, $BillModel::UID => $uid, $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 1,//退款订单 $BillModel::REFUND_STATUS => 1,//正常正在等待退款的订单 $BillModel::PAY_STATE => 1,//正常正在等待退款的订单 ); $billOrder = $BillModel->getFind($bMap);//原订单 if (empty($billOrder)) { $result['status'] = 0; $result['msg'] = '您的操作有误'; $this->ajaxReturn($result); } $store_id = $billOrder['store_id']; $rMap = array( $BillModel::REFUND_NO => strval($order_no), $BillModel::STORE_ID => $store_id, $BillModel::MERCHANT_ID => $merchant_id, $BillModel::UID => $uid, $BillModel::TYPE => 1, $BillModel::ORDER_TYPE => 2,//退款订单 $BillModel::REFUND_STATUS => 1,//正常正在等待退款的订单 $BillModel::PAY_STATE => 1,//正常正在等待退款的订单 ); $refundOrder = $BillModel->getFind($rMap); if (empty($refundOrder)) { $result['status'] = 0; $result['msg'] = '订单不存在'; $this->ajaxReturn($result); } /*修改退库记录状态*/ $updateRefund = $BillModel->updateOrder($rMap, array($BillModel::REFUND_STATUS => 0, $BillModel::PAY_STATE => 0)); if (!empty($updateRefund)) { $SellModel = D('RetailSell'); $sMap = array( $SellModel::BILL_ID => $refundOrder[$BillModel::ID], $SellModel::SELL_TYPE => 2,//退款 ); $sellOrder = $SellModel->getSelect($sMap);//退款出售记录表 if (empty($sellOrder)) { $result['status'] = 0; $result['msg'] = '数据操作有误'; $this->ajaxReturn($result); } $success_array = array(); foreach ($sellOrder as $value) { $map = array( $SellModel::ID => $value[$SellModel::SELL_ID] ); $updateSell = $SellModel->toSetDec($map, $SellModel::WAIT_REFUND_NUM, $value[$SellModel::NUM]); if ($updateSell) { $success_array[] = $value; } } if (count($success_array) == count($sellOrder)) { //修改原表状态 $data = array( 'cancel_time' => 1, 'refund_time' => 1 ); if ($billOrder[$BillModel::REFUND_MONEY] > 0) { //有退款 $data['refund_status'] = 3; $BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 3)); } else { //无退款 $data['refund_status'] = 0; $BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 0)); } $result['data'] = $data; $OnlineModel = D('RetailBillOnline'); $onlineOrder = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $billOrder[$BillModel::ID])); if ($onlineOrder[$OnlineModel::STATUS] == 1) { sendsockets($store_id, "有线上订单撤销取消订单申请", 3); //新版推送 $sockets = array( 'login_string' => '', 'username' => '', 'type' => 4, 'message' => "有线上订单撤销取消订单申请", ); sendSockets($store_id, $sockets, -1); if ($onlineOrder[$OnlineModel::PICKUP_TYPE] == 1) { $result['state'] = '待自提'; } else { $result['state'] = '待发货'; } } else { sendsockets($store_id, "有线上订单取消退款申请", 4); //新版推送 $sockets = array( 'login_string' => '', 'username' => '', 'type' => 5, 'message' => "有线上订单取消退款申请", ); sendSockets($store_id, $sockets, -1); $result['state'] = '已完成'; } $result['status'] = 1; $result['msg'] = '操作成功'; } else { foreach ($success_array as $val) { $map = array( $SellModel::ID => $val[$SellModel::SELL_ID] ); $SellModel->toSetInc($map, $SellModel::WAIT_REFUND_NUM, $val[$SellModel::NUM]); } $BillModel->updateOrder($rMap, array($BillModel::REFUND_STATUS => 1, $BillModel::PAY_STATE => 1)); $result['status'] = 0; $result['msg'] = '数据操作有误2'; } } else { $result['status'] = 0; $result['msg'] = '取消失败,请稍后重试'; } $this->ajaxReturn($result); } /** * 用户评价 */ public function addEvaluate_v1() { $order_no = I('post.order_no'); $content = I('post.content'); if (empty($order_no) || empty($content)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $BillModel = D('RetailBillOrder'); $bMap = array( 'order_no' => strval($order_no), 'uid' => self::$uid ); $billOrder = $BillModel->getFind($bMap); if (empty($billOrder)) { $result['status'] = 0; $result['msg'] = '请求有误'; $this->ajaxReturn($result); } $store_id = $billOrder['store_id']; $OnlineModel = D('RetailBillOnline'); $oMap = array( $OnlineModel::BILL_ID => $billOrder[$BillModel::ID] ); $onlineOrder = $OnlineModel->getFind($oMap); if ($onlineOrder[$OnlineModel::EVAL_STATUS] == 1) { $result['status'] = 0; $result['msg'] = '您已经评论过了'; $this->ajaxReturn($result); } $EvaluateModel = D('RetailEvaluate'); $item = array( $EvaluateModel::ORDER_ID => $billOrder[$BillModel::ID], $EvaluateModel::CONTENT => $content, $EvaluateModel::ADD_TIME => time(), $EvaluateModel::STORE_ID => $store_id, $EvaluateModel::MERCHANT_ID => self::$merchant_id, $EvaluateModel::UID => self::$uid, ); $add_evaluate = $EvaluateModel->addOrder($item); if ($add_evaluate) { $up = $OnlineModel->updateOrder($oMap, array($OnlineModel::EVAL_STATUS => 1)); if (!empty($up)) { $result['status'] = 1; $result['msg'] = '评论成功'; } else { $result['status'] = 0; $result['msg'] = '评论失败'; } } else { $result['status'] = 0; $result['msg'] = '评论失败'; } $this->ajaxReturn($result); } /** * 用户提醒发货 * @param int $bill_id bill订单id * @param int $type 类型 1.普通订单 2.拼团订单 3.秒杀订单 * @return array $res */ public function userRemind() { // 接收数据 $bill_id = I('post.bill_id'); // $type = I('post.type'); if (!$bill_id) { $res = array('status' => 0, 'msg' => '参数缺失'); $this->ajaxReturn($res); } // 查询订单 $RBOModel = D('RetailBillOrder'); $map = array( 'b.' . $RBOModel::ID => $bill_id, 'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id, 'b.' . $RBOModel::ORDER_TYPE => 1, 'b.' . $RBOModel::PAY_STATE => 1, 'b.' . $RBOModel::TYPE => 1, 'o.status' => 1, 'o.remind_state' => 0, // 'o.order_genre' => $type, ); $field = array('b.' . $RBOModel::ID, 'o.remind_state'); $order = $RBOModel->getBillFind($map, $field); if (!$order) { $res = array('status' => 0, 'msg' => '订单出现异常,请联系商家'); $this->ajaxReturn($res); } // 修改订单 $RBOnlineModel = D('RetailBillOnline'); $up = array( $RBOnlineModel::REMIND_STATE => 1, $RBOnlineModel::REMIND_TIME => time() ); $save_result = $RBOnlineModel->updateOrder(array($RBOnlineModel::BILL_ID => $bill_id), $up); if ($save_result) { $res = array('status' => 1, 'msg' => '提醒成功'); } else { $res = array('status' => 0, 'msg' => '提醒失败'); } $this->ajaxReturn($res); } /** * 用户确认收货 * @param int $bill_id bill订单id * @param int $type 类型 1.普通订单 2.拼团订单 3.秒杀订单 * @return array $res */ public function userReceive() { // 接收数据 $bill_id = I('post.bill_id'); $type = I('post.type'); if (!$bill_id || !$type) { $res = array('status' => 0, 'msg' => '参数缺失'); $this->ajaxReturn($res); } // 查询订单 $BillModel = new RetailBillOrderModel(); $map = array( 'b.id' => $bill_id, 'b.merchant_id' => self::$merchant_id, 'b.order_type' => 1, 'b.pay_state' => 1, 'b.type' => 1, 'o.order_genre' => $type ); $field = array('b.id', 'o.order_genre'); $order = $BillModel->getBillFind($map, $field); if (!$order) { $res = array('status' => 0, 'msg' => '订单出现异常,请联系商家'); $this->ajaxReturn($res); } // 修改订单 $OnlineModel = new RetailBillOnlineModel(); $up = array( 'status' => 3, 'receiving_goods_time' => time(), ); $save_result = $OnlineModel->updateOrder(array($OnlineModel::BILL_ID => $bill_id), $up); if ($save_result) { $BillModel->updateOrder(array('id' => $order['id']), array('finish_time' => time())); $res = array('status' => 1, 'msg' => '交易成功'); } else { $res = array('status' => 0, 'msg' => '收货出现异常,请联系商家'); } $this->ajaxReturn($res); } /** * 获取骑手信息 */ public function rider() { $order_no = I('post.order_no');//订单编号 if (empty($order_no)) { $result['status'] = 0; $result['msg'] = "缺少参数"; $this->ajaxReturn($result); } $result = A('PayApi/Order')->getRider($order_no); $this->ajaxReturn($result); } /** * 获取待支付列表 */ public function getWaitPayOrder() { $uid = self::$uid; $store_id = self::$store_id; $redis_key = 'retail_*_*_*_' . $uid . '_*'; $ApiRedis = new \Addons\Api\RedisController(); $wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key)); $billId = array(); $timeArr = 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']; $timeArr[] = $data['expiration_time']; } } } $billOrder = array(); if (!empty($billId)) { $BillModel = D('RetailBillOrder'); $OnlineModel = D('RetailBillOnline'); $SellModel = D('RetailSell'); foreach ($billId as $key => $val) { $bMap = array( $BillModel::STORE_ID => $store_id, $BillModel::ID => $val, $BillModel::PAY_STATE => 0, ); $data = $BillModel->getFind($bMap); if (!empty($data)) { $sMap = array( $SellModel::BILL_ID => $val ); $oMap = array( $OnlineModel::BILL_ID => $val ); $data['order_genre'] = $OnlineModel->getFindField($oMap, $OnlineModel::ORDER_GENRE); $data['add_time'] = date('Y-m-d H:i:s', $data['add_time']); $data['expiration_time'] = date('Y-m-d H:i:s', strval(intval($timeArr[$key] - 2)));; $data['time_desc'] = ''; $data['goods_info'] = $SellModel->getFind($sMap); $data['goods_info']['goods_img'] = $this->getGoodsImage($data['goods_info']['goods_img_id']); $billOrder[] = $data; } } if (!empty($billOrder)) { $res['status'] = 1; $res['msg'] = '查询成功'; } else { $res['status'] = 0; $res['msg'] = '暂无记录'; } } else { $res['status'] = 0; $res['msg'] = '暂无记录'; } $res['data'] = $billOrder; $this->ajaxReturn($res); } /** * 获取待支付列表 */ public function getWaitPayOrder_v1() { $uid = self::$uid; $redis_key = 'retail_*_*_*_' . $uid . '_*'; $ApiRedis = new \Addons\Api\RedisController(); $wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key)); $billId = array(); $timeArr = 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']; $timeArr[] = $data['expiration_time']; } } } $billOrder = array(); if (!empty($billId)) { $BillModel = D('RetailBillOrder'); $OnlineModel = D('RetailBillOnline'); $SellModel = D('RetailSell'); foreach ($billId as $key => $val) { $bMap = array( $BillModel::ID => $val, $BillModel::PAY_STATE => 0, ); $data = $BillModel->getFind($bMap); if (!empty($data)) { $sMap = array( $SellModel::BILL_ID => $val ); $oMap = array( $OnlineModel::BILL_ID => $val ); $data['order_genre'] = $OnlineModel->getFindField($oMap, $OnlineModel::ORDER_GENRE); $data['add_time'] = date('Y-m-d H:i:s', $data['add_time']); $data['expiration_time'] = date('Y-m-d H:i:s', strval(intval($timeArr[$key] - 2)));; $data['time_desc'] = ''; $data['goods_info'] = $SellModel->getFind($sMap); $data['goods_info']['goods_img'] = getGoodsImage($data['goods_info']['goods_img_id'], $data['store_id']); $billOrder[] = $data; } } if (!empty($billOrder)) { $res['status'] = 1; $res['msg'] = '查询成功'; } else { $res['status'] = 0; $res['msg'] = '暂无记录'; } } else { $res['status'] = 0; $res['msg'] = '暂无记录'; } $res['data'] = $billOrder; $this->ajaxReturn($res); } /** * 取消订单 2020-4-13 */ public function cancelPay() { $uid = self::$uid; $order_no = I('post.order_no'); if (empty($order_no)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $BillModel = D('RetailBillOrder'); $map = array( 'b.' . $BillModel::ORDER_NO => $order_no, 'b.' . $BillModel::UID => $uid, ); $fields = [ 'b.id', 'b.store_id', 'o.order_genre', 'd.coupon_id', 'd.coupon_type', ]; if (self::$merchant['platform_type'] == 2) { $fields[] = 'b.third_order'; } $bill_info = $BillModel->getBillFind($map, $fields); if (empty($bill_info)) { $res['status'] = 0; $res['msg'] = '请求有误'; $this->ajaxReturn($res); } if (self::$merchant['platform_type'] == 2) { //第三方平台 $ThirdClass = new Order(); $thirdResult = $ThirdClass->orderCancel([ 'merchant_id' => self::$merchant_id, 'third_order' => $bill_info['third_order'] ]); if ($thirdResult['status'] == 0) { $res['status'] = 0; $res['msg'] = 'Q3 ERP平台订单取消失败' . $thirdResult['message']; $this->ajaxReturn($res); } } $store_id = $bill_info['store_id']; $redis_key = 'retail_*_' . $uid . '_' . $bill_info['id']; $ApiRedis = new \Addons\Api\RedisController(); $ApiRedis::$redis->delete($ApiRedis::$redis->keys($redis_key)); if (!empty($bill_info['coupon_id'])) { $coupon_redis_key = 'retail_coupon_store_id_' . $store_id . '_uid_' . $uid . '_coupon_type_' . $bill_info['coupon_type'] . '_coupon_id_' . $bill_info['coupon_id']; $ApiRedis::$redis->delete($coupon_redis_key); } $BillModel->updateOrder(['id' => $bill_info['id']], [ 'pay_state' => 3 ]); $res['status'] = 1; $res['msg'] = '取消成功'; $this->ajaxReturn($res); } /** * 获取物流信息 */ public function getOrderExpress() { $order_no = I('post.order_no'); $type = I('post.type');//判断是否是中奖订单 值为9999 if (empty($order_no)) { $res['status'] = 0; $res['msg'] = '缺少订单编号'; $this->ajaxReturn($res); } if ($type == 9999) { //查询中奖记录表 $win_record = D('TurntableUse')->getOrderFind(['order_num' => $order_no]); if (!$win_record) { $res['status'] = 0; $res['msg'] = '未查询到该订单或订单已取消发货'; $this->ajaxReturn($res); } $res = A('Api/Express')->getExpressInfo($win_record['id'], 2); if ($res['status'] != 1) { $res['status'] = 1; $res['data']['data'] = array(); } $res['data']['receiving_name'] = $win_record['username']; $res['data']['receiving_phone'] = $win_record['phone']; $res['data']['receiving_address'] = $win_record['address']; $this->ajaxReturn($res); } $BillModel = D('RetailBillOrder'); $OnlineModel = D('RetailBillOnline'); $map = array( 'b.' . $BillModel::ORDER_NO => strval($order_no), 'b.' . $BillModel::TYPE => 1, 'b.' . $BillModel::UID => self::$uid, 'b.' . $BillModel::ORDER_TYPE => array('in', '1,3'), 'b.' . $BillModel::REFUND_STATUS => array('in', '0,2,5'), 'o.' . $OnlineModel::PICKUP_TYPE => array('in', '2,3'), 'o.' . $OnlineModel::DELIVERY_TYPE => 4, 'o.' . $OnlineModel::STATUS => array('neq', 1), ); $bill_order = $BillModel->getOrderLinkFind($map); if (empty($bill_order)) { $res['status'] = 0; $res['msg'] = '未查询到该订单或订单已取消发货'; $this->ajaxReturn($res); } $res = A('Api/Express')->getExpressInfo($bill_order[$BillModel::ID]); if ($res['status'] != 1) { $res['status'] = 1; $res['data']['data'] = array(); } $res['data']['receiving_name'] = $bill_order[$OnlineModel::USER_NAME]; $res['data']['receiving_phone'] = $bill_order[$OnlineModel::USER_PHONE]; $res['data']['receiving_address'] = $bill_order[$OnlineModel::USER_ADDRESS]; $this->ajaxReturn($res); } }