| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988 |
- <?php
- namespace addons\Store\api\modules\v1\controllers;
- use addons\ReservationService\common\services\OrderService;
- use addons\PlatformStoreClerk\common\models\PlatformStoreClerkGoodsSetting;
- use addons\PlatformStoreClerk\common\models\PlatformStoreClerkOrderDetail;
- use addons\Store\common\enums\StoreEnum;
- use addons\Store\common\logic\order\OrderFormLogic;
- use addons\Store\common\logic\order\OrderInitDataLogic;
- use addons\Store\common\logic\order\OrderLimitLogic;
- use addons\Store\common\logic\order\OrderMarketingLogic;
- use addons\Store\common\models\Store;
- use addons\Store\common\models\StoreCashierOrder;
- use addons\Store\common\models\StoreClerk;
- use addons\Store\common\models\StoreGoods;
- use addons\Store\common\models\StoreOrder;
- use addons\Store\common\models\StoreOrderCredit;
- use addons\Store\common\models\StoreOrderDetail;
- use api\controllers\OnAuthController;
- use common\enums\AddonsEnum;
- use common\enums\AppEnum;
- use common\enums\ClerkEnum;
- use common\enums\MarketingTypeEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\PayTypeEnum;
- use common\enums\PreviewTypeEnum;
- use common\enums\RefundReasonEnum;
- use common\enums\RefundStatusEnum;
- use common\enums\RefundTypeEnum;
- use common\enums\ShippingTypeEnum;
- use common\enums\StatusEnum;
- use common\globals\GlobalInvoke;
- use common\helpers\LocationHelper;
- use common\models\common\Express;
- use common\models\common\PaymentTrade;
- use common\models\common\PaymentTradeOrder;
- use common\models\common\RechargeOrders;
- use common\models\common\Region;
- use common\models\goods\Goods;
- use common\models\mall\MallAddons;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use common\models\order\OrderMarketing;
- use common\models\order\OrderRefund;
- use common\models\order\OrderRefundStep;
- use common\models\user\UserAddress;
- use common\models\user\UserPartitionRelationship;
- use Yii;
- /**
- * Class OrderController
- * @package api\modules\order\controllers
- */
- class OrderController extends OnAuthController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = [];
- /**
- * 订单预览
- * @Author bing
- * @DateTime 2021-09-24 19:46:46
- * @return void
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- public function actionPreview()
- {
- $orderFormLogic = new OrderFormLogic();
- $form = $orderFormLogic->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];
- }
- }
|