diff --git a/app/common/logic/ShopRequestLogic.php b/app/common/logic/ShopRequestLogic.php index 2594ed241..74ff75e40 100644 --- a/app/common/logic/ShopRequestLogic.php +++ b/app/common/logic/ShopRequestLogic.php @@ -215,4 +215,20 @@ class ShopRequestLogic extends BaseLogic return false; } } + + /** + * 查询手机号用户的交易金额 + */ + public static function getUserTradeAmount($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } } \ No newline at end of file diff --git a/app/common/logic/finance/TownShareProfit.php b/app/common/logic/finance/TownShareProfit.php index 46f9572a4..4c9d252f7 100644 --- a/app/common/logic/finance/TownShareProfit.php +++ b/app/common/logic/finance/TownShareProfit.php @@ -430,6 +430,26 @@ class TownShareProfit } } + public function dealTaskSettlementMaster3(Task $taskInfo, Company $townCompany, $taskSchedulePlan, $leftTransactionPool) + { + try { + Db::startTrans(); + $this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan); + // 更改结算状态 + (new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']); + // 更改任务状态 + Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3,'money' => $taskInfo['money']]); + // 更新交易池 + (new TaskTemplate())->updateTransactionPool($taskSchedulePlan['template_info']['id'], $leftTransactionPool); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage()); + return false; + } + } + public function dealTaskSettlementMaster4(Task $taskInfo, Company $townCompany, $taskSchedulePlan, $leftTransactionPool) { try { @@ -439,7 +459,7 @@ class TownShareProfit (new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']); // 更改任务状态 Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3,'money' => $taskInfo['money']]); - // 更新镇交易池 + // 更新交易池 (new TaskTemplate())->updateTransactionPool($taskSchedulePlan['template_info']['id'], $leftTransactionPool); Db::commit(); return true; diff --git a/app/common/logic/task/TaskLogic.php b/app/common/logic/task/TaskLogic.php index b0a39898a..e57dd69ca 100644 --- a/app/common/logic/task/TaskLogic.php +++ b/app/common/logic/task/TaskLogic.php @@ -806,14 +806,28 @@ class TaskLogic extends BaseLogic } - // todo + /** + * @param $taskSchedulePlan + * 信息收集与促销 + * 任务累计天数 小于 第一阶段 关闭任务 + * 任务累计天数 = 第一阶段 判断信息收集任务是否完成,完成则结算 + * 任务累计天数 大于 第一阶段 小于第一+第二阶段 判断交易任务是否完成,完成则结算 + * 任务累计天数 = 第一+第二阶段 判断信息收集和交易任务是否完成,完成则结算 + * 任务累计天数 大于 第一+第二阶段 小于第一+第二+第三阶段 判断交易任务是否完成,完成则结算,否则关闭任务 + */ private static function masterTask3Settlement($taskSchedulePlan) { Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]); $taskTemplateInfo = $taskSchedulePlan['template_info']; $dayCount = $taskTemplateInfo['day_count']; + $stageDayTwoCount = bcadd($taskTemplateInfo['stage_day_one'],$taskTemplateInfo['stage_day_two']); + $target = $taskTemplateInfo['extend']['target']; $taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find(); $townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find(); + + // 任务交易池,用于叠加交易额 + $townTransactionPool = $taskTemplateInfo['transaction_pool']; + // 任务累计天数 小于 第一阶段 关闭任务 if ($dayCount < $taskTemplateInfo['stage_day_one']) { (new Task())->closeTask($taskSchedulePlan['task_id']); @@ -822,8 +836,92 @@ class TaskLogic extends BaseLogic // 任务累计天数 = 第一阶段 收集信息 >= 1家 if ($dayCount == $taskTemplateInfo['stage_day_one']) { - + $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; + $purchaseSalesCount = count($purchaseSalesInfo['planting']) + count($purchaseSalesInfo['supply']); + if ($purchaseSalesCount >= 1) { + $taskInfo['money'] = bcmul($taskTemplateInfo['money'], $taskTemplateInfo['stage_day_one'], 2); + (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $townTransactionPool); + } } + + // 任务累计天数 大于 第一阶段 小于第一+第二阶段 判断交易任务是否完成,完成则结算,否则关闭任务 + if ($dayCount > $taskTemplateInfo['stage_day_one'] && $dayCount < $stageDayTwoCount) { + // 查询收集到的用户在商城的交易金额(前置条件:信息收集中的手机号注册商城并交易) + $phoneList = []; + foreach ($purchaseSalesInfo['planting'] as $item) { + $phoneList[] = $item['phone']; + } + foreach ($purchaseSalesInfo['supply'] as $item) { + $phoneList[] = $item['shopkeeperPhone']; + } + $param = [ + 'start_time' => strtotime(date('Y-m-d', time())), + 'end_time' => strtotime(date('Y-m-d', time())) + 86399, + 'phone' => implode(',', $phoneList) + ]; + $result = ShopRequestLogic::getUserTradeAmount($param); // todo 对接接口 + $tradeAmount = $result['data']['trade_amount']; + + $totalAmount = bcadd($tradeAmount, $townTransactionPool, 2); // 总的交易金额 = 当日交易额 + 累计交易池 + + $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; + $purchaseSalesCount = bcadd(count($purchaseSalesInfo['planting']), count($purchaseSalesInfo['supply'])); + // 目标金额 = 274 * 收集用户数 + $targetTradeAmount = bcmul($purchaseSalesCount, 274, 2); + + // 完成条件: 交易金额 >= 目标金额 + if (bccomp($totalAmount, $targetTradeAmount, 2) ==0 || bccomp($totalAmount, $targetTradeAmount, 2) ==1) { + $taskInfo['money'] = bcdiv($taskTemplateInfo['money_two'], 2, 2); + $leftTransactionPool = bcsub($totalAmount, $targetTradeAmount, 2); + (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $leftTransactionPool); + } else { + (new Task())->closeTask($taskSchedulePlan['task_id']); + } + } + + // 任务累计天数 = 第一+第二阶段 判断信息收集和交易任务是否完成,完成则结算,否则关闭任务 + if ($dayCount == $stageDayTwoCount) { + $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; + $purchaseSalesCount = count($purchaseSalesInfo['planting']) + count($purchaseSalesInfo['supply']); + if ($purchaseSalesCount >= $target) { + $taskInfo['money'] = bcmul(bcdiv($taskTemplateInfo['money_two'], 2, 2), $taskTemplateInfo['stage_day_two'], 2); + (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $townTransactionPool); + } + } + + // 任务累计天数 大于 第一+第二阶段 每日结算 判断交易任务是否完成,完成则结算,否则关闭任务 + if ($dayCount >= $stageDayTwoCount) { + // 查询收集到的用户在商城的交易金额(前置条件:信息收集中的手机号注册商城并交易) + $phoneList = []; + foreach ($purchaseSalesInfo['planting'] as $item) { + $phoneList[] = $item['phone']; + } + foreach ($purchaseSalesInfo['supply'] as $item) { + $phoneList[] = $item['shopkeeperPhone']; + } + $param = [ + 'start_time' => strtotime(date('Y-m-d', time())), + 'end_time' => strtotime(date('Y-m-d', time())) + 86399, + 'phone' => implode(',', $phoneList) + ]; + $result = ShopRequestLogic::getUserTradeAmount($param); // todo 对接接口 + $tradeAmount = $result['data']['trade_amount']; + + $totalAmount = bcadd($tradeAmount, $townTransactionPool, 2); // 总的交易金额 = 当日交易额 + 累计交易池 + + // 目标金额 = 274 * 总目标数 + $targetTradeAmount = bcmul($target, 274, 2); + + // 完成条件: 交易金额 >= 目标金额 + if (bccomp($totalAmount, $targetTradeAmount, 2) ==0 || bccomp($totalAmount, $targetTradeAmount, 2) ==1) { + $taskInfo['money'] = bcdiv($taskTemplateInfo['money_two'], 2, 2); + $leftTransactionPool = bcsub($totalAmount, $targetTradeAmount, 2); + (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $leftTransactionPool); + } else { + (new Task())->closeTask($taskSchedulePlan['task_id']); + } + } + } /**