diff --git a/app/adminapi/controller/works/rcbg/OaWorkController.php b/app/adminapi/controller/works/rcbg/OaWorkController.php new file mode 100644 index 000000000..5e94cee75 --- /dev/null +++ b/app/adminapi/controller/works/rcbg/OaWorkController.php @@ -0,0 +1,111 @@ +dataLists(new OaWorkLists()); + } + + + /** + * @notes 添加工作汇报 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function add() + { + $params = (new OaWorkValidate())->post()->goCheck('add'); + $result = OaWorkLogic::add($params,$this->adminId); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(OaWorkLogic::getError()); + } + + + /** + * @notes 编辑工作汇报 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function edit() + { + $params = (new OaWorkValidate())->post()->goCheck('edit'); + $result = OaWorkLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(OaWorkLogic::getError()); + } + + + /** + * @notes 删除工作汇报 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function delete() + { + $params = (new OaWorkValidate())->post()->goCheck('delete'); + $result = OaWorkLogic::delete($params); + if (true === $result) { + return $this->success('删除成功', [], 1, 1); + } + return $this->fail(OaWorkLogic::getError()); + } + + + /** + * @notes 获取工作汇报详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function detail() + { + $params = (new OaWorkValidate())->goCheck('detail'); + $result = OaWorkLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/controller/works/rcbg/OaWorkRecordController.php b/app/adminapi/controller/works/rcbg/OaWorkRecordController.php new file mode 100644 index 000000000..6b66bf832 --- /dev/null +++ b/app/adminapi/controller/works/rcbg/OaWorkRecordController.php @@ -0,0 +1,108 @@ +dataLists(new OaWorkRecordLists()); + } + + + /** + * @notes 添加汇报工作发送记录表 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function add() + { + $params = (new OaWorkRecordValidate())->post()->goCheck('add'); + $result = OaWorkRecordLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(OaWorkRecordLogic::getError()); + } + + + /** + * @notes 编辑汇报工作发送记录表 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function edit() + { + $params = (new OaWorkRecordValidate())->post()->goCheck('edit'); + $result = OaWorkRecordLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(OaWorkRecordLogic::getError()); + } + + + /** + * @notes 删除汇报工作发送记录表 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function delete() + { + $params = (new OaWorkRecordValidate())->post()->goCheck('delete'); + OaWorkRecordLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取汇报工作发送记录表详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function detail() + { + $params = (new OaWorkRecordValidate())->goCheck('detail'); + $result = OaWorkRecordLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/works/rcbg/OaWorkLists.php b/app/adminapi/lists/works/rcbg/OaWorkLists.php new file mode 100644 index 000000000..5a9a9552a --- /dev/null +++ b/app/adminapi/lists/works/rcbg/OaWorkLists.php @@ -0,0 +1,81 @@ + ['type'], + ]; + } + + + /** + * @notes 获取工作汇报列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function lists(): array + { + return OaWork::where($this->searchWhere)->where('admin_id',$this->adminId) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($data){ + $type_user = Admin::where('id','in',$data['type_user'])->column('name'); + $data['type_user_names'] = implode(',',$type_user); + $data['type_text'] = $data->type_text; + }) + ->toArray(); + } + + + /** + * @notes 获取工作汇报数量 + * @return int + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function count(): int + { + return OaWork::where($this->searchWhere)->where('admin_id',$this->adminId)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/lists/works/rcbg/OaWorkRecordLists.php b/app/adminapi/lists/works/rcbg/OaWorkRecordLists.php new file mode 100644 index 000000000..153edae8f --- /dev/null +++ b/app/adminapi/lists/works/rcbg/OaWorkRecordLists.php @@ -0,0 +1,85 @@ +searchWhere)->where('to_uid',$this->adminId) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($data){ + $work = OaWork::field('type,works')->where('id',$data['wid'])->findOrEmpty(); + $data['type_text'] = $work->type_text; + $data['works'] = $work['works']; + $from_user = Admin::field('name')->where('id',$data['from_uid'])->findOrEmpty(); + $data['from_user_name'] = $from_user['name'] ?? ''; + $data['is_read'] = !empty($data['read_time']) ? '已读' : '未读'; + }) + ->toArray(); + } + + + /** + * @notes 获取汇报工作发送记录表数量 + * @return int + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function count(): int + { + return OaWorkRecord::where($this->searchWhere)->where('to_uid',$this->adminId)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/works/rcbg/OaWorkLogic.php b/app/adminapi/logic/works/rcbg/OaWorkLogic.php new file mode 100644 index 000000000..256c03857 --- /dev/null +++ b/app/adminapi/logic/works/rcbg/OaWorkLogic.php @@ -0,0 +1,146 @@ + $params['type'], + 'type_user' => $params['type_user'], + 'works' => $params['works'], + 'plans' => $params['plans'] ?? '', + 'remark' => $params['remark'] ?? '', + 'admin_id' => $admin_id, + 'annex' => $params['annex'] ? json_encode($params['annex']) : null, + ]); + $data = []; + $to_users = explode(',',$params['type_user']); + foreach ($to_users as $v){ + $data[] = [ + 'wid' => $res['id'], + 'from_uid' => $admin_id, + 'to_uid' => $v, + 'send_time' => time(), + 'read_time' => 0 + ]; + } + (new OaWorkRecord()) -> saveAll($data); + 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/05/23 15:56 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + OaWork::where('id', $params['id'])->update([ + 'type' => $params['type'], + 'works' => $params['works'], + 'plans' => $params['plans'] ?? '', + 'remark' => $params['remark'] ?? '', + 'annex' => $params['annex'] ? json_encode($params['annex']) : null, + ]); + + 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/05/23 15:56 + */ + public static function delete(array $params): bool + { + Db::startTrans(); + try { + OaWork::destroy($params['id']); + OaWorkRecord::destroy(function($query)use($params){ + $query->where('wid','=',$params['id']); + }); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + + } + + + /** + * @notes 获取工作汇报详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public static function detail($params): array + { + $data = OaWork::findOrEmpty($params['id']); + $type_user = Admin::where('id','in',$data['type_user'])->column('name'); + $data['type_user_names'] = implode(',',$type_user); + $data['type_text'] = $data->type_text; + return $data->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/logic/works/rcbg/OaWorkRecordLogic.php b/app/adminapi/logic/works/rcbg/OaWorkRecordLogic.php new file mode 100644 index 000000000..eb82e3b28 --- /dev/null +++ b/app/adminapi/logic/works/rcbg/OaWorkRecordLogic.php @@ -0,0 +1,122 @@ + $params['wid'], + 'from_uid' => $params['from_uid'], + 'to_uid' => $params['to_uid'], + 'send_time' => $params['send_time'], + 'read_time' => $params['read_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/05/23 16:48 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + OaWorkRecord::where('id', $params['id'])->update([ + 'wid' => $params['wid'], + 'from_uid' => $params['from_uid'], + 'to_uid' => $params['to_uid'], + 'send_time' => $params['send_time'], + 'read_time' => $params['read_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/05/23 16:48 + */ + public static function delete(array $params): bool + { + return OaWorkRecord::destroy($params['id']); + } + + + /** + * @notes 获取汇报工作发送记录表详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public static function detail($params): array + { + $data = OaWorkRecord::findOrEmpty($params['id']); + $work = OaWork::field('type,type_user,works,plans,remark,annex')->where('id',$data['wid'])->findOrEmpty(); + $type_user = Admin::where('id','in',$work['type_user'])->column('name'); + $work['type_user_names'] = implode(',',$type_user); + $work['type_text'] = $work->type_text; + $data['work_info'] = $work->toArray(); + $from_user = Admin::field('name')->where('id',$data['from_uid'])->findOrEmpty(); + $data['from_user_name'] = $from_user['name'] ?? ''; + return $data->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/validate/works/rcbg/OaWorkRecordValidate.php b/app/adminapi/validate/works/rcbg/OaWorkRecordValidate.php new file mode 100644 index 000000000..b15e9b2a9 --- /dev/null +++ b/app/adminapi/validate/works/rcbg/OaWorkRecordValidate.php @@ -0,0 +1,104 @@ + 'require', + 'wid' => 'require', + 'from_uid' => 'require', + 'to_uid' => 'require', + 'send_time' => 'require', + 'read_time' => 'require', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'wid' => '汇报工作id', + 'from_uid' => '发送人id', + 'to_uid' => '接收人id', + 'send_time' => '发送日期', + 'read_time' => '阅读时间', + ]; + + + /** + * @notes 添加场景 + * @return OaWorkRecordValidate + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function sceneAdd() + { + return $this->only(['wid','from_uid','to_uid','send_time','read_time']); + } + + + /** + * @notes 编辑场景 + * @return OaWorkRecordValidate + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function sceneEdit() + { + return $this->only(['id','wid','from_uid','to_uid','send_time','read_time']); + } + + + /** + * @notes 删除场景 + * @return OaWorkRecordValidate + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return OaWorkRecordValidate + * @author likeadmin + * @date 2024/05/23 16:48 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + +} \ No newline at end of file diff --git a/app/adminapi/validate/works/rcbg/OaWorkValidate.php b/app/adminapi/validate/works/rcbg/OaWorkValidate.php new file mode 100644 index 000000000..10a8e855d --- /dev/null +++ b/app/adminapi/validate/works/rcbg/OaWorkValidate.php @@ -0,0 +1,110 @@ + 'require', + 'type' => 'require|integer|in:1,2,3', + 'type_user' => 'require|checkTypeUser', + 'works' => 'require', + 'annex' => 'checkAnnex', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'type' => '类型', + 'type_user' => '接受人员ID', + 'works' => '汇报工作内容', + 'annex' => '附件' + ]; + + + /** + * @notes 添加场景 + * @return OaWorkValidate + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function sceneAdd() + { + return $this->only(['type','type_user','works','plans','remark','annex']); + } + + + /** + * @notes 编辑场景 + * @return OaWorkValidate + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function sceneEdit() + { + return $this->only(['id','type','works','plans','remark','annex'])->remove('type_user',true); + } + + + /** + * @notes 删除场景 + * @return OaWorkValidate + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return OaWorkValidate + * @author likeadmin + * @date 2024/05/23 15:56 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkTypeUser($value): bool|string + { + if(empty($value) || empty(explode(',',$value))){ + return '接受人员数据格式错误'; + } + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/works/rcbg/OaWork.php b/app/common/model/works/rcbg/OaWork.php new file mode 100644 index 000000000..c819227b4 --- /dev/null +++ b/app/common/model/works/rcbg/OaWork.php @@ -0,0 +1,38 @@ +'日报', 2=>'周报', 3=>'月报']; + return !empty($data['type']) ? $arr[$data['type']] : ''; + } +} \ No newline at end of file diff --git a/app/common/model/works/rcbg/OaWorkRecord.php b/app/common/model/works/rcbg/OaWorkRecord.php new file mode 100644 index 000000000..995f50d29 --- /dev/null +++ b/app/common/model/works/rcbg/OaWorkRecord.php @@ -0,0 +1,34 @@ +