| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace addons\CircleDistribution\common\logic;
- use addons\CircleDistribution\common\enums\DistributionEnum;
- use addons\CircleDistribution\common\enums\ComputingEnum;
- use addons\CircleDistribution\common\models\DistributionCommissionBasisLog;
- use addons\CircleDistribution\common\models\DistributionCommissionItemSetting;
- use common\enums\GoodsTypeEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\StatusEnum;
- use common\models\common\CapitalLog;
- use common\models\goods\Goods;
- use common\models\mall\MallAddons;
- use common\models\order\OrderDetail;
- use common\models\user\UserPartitionRelationship;
- use services\common\UserWalletService;
- /**
- * @desc 复购逻辑
- * Class RepurchaseLogic
- * @package addons\CircleDistribution\common\logic
- */
- class RepurchaseLogic
- {
- /**
- * 检测订单是否属于复购商品订单,是的话解冻
- * @param $order
- * @return bool|void
- */
- public static function checkOrder($order)
- {
- $user_id = $order['user_id'];
- $mall_id = $order['mall_id'];
- $order_id = $order['id'];
- 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(!$setting['is_circle_repurchase']) return true;
- $compute_type = $order['order_status'] == OrderStatusEnum::ACCOMPLISH ? ComputingEnum::ORDER_FINISH : ComputingEnum::COMPUTE_TYPE_PAY;
- if ($setting['repurchase_compute_type'] != $compute_type) return;
- $thaw_goods_list = $setting['thaw_goods_ids'] ? json_decode($setting['thaw_goods_ids'], true) : [];
- if(!$thaw_goods_list) return true;
- $params = [];
- $params['select'] = 'goods_id';
- $params['where'] = [
- ['order_id' => $order_id],
- ['user_id' => $user_id], ['mall_id' => $mall_id],
- ];
- $order_detail_list = OrderDetail::lists($params);
- if (empty($order_detail_list)) return;
- $goods_ids = array_column($order_detail_list,'goods_id');
- $intersect = array_intersect($thaw_goods_list,$goods_ids);
- if(empty($intersect)) return;
- //符合解冻条件,解冻一个循环内的待结算佣金
- self::unfrozen($mall_id,$user_id);
- }
- /**
- * 解冻用户一个周期内的待结算佣金
- * @param $mall_id
- * @param $user_id
- * @param $all 释放全部
- */
- public static function unfrozen($mall_id,$user_id,$all = false)
- {
- $log_list = DistributionCommissionBasisLog::find()->where(['mall_id' => $mall_id,'user_id' => $user_id,'need_repurchase' => 1])->orderBy('id asc')->all();
- $circle_num = 0;
- $log_ids = [];
- $source_table_id_arr = [];
- foreach($log_list as $log){
- if($log->sequence >= $circle_num || $all){
- $circle_num = $log->sequence;
- $log_ids[] = $log->id;
- if($log->source_table == 'order_detail'){
- $source_table_id_arr[] = $log->source_table_id;
- }
- }else{
- break;
- }
- }
- if($source_table_id_arr){
- $where =
- [
- ['source_table' => 'order_detail'],
- ['source_table_id' => $source_table_id_arr],
- ['from_type' => DistributionEnum::ADDONS_NAME],
- ['status' => CapitalLog::STATUS_WAIT_SEND]
- ];
- $params['where'] = $where;
- $wallet_type = 'commission';
- CapitalLog::$capitalType = "{$wallet_type}_frozen";
- $commission_list = CapitalLog::lists($params);
- if ($commission_list) {
- foreach ($commission_list as $item) {
- $res = UserWalletService::unfrozen($item['id'], $wallet_type);
- }
- }
- $wallet_type = 'score';
- CapitalLog::$capitalType = "{$wallet_type}_frozen";
- $score_list = CapitalLog::lists($params);
- if ($score_list) {
- foreach ($score_list as $item) {
- $res = UserWalletService::unfrozen($item['id'], $wallet_type);
- }
- }
- //修改状态
- $res = DistributionCommissionBasisLog::updateAll(['need_repurchase' => 0], ['id' => $log_ids]);
- if(!$res){
- \Yii::error('DistributionCommissionBasisLog updateAll error,ids='.implode(',',$log_ids));
- }
- }
- }
- }
|