| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace addons\CloudStock\common\logic\reward;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockBuyingOrder;
- use addons\CloudStock\common\models\CloudStockDeductionDetail;
- use addons\CloudStock\common\models\CloudStockDelayLog;
- use addons\CloudStock\common\models\CloudStockGoodsStockLog;
- use addons\CloudStock\common\models\CloudStockPaymentLog;
- use addons\CloudStock\common\services\PriceDifferenceProfitService;
- use addons\CloudStock\common\services\WithdrawService;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\models\common\CapitalLog;
- use common\models\user\User;
- use services\common\UserWalletService;
- /**
- * TODO: 云库存延时结算
- * Class DelayUnfrozen
- */
- class DelayUnfrozen
- {
- /**
- * 执行延时结算队列任务
- * @param array $data
- * @return true|void
- */
- public function handle(array $data)
- {
- if (empty($data)) return true;
- $is_true = false;
- if(empty($data['type'])){
- $wallet_type = 'commission';
- CapitalLog::$capitalType = "{$wallet_type}_frozen";
- $commission_list = CapitalLog::lists($data['params']);
- if ($commission_list) {
- $user_ids = array_column($commission_list,'user_id');
- $user_arr = User::lists(['where'=>[['id'=>$user_ids]],'select'=>'id,mobile','index'=>'id']);
- $obj = new CloudStockAgent();
- foreach ($commission_list as $item) {
- if ($item['capital_type'] == UserWalletEnum::PAYMENT_FOR_GOODS_FILL) {
- $is_true = true;
- }
- $res = UserWalletService::unfrozen($item['id'], $wallet_type);
- if($res){
- try {
- $cloud_stock_agent_model = CloudStockAgent::findOne(['user_id'=>$item['user_id'],'status'=>StatusEnum::ENABLED]);
- $cloud_stock_agent_model->frozen_price-=$item['change_num'];
- if($cloud_stock_agent_model->frozen_price<0) $cloud_stock_agent_model->frozen_price = 0;
- if (in_array($item['capital_type'], ['equal', 'price_difference_equal'])) {
- $cloud_stock_agent_model->equal_award_frozen_price -= $item['change_num'];
- $cloud_stock_agent_model->equal_award_price += $item['change_num'];
- }
- $cloud_stock_agent_model->save();
- $obj->sendGoodsMoneyMessage($user_arr,$item);
- }catch (\Exception $e){
- \Yii::error('云库存延时结算代理商结算资金增加失败,ID:'. $item['id'] .',USER_ID: '. $item['user_id'].',原因:'. $e->getMessage());
- }
- }
- }
- }
- }else{
- $payment_log_list = CloudStockPaymentLog::lists($data['params'],false);
- if(!empty($payment_log_list)){
- $is_true = true;
- $money_arr = [];
- foreach ($payment_log_list as $item) {
- if(isset($money_arr[$item['user_id']])){
- $money_arr[$item['user_id']] += $item['money'];
- }else{
- $money_arr[$item['user_id']] = $item['money'];
- }
- $item->status = StatusEnum::ENABLED;
- $item->save();
- }
- foreach ($money_arr as $user_id => $money) {
- WithdrawService::handle([
- 'user_id'=>$user_id,
- 'money'=>$money,
- 'is_frozen'=>false,
- ]);
- }
- }
- }
- if ($is_true) {
- //开启延时结算货款
- (new PriceDifferenceProfitService(['mall_id' => $data['mall_id']]))->computeProfitByDelayBuy(1, $data['order_no']);//会员买货触发差价利润金额
- }
- // 更新延时结算日志状态
- if (!empty($data['mall_id']) && !empty($data['order_no'])) {
- try {
- CloudStockDelayLog::updateAll(['status' => CapitalLog::STATUS_SEND, 'agented_at' => time()], ['mall_id' => $data['mall_id'], 'order_no' => $data['order_no']]);
- }catch (\Exception $e){
- return false;
- }
- }
- }
- /**
- * 写入延时结算任务
- * @param int $sec
- * @param array $order_detail_ids // 结算订单详情ids
- * @param array $logs_data // 延时结算日志数据
- * @return bool
- */
- public static function task(int $sec = 0, array $queue_data = [], array $logs_data = [])
- {
- if (empty($queue_data['params'])) return true;
- try {
- // 写入延时结算日志
- CloudStockDelayLog::batchSave($logs_data);
- // 加入延时队列执行
- \Yii::$app->services->rabbitMq->delay($sec, $queue_data, self::class, 'handle');
- return true;
- }catch (\Exception $e){
- return true;
- }
- }
- }
|