From f5f28988e5a4bf33890a4bf7ed6024604924a25c Mon Sep 17 00:00:00 2001 From: chenbo <709206448@qq.com> Date: Fri, 13 Oct 2023 18:19:23 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A1.=E5=95=86=E6=88=B7=E5=85=A5?= =?UTF-8?q?=E9=A9=BB=E5=AE=A1=E6=89=B9=E9=80=9A=E8=BF=87=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=80=9A=E8=BF=87=E6=97=B6=E9=97=B4=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E5=95=86=E6=88=B7=E5=85=A5=E9=A9=BB=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E3=80=82shop=5Fmerchant=5Fsettle=5Flog=202.=E5=B8=82=E5=9C=BA?= =?UTF-8?q?=E9=83=A8=E9=95=BF=E4=BB=BB=E5=8A=A11,2,3=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E5=92=8C=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/ApproveController.php | 2 +- app/common/logic/ShopRequestLogic.php | 80 +++++ app/common/logic/approve/ApproveLogic.php | 17 +- app/common/logic/finance/TownShareProfit.php | 75 ++++- app/common/logic/task/TaskLogic.php | 329 +++++++++++++++++-- app/common/model/ShopMerchantSettleinLog.php | 8 + 6 files changed, 469 insertions(+), 42 deletions(-) create mode 100644 app/common/logic/ShopRequestLogic.php create mode 100644 app/common/model/ShopMerchantSettleinLog.php diff --git a/app/api/controller/ApproveController.php b/app/api/controller/ApproveController.php index f7216b4be..1ddb26690 100644 --- a/app/api/controller/ApproveController.php +++ b/app/api/controller/ApproveController.php @@ -33,7 +33,7 @@ class ApproveController extends BaseApiController if (!$approve) { throw new Exception('数据不存在'); } - ApproveLogic::audit($approve, $params); + ApproveLogic::audit($approve, $params, $this->userInfo); return $this->success('操作成功'); } catch (Exception $exception) { return $this->fail(ApproveLogic::getError() ?? $exception->getMessage()); diff --git a/app/common/logic/ShopRequestLogic.php b/app/common/logic/ShopRequestLogic.php new file mode 100644 index 000000000..6837886b0 --- /dev/null +++ b/app/common/logic/ShopRequestLogic.php @@ -0,0 +1,80 @@ +request('GET', self::$shopUrlPrefix . '', [ + 'query' => $param + ]); + return $requestResponse->getContent(); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 查询商户入驻5天内是否完成商品上架 + */ + public static function getProductListing($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', self::$shopUrlPrefix . '', [ + 'query' => $param + ]); + return $requestResponse->getContent(); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 商户入驻20天后是否完成库存更新 + */ + public static function getStockUpdate($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', self::$shopUrlPrefix . '', [ + 'query' => $param + ]); + return $requestResponse->getContent(); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 查询商户采购金额 + */ + public static function getPurchaseAmount($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', self::$shopUrlPrefix . '', [ + 'query' => $param + ]); + return $requestResponse->getContent(); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } +} \ No newline at end of file diff --git a/app/common/logic/approve/ApproveLogic.php b/app/common/logic/approve/ApproveLogic.php index 146d2dce2..986ae9ffd 100644 --- a/app/common/logic/approve/ApproveLogic.php +++ b/app/common/logic/approve/ApproveLogic.php @@ -4,6 +4,7 @@ namespace app\common\logic\approve; use app\common\logic\BaseLogic; use app\common\model\Approve; +use app\common\model\ShopMerchantSettleinLog; use Symfony\Component\HttpClient\HttpClient; use think\facade\Db; use think\facade\Log; @@ -11,7 +12,7 @@ use think\facade\Log; class ApproveLogic extends BaseLogic { - public static function audit($approve, $params) + public static function audit($approve, $params, $userInfo) { // 拒绝通过 if ($params['check_status'] == 3) { @@ -22,7 +23,7 @@ class ApproveLogic extends BaseLogic } // 修改任务完成状态 if ($params['check_status'] == 2) { - self::pass($approve); + self::pass($approve,$userInfo); } // 回调商城,通知审核状态 @@ -32,10 +33,20 @@ class ApproveLogic extends BaseLogic } } - private static function pass(Approve $approve) + private static function pass(Approve $approve, $userInfo) { + Db::startTrans(); $approve->check_status = 2; $approve->save(); + // 记录商户入驻时间,镇农科公司市场部长任务会使用到 + $shopMerchantInfo = json_decode($approve['extend'], true); + $data = [ + 'town_company_id' => $userInfo['company_id'], + 'mer_intention_id' => $shopMerchantInfo['mer_intention_id'], + 'create_time' => time() + ]; + ShopMerchantSettleinLog::create($data); + Db::commit(); } private static function refuse(Approve $approve, $params) diff --git a/app/common/logic/finance/TownShareProfit.php b/app/common/logic/finance/TownShareProfit.php index 0db2967e0..4dd44e5d6 100644 --- a/app/common/logic/finance/TownShareProfit.php +++ b/app/common/logic/finance/TownShareProfit.php @@ -156,9 +156,23 @@ class TownShareProfit $masterMoney = bcdiv($taskInfo['money'], 2, 2); $remark = '来自任务【' . $taskSchedulePlan['template_info']['title'] . '】,'; + + //负责人收益 todo + if ($taskSchedulePlan['template_info']['extend']['task_role'] == 1) { + + } + //市场部长收益 + if ($taskSchedulePlan['template_info']['extend']['task_role'] == 2) { + $serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 16])->find(); + Log::info([$taskSchedulePlan['template_info']['title'].'结算-市场部长用户信息', $serviceManagerUser]); + } //服务部长收益 任务金额的50%为服务部长的收益 - $serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 14])->find(); - Log::info([$taskSchedulePlan['template_info']['title'].'结算-服务部长用户信息', $serviceManagerUser]); + if ($taskSchedulePlan['template_info']['extend']['task_role'] == 3) { + $serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 14])->find(); + Log::info([$taskSchedulePlan['template_info']['title'].'结算-服务部长用户信息', $serviceManagerUser]); + } + + // 用户收益变动 $arr = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $masterMoney, $taskSchedulePlan['sn'], $remark.'任务结算获得收益' . $masterMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1]; $this->master($arr); @@ -213,4 +227,61 @@ class TownShareProfit { return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); } + + /** + * + */ + public function dealTaskSettlementMarketingDirector1($taskInfo, $townCompany, $taskSchedulePlan) + { + try { + Db::startTrans(); + $this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan); + // 更改结算状态 + (new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']); + // 更改任务状态 + Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage()); + return false; + } + } + + public function dealTaskSettlementMarketingDirector2(Task $taskInfo, Company $townCompany, TaskSchedulingPlan $taskSchedulePlan) + { + try { + Db::startTrans(); + $this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan); + // 更改结算状态 + (new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']); + // 更改任务状态 + Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage()); + return false; + } + } + + public function dealTaskSettlementMarketingDirector3(Task $taskInfo, Company $townCompany, TaskSchedulingPlan $taskSchedulePlan) + { + try { + Db::startTrans(); + $this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan); + // 更改结算状态 + (new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']); + // 更改任务状态 + Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage()); + return false; + } + } } diff --git a/app/common/logic/task/TaskLogic.php b/app/common/logic/task/TaskLogic.php index a77ff1a99..5257d552e 100644 --- a/app/common/logic/task/TaskLogic.php +++ b/app/common/logic/task/TaskLogic.php @@ -16,9 +16,11 @@ namespace app\common\logic\task; use app\common\logic\finance\TownShareProfit; +use app\common\logic\ShopRequestLogic; use app\common\model\CompanyComplaintFeedback; use app\common\model\contract\Contract; use app\common\model\dict\DictData; +use app\common\model\ShopMerchantSettleinLog; use app\common\model\task\Task; use app\common\logic\BaseLogic; use app\common\model\Company; @@ -508,47 +510,304 @@ class TaskLogic extends BaseLogic try { Log::info(['镇农科公司定时任务结算执行-任务计划', $taskSchedulePlan]); $taskTemplateInfo = $taskSchedulePlan['template_info']; - // 任务类型用的数据字典主键id,将id和value作映射,避免测试和正式环境数据字典数据不一致时出问题 - $townTaskTypeList = DictData::where(['type_value' => 'town_task_type', 'status' => 1])->column('value', 'id'); - switch ($townTaskTypeList[$taskTemplateInfo['type']]){ + // 负责人任务结算 todo + if ($taskTemplateInfo['extend']['task_role'] == 1) { - case 'town_task_type_1': - // 协助总负责人开展工作任务 - self::dealTownTask1($taskSchedulePlan); - break; - case 'town_task_type_2': - // 拓展小组服务团队工作任务 - self::dealTownTask2($taskSchedulePlan); - break; - case 'town_task_type_3': - // 督促小组服务团队完成任务,协助开展工作,解决问题任务 - self::dealTownTask3($taskSchedulePlan); - break; - case 'town_task_type_4': - // 督促小组服务团队学习任务 - self::dealTownTask4($taskSchedulePlan); - break; - case 'town_task_type_5': - // 督促小组服务团队完成需求收集和交易任务 - self::dealTownTask5($taskSchedulePlan); - break; - case 'town_task_type_6': - // 督促小组服务团队入股村联络员所成立的公司任务 - self::dealTownTask6($taskSchedulePlan); - break; - case 'town_task_type_7': - // 安全工作任务 - self::dealTownTask7($taskSchedulePlan); - break; - default : - return true; } + // 市场部长任务结算 + if ($taskTemplateInfo['extend']['task_role'] == 2) { + self::marketingManagerTaskSettlement($taskSchedulePlan); + } + // 服务部长任务结算 + if ($taskTemplateInfo['extend']['task_role'] == 3) { + self::serviceManagerTaskSettlement($taskSchedulePlan); + } + } catch (Exception $e) { - Log::error(['镇农科任务结算失败',$e]); + Log::error(['镇农科任务结算失败',$e->getFile(), $e->getLine(), $e->getMessage()]); } } + /** + * @param $taskSchedulePlan + * 市场部长任务结算 + */ + private static function marketingManagerTaskSettlement($taskSchedulePlan) + { + $taskTemplateInfo = $taskSchedulePlan['template_info']; + // 任务类型用的数据字典主键id,将id和value作映射,避免测试和正式环境数据字典数据不一致时出问题 + $townTaskTypeList = DictData::where(['type_value' => 'town_task_type_marketing_director', 'status' => 1])->column('value', 'id'); + switch ($townTaskTypeList[$taskTemplateInfo['type']]){ + // 协助总负责人开展工作 + case 'town_task_type_marketing_director_1': + self::dealTaskMarketingDirector1($taskSchedulePlan); + break; + // 招驻供应链商户 + case 'town_task_type_marketing_director_2': + self::dealTaskMarketingDirector2($taskSchedulePlan); + break; + case 'town_task_type_marketing_director_3': + self::dealTaskMarketingDirector3($taskSchedulePlan); + break; + case 'town_task_type_marketing_director_4': + + break; + case 'town_task_type_marketing_director_5': + + break; + case 'town_task_type_marketing_director_6': + + break; + case 'town_task_type_marketing_director_7': + + break; + case 'town_task_type_marketing_director_8': + + break; + case 'town_task_type_marketing_director_9': + + break; + case 'town_task_type_marketing_director_10': + + break; + default: + return true; + } + } + + /** + * @param $taskSchedulePlan + * 市场部长协助总负责人开展工作 任务完成判定和结算 + */ + private static function dealTaskMarketingDirector1($taskSchedulePlan) + { + Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]); + $taskTemplateInfo = $taskSchedulePlan['template_info']; + $taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find(); + $townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find(); + $groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type' => 18])->select()->toArray(); + $isDone = 1; // 任务是否完成标记 + $isTaskSchedule = 0; // 下属小组服务公司是否有每日任务安排标记 + + foreach ($groupServiceCompanyList as $groupServiceCompany) { + // 查询小组服务公司是否有对应的每日任务安排 + $templateList = TaskTemplate::where(['company_id' => $groupServiceCompany['id']])->whereIn('type', [31, 32, 33])->select()->toArray(); + // 未做任务安排的小组服务公司不在判定范围内,跳出本次循环 + if(count($templateList) === 3) { + $isTaskSchedule = 1; + // 查询小组服务公司的循环任务有没有全部做完 任意有一个任务没有做完,则判定为该小组服务公司没有完成每日任务,即协助总负责人开展工作任务也认定失败 + foreach ($templateList as $template) { + $task = Task::where(['template_id' => $template['id'], 'status' => 3])->find(); + if (empty($task)) { + $isDone = 0; + break; + } + } + } + } + + // 下属小组服务公司有任务安排,也完成了任务 + if ($isDone === 1 && $isTaskSchedule === 1) { + // 做任务结算,分润 + (new TownShareProfit())->dealTaskSettlementMarketingDirector1($taskInfo, $townCompany, $taskSchedulePlan); + } else { + // 关闭任务 + (new Task())->closeTask($taskSchedulePlan['task_id']); + Log::info('协助总负责人开展工作任务,结算失败:' . $taskTemplateInfo['title'] . '未完成。任务:' . json_encode($taskInfo)); + } + } + + /** + * 招驻供应链商户 单次任务 任务完成判定和结算 + * 判定条件 : 任务下发60天内,供应链商户在商城开户并缴纳押金不少于5000,>=6家 + * 当前任务进行天数 < 第一阶段天数 只刷新任务时间 + * 当前任务进行天数 = 第一阶段天数 判定任务完成情况,结算 + */ + private static function dealTaskMarketingDirector2($taskSchedulePlan) + { + $templateInfo = $taskSchedulePlan['template_info']; + $dayCount = $templateInfo['day_count']; + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find(); + // 当前任务进行天数 < 第一阶段天数 只刷新任务时间 + if ($dayCount < $templateInfo['stage_day_one']) { + self::flushTaskTime($taskSchedulePlan); + return true; + } + + // 当前任务进行天数 = 第一阶段天数 判定任务完成情况,结算 + if ($dayCount == $templateInfo['stage_day_one']) { + // 请求商城接口,获取完成几家 todo + $param['start_time'] = strtotime(date('Y-m-d', $templateInfo['cretate_time'])) + 86400; + $param['end_time'] = time(); + $result = ShopRequestLogic::getSupplyChainMerchantCount($param); + if (!$result) { + Log::error('查询供应链商户统计接口失败'.ShopRequestLogic::getError()); + return false; + } + $count = 0; // todo 从$result取值 + + // 完成数小于3,关闭任务,不做结算 + if ($count < 3){ + (new Task())->closeTask($taskSchedulePlan['task_id']); + } + // 完成数大于等于3,结算 + $target = $templateInfo['extend']['target']; + $perMoney = bcdiv(bcmul($templateInfo['stage_day_one'], $templateInfo['money']), $target); // 完成单个金额 + + if ($count >= 6) { + $count = 6; + } + $taskInfo['money'] = bcmul($count, $perMoney); // 任务金额 + // 结算,分润 + (new TownShareProfit())->dealTaskSettlementMarketingDirector2($taskInfo, $townCompany, $taskSchedulePlan); + } + } + + /** + * 协助供应链商户商品上架和库存更新 长期 判定与结算 + * 请求商城接口,查询每个商户入驻5天内是否完成商品上架 + * 请求商城接口,查询每个商户商品上架构后15天内是否完成库存更新 + * + */ + public static function dealTaskMarketingDirector3($company, $template, $task, $type) + { + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$company['id']])->select()->toArray(); + // 遍历农科公司区域下的商户,对每个商户进行判定 + foreach ($shopMerchantSettleinLogList as $item) { + + // 入驻5天内是否完成商品上架 + $startTime = $item['create_time']; // 入驻时间 + $endTime = bcadd($startTime, bcmul(86400, $template['stage_day_one'])); + // 只在入驻5天后的最后一天结算 + if (date('Y-m-d', $endTime) == date('Y-m-d', time())) { + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'start_time' => $startTime, + 'end_time' => $endTime, + 'mer_intention_id' => $merIntentionId, + ]; + $result = ShopRequestLogic::getProductListing($param); + Log::info(['4.市场部长-供应链商户完成商品上架和库存更新任务-查询商城接口结果', json_encode($result)]); + // 完成则结算 todo 返回字段要对接 + if ($result['is_done'] == 1){ + // 结算金额 任务金额/目标数 * 天数 + $task['money'] = bcmul($template['stage_day_one'], bcdiv($template['money'], $template['extend']['target'])); + $taskSchedulePlan = TaskSchedulingPlan::where(['id', $task['scheduling_plan_id']]) + ->withJoin(['scheduling'], 'left') + ->where('scheduling.company_type', 41) + ->where('is_pay',0) + ->with(['template_info']) + ->find(); + Log::info(['5.市场部长-供应链商户完成商品上架任务-$taskSchedulePlan', json_encode($taskSchedulePlan)]); + (new TownShareProfit())->dealTaskSettlementMarketingDirector3($task, $company, $taskSchedulePlan); + } + } + + + // 商品上架构后15天内是否完成库存更新 + $startTime = $item['create_time']; + $endTime = bcadd($startTime, bcmul( 86400, bcadd($template['stage_day_one'], $template['stage_day_two']))) ; + // 只在上架完成15天后的最后一天结算 + if (date('Y-m-d', $endTime) == date('Y-m-d', time())) { + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'start_time' => $startTime, + 'end_time' => $endTime, + 'mer_intention_id' => $merIntentionId, + ]; + $result1 = ShopRequestLogic::getStockUpdate($param); // todo 返回字段要对接 + Log::info(['4.市场部长-供应链商户完成库存更新任务-查询商城接口结果', json_encode($result)]); + if ($result1['is_done'] == 1){ + // 结算金额 任务金额/目标数 * 天数 + $task['money'] = bcmul($template['stage_day_two'], bcdiv($template['money_two'], $template['extend']['target'])); + $taskSchedulePlan = TaskSchedulingPlan::where(['id', $task['scheduling_plan_id']]) + ->withJoin(['scheduling'], 'left') + ->where('scheduling.company_type', 41) + ->where('is_pay',0) + ->with(['template_info']) + ->find(); + Log::info(['5.市场部长-供应链商户完成商品上架任务-$taskSchedulePlan', json_encode($taskSchedulePlan)]); + (new TownShareProfit())->dealTaskSettlementMarketingDirector3($task, $company, $taskSchedulePlan); + } + } + } + + // 未完成的情况下,每天自动关闭任务 + $task = Task::where(['id'=>$taskSchedulePlan['task_id']])->find(); + if ($task['status'] != 3) { + (new Task())->closeTask($task['id']); + } + } + + /** + * 协助供应链商户采购任务 长期 判定与结算 + * 根据每个商户入驻时间,推出各个周期范围的起始时间,商户申请id,指定商品id。请求商城接口 + */ + public static function dealTaskMarketingDirector4($company, $template, $task) + { + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$company['id']])->select()->toArray(); + // 遍历农科公司区域下的商户,对每个商户进行判定 + foreach ($shopMerchantSettleinLogList as $item) { + $startTime = $item['create_time']; // 入驻时间 + $endTime = bcadd($startTime, bcmul(86400, $template['stage_day_one'])); + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'start_time' => $startTime, + 'end_time' => $endTime, + 'mer_intention_id' => $merIntentionId, + ]; + $result1 = ShopRequestLogic::getStockUpdate($param); // todo 返回字段要对接 + } + } + + /** + * @param $taskSchedulePlan + * 服务部长任务结算 + */ + private static function serviceManagerTaskSettlement($taskSchedulePlan) + { + $taskTemplateInfo = $taskSchedulePlan['template_info']; + // 任务类型用的数据字典主键id,将id和value作映射,避免测试和正式环境数据字典数据不一致时出问题 + $townTaskTypeList = DictData::where(['type_value' => 'town_task_type', 'status' => 1])->column('value', 'id'); + switch ($townTaskTypeList[$taskTemplateInfo['type']]){ + + case 'town_task_type_1': + // 协助总负责人开展工作任务 + self::dealTownTask1($taskSchedulePlan); + break; + case 'town_task_type_2': + // 拓展小组服务团队工作任务 + self::dealTownTask2($taskSchedulePlan); + break; + case 'town_task_type_3': + // 督促小组服务团队完成任务,协助开展工作,解决问题任务 + self::dealTownTask3($taskSchedulePlan); + break; + case 'town_task_type_4': + // 督促小组服务团队学习任务 + self::dealTownTask4($taskSchedulePlan); + break; + case 'town_task_type_5': + // 督促小组服务团队完成需求收集和交易任务 + self::dealTownTask5($taskSchedulePlan); + break; + case 'town_task_type_6': + // 督促小组服务团队入股村联络员所成立的公司任务 + self::dealTownTask6($taskSchedulePlan); + break; + case 'town_task_type_7': + // 安全工作任务 + self::dealTownTask7($taskSchedulePlan); + break; + default : + return true; + } + } + /** * 系统自动判定镇农科公司下属小组服务公司 是否100%完成每日任务:三轮车任务,档案更新任务,平台交易任务 */ @@ -576,8 +835,6 @@ class TaskLogic extends BaseLogic break; } } - } else { - continue; } } // 下属小组服务公司有任务安排,也完成了任务 diff --git a/app/common/model/ShopMerchantSettleinLog.php b/app/common/model/ShopMerchantSettleinLog.php new file mode 100644 index 000000000..e679e2155 --- /dev/null +++ b/app/common/model/ShopMerchantSettleinLog.php @@ -0,0 +1,8 @@ +