| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?php
- namespace addons\CloudStockTwo\common\logic\order;
- use addons\CloudStockTwo\common\enums\CloudStockTwoEnum;
- use addons\CloudStockTwo\common\logic\deduction\FillDeductionLogic;
- use addons\CloudStockTwo\common\logic\reward\FillRewardLogic;
- use addons\CloudStockTwo\common\models\CloudStockTwoAgent;
- use addons\CloudStockTwo\common\models\CloudStockTwoAgentGoods;
- use addons\CloudStockTwo\common\models\CloudStockTwoBuyingOrder;
- use addons\CloudStockTwo\common\models\CloudStockTwoGoods;
- use addons\CloudStockTwo\common\models\CloudStockTwoGoodsStockLog;
- use addons\CloudStockTwo\common\models\CloudStockTwoLevel;
- use addons\Distribution\common\enums\ComputingEnum;
- use addons\Distribution\common\enums\DistributionEnum;
- use addons\Distribution\common\logic\reward\DistributionReward;
- use addons\Distribution\common\models\Distribution;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\helpers\FormatHelper;
- use common\models\goods\Goods;
- use common\models\mall\MallAddons;
- use common\models\order\OrderDetail;
- use common\models\user\User;
- use common\models\user\UserPartitionRelationship;
- use addons\CloudStockTwo\common\logic\reward\AgentReward;
- class FillOrderLogic
- {
- public function handle($fill_order)
- {
- $t = \Yii::$app->db->beginTransaction();
- try {
- if (empty($fill_order)) throw new \Exception('补货单不存在');
- if (empty($fill_order['is_pay'])) throw new \Exception('补货单未支付');
- $order_id = $fill_order['id'];
- $mall_id = $fill_order['mall_id'];
- $goods_id = $fill_order['goods_id'];
- $num = $fill_order['num'];
- $user_id = $fill_order['user_id'];
- //库存变化记录
- $params = [
- 'mall_id' => $mall_id,
- 'goods_id' => $goods_id,
- 'user_id' => 0,
- 'changes_dir' => CloudStockTwoEnum::STOCK_CHANGE_SUB,
- 'order_id' => $order_id,
- 'num' => $num,
- 'order_type' => CloudStockTwoEnum::STOCK_ORDER_TYPE_REPLENISH,
- 'changes_type' => CloudStockTwoEnum::STOCK_CHANGE_TYPE202,
- ];
- $stock_log = CloudStockTwoGoodsStockLog::setData($mall_id,$params);
- if (!$stock_log) throw new \Exception(CloudStockTwoGoodsStockLog::getStaticError());
- $agent = CloudStockTwoAgent::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]);
- $user = User::findOne(['id' => $user_id]);
- if (empty($user) || empty($agent)) throw new \Exception('代理商不存在');
- //组装奖励数据
- $basic_conf = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, 'agent');
- $parent_agent_list = CloudStockTwoAgent::getUserParentAgentList($user_id,true);
- $reward_list = [];
- $wait_deduct_equal_money = 0;
- if (!empty($basic_conf['is_enable'])){
- $rewardObj = new AgentReward($mall_id,$user_id,$parent_agent_list,$stock_log,$basic_conf);
- $reward_list = $rewardObj->sendReward();
- $wait_deduct_equal_money = $rewardObj->wait_deduct_equal_money;
- }
- $user_parent_agent = CloudStockTwoAgent::getUserParentAgent($user_id, $agent['level']);
- //库存递归扣减逻辑
- $obj = new FillDeductionLogic($user, $user_parent_agent, $stock_log, $fill_order, $fill_order['num'],$reward_list,$parent_agent_list,$wait_deduct_equal_money,'fill');
- $obj->order_type = 'fill';
- if (!$obj->deduct()) throw new \Exception('库存递归扣减异常');
- $fill_order->reward_list = json_encode($reward_list);
- $fill_order->save();
- $params = [
- 'mall_id' => $mall_id,
- 'user_id' => $user_id,
- 'goods_id' => $goods_id,
- 'num' => $num,
- 'order_id' => $fill_order['id'],
- 'changes_type' => CloudStockTwoEnum::STOCK_CHANGE_TYPE100,
- 'changes_dir' => CloudStockTwoEnum::STOCK_CHANGE_ADD,
- 'order_type' => CloudStockTwoEnum::STOCK_ORDER_TYPE_REPLENISH,
- ];
- //生成代理商商品库存
- $res = CloudStockTwoAgentGoods::addData($params);
- if (!$res) throw new \Exception(CloudStockTwoAgentGoods::getStaticError());
- //补货奖励
- // $level = CloudStockTwoLevel::findOne(['mall_id' => $mall_id, 'level' => $agent->level, 'status' => StatusEnum::ENABLED]);
- // if (!empty($level['is_fill'])) {
- // //补货奖发放
- // $stock_goods = CloudStockTwoGoods::findOne(['mall_id' => $mall_id, 'goods_id' => $goods_id]);
- // $fill_reward_logic = new FillRewardLogic($agent, $stock_goods, 0, $order_id, $num, 0,
- // CloudStockTwoEnum::CHANGE_TYPE_INCREASE_FILL_EXTRA_BONUS,
- // '补货奖发放',
- // 0
- // );
- // $fill_reward_logic->addRewardLog();
- // }
- //同步分销奖励
- self::distributionReward($user_id, $mall_id, $fill_order);
- $t->commit();
- return true;
- } catch (\Exception $e) {
- $t->rollBack();
- $exception = FormatHelper::exception($e, $e->getMessage());
- //echo $exception;
- \Yii::error($exception);
- return false;
- }
- }
- /**
- * @desc:同步分销奖励
- * @Author: hua
- * @Date: 2022/3/3
- * @Time: 12:03
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $user_id
- * @param $mall_id
- * @param $fill_order
- * @return bool|void
- */
- public static function distributionReward($user_id, $mall_id, $fill_order)
- {
- $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, 'basic');
- if (empty($configs['is_sync_distribution_level'])) return true;
- if (MallAddons::isInstall($mall_id, DistributionEnum::ADDONS_NAME) == 0) return true;
- $setting = \Yii::$app->services->setting->addons->get($mall_id, DistributionEnum::ADDONS_NAME, 'basic');
- if (empty($setting['level'])) return;
- $distribution_list = Distribution::getDistributionList($setting['is_self_buy'], $mall_id, $user_id);
- $goods = Goods::findOne(['id' => $fill_order['goods_id']]);
- $order_detail = [
- 'id' => $fill_order['id'],
- 'goods_id' => $fill_order['goods_id'],
- 'order_id' => $fill_order['id'],
- 'order_no' => $fill_order['order_no'],
- 'goods_name' => $goods['goods_name']??"",
- 'num' => $fill_order['num'],
- 'goods_price' =>$fill_order['pay_money'],
- 'original_goods_price' => bcmul($goods['price'],$fill_order['num'],2),
- 'cost_price' => $goods['cost_price'] * $fill_order['num'],
- ];
- $setting['compute_type'] = ComputingEnum::ORDER_PAY;
- $agent_reward_obj = new DistributionReward($mall_id, $user_id, $setting, $distribution_list, $order_detail);
- $agent_reward_obj->addFrozenCommission();
- }
- //业绩奖励
- public function performanceReward(){}
- }
|