getDefaultform($this->mall_id, $this->user_id); $post = Yii::$app->request->post(); $form->attributes = $post; $form['action'] = AppEnum::ACTION_PREVIEW; !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS; // 初始化订单数据 $orderInitDataLogic = new OrderInitDataLogic(); $form = $orderInitDataLogic->execute($form, $form->type); if ($form === false) return $this->error($orderInitDataLogic->getError()); $is_bind_popups = UserPartitionRelationship::getIsNeedPopups($this->mall_id, $this->user_id); if($is_bind_popups == 1) return $this->error('请进入商品详情页,绑定邀请码!'); // 购买限制验证 $orderLimitLogic = new OrderLimitLogic(); $form = $orderLimitLogic->run($form); if ($form === false) return $this->error($orderLimitLogic->getError()); // 获取收货地址 $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id); $form->address_id = $address_info['id'] ?? 0; // 营销减免活动 $orderMarketingLogic = new OrderMarketingLogic(); $form = $orderMarketingLogic->run($form); if ($form === false) return $this->error($orderMarketingLogic->getError()); $group_order_goods = $form['group_order_goods']; $group_order_goods_list = []; foreach ($group_order_goods as $val) { $group_order_goods_list[] = $val; } $marketing = $form['marketing']; $freight_type = $form['freight_type']; $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform); if ($form['total_pay_money'] <= 0) { $tmp = []; foreach ($pay_type_list as $item) { if ($item['trade_type'] == 'default') { $tmp[] = $item; break; } } $pay_type_list = $tmp; } $shipping_type_list = $form->type == PreviewTypeEnum::RESERVE_NOW ? ShippingTypeEnum::getReserveMap() : ShippingTypeEnum::getMap(); $shipping_type_arr = []; if( $form->type == PreviewTypeEnum::RESERVE_NOW){ foreach ($form['group_order_goods']['0_'.$post['data']['store_id']]['goods'] as $good){ switch ($good['reserve']['service_type']){ case ShippingTypeEnum::RESERVE_TO: $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_TO,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_TO]]; break; case ShippingTypeEnum::RESERVE_FROM: $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_FROM,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_FROM]]; break; case 3: $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_TO,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_TO]]; $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_FROM,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_FROM]]; break; } } }else{ if (is_string($freight_type)) { $t_freight_type = explode(",", $freight_type); } else { $t_freight_type = $freight_type; } //查询名字自定义 $goodsStoreSetting = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'goodsStore'); $express_title_arr = $goodsStoreSetting['express_title_arr'] ?? ''; $express_title_arr = $express_title_arr ? json_decode($express_title_arr,true) :[]; foreach ($shipping_type_list as $k => $v) { $v = $express_title_arr[$k] ?? $v; if (in_array($k, $t_freight_type)) { $shipping_type_arr[] = ['id' => $k, 'name' => $v]; } } } $info = compact('group_order_goods', 'marketing', 'address_info', 'pay_type_list', 'shipping_type_list'); $info['total_pay_money'] = '¥' . $form['total_pay_money']; $info['total_pay_money_not_coupon'] = $form['total_pay_money_not_coupon'] ?? 0; $info['is_address'] = $form['is_address'] ?? 0; $info['shipping_type_list'] = $shipping_type_arr; $info['store_address'] = $form['store_address']; $info['out_of_range'] = $form['out_of_range']; $info['initial_delivery_amount'] = $form['initial_delivery_amount']; $info['group_order_goods'] = $group_order_goods_list; $info['is_virtual'] = $form['is_virtual'] ?? 0; $info['goods_stock'] = array_column($form->sku, 'stock', 'id'); // 判断是否有技师 if (!empty($form['data']['tech_id'])) { $info['tech'] = (new OrderService())->findByTech($form['data']['tech_id'], $form['data']['latitude'], $form['data']['longitude'], $this->mall_id); } else { $store = Store::getOne([['id' => $post['data']['store_id']]], true, [], false, "id, store_name, logo_img, shop_owner, shop_mobile, longitude, latitude, address, province_id, city_id, district_id"); $store['region'] = implode("", Region::find()->where(['id' => [$store['province_id'], $store['city_id'], $store['district_id']]]) ->select('name')->column()); $store['distance'] = LocationHelper::formatDistance((new LocationHelper())->getDistanceByGeo($form['data']['latitude'], $form['data']['longitude'], $store['latitude'], $store['longitude'])); $info['tech'] = [ 'age' => '', 'avatar' => '', 'gender' => '', 'store_id' => $post['data']['store_id'], 'store' => $store, ]; } return $this->success('操作成功', $info); } /** * 创建订单 * @Author bing * @DateTime 2021-09-22 09:31:22 * @return void * @copyright: Copyright (c) 2020 广东七件事集团 */ public function actionCreate() { $orderFormLogic = new OrderFormLogic(); $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id); $form->attributes = Yii::$app->request->post(); $form['action'] = AppEnum::ACTION_CREATE; // 初始化订单数据 $orderInitDataLogic = new OrderInitDataLogic(); $form = $orderInitDataLogic->execute($form, $form->type); if ($form === false) return $this->error($orderInitDataLogic->getError()); $is_bind_popups = UserPartitionRelationship::getIsNeedPopups($this->mall_id, $this->user_id); if($is_bind_popups == 1) return $this->error('请进入商品详情页,绑定邀请码!'); // 购买限制验证 $orderLimitLogic = new OrderLimitLogic(); $form = $orderLimitLogic->run($form); if ($form === false) return $this->error($orderLimitLogic->getError()); // 营销减免活动 $orderMarketingLogic = new OrderMarketingLogic(); $form = $orderMarketingLogic->run($form, true); if ($form === false) return $this->error($orderMarketingLogic->getError()); $shipping_type = Yii::$app->request->post('data')['shipping_type']; if(isset($shipping_type)&&$shipping_type==3 && $form['total_pay_money']<$form['initial_delivery_amount']){ return $this->error('起送金额是'.$form['initial_delivery_amount']); } $res = StoreOrder::createOrder($form); if ($res === false) return $this->error(Order::getStaticError()); return $this->success('操作成功', $res); } //获取支付配置 public function actionGetPayConfig() { if (Yii::$app->request->isGet) { $get = Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($get, [ [['order_id', 'store_id'], 'required'] ]); if (!$res) return $this->error(Yii::$app->services->validate->getErrorMessage()); $order_info = StoreOrder::getOneData(['mall_id' => $this->mall_id, 'store_id' => $get['store_id'], 'id' => $get['order_id'], 'order_status' => StatusEnum::DISABLED]); if (empty($order_info)) return $this->error('不存在该订单'); $arr['is_jump'] = StatusEnum::DISABLED; $arr['pay_success_page'] = Yii::$app->services->setting->addons->get($order_info['mall_id'], StoreEnum::ADDONS_NAME, 'payment.pay_after_link');// 支付成功后跳转的地址 if (!empty($arr['pay_success_page'])) { $arr['is_jump'] = StatusEnum::ENABLED; } return $this->success('获取成功', $arr); } } public function actionList() { $params = \Yii::$app->request->get(); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['user_id' => $this->user_id]; $where[] = ['status' => StatusEnum::ENABLED]; if (!empty($params['order_status']) && $params['order_status'] == 999) { // 全部订单获取售后中订单 $where[] = ['is_feedback' => [OrderStatusEnum::NOT_FEEDBACK, OrderStatusEnum::FEEDBACKING]]; } else { $where[] = ['is_feedback' => OrderStatusEnum::NOT_FEEDBACK]; } if (isset($params['order_status']) && $params['order_status'] != 999) $where[] = ['order_status' => $params['order_status']]; $select = 'id,pay_money,order_status,shipping_type,is_recycle,marketing_type,extra_info,order_source'; $params['order'] = 'id desc'; $params['select'] = $select; $params['where'] = $where; $params['with'] = ['detail' => function ($query) { $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,extra_info,adjust_money'); }]; $order_list = Order::listPage($params); if (!empty($order_list['list'])) { foreach ($order_list['list'] as $key => $val) { array_map(function ($arg) use (&$val) { if (!isset($val['num'])) $val['num'] = 0; $val['num'] += $arg['num']; }, $val['detail']); if ($val['detail']) { foreach ($val['detail'] as $k => $v) { $order_list['list'][$key]['detail'][$k]['price'] = $order_list['list'][$key]['detail'][$k]['price'] + $order_list['list'][$key]['detail'][$k]['adjust_money']; $order_list['list'][$key]['detail'][$k]['price'] = round($order_list['list'][$key]['detail'][$k]['price'], 2); } } } $order_list['shipping_type_text'] = ShippingTypeEnum::getMap(); $order_list['order_status_text'] = OrderStatusEnum::getMap(); $order_list['is_feedback_text'] = OrderStatusEnum::getFeedbackMap(); } $order_list['mall_name'] = $this->mall['name']; $order_list['mall_logo'] = Yii::$app->services->setting->mall->get($this->mall_id, 'basic.logo'); $order_list['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform); $order_list['marketing_type_map'] = MarketingTypeEnum::getMap(); return $this->success('操作成功', $order_list); } /** * 订单详情 * @return mixed|void */ public function actionDetail() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['order_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $clerk_code = (string)$params['order_id']; $clerk_code_pre = $clerk_code[0] . $clerk_code[1]; if($clerk_code_pre==ClerkEnum::PLATFORM_ORDER_BY_O2O_STORE_CLERK_CODE_PRE) { //平台订单通过门店核销员核销 if (!MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_PLATFORM_STORE_CLERK)) { return $this->error('该订单不存在', []); } $clerk_detail = PlatformStoreClerkOrderDetail::getOrderByCode($this->mall_id, $params['order_id']); if (!$clerk_detail) return $this->error('该订单不存在', []); if ($clerk_detail['clerk_status'] > 0) return $this->error('该订单已核销', []); return $this->getPlatformStoreOrderDetail($clerk_detail); } $select = 'id,mall_id,store_id,order_no,receiver_name,mobile,pay_money,shipping_money,original_goods_price,coupon_money,goods_price,order_status,pay_status, shipping_status,review_status,is_feedback,address,created_at,pay_time,region_name,remark,consign_time,finish_time,sign_time,shipping_type,payment_type,score,score_money,marketing_id,marketing_type,extra_info,order_source'; $where = []; $where[] = ['mall_id' => $this->mall_id]; $where[] = ['or', ['id' => $params['order_id']], ['clerk_code' => $params['order_id']], ]; $order = Order::getOne($where, true, ['detail' => function ($query) { $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,order_status,adjust_money,extra_info'); }], false, $select); if (empty($order)) return $this->error('该订单不存在', []); if (empty($order['store_id'])) return $this->error('该订单不门店核销订单', []); $rse = StoreClerk::getOne([['mall_id' => $this->mall_id], ['user_id' => $this->user_id, 'store_id' => $order['store_id']], ['status' => StatusEnum::ENABLED]]); if (empty($rse)) return $this->error('你不是核销员'); $marketing = OrderMarketing::getMarketingInfo($order); $order['order_status_text'] = OrderStatusEnum::getMap(); $order['is_feedback_text'] = OrderStatusEnum::getFeedbackMap(); $order['shipping_type_text'] = ShippingTypeEnum::getMap(); $order['payment_type_text'] = PayTypeEnum::getMap(); $order['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform); $adjust_money = array_sum(array_column($order['detail'], 'adjust_money'));//预留字段 if ($adjust_money) { $order['change_price'] = $adjust_money; } $order['marketing'] = $marketing; $order['marketing_type_map'] = MarketingTypeEnum::getMap(); $order_setting = Yii::$app->services->setting->mall->get($this->mall_id, 'order'); $order['payment_expire_time'] = $order_setting['payment_expire_time'] ?? 30; $order['auto_receiving_time'] = $order_setting['auto_receiving_time'] ?? 14; if(!empty($order['detail'])){ foreach ($order['detail'] as $k => $v){ // 获取订单售后信息 $order['detail'][$k]['order_refund'] = OrderRefund::find() ->where(['order_detail_id' => $v['id'] ,'store_id' => $v['store_id'], 'status' => StatusEnum::ENABLED]) ->select('id, type')->asArray()->one(); } } // 获取订单详情的状态文字描述 $order['status_text'] = OrderStatusEnum::getApiStatus($order['order_status'], $order['shipping_type']); $order['order_status'] == OrderStatusEnum::NOT_PAY && $order['status_text']['desc'] = $order['payment_expire_time'] . $order['status_text']['desc']; $order['order_status'] == OrderStatusEnum::SHIPMENTS && $order['status_text']['desc'] = $order['auto_receiving_time'] . $order['status_text']['desc']; $order['show_clerk_button'] = $order['order_status'] == OrderStatusEnum::TAKE ? 1:0; // 公共调用 $order = GlobalInvoke::exec(GlobalInvoke::ORDER_DETAIL, $this->mall_id, [ 'order' => $order, 'mall_id' => $this->mall_id, ]) ?: $order; return $this->success('操作成功', $order); } /** * 更新订单操作 * @return mixed|void */ public function actionUpdateOrder() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['id', 'order_status'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $params['operator_id'] = $this->user_id; $params['operator_name'] = $this->user->nickname ?? ''; $res = Order::close($params); if (!$res) return $this->error(Order::getStaticError()); return $this->success('操作成功', []); } /** * 提交订单评价 * @return mixed|void * @throws \yii\db\Exception */ public function actionComments() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['order_id', 'comment_data'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $res = StoreOrder::postComments($params); if ($res === false) return $this->error(Order::getStaticError()); return $this->success('操作成功'); } /** * 加载提交售后订单数据 * @Author: hua * @DateTime: 2021/10/7 10:29 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionToRefundSubmit() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['order_detail_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $select = 'id,order_id,goods_name,sign_id,goods_attr_name,price,num,pic_url,goods_price,order_status,marketing_type,extra_info,adjust_money'; $order_detail = OrderDetail::getOne([['id' => $params['order_detail_id']], 'user_id' => $this->user_id, 'mall_id' => $this->mall_id], 1, [], false, $select); if (empty($order_detail)) return $this->error('订单不存在'); if ($order_detail['marketing_type'] == AddonsEnum::ADDONS_NAME_SCORE_MALL) { $order = Order::find()->select("extra_info,score")->where(['id' => $order_detail['order_id']])->asArray()->one(); $order_detail['extra_info'] = $order['extra_info']; $order_detail['pay_score'] = $order['score']; } //价格等于商品价格加上修改价格 $order_detail['goods_price'] = round($order_detail['goods_price'] + $order_detail['adjust_money'], 2); $data['goods_info'] = $order_detail; $data['feedback_reason'] = RefundReasonEnum::getMap(); $feedback_type = RefundTypeEnum::getArr(); $data['feedback_type'] = []; if (in_array($order_detail['order_status'], [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS])) { //待发货, $data['feedback_type'][] = $feedback_type[RefundTypeEnum::MONEY]; } if (in_array($order_detail['order_status'], [OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING])) { //已发货,已收货 $data['feedback_type'][] = $feedback_type[RefundTypeEnum::MONEY_AND_PRODUCT]; $data['feedback_type'][] = $feedback_type[RefundTypeEnum::EXCHANGE_GOODS]; } $data['order_status'] = $order_detail['order_status']; return $this->success('操作成功', $data); } /** * 申请售后 * @Author: hua * @DateTime: 2021/10/7 10:29 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionDoRefundSubmit() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['order_detail_id'], 'required'], [['shipping_status', 'pic_list', 'reason', 'refund_price', 'remark', 'type'], 'safe'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['user_id'] = $this->user_id; $params['mall_id'] = $this->mall_id; $where = [ ['=', 'order_detail_id', $params['order_detail_id']], ['=', 'user_id', $this->user_id], ['=', 'mall_id', $this->mall_id], ['>', 'step_status', 0], ['<>', 'refund_status', RefundStatusEnum::REVOKE] ]; $order_refund_model = OrderRefund::getOne($where, true); if ($order_refund_model) return $this->error('该订单商品已经申请过售后'); $res = OrderRefund::feedback($params); if ($res === false) return $this->error(Order::getStaticError()); return $this->success('操作成功', ['id' => $res->id]); } /** * 退款列表 * @return mixed|void */ public function actionRefundList() { $params = \Yii::$app->request->get(); $where[] = ['user_id' => $this->user_id]; $where[] = ['mall_id' => $this->mall_id]; $params['order'] = 'id desc'; $params['where'] = $where; $params['with'] = ['step', 'orderDetail']; $list = OrderRefund::listPage($params); $list['mall_name'] = $this->mall['name']; $list['refund_status_text'] = RefundStatusEnum::getMap(); return $this->success('操作成功 ', $list); } /** * 撤销申请售后 * @Author: hua * @DateTime: 2021/10/7 10:52 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionCancelRefund() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $res = OrderRefund::cancelRefund($params); if ($res === false) return $this->error(OrderRefund::getStaticError()); return $this->success('操作成功'); } /** * 订单-收货 * @Author: hua * @DateTime: 2021/10/7 14:50 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionTakeDelivery() { // 商品操作 $form = Yii::$app->request->get(); $rules = [[['id'], 'required'], [['id'], 'integer']]; $res = Yii::$app->services->validate->validate($form, $rules); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $form['mall_id'] = $this->mall_id; $form['user_id'] = $this->user_id; $form['operator_id'] = $this->user_id; $form['operator_name'] = $this->user->nickname ?? $this->user->mobile; $res = Order::takeDelivery($form); if ($res === false) return $this->error(Goods::getStaticError()); return $this->success(); } /** * 获取快递公司列表 * @Author: hua * @DateTime: 2021/10/8 14:38 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionExpressList() { $params['where'] = [['status' => StatusEnum::ENABLED]]; $params['select'] = 'id,name,code'; $list = Express::lists($params); return $this->success('', $list); } /** * 申请售后-商家同意后-买家发货 * @Author: hua * @DateTime: 2021/10/8 14:42 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionRefundSend() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['id'], 'required'], [['express', 'express_no'], 'safe'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $res = OrderRefundStep::refundSend($params); if ($res === false) return $this->error(Order::getStaticError()); return $this->success('操作成功'); } /** * 申请售后-换货-买家收货 * @Author: hua * @DateTime: 2021/10/9 15:52 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionRefundTakeDelivery() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $res = OrderRefundStep::refundTakeDelivery($params); if ($res === false) return $this->error(OrderRefundStep::getStaticError()); return $this->success('操作成功'); } /** * 售后详情 * @Author: hua * @DateTime: 2021/10/8 14:45 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionRefundDetail() { $params = \Yii::$app->request->get(); $where = [['id' => $params['id']], 'user_id' => $this->user_id]; $detail = OrderRefund::getOne($where, true, ['step', 'orderDetail', 'order' => function ($query) { return $query->select('id, order_source'); }]); $detail['refund_status_map'] = RefundStatusEnum::getMap(); $detail['step_status_map'] = RefundStatusEnum::getStepStatusText(); //adjust_money if ($detail['orderDetail']['goods_price']) { $detail['orderDetail']['goods_price'] = $detail['orderDetail']['goods_price'] + $detail['orderDetail']['adjust_money']; $detail['orderDetail']['goods_price'] = round($detail['orderDetail']['goods_price'], 2); } return $this->success('操作成功', $detail); } /** * @desc:去支付 * @Author: hua * @Date: 2021/10/19 * @Time: 14:12 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionToPay() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $res = Order::toPay($params); if ($res === false) return $this->error(Order::getStaticError()); return $this->success('操作成功', $res); } /** * @desc:提醒发货 * @Author: hua * @Date: 2021/10/20 * @Time: 9:04 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed */ public function actionRemindSend() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['order_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['user_id'] = $this->user_id; $params['mall_id'] = $this->mall_id; $params['user'] = $this->user; $res = Order::remindSend($params); if ($res === false) return $this->error(Order::getStaticError()); return $this->success('提醒成功', []); } /** * 创建充值订单 */ public function actionCreateRecharge() { $post = Yii::$app->request->post(); $validateService = Yii::$app->services->validate; $rules = [ [['pay_price'], 'required'], ]; $valid = $validateService->validate($post, $rules); if (!$valid) { return $this->error($validateService->getFirstErrorSummary()); } $post['mall_id'] = $this->mall_id; $post['user_id'] = $this->user_id; $recharge = new RechargeOrders(); $res = $recharge->createOrder($post); return $this->success('操作成功', $res); } /** * 获取订单支付状态 */ public function actionGetIsPay() { $get = \Yii::$app->request->get(); if (!isset($get['trade_no'])) { return [ 'code' => 0, 'msg' => '无trade_no', ]; } $order_info = PaymentTrade::getOne([['out_trade_no' => $get['trade_no']]], true, '', '', 'is_pay'); return $this->success('操作成功', $order_info); } //待还款 public function actionCreditOrderList() { $params = \Yii::$app->request->get(); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['user_id' => $this->user_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['is_repayment' => StoreEnum::NOREPAYMENT]; $where[] = ['>','pay_time' ,0]; // if (!empty($params['keyword'])) { // $goods_list = Goods::lists(['where' => [ // ['mall_id' => $this->mall_id], // ['like', 'goods_name', trim($params['keyword']) . '%', false] // ], 'select' => 'id']); // // $goods_ids = array_column($goods_list, 'id'); // $order_detail_list = OrderDetail::lists(['where' => [ // ['mall_id' => $this->mall_id], // ['in', 'goods_id', $goods_ids] // ], 'select' => 'order_id']); // $order_ids = array_column($order_detail_list, 'order_id'); // $where[] = [ // 'or', // ['id' => $order_ids], // ]; // } $params['order'] = 'id desc'; if (!empty($params['keyword'])) { $goods_list = StoreGoods::lists(['where' => [ ['mall_id' => $this->mall_id], ['like', 'goods_name', trim($params['keyword'])] ], 'select' => 'id']); $goods_ids = array_column($goods_list, 'id'); $order_detail_list = StoreOrderDetail::lists(['where' => [ ['mall_id' => $this->mall_id], ['in', 'goods_id', $goods_ids] ], 'select' => 'order_id']); $order_ids = array_column($order_detail_list, 'order_id'); $where[] = [ 'or', ['order_id' => $order_ids], ]; } $select = 'id,store_id,order_id,down_payments,credit_money,type,extra'; $params['order'] = 'id desc'; $params['select'] = $select; $params['where'] = $where; $order_list = StoreOrderCredit::listPage($params); if (!empty($order_list['list'])) { $store_ids = array_column($order_list['list'], 'store_id'); $order_ids = array_column($order_list['list'], 'order_id'); $order_id_arr = []; foreach ($order_list['list'] as $val){ if($val['type']==1){ $order_id_arr[] =$val['order_id']; } } $order_nos = []; $store_order_list = StoreOrder::lists(['where' => [['id' => $order_ids]], 'index' => 'id', 'select' => 'id,pay_money,order_status,shipping_type,order_no']); foreach ($store_order_list as $v){ if(in_array($v['id'],$order_id_arr)){ $order_nos[]=$v['order_no']; } } $main_order_list = Order::lists(['where' => [['order_no' => $order_nos]], 'index' => 'order_no', 'select' => 'id,order_no']); $store_order_detail_list = StoreOrderDetail::lists(['where' => [['order_id' => $order_ids]], 'select' => 'id,order_id,goods_id,goods_name,pic_url,num,price,goods_price']); $store_order_detail_arr = []; foreach ($store_order_detail_list as $val) { $store_order_detail_arr[$val['order_id']][] = $val; } $store_list = Store::lists(['where' => [['id' => $store_ids]], 'index' => 'id', 'select' => 'id,store_name,logo_img']); $main_order_ids = array_column($main_order_list,'id'); $refund_list = OrderRefund::lists([ 'where'=>[ ['order_id'=>$main_order_ids], ['type'=>[1,2]], ['refund_status'=>1] ], ]); $goods_ids = []; $order_detail_ids = []; if(!empty($refund_list)){ foreach ($refund_list as $item){ $order_detail_ids[]=$item['order_detail_id']; } if(!empty($order_detail_ids)){ $store_order_detail_list = StoreOrderDetail::lists([ 'where'=>[ ['main_order_detail_id'=>$order_detail_ids], ], ]); foreach ($store_order_detail_list as $v){ $goods_ids[$v['order_id']][] = $v['goods_id']; } } } foreach ($order_list['list'] as &$item) { $item['mall_name'] = $item['mall_logo'] = ''; $item['pay_money'] = $item['order_status'] = $item['shipping_type'] = ''; $item['detail'] = []; if (!empty($store_list[$item['store_id']])) { $item['mall_name'] = $store_list[$item['store_id']]['store_name']; $item['mall_logo'] = $store_list[$item['store_id']]['logo_img']; } if (!empty($store_order_list[$item['order_id']])) { $item['pay_money'] = $item['down_payments']; $item['order_status'] = $store_order_list[$item['order_id']]['order_status']; $item['shipping_type'] = $store_order_list[$item['order_id']]['shipping_type']; } if($item['type']==1){ if (!empty($store_order_detail_arr[$item['order_id']])) { $extra = json_decode($item['extra'],true); $detail = $store_order_detail_arr[$item['order_id']]; foreach ($detail as $key=>$val){ if(!empty($goods_ids[$val['order_id']])&&in_array($val['goods_id'],$goods_ids[$item['order_id']])){ unset($detail[$key]); $temp_credit_money = $extra[$val['goods_id']]['credit_money']??0; $item['credit_money'] = bcsub($item['credit_money'],$temp_credit_money,2); } } $item['detail'] = $detail; } if(isset($store_order_list[$item['order_id']])){ $order_no = $store_order_list[$item['order_id']]['order_no']; if(isset($main_order_list[$order_no])){ $item['id'] = $main_order_list[$order_no]['id']; } } } unset($item['extra']); } } $order_list['shipping_type_text'] = ShippingTypeEnum::getMap(); $order_list['order_status_text'] = OrderStatusEnum::getMap(); return $this->success('操作成功', $order_list); } public function actionGetCredit(){ $params = \Yii::$app->request->post(); $trade_id = $params['trade_id']??0; $credit_money = 0; $list = PaymentTradeOrder::lists(['where'=>[['trade_id'=>$trade_id]]]); if(empty($list)) return ['pay_money'=>0,'credit_money'=>$credit_money]; $pay_money = array_sum(array_column($list,'pay_fee')); $order_no = $list[0]['order_no']; $order_nos = array_column($list,'order_no'); if(!empty($order_no[0])&&$order_no[0]=='C'){ $type = 2; $list = StoreCashierOrder::lists(['where'=>[['order_no'=>$order_nos]]]); }else{ $type = 1; $list = StoreOrder::lists(['where'=>[['order_no'=>$order_nos]]]); } if(empty($list)) return ['pay_money'=>0,'credit_money'=>$credit_money]; $order_ids = array_column($list,'id'); $res = StoreOrderCredit::lists(['where'=>[['order_id'=>$order_ids],['type'=>$type]],'select'=>'sum(down_payments) as down_payments,sum(credit_money) as credit_money']); if(!empty($res[0]['down_payments'])) $pay_money = $res[0]['down_payments']; if(!empty($res[0]['credit_money'])) $credit_money = $res[0]['credit_money']; return ['pay_money'=>$pay_money,'credit_money'=>$credit_money]; } public function actionRepayment(){ $params = \Yii::$app->request->post(); try { if(empty($params['order_id'])) return $this->error('订单id不能为空'); $res = StoreOrderCredit::repaymentByPay($params['order_id']??0,$params['type']??1); if ($res === false) return $this->error(StoreOrderCredit::getStaticError()); return $this->success('操作成功', $res); }catch (\Exception $e){ return $this->error($e->getMessage()); } } private function getPlatformStoreOrderDetail($clerk_detail) { $order_detail_id = $clerk_detail['order_detail_id']; $select = 'id,mall_id,store_id,order_no,receiver_name,mobile,pay_money,shipping_money,original_goods_price,coupon_money,goods_price,order_status,pay_status, shipping_status,review_status,is_feedback,address,created_at,pay_time,region_name,remark,consign_time,finish_time,sign_time,shipping_type,payment_type,score,score_money,marketing_id,marketing_type,extra_info,order_source'; $where = []; $where[] = ['mall_id' => $this->mall_id]; $where[] = ['id' => $clerk_detail['order_id']]; $order = Order::getOne($where, true, ['detail' => function ($query) use($order_detail_id) { $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,order_status,adjust_money,extra_info,goods_price')->where(['id' => $order_detail_id]); }], false, $select); if (empty($order) || $order['store_id'] > 0) return $this->error('该订单不存在', []); $rse = StoreClerk::getOne([['mall_id' => $this->mall_id], ['user_id' => $this->user_id], ['status' => StatusEnum::ENABLED]],true); if (empty($rse)) return $this->error('你不是核销员'); //goods_id $goods_setting = PlatformStoreClerkGoodsSetting::getGoodsInfo($this->mall_id,$clerk_detail['goods_id']); if(!$goods_setting ) return $this->error('商品尚未关联该门店'); //$store_ids = explode(',',$goods_setting['store_ids']); //$rse = StoreClerk::getOne([['mall_id' => $this->mall_id], ['user_id' => $this->user_id], ['status' => StatusEnum::ENABLED],['store_id' => $store_ids]],true); //$store_id = $rse['store_id']; //if(!in_array($store_id,$store_ids)) return $this->error('商品尚未关联该门店'); $clerk_list = StoreClerk::find()->where(['mall_id' => $this->mall_id,'user_id' => $this->user_id,'status' => StatusEnum::ENABLED])->asArray()->all(); if(!$clerk_list) return $this->error('你不是核销员'); $clerk_store = array_column($clerk_list,null,'store_id'); $clerk_store_ids = array_keys($clerk_store); $cate_id = $goods_setting['cate_id']; $is_bind_store = $goods_setting['is_bind_store'] ?? 0; $where = ['id' => $clerk_store_ids,'status' => StatusEnum::ENABLED]; if($is_bind_store > 0 && $cate_id){ $where['c_id'] = $cate_id; } $store_list = Store::find()->where($where)->select('id')->asArray()->all(); if(!$store_list) return $this->error('商品尚未关联该门店'); $store_id = $store_list[0]['id']; $clerk_user_id = $clerk_store[$store_id]['user_id']; $marketing = OrderMarketing::getMarketingInfo($order); $order['order_status_text'] = OrderStatusEnum::getMap(); $order['is_feedback_text'] = OrderStatusEnum::getFeedbackMap(); $order['shipping_type_text'] = ShippingTypeEnum::getMap(); $order['payment_type_text'] = PayTypeEnum::getMap(); $order['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform); $adjust_money = array_sum(array_column($order['detail'], 'adjust_money'));//预留字段 if ($adjust_money) { $order['change_price'] = $adjust_money; } $order['marketing'] = $marketing; $order['marketing_type_map'] = MarketingTypeEnum::getMap(); $order_setting = Yii::$app->services->setting->mall->get($this->mall_id, 'order'); $order['payment_expire_time'] = $order_setting['payment_expire_time'] ?? 30; $order['auto_receiving_time'] = $order_setting['auto_receiving_time'] ?? 14; // 获取订单详情的状态文字描述 $order['status_text'] = OrderStatusEnum::getApiStatus($order['status'], $order['shipping_type']); $order['status'] == OrderStatusEnum::NOT_PAY && $order['status_text']['desc'] = $order['payment_expire_time'] . $order['status_text']['desc']; $order['status'] == OrderStatusEnum::SHIPMENTS && $order['status_text']['desc'] = $order['auto_receiving_time'] . $order['status_text']['desc']; // 公共调用 $order = GlobalInvoke::exec(GlobalInvoke::ORDER_DETAIL, $this->mall_id, [ 'order' => $order, 'mall_id' => $this->mall_id, ]) ?: $order; $order['show_clerk_button'] = 1; $order['clerk_code'] = $clerk_detail['clerk_code']; $order['pay_money'] = $order['detail'][0]['goods_price']; return $this->success('操作成功', $order); } // 获取店铺的的配送方式 public function getStoreShippingType($data){ $store = Store::getOne([['id' => $data['store_id']], ['mall_id' => $this->mall_id]]); $freight_type = json_decode($store['freight_type'], true); $express_delivery = $freight_type['express_delivery'] ? ShippingTypeEnum::LOGISTICS : 0; // 快递发货 $merchant_distribution = $freight_type['merchant_distribution'] ? ShippingTypeEnum::MERCHANT_DISTRIBUTION : 0; // 同城配送 $self_mention = $freight_type['self_mention'] ? ShippingTypeEnum::PICKUP : 0; // 上门自提 return [$express_delivery,$merchant_distribution,$self_mention]; } }