| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <?php
- namespace addons\CloudStockTwo\api\modules\v1\controllers;
- use addons\CloudStockTwo\common\enums\CloudStockTwoEnum;
- use addons\CloudStockTwo\common\events\order\FillOrderConfirmEvent;
- use addons\CloudStockTwo\common\logic\order\PayNotify;
- use addons\CloudStockTwo\common\models\CloudStockTwoAgentOrder;
- use addons\CloudStockTwo\common\models\CloudStockTwoFillOrder;
- use addons\CloudStockTwo\common\models\CloudStockTwoGoods;
- use addons\CloudStockTwo\common\models\CloudStockTwoLevel;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\helpers\StringHelper;
- use common\models\goods\Goods;
- use common\models\user\User;
- class CsOrdersController extends BaseController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = [];
- /**
- * @name:
- * @msg: 代理商自提订单列表
- * @param {*}
- * @return {*}
- */
- public function actionList()
- {
- if (!\Yii::$app->request->isGet) {
- return $this->error('请求方式错误');
- }
- $page = \Yii::$app->request->get('page', 1);
- $limit = \Yii::$app->request->get('limit', $this->pageSize);
- $wheres[] = ['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED];
- $params = [
- 'select' => 'id,mall_id,user_id,goods_id,num,address,express_no,express_code,send_status,mobile,name,created_at',
- 'where' => $wheres,
- 'order' => 'created_at desc',
- 'page' => $page,
- 'limit' => $limit,
- ];
- $orders = CloudStockTwoAgentOrder::listPage($params);
- if (empty($orders['list'])) {
- if (is_array($orders['list'])) {
- return $this->success('success', $orders);
- } else {
- return $this->error('获取自提订单失败:' . CloudStockTwoAgentOrder::getStaticError());
- }
- }
- $good_ids = array_column($orders['list'], 'goods_id');
- $goods = Goods::find()
- ->select('id,goods_name,price,cover_pic')
- ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $good_ids])
- ->asArray()
- ->indexBy('id')
- ->all();
- foreach ($orders['list'] as &$order) {
- $good = $goods[$order['goods_id']] ?? [];
- unset($good['id']);
- $order = array_merge($order, $good);
- }
- $send_status_map = CloudStockTwoEnum::getAgentOrdetStatusMap();
- $orders['send_status_map'] = $send_status_map;
- return $this->success('success', $orders);
- }
- /**
- * @name:
- * @msg: 订单详情
- * @param {*}
- * @return {*}
- */
- public function actionDetail()
- {
- if (!\Yii::$app->request->isGet) {
- return $this->error('请求方式错误');
- }
- $order_id = \Yii::$app->request->get('order_id');
- if (empty($order_id)) return $this->error('参数错误');
- $order = CloudStockTwoAgentOrder::find()
- ->select('id,mall_id,user_id,num,address,express_code,express_no,goods_id,mobile,name,created_at,send_status')
- ->where(['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'id' => $order_id])
- ->asArray()
- ->one();
- if (empty($order)) return $this->error('订单不存在');
- $good = Goods::find()
- ->select('id,goods_name,price,cover_pic')
- ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $order['goods_id']])
- ->asArray()
- ->one();
- unset($good['id']);
- $order = array_merge($order, $good);
- $send_status_map = CloudStockTwoEnum::getAgentOrdetStatusMap();
- return $this->success('success', ['order' => $order, 'send_status_map' => $send_status_map]);
- }
- /**
- * @name:
- * @msg: 确认收货
- * @param {integer} order_id 订单id
- * @return {*}
- */
- public function actionConfirm()
- {
- if (!\Yii::$app->request->isPost) {
- return $this->error('请求方式错误');
- }
- $order_id = \Yii::$app->request->post('order_id');
- if (empty($order_id)) return $this->error('参数错误');
- $agent_order = CloudStockTwoAgentOrder::findOne([
- 'id' => $order_id,
- 'mall_id' => $this->mall_id,
- 'user_id' => $this->user_id,
- 'status' => StatusEnum::ENABLED,
- 'send_status' => CloudStockTwoEnum::PICK_ORDER_STATUS1,
- ]);
- if (empty($agent_order)) return $this->error('订单不存在或者未发货');
- $params = [
- 'id' => $order_id,
- 'send_status' => CloudStockTwoEnum::PICK_ORDER_STATUS2,
- ];
- $res = CloudStockTwoAgentOrder::setData($this->mall_id, $params);
- if (false === $res) return $this->error(CloudStockTwoAgentOrder::getStaticError());
- // 自提订单确认收货事件
- $event = new FillOrderConfirmEvent($this->mall_id);
- $data = ['id' => $order_id];
- \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
- return $this->success('操作成功');
- }
- /**
- * @name:
- * @msg: 创建订单
- * @param {integer} goods_id:商品 id
- * @param {integer} number:补货数量
- * @param {float} pay_money:支付金额
- * @param {string} pay_type:支付方式
- * @param {string} transaction_password:交易密码
- * @return {*}
- */
- public function actionCreate()
- {
- if (!\Yii::$app->request->isPost) {
- return $this->error('请求方式错误');
- }
- $post = \Yii::$app->request->post();
- $rules = [
- [['goods_id', 'number', 'pay_money'], 'required'],
- [['goods_id', 'number'], 'integer'],
- ['pay_money', 'number'],
- ];
- $res = \Yii::$app->services->validate->validate($post, $rules);
- if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- // 当前会员是否可以补货当前商品
- $rr = CloudStockTwoGoods::canFillGood($this->mall_id, $post['goods_id'], $this->stock_agent->level, $this->user_id);
- if (false === $rr) {
- return $this->error('暂不能补货当前商品');
- }
- $agent_level = $this->stock_agent->level;
- $level_model = CloudStockTwoLevel::findOne(['mall_id'=>$this->mall_id,'level'=>$agent_level,'status'=>StatusEnum::ENABLED]);
- if(!empty($level_model['is_open_fill_min'])&&!empty($level_model['fill_min'])&&$post['number']<$level_model['fill_min']){
- return $this->error('每次补货的最低数量为'.$level_model['fill_min']);
- }
- $all_stocks = CloudStockTwoGoods::allPerantAgentGoodStocks($post['goods_id'], $this->user_id, $this->mall_id);
- if (false === $all_stocks) {
- return $this->error(CloudStockTwoGoods::getStaticError());
- } elseif ($post['number'] > $all_stocks) {
- return $this->error('补货数量超过了商品库存');
- }
- $stock_good = CloudStockTwoGoods::findOne(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'goods_id' => $post['goods_id']]);
- if (empty($stock_good)) return $this->error('商品数据异常');
- $agent_price = json_decode($stock_good['agent_price'],true);
- $agent_price = array_column($agent_price,null,'level');
- $unit_price = 0;
- if(!empty($agent_price[$this->stock_agent->level])){
- $unit_price = $agent_price[$this->stock_agent->level]['price'];
- }
- $pay_money = bcmul($unit_price, $post['number'], 2);
- if ($pay_money != $post['pay_money']) return $this->error('支付金额错误');
- $order_no = StringHelper::generateOrderNo('CSF');
- //生成支付流水
- $order_trade_info[] = [
- 'order_no' => $order_no,
- 'amount' => $pay_money,
- 'title' => '云库存补货订单',
- 'notify_class' => PayNotify::class,
- 'order_type' => AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO,
- ];
- $res_trade = \Yii::$app->services->pay->createTrade($this->mall_id, $this->user_id, $order_trade_info);
- if ($res_trade == false) return $this->error('生成支付流水失败');
- $params = [
- 'user_id' => $this->user_id,
- 'trade_id' => $res_trade['trade_id'],
- 'pay_money' => $pay_money,
- 'order_no' => $order_no,
- 'trade_no' => $res_trade['trade_no'],
- 'is_pay' => CloudStockTwoEnum::FILL_STATUS_NOT_PAY,
- 'goods_id' => $post['goods_id'],
- 'num' => $post['number'],
- ];
- $res_fill_order = CloudStockTwoFillOrder::setData($this->mall_id, $params);
- if (false === $res) return $this->error(CloudStockTwoFillOrder::getStaticError());
- return $this->success('订单创建成功', ['trade_no' => $res_trade['trade_no'], 'trade_id' => $res_trade['trade_id'], 'order_ids' => $res_fill_order->id]);
- }
- }
|