diff --git a/app/adminapi/controller/build/BuildReportController.php b/app/adminapi/controller/build/BuildReportController.php index 8e092f9f7..2cf4e92c7 100644 --- a/app/adminapi/controller/build/BuildReportController.php +++ b/app/adminapi/controller/build/BuildReportController.php @@ -11,104 +11,105 @@ // +---------------------------------------------------------------------- // | author: likeadminTeam // +---------------------------------------------------------------------- - - -namespace app\adminapi\controller\build; - - -use app\adminapi\controller\BaseAdminController; -use app\adminapi\lists\build\BuildReportLists; -use app\adminapi\logic\build\BuildReportLogic; -use app\adminapi\validate\build\BuildReportValidate; -use app\common\model\build\BuildPlan; -use app\common\model\build\BuildReport; -use app\common\model\build\BuildReportDetail; -use app\common\model\project\ProjectPersonnel; - - -/** - * 施工汇报控制器 - * Class BuildReportController - * @package app\adminapi\controller\build - */ -class BuildReportController extends BaseAdminController -{ - - - /** - * @notes 获取施工汇报列表 - * @return \think\response\Json - * @author likeadmin - * @date 2023/12/22 16:08 - */ - public function lists() - { - return $this->dataLists(new BuildReportLists()); - } - - - /** - * @notes 添加施工汇报 - * @return \think\response\Json - * @author likeadmin - * @date 2023/12/22 16:08 - */ - public function add() - { - $params = (new BuildReportValidate())->post()->goCheck('add'); - $result = BuildReportLogic::add($params,$this->adminId); - if (true === $result) { - return $this->success('添加成功', [], 1, 1); - } - return $this->fail(BuildReportLogic::getError()); - } - - /** - * @notes 获取施工汇报详情 - * @return \think\response\Json - * @author likeadmin - * @date 2023/12/22 16:08 - */ - public function detail() - { - $params = (new BuildReportValidate())->goCheck('detail'); - $result = BuildReportLogic::detail($params); - return $this->data($result); - } - public function personDetails(): \think\response\Json + + namespace app\adminapi\controller\build; + + + use app\adminapi\controller\BaseAdminController; + use app\adminapi\lists\build\BuildReportLists; + use app\adminapi\logic\build\BuildReportLogic; + use app\adminapi\validate\build\BuildReportValidate; + use app\common\model\build\BuildPlan; + use app\common\model\build\BuildReport; + use app\common\model\build\BuildReportDetail; + use app\common\model\project\ProjectPersonnel; + + + /** + * 施工汇报控制器 + * Class BuildReportController + * @package app\adminapi\controller\build + */ + class BuildReportController extends BaseAdminController { - $params = $this->request->get(['report_id','page_no','page_size']); - if(empty($params['report_id'])){ - return $this->fail('缺少必要参数'); + + + /** + * @notes 获取施工汇报列表 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function lists() + { + return $this->dataLists(new BuildReportLists()); } - $pageNo = empty($params['page_no']) ? 1 : $params['page_no']; - $pageSize = empty($params['page_size']) ? 15 : $params['page_size']; - $reportInfo = BuildReport::field('plan_id')->where('id',$params['report_id'])->findOrEmpty(); - if($reportInfo->isEmpty()){ - return $this->fail('施工汇报数据不存在'); + + + /** + * @notes 添加施工汇报 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function add() + { + $params = (new BuildReportValidate())->post()->goCheck('add'); + $result = BuildReportLogic::add($params, $this->adminId); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(BuildReportLogic::getError()); } - $planInfo = BuildPlan::field('price,unit')->where('id',$reportInfo['plan_id'])->findOrEmpty(); - $data = BuildReportDetail::field('person_id,work_num')->where('report_id',$params['report_id']) - ->page($pageNo,$pageSize)->order('id desc') - ->select()->each(function($item)use($planInfo){ - $person = ProjectPersonnel::field('name,idcard,work_type')->where('id',$item['person_id'])->findOrEmpty(); - $item['person_name'] = $person['name']; - $item['person_idcard'] = $person['idcard']; - $item['person_work_type_text'] = $person->work_type_text; - $item['price'] = $planInfo['price']; - $item['unit'] = $planInfo['unit']; - $item['amount'] = $item['price']*$item['work_num']; - return $item; - }) - ->toArray(); - $count = BuildReportDetail::field('id')->where('report_id',$params['report_id'])->count(); - $result = [ - 'count' => $count, - 'page_no' => $pageNo, - 'page_size' => $pageSize, - 'lists' => $data - ]; - return $this->success('请求成功',$result); - } -} \ No newline at end of file + + /** + * @notes 获取施工汇报详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function detail() + { + $params = (new BuildReportValidate())->goCheck('detail'); + $result = BuildReportLogic::detail($params); + return $this->data($result); + } + + public function personDetails(): \think\response\Json + { + $params = $this->request->get(['report_id', 'page_no', 'page_size']); + if (empty($params['report_id'])) { + return $this->fail('缺少必要参数'); + } + $pageNo = empty($params['page_no']) ? 1 : $params['page_no']; + $pageSize = empty($params['page_size']) ? 15 : $params['page_size']; + $reportInfo = BuildReport::field('plan_id')->where('id', $params['report_id'])->findOrEmpty(); + if ($reportInfo->isEmpty()) { + return $this->fail('施工汇报数据不存在'); + } + $planInfo = BuildPlan::field('price,unit')->where('id', $reportInfo['plan_id'])->findOrEmpty(); + $data = BuildReportDetail::field('person_id,work_num')->where('report_id', $params['report_id']) + ->page($pageNo, $pageSize)->order('id desc') + ->select()->each(function ($item) use ($planInfo) { + $person = ProjectPersonnel::field('name,idcard,work_type,remark')->where('id', $item['person_id'])->findOrEmpty(); + $item['person_name'] = $person['name']; + $item['person_idcard'] = $person['idcard']; + $item['remark'] = $person['remark']; + $item['person_work_type_text'] = $person->work_type_text; + $item['price'] = $planInfo['price']; + $item['unit'] = $planInfo['unit']; + $item['amount'] = $item['price'] * $item['work_num']; + return $item; + }) + ->toArray(); + $count = BuildReportDetail::field('id')->where('report_id', $params['report_id'])->count(); + $result = [ + 'count' => $count, + 'page_no' => $pageNo, + 'page_size' => $pageSize, + 'lists' => $data + ]; + return $this->success('请求成功', $result); + } + } \ No newline at end of file diff --git a/app/adminapi/controller/financial/FinancialBorrowMoneyController.php b/app/adminapi/controller/financial/FinancialBorrowMoneyController.php new file mode 100644 index 000000000..3f6e86cc1 --- /dev/null +++ b/app/adminapi/controller/financial/FinancialBorrowMoneyController.php @@ -0,0 +1,108 @@ +dataLists(new FinancialBorrowMoneyLists()); + } + + + /** + * @notes 添加财务管理--借款单 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function add() + { + $params = (new FinancialBorrowMoneyValidate())->post()->goCheck('add'); + $result = FinancialBorrowMoneyLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(FinancialBorrowMoneyLogic::getError()); + } + + + /** + * @notes 编辑财务管理--借款单 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function edit() + { + $params = (new FinancialBorrowMoneyValidate())->post()->goCheck('edit'); + $result = FinancialBorrowMoneyLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(FinancialBorrowMoneyLogic::getError()); + } + + + /** + * @notes 删除财务管理--借款单 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function delete() + { + $params = (new FinancialBorrowMoneyValidate())->post()->goCheck('delete'); + FinancialBorrowMoneyLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取财务管理--借款单详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function detail() + { + $params = (new FinancialBorrowMoneyValidate())->goCheck('detail'); + $result = FinancialBorrowMoneyLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/financial/FinancialBorrowMoneyLists.php b/app/adminapi/lists/financial/FinancialBorrowMoneyLists.php new file mode 100644 index 000000000..c6711c36f --- /dev/null +++ b/app/adminapi/lists/financial/FinancialBorrowMoneyLists.php @@ -0,0 +1,84 @@ + ['dept', 'cost_type', 'pay_type'], + '%like%' => ['code', 'create_user'], + ]; + } + + + /** + * @notes 获取财务管理--借款单列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function lists(): array + { + return FinancialBorrowMoney::where($this->searchWhere) + ->field(['id', 'code', 'dept', 'cost_type', 'pay_type', 'amount', 'content', 'create_user', 'create_time']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function ($data) { + $dept = Dept::field('name')->where('id', $data['dept'])->findOrEmpty(); + $data['dept_name'] = $dept['name']; + $data['pay_type_text'] = $data->pay_type_text; + $data['cost_type_text'] = $data->cost_type_text; + }) + ->toArray(); + } + + + /** + * @notes 获取财务管理--借款单数量 + * @return int + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function count(): int + { + return FinancialBorrowMoney::where($this->searchWhere)->count(); + } + + } \ No newline at end of file diff --git a/app/adminapi/logic/build/BuildReportLogic.php b/app/adminapi/logic/build/BuildReportLogic.php index adc3ab011..982ef531a 100644 --- a/app/adminapi/logic/build/BuildReportLogic.php +++ b/app/adminapi/logic/build/BuildReportLogic.php @@ -11,104 +11,105 @@ // +---------------------------------------------------------------------- // | author: likeadminTeam // +---------------------------------------------------------------------- - -namespace app\adminapi\logic\build; - - -use app\common\model\auth\Admin; -use app\common\model\build\BuildDivision; -use app\common\model\build\BuildPlan; -use app\common\model\build\BuildProcessSettings; -use app\common\model\build\BuildReport; -use app\common\logic\BaseLogic; -use app\common\model\build\BuildReportDetail; -use app\common\model\project\Project; -use app\common\model\project\ProjectMember; -use think\facade\Db; - - -/** - * 施工汇报逻辑 - * Class BuildReportLogic - * @package app\adminapi\logic\build - */ -class BuildReportLogic extends BaseLogic -{ - - - /** - * @notes 添加施工汇报 - * @param array $params - * @return bool - * @author likeadmin - * @date 2023/12/22 16:08 - */ - public static function add(array $params,$admin_id): bool - { - Db::startTrans(); - try { - $detail =$params['person_detail'];// json_decode($params['person_detail'],true); - $reportRes = BuildReport::create([ - 'report_code' => data_unique_code('施工汇报'), - 'plan_id' => $params['plan_id'], - 'scene_file' => !empty($params['scene_file']) ? json_encode($params['scene_file']) : null, - 'report_workload' => $params['report_workload'], - 'report_amount' => $params['report_amount'], - 'remark' => $params['remark'], - 'add_user' => $admin_id, - ]); - foreach($detail as $v){ - BuildReportDetail::create([ - 'report_id' => $reportRes->id, - 'person_id' => $v['person_id'], - 'work_num' => $v['work_num'], - 'remark' => $v['remark']??'' + + namespace app\adminapi\logic\build; + + + use app\common\logic\BaseLogic; + use app\common\model\auth\Admin; + use app\common\model\build\BuildDivision; + use app\common\model\build\BuildPlan; + use app\common\model\build\BuildProcessSettings; + use app\common\model\build\BuildReport; + use app\common\model\build\BuildReportDetail; + use app\common\model\project\Project; + use app\common\model\project\ProjectMember; + use think\facade\Db; + + + /** + * 施工汇报逻辑 + * Class BuildReportLogic + * @package app\adminapi\logic\build + */ + class BuildReportLogic extends BaseLogic + { + + + /** + * @notes 添加施工汇报 + * @param array $params + * @return bool + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public static function add(array $params, $admin_id): bool + { + Db::startTrans(); + try { + $detail = $params['person_detail'];// json_decode($params['person_detail'],true); + $reportRes = BuildReport::create([ + 'report_code' => data_unique_code('施工汇报'), + 'plan_id' => $params['plan_id'], + 'scene_file' => !empty($params['scene_file']) ? json_encode($params['scene_file']) : null, + 'report_workload' => $params['report_workload'], + 'report_amount' => $params['report_amount'], + 'remark' => $params['remark'], + 'add_user' => $admin_id, ]); + foreach ($detail as $v) { + BuildReportDetail::create([ + 'report_id' => $reportRes->id, + 'person_id' => $v['person_id'], + 'work_num' => $v['work_num'], + 'remark' => $v['remark'] ?? '' + ]); + } + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; } - Db::commit(); - return true; - } catch (\Exception $e) { - Db::rollback(); - self::setError($e->getMessage()); - return false; - } - } - - /** - * @notes 获取施工汇报详情 - * @param $params - * @return array - * @author likeadmin - * @date 2023/12/22 16:08 - */ - public static function detail($params): array - { - $data = BuildReport::findOrEmpty($params['id'])->toArray(); - if(empty($data)) return []; - $plan = BuildPlan::where('id',$data['plan_id'])->findOrEmpty(); - $project = Project::field('name')->where('id',$plan['project_id'])->findOrEmpty(); - $process = BuildProcessSettings::field('division_id,process_step_no,process_step,quality_control_points,annex')->where('id',$plan['process_id'])->findOrEmpty(); - $division = BuildDivision::field('subentry_engineering')->where('id',$process['division_id'])->findOrEmpty(); - $projectMember = ProjectMember::field('admin_id')->where('id',$plan['project_member_id'])->findOrEmpty(); - $admin = Admin::field('name')->where('id','in',[$projectMember['admin_id'],$data['add_user']])->column('name','id'); - $data['zy_code'] = $plan['zy_code']; - $data['project_name'] = $project['name']; - $data['subentry_engineering'] = $division['subentry_engineering']; - $data['process_step'] = $process['process_step']; - $data['process_step_no'] = $process['process_step_no']; - $data['quality_control_points'] = $process['quality_control_points']; - $data['process_file'] = $process['annex']; - $data['project_member_name'] = $admin[$projectMember['admin_id']]; - $data['work_user'] = $plan['work_user']; - $data['work_content'] = $plan['work_content']; - $data['plan_start_date'] = $plan['plan_start_date']; - $data['plan_end_date'] = $plan['plan_end_date']; - $data['unit'] = $plan['unit']; - $data['workload'] = $plan['workload']; - $data['price'] = $plan['price']; - $data['add_user_name'] = $admin[$data['add_user']]; - $data['residue_workload'] = ($data['workload'] - $data['report_workload']) <=0 ? 0 : $data['workload'] - $data['report_workload']; - $data['completion_degree'] = round($data['report_workload'] / $data['workload'],3).'%'; - return $data; - } -} \ No newline at end of file + } + + /** + * @notes 获取施工汇报详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public static function detail($params): array + { + $data = BuildReport::findOrEmpty($params['id'])->toArray(); + if (empty($data)) return []; + $plan = BuildPlan::where('id', $data['plan_id'])->findOrEmpty(); + $project = Project::field('name,project_code')->where('id', $plan['project_id'])->findOrEmpty(); + $process = BuildProcessSettings::field('division_id,process_step_no,process_step,quality_control_points,annex')->where('id', $plan['process_id'])->findOrEmpty(); + $division = BuildDivision::field('subentry_engineering')->where('id', $process['division_id'])->findOrEmpty(); + $projectMember = ProjectMember::field('admin_id')->where('id', $plan['project_member_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id', 'in', [$projectMember['admin_id'], $data['add_user']])->column('name', 'id'); + $data['zy_code'] = $plan['zy_code']; + $data['project_name'] = $project['name']; + $data['project_code'] = $project['project_code']; + $data['subentry_engineering'] = $division['subentry_engineering']; + $data['process_step'] = $process['process_step']; + $data['process_step_no'] = $process['process_step_no']; + $data['quality_control_points'] = $process['quality_control_points']; + $data['process_file'] = $process['annex']; + $data['project_member_name'] = $admin[$projectMember['admin_id']]; + $data['work_user'] = $plan['work_user']; + $data['work_content'] = $plan['work_content']; + $data['plan_start_date'] = $plan['plan_start_date']; + $data['plan_end_date'] = $plan['plan_end_date']; + $data['unit'] = $plan['unit']; + $data['workload'] = $plan['workload']; + $data['price'] = $plan['price']; + $data['add_user_name'] = $admin[$data['add_user']]; + $data['residue_workload'] = ($data['workload'] - $data['report_workload']) <= 0 ? 0 : $data['workload'] - $data['report_workload']; + $data['completion_degree'] = round($data['report_workload'] / $data['workload'], 3) . '%'; + return $data; + } + } \ No newline at end of file diff --git a/app/adminapi/logic/financial/FinancialBorrowMoneyLogic.php b/app/adminapi/logic/financial/FinancialBorrowMoneyLogic.php new file mode 100644 index 000000000..3501ba35a --- /dev/null +++ b/app/adminapi/logic/financial/FinancialBorrowMoneyLogic.php @@ -0,0 +1,126 @@ + data_unique_code('JKD'), + 'dept' => $params['dept'], + 'cost_type' => $params['cost_type'], + 'pay_type' => $params['pay_type'], + 'amount' => $params['amount'], + 'content' => $params['content'], + 'annex' => $params['annex'] ? json_encode($params['annex']) : null, + 'create_user' => $params['create_user'], + 'create_time' => !empty($params['create_time']) ? strtotime($params['create_time']) : time(), + ]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 编辑财务管理--借款单 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + FinancialBorrowMoney::where('id', $params['id'])->update([ + 'dept' => $params['dept'], + 'cost_type' => $params['cost_type'], + 'pay_type' => $params['pay_type'], + 'amount' => $params['amount'], + 'content' => $params['content'], + 'annex' => $params['annex'] ? json_encode($params['annex']) : null, + 'create_user' => $params['create_user'], + 'create_time' => !empty($params['create_time']) ? strtotime($params['create_time']) : time(), + 'update_time' => time() + ]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 删除财务管理--借款单 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public static function delete(array $params): bool + { + return FinancialBorrowMoney::destroy($params['id']); + } + + + /** + * @notes 获取财务管理--借款单详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public static function detail($params): array + { + $data = FinancialBorrowMoney::withoutField('update_time,delete_time')->findOrEmpty($params['id']); + $dept = Dept::field('name')->where('id', $data['dept'])->findOrEmpty(); + $data['dept_name'] = $dept['name']; + $data['pay_type_text'] = $data->pay_type_text; + $data['cost_type_text'] = $data->cost_type_text; + return $data->toArray(); + } + } \ No newline at end of file diff --git a/app/adminapi/validate/financial/FinancialBorrowMoneyValidate.php b/app/adminapi/validate/financial/FinancialBorrowMoneyValidate.php new file mode 100644 index 000000000..aa7d6e470 --- /dev/null +++ b/app/adminapi/validate/financial/FinancialBorrowMoneyValidate.php @@ -0,0 +1,137 @@ + 'require|checkData', + 'dept' => 'require|checkDept', + 'cost_type' => 'require|checkCostType', + 'pay_type' => 'require|checkPayType', + 'amount' => 'require|float|ge:0', + 'content' => 'require', + 'create_user' => 'require', + 'create_time' => 'require|dateFormat:Y-m-d H:i:s', + 'annex' => 'checkAnnex' + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'code' => '单据编号', + 'dept' => '所在部门', + 'cost_type' => '费用类别', + 'pay_type' => '支付方式', + 'amount' => '金额', + 'content' => '事由', + 'create_user' => '申请人', + 'create_time' => '申请日期', + ]; + + + /** + * @notes 添加场景 + * @return FinancialBorrowMoneyValidate + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function sceneAdd() + { + return $this->only(['dept', 'cost_type', 'pay_type', 'amount', 'content', 'create_user', 'create_time', 'annex']); + } + + + /** + * @notes 编辑场景 + * @return FinancialBorrowMoneyValidate + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function sceneEdit() + { + return $this->only(['id', 'dept', 'cost_type', 'pay_type', 'amount', 'content', 'create_user', 'create_time', 'annex']); + } + + + /** + * @notes 删除场景 + * @return FinancialBorrowMoneyValidate + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function sceneDelete() + { + return $this->only(['id'])->remove('id', 'checkData'); + } + + + /** + * @notes 详情场景 + * @return FinancialBorrowMoneyValidate + * @author likeadmin + * @date 2024/03/29 10:35 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkData($value): bool|string + { + $data = FinancialBorrowMoney::where('id', $value)->findOrEmpty(); + return $data->isEmpty() ? '数据不存在' : true; + } + + public function checkDept($value): bool|string + { + $data = Dept::where('id', $value)->findOrEmpty(); + return $data->isEmpty() ? '审批部门信息不存在' : true; + } + + public function checkCostType($value): bool|string + { + $dict = DictData::where('type_value', 'cost_type')->column('value'); + return !in_array($value, $dict) ? '费用类别数据值无效' : true; + } + + public function checkPayType($value): bool|string + { + $dict = DictData::where('type_value', 'financial_pay_type')->column('value'); + return !in_array($value, $dict) ? '支付方式数据值无效' : true; + } + + } \ No newline at end of file diff --git a/app/common/model/financial/FinancialBorrowMoney.php b/app/common/model/financial/FinancialBorrowMoney.php new file mode 100644 index 000000000..b91742883 --- /dev/null +++ b/app/common/model/financial/FinancialBorrowMoney.php @@ -0,0 +1,46 @@ +column('name', 'value'); + return $dictDate[$data['pay_type']]; + } + + public function getCostTypeTextAttr($value, $data) + { + $dictDate = DictData::where('type_value', 'cost_type')->column('name', 'value'); + return $dictDate[$data['cost_type']]; + } + } \ No newline at end of file