diff --git a/app/adminapi/controller/approve/ApproveController.php b/app/adminapi/controller/approve/ApproveController.php index c6cb12bba..661f7b511 100644 --- a/app/adminapi/controller/approve/ApproveController.php +++ b/app/adminapi/controller/approve/ApproveController.php @@ -4,11 +4,17 @@ namespace app\adminapi\controller\approve; use app\adminapi\controller\BaseAdminController; use app\adminapi\lists\approve\ApproveLists; +use app\common\enum\user\AccountLogEnum; +use app\common\logic\AccountLogLogic; use app\common\logic\task\TaskLogic; use app\common\model\Approve; +use app\common\model\Company; +use app\common\model\company\CompanyAccountLog; use app\common\model\task\Task; use app\common\model\task_scheduling_plan\TaskSchedulingPlan; use app\common\model\task_template\TaskTemplate; +use app\common\model\user\User; +use app\common\model\user\UserAccountLog; use think\facade\Db; class ApproveController extends BaseAdminController @@ -22,6 +28,11 @@ class ApproveController extends BaseAdminController { return $this->success('成功',(new ApproveLists())->lists2()); } + + public function lists3() + { + return $this->success('成功',(new ApproveLists())->lists3()); + } public function audit() { try { @@ -161,4 +172,205 @@ class ApproveController extends BaseAdminController ]); } + /** + * 股金任务审批 + */ + public function shareholderMoneyTaskAudit() + { +// try { + $params = $this->request->param(); // id check_status remark + $approve = Approve::find($params['id']); + if (!empty($approve)) { + $this->fail('数据不存在'); + } + // 拒绝通过 要让用户今天可以继续做任务 + if ($params['check_status'] == 3) { + $this->refuse1($params, $approve); + } + if ($params['check_status'] == 2) { + $this->pass1($approve, $params); + } +// } catch (\Exception $e) { +// return $this->fail($e->getMessage()); +// } + } + + private function refuse1($params, $approve) + { + $approve->check_status = $params['check_status']; + $approve->remark = $params['remark']; + $approve->update_time = time(); + $approve->save(); + } + + private function pass1($approve, $params) + { + Db::startTrans(); + + // 任务 + $task = Task::find($approve['task_id']); + if ($task['status'] == 2) { + $task->status = 3; + $task->save(); + } + + // 小组服务公司股金上交 + if ($approve->type == Approve::APPROVE_TYPE_10) { + // 上交股金的公司 + $subordinateCompany = Company::where(['id'=>$approve->department_id])->find(); + // 接收股金的公司 + $parentCompany = Company::where(['village'=>$subordinateCompany['village'], 'company_type'=>17])->find(); + } + + $amount = $approve->amount; // 上交股金金额 + + $subordinateCompany->shareholder_money = $amount; + $subordinateCompany->save(); + + // 添加股金入股记录 + $sharecapitalChangeLogInsertId = $this->addConpanyAccountLog($subordinateCompany, $parentCompany, $amount); + $approve->check_status = 2; + $approve->update_time = time(); + $approve->business_id = $sharecapitalChangeLogInsertId; // 灵活运用业务主键id + $approve->remark = $params['remark']; + $approve->save(); + + // 任务结算 + if ($approve->type == Approve::APPROVE_TYPE_10) { + $taskSchedulingPaln = TaskSchedulingPlan::where(['task_id' => $task->id]) + ->withJoin(['scheduling'], 'left') + ->where('scheduling.company_type', 18) + ->where('is_pay',0) + ->with(['template_info']) + ->select() + ->toArray()[0]; + $taskInfo = $task->toArray(); + $this->taskSettlement($taskInfo, $subordinateCompany, $taskSchedulingPaln); + } + Db::commit(); + return $this->success('成功'); + } + + private function addConpanyAccountLog($subordinateCompany, $parentCompany, $amount) + { + $sharecapitalChangeLogData = [ + 'subordinate_company_id' => $subordinateCompany['id'], + 'parent_company_id' => $parentCompany['id'], + 'amount' => $amount, + 'create_time' => time(), + 'update_time' => time(), + ]; + $sharecapitalChangeLogInsertId = Db::name('company_sharecapital_change_log')->insertGetId($sharecapitalChangeLogData); + + // 上交股金公司股金变更 + 公司股金减少记录 + $leftAmount = bcsub($subordinateCompany['shareholder_money'], $amount, 2); + Company::where('id', $subordinateCompany['company_id'])->save(['shareholder_money'=> $leftAmount]); + $company_log1 = [ + 'sn' => generate_sn(UserAccountLog::class, 'sn', 20), + 'company_id' => $subordinateCompany['id'], + 'change_object' => CompanyAccountLog::SHAREHOLDER, // 变动对象 1余额 2股金 + 'change_type' => CompanyAccountLog::SHAREHOLDER_DEC_DEPOSIT, //变动类型 + 'action' => CompanyAccountLog::DEC, //1-增加 2-减少 + 'left_amount' => $leftAmount, //变动后数量 + 'change_amount' => $amount, //变动数量 + 'extend' => json_encode(['company_sharecapital_change_log_id' => $sharecapitalChangeLogInsertId]), + 'status' => 1, + ]; + CompanyAccountLog::create($company_log1); + + // 接收股金公司股金变更 + 公司股金增加记录 + $addAmount = bcadd($parentCompany['shareholder_money'], $amount, 2); + Company::where('id', $parentCompany['id'])->save(['shareholder_money'=>$addAmount]); + + // 公司账户变动记录 + $company_log2 = [ + 'sn' => generate_sn(UserAccountLog::class, 'sn', 20), + 'company_id' => $parentCompany['id'], + 'change_object' => CompanyAccountLog::SHAREHOLDER, // 变动对象 1余额 2股金 + 'change_type' => CompanyAccountLog::TASK_INC_SHAREHOLDER_MONEY, //变动类型 + 'action' => CompanyAccountLog::INC, //1-增加 2-减少 + 'left_amount' => $addAmount, //变动后数量 + 'change_amount' => $amount, //变动数量 + 'extend' => json_encode(['company_sharecapital_change_log_id' => $sharecapitalChangeLogInsertId]), + 'status' => 1, + ]; + CompanyAccountLog::create($company_log2); + + return $sharecapitalChangeLogInsertId; + } + + public function taskSettlement($data, $company, $datas = []) + { + $proportion = 0; + $remark = '来自任务【' . $datas['template_info']['title'] . '】,'; + //总金额除以2等于不可提现账号金额和收益 + $master_money = bcdiv($data['money'], 2, 2); + //收益的百分之25为负责人的收益其余为成员的平分收益 + $master_money_user = bcdiv($master_money, 2, 2); + + //成员数量 + $userAll = User::where('company_id', $data['company_id'])->where('admin_id', 0)->field('id,user_money')->select(); + $yser_all_count = count($userAll); + $member_money_user = bcdiv($master_money_user, $yser_all_count, 2); + + //负责人 + $arr = [$company['user_id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $master_money_user, $datas['sn'], $remark . '获得收益' . $master_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + $this->master($arr); + $arr_two = [$company['user_id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $master_money_user, $datas['sn'], $remark. '获得账户余额' . $master_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + $this->Account($arr_two); + + //成员 + foreach ($userAll as $value) { + $arr = [$value['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $member_money_user, $datas['sn'], $remark . '获得收益' . $member_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + $this->member($arr); + $arr_two = [$value['id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $member_money_user, $datas['sn'], $remark. '获得账户余额' . $member_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + $this->Account($arr_two); + } + + //公司 + $deposit_count = bcadd($company['deposit'], $master_money, 2); + $this->AccountLog($data['company_id'], $deposit_count, $master_money); + + $company_money_count = bcadd($company['company_money'], $master_money, 2); + $this->AccountLog($data['company_id'], $company_money_count, $master_money); + Company::where('id', $data['company_id'])->update(['deposit' => Db::raw('deposit+' . $master_money), 'company_money' => Db::raw('company_money+' . $master_money)]); + } + + public function AccountLog($companyId, $left_amount, $changeAmount, $change_object = 1, $change_type = 1, $action = 1) + { + $company_log = [ + 'sn' => generate_sn(UserAccountLog::class, 'sn', 20), + 'company_id' => $companyId, + 'change_object' => $change_object, //变动对象 + 'change_type' => $change_type, //变动类型 + 'action' => $action, //1-增加 2-减少 + 'left_amount' => $left_amount, //变动后数量 + 'change_amount' => $changeAmount, //变动数量 + 'status' => 1, + ]; + CompanyAccountLog::create($company_log); + } + + /**负责人的分润 + * @param $data + */ + private function master($data) + { + User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]); + return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); + } + + /**成员分润 + * @param $data + */ + private function member($data) + { + User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]); + return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); + } + + private function Account($data) + { + return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); + } } \ No newline at end of file diff --git a/app/adminapi/lists/approve/ApproveLists.php b/app/adminapi/lists/approve/ApproveLists.php index bfd6dabfa..1a1202593 100644 --- a/app/adminapi/lists/approve/ApproveLists.php +++ b/app/adminapi/lists/approve/ApproveLists.php @@ -48,7 +48,6 @@ class ApproveLists extends BaseAdminDataLists implements ListsSearchInterface return Admin::where(['id' => $data['check_admin_ids']])->value('name'); }) ->withAttr('company_name',function($value,$data){ - $task = Task::where('id', $data['task_id'])->find(); return Company::where(['id' => $task['company_id']])->value('company_name'); }) @@ -85,6 +84,40 @@ class ApproveLists extends BaseAdminDataLists implements ListsSearchInterface ]; } + public function lists3(): array + { + $list = Approve::where($this->searchWhere) + ->where($this->queryWhere()) + ->with('task') + ->field('*') + ->append(['area_manager', 'company_a_name', 'company_b_name'], true) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select() + ->withAttr('area_manager',function($value,$data){ + return Admin::where(['id' => $data['check_admin_ids']])->value('name'); + }) + ->withAttr('company_b_name',function($value,$data){ + $task = Task::where('id', $data['task_id'])->find(); + return Company::where(['id' => $task['company_id']])->value('company_name'); + }) + ->withAttr('company_a_name',function($value,$data){ + $task = Task::where('id', $data['task_id'])->find(); + $companyB = Company::where(['id' => $task['company_id']])->find(); + return Company::where(['village' => $companyB['village'], 'company_type'=>17])->value('company_name'); + }) + ->toArray(); + $count = Approve::where($this->searchWhere) + ->where($this->queryWhere())->count(); + + return [ + 'lists' => $list, + 'count' => $count, + 'page_no' => $this->pageNo, + 'page_size' => $this->pageSize, + ]; + } + public function count(): int { return Approve::where($this->searchWhere)->count(); diff --git a/app/api/controller/TaskController.php b/app/api/controller/TaskController.php index 0ff6f3207..90894ad1d 100644 --- a/app/api/controller/TaskController.php +++ b/app/api/controller/TaskController.php @@ -722,7 +722,10 @@ class TaskController extends BaseApiController if (empty($task)) { $this->fail('任务不存在'); } - $extend = ['is_commit'=>1, 'annex'=>$parmas['annex'], 'amount'=>$parmas['amount']]; + $extend = json_decode($task->extend, true); + $extend['is_commit'] = 1; + $extend['annex'] = $parmas['annex']; + $extend['amount'] = $parmas['amount']; Task::where(['id' => $parmas['id']])->update(['extend' => json_encode($extend), 'update_time' => time(), 'director_uid' => $this->userId]); // director_uid 指派人 diff --git a/app/job/TaskInformationJob.php b/app/job/TaskInformationJob.php index 9506d352b..01b39b9da 100644 --- a/app/job/TaskInformationJob.php +++ b/app/job/TaskInformationJob.php @@ -87,12 +87,15 @@ class TaskInformationJob $task_35 = Task::where('id', $data['task_id'])->field('director_uid,status,money,start_time,end_time')->with('director_info')->find(); if($task_35){ $day= $data['template_info']['stage_day_one'] + $data['template_info']['stage_day_two']; - if($task_35['status']==3 && $data['template_info']['day_count']<=$day){ - $name = $task_35['director_info']['nickname']; - $arr['status'] = 1; - $arr['money'] = $task_35['money']; - $arr['company_account_type'] = 2; - }else{ +// if($task_35['status']==3 && $data['template_info']['day_count']<=$day){ +// $name = $task_35['director_info']['nickname']; +// $arr['status'] = 1; +// $arr['money'] = $task_35['money']; +// $arr['company_account_type'] = 2; +// }else{ + if ($task_35['status'] == 3) { + return true; + } /** * 判断入股任务 单次类型 是否超时 * 未超时时刷新开始结束时间 @@ -114,7 +117,7 @@ class TaskInformationJob Log::info('入股任务 ' . $data['template_info']['title'] . '结算失败,任务为超时:' . json_encode($data)); return false; } - } +// } }else{ Log::info('入股任务 ' . $data['template_info']['title'] . '结算失败,任务为空:' . json_encode($data)); return false; @@ -133,7 +136,7 @@ class TaskInformationJob if($data['template_info']['day_count'] >= $day){ Task::where('id', $data['task_id'])->update(['status' =>5]); - Log::info('入股任务 ' . $data['template_info']['title'] . '结算失败,任务为超时:' . json_encode($data)); + Log::info( $data['template_info']['title'] . '结算失败,任务为超时:' . json_encode($data)); return false; }