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)); } } } }