diff --git a/app/adminapi/controller/material/MaterialWarehouseController.php b/app/adminapi/controller/material/MaterialWarehouseController.php new file mode 100644 index 000000000..4b4013a42 --- /dev/null +++ b/app/adminapi/controller/material/MaterialWarehouseController.php @@ -0,0 +1,108 @@ +<?php +// +---------------------------------------------------------------------- +// | likeadmin快速开发前后端分离管理后台(PHP版) +// +---------------------------------------------------------------------- +// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力 +// | 开源版本可自由商用,可去除界面版权logo +// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin +// | github下载:https://github.com/likeshop-github/likeadmin +// | 访问官网:https://www.likeadmin.cn +// | likeadmin团队 版权所有 拥有最终解释权 +// +---------------------------------------------------------------------- +// | author: likeadminTeam +// +---------------------------------------------------------------------- + + +namespace app\adminapi\controller\material; + + +use app\adminapi\controller\BaseAdminController; +use app\adminapi\lists\material\MaterialWarehouseLists; +use app\adminapi\logic\material\MaterialWarehouseLogic; +use app\adminapi\validate\material\MaterialWarehouseValidate; + + +/** + * 仓库管理控制器 + * Class MaterialWarehouseController + * @package app\adminapi\controller\material + */ +class MaterialWarehouseController extends BaseAdminController +{ + + + /** + * @notes 获取仓库管理列表 + * @return \think\response\Json + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function lists() + { + return $this->dataLists(new MaterialWarehouseLists()); + } + + + /** + * @notes 添加仓库管理 + * @return \think\response\Json + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function add() + { + $params = (new MaterialWarehouseValidate())->post()->goCheck('add'); + $result = MaterialWarehouseLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(MaterialWarehouseLogic::getError()); + } + + + /** + * @notes 编辑仓库管理 + * @return \think\response\Json + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function edit() + { + $params = (new MaterialWarehouseValidate())->post()->goCheck('edit'); + $result = MaterialWarehouseLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(MaterialWarehouseLogic::getError()); + } + + + /** + * @notes 删除仓库管理 + * @return \think\response\Json + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function delete() + { + $params = (new MaterialWarehouseValidate())->post()->goCheck('delete'); + MaterialWarehouseLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取仓库管理详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function detail() + { + $params = (new MaterialWarehouseValidate())->goCheck('detail'); + $result = MaterialWarehouseLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/material/MaterialWarehouseLists.php b/app/adminapi/lists/material/MaterialWarehouseLists.php new file mode 100644 index 000000000..563c3f910 --- /dev/null +++ b/app/adminapi/lists/material/MaterialWarehouseLists.php @@ -0,0 +1,101 @@ +<?php +// +---------------------------------------------------------------------- +// | likeadmin快速开发前后端分离管理后台(PHP版) +// +---------------------------------------------------------------------- +// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力 +// | 开源版本可自由商用,可去除界面版权logo +// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin +// | github下载:https://github.com/likeshop-github/likeadmin +// | 访问官网:https://www.likeadmin.cn +// | likeadmin团队 版权所有 拥有最终解释权 +// +---------------------------------------------------------------------- +// | author: likeadminTeam +// +---------------------------------------------------------------------- + +namespace app\adminapi\lists\material; + + +use app\adminapi\lists\BaseAdminDataLists; +use app\common\model\auth\Admin; +use app\common\model\material\MaterialWarehouse; +use app\common\lists\ListsSearchInterface; +use app\common\model\project\Project; + + +/** + * 仓库管理列表 + * Class MaterialWarehouseLists + * @package app\adminapi\listsmaterial + */ +class MaterialWarehouseLists extends BaseAdminDataLists implements ListsSearchInterface +{ + + + /** + * @notes 设置搜索条件 + * @return \string[][] + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function setSearch(): array + { + return [ + '=' => ['is_mrp'], + '%like%' => ['code', 'name'], + ]; + } + + + /** + * @notes 获取仓库管理列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function lists(): array + { + $params = $this->request->get(['project_name']); + $where = []; + if(isset($params['project_name']) && $params['project_name'] != ''){ + $project_ids = Project::where('name','like','%'.$params['project_name'].'%')->column('id'); + $where[] = ['project_id','in',$project_ids]; + } + return MaterialWarehouse::where($this->searchWhere)->where($where) + ->field(['id', 'org_id', 'dept_id', 'project_id', 'code', 'name', 'is_mrp', 'head_user', 'address', 'telephone', 'remark', 'annex']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($item){ + $project = Project::field('name,project_code')->where('id',$item['project_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id',$item['head_user'])->findOrEmpty(); + $item['project_name'] = $project['name']; + $item['project_code'] = $project['project_code']; + $item['head_user'] = $admin['name']; + $item['is_mrp'] = $item->is_mrp_text; + unset($item['org_id'],$item['dept_id'],$item['project_id']); + return $item; + }) + ->toArray(); + } + + + /** + * @notes 获取仓库管理数量 + * @return int + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function count(): int + { + $params = $this->request->get(['project_name']); + $where = []; + if(isset($params['project_name']) && $params['project_name'] != ''){ + $project_ids = Project::where('name','like','%'.$params['project_name'].'%')->column('id'); + $where[] = ['project_id','in',$project_ids]; + } + return MaterialWarehouse::where($this->searchWhere)->where($where)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/material/MaterialWarehouseLogic.php b/app/adminapi/logic/material/MaterialWarehouseLogic.php new file mode 100644 index 000000000..f660507bc --- /dev/null +++ b/app/adminapi/logic/material/MaterialWarehouseLogic.php @@ -0,0 +1,140 @@ +<?php +// +---------------------------------------------------------------------- +// | likeadmin快速开发前后端分离管理后台(PHP版) +// +---------------------------------------------------------------------- +// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力 +// | 开源版本可自由商用,可去除界面版权logo +// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin +// | github下载:https://github.com/likeshop-github/likeadmin +// | 访问官网:https://www.likeadmin.cn +// | likeadmin团队 版权所有 拥有最终解释权 +// +---------------------------------------------------------------------- +// | author: likeadminTeam +// +---------------------------------------------------------------------- + +namespace app\adminapi\logic\material; + + +use app\common\model\auth\Admin; +use app\common\model\dept\Dept; +use app\common\model\dept\Orgs; +use app\common\model\material\MaterialWarehouse; +use app\common\logic\BaseLogic; +use app\common\model\project\Project; +use think\facade\Db; + + +/** + * 仓库管理逻辑 + * Class MaterialWarehouseLogic + * @package app\adminapi\logic\material + */ +class MaterialWarehouseLogic extends BaseLogic +{ + + + /** + * @notes 添加仓库管理 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public static function add(array $params): bool + { + Db::startTrans(); + try { + MaterialWarehouse::create([ + 'org_id' => $params['org_id'], + 'dept_id' => $params['dept_id'], + 'project_id' => $params['project_id'], + 'code' => data_unique_code('CK'), + 'name' => $params['name'], + 'is_mrp' => $params['is_mrp'], + 'head_user' => $params['head_user'], + 'address' => $params['address'] ?? '', + 'telephone' => $params['telephone'], + 'remark' => $params['remark'] ?? '', + 'annex' => !empty($params['annex']) ? $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/01/04 14:23 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + MaterialWarehouse::where('id', $params['id'])->update([ + 'org_id' => $params['org_id'], + 'dept_id' => $params['dept_id'], + 'project_id' => $params['project_id'], + 'code' => data_unique_code('CK'), + 'name' => $params['name'], + 'is_mrp' => $params['is_mrp'], + 'head_user' => $params['head_user'], + 'address' => $params['address'] ?? '', + 'telephone' => $params['telephone'], + 'remark' => $params['remark'] ?? '', + 'annex' => !empty($params['annex']) ? $params['annex'] : null, + '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/01/04 14:23 + */ + public static function delete(array $params): bool + { + return MaterialWarehouse::destroy($params['id']); + } + + + /** + * @notes 获取仓库管理详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public static function detail($params): array + { + $data = MaterialWarehouse::field('id,org_id,dept_id,project_id,code,name,is_mrp,head_user,address,telephone,remark,annex')->findOrEmpty($params['id']); + $org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty(); + $dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty(); + $project = Project::field('name,project_code')->where('id',$data['project_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id',$data['head_user'])->findOrEmpty(); + $data['org_name'] = $org['name']; + $data['dept_name'] = $dept['name']; + $data['project_name'] = $project['name']; + $data['project_code'] = $project['project_code']; + $data['head_user_name'] = $admin['name']; + $data['is_mrp_text'] = $data->is_mrp_text; + return $data->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/validate/material/MaterialWarehouseValidate.php b/app/adminapi/validate/material/MaterialWarehouseValidate.php new file mode 100644 index 000000000..64a98f5eb --- /dev/null +++ b/app/adminapi/validate/material/MaterialWarehouseValidate.php @@ -0,0 +1,155 @@ +<?php +// +---------------------------------------------------------------------- +// | likeadmin快速开发前后端分离管理后台(PHP版) +// +---------------------------------------------------------------------- +// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力 +// | 开源版本可自由商用,可去除界面版权logo +// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin +// | github下载:https://github.com/likeshop-github/likeadmin +// | 访问官网:https://www.likeadmin.cn +// | likeadmin团队 版权所有 拥有最终解释权 +// +---------------------------------------------------------------------- +// | author: likeadminTeam +// +---------------------------------------------------------------------- + +namespace app\adminapi\validate\material; + + +use app\common\model\auth\Admin; +use app\common\model\dept\Dept; +use app\common\model\dept\Orgs; +use app\common\model\project\Project; +use app\common\validate\BaseValidate; + + +/** + * 仓库管理验证器 + * Class MaterialWarehouseValidate + * @package app\adminapi\validate\material + */ +class MaterialWarehouseValidate extends BaseValidate +{ + + /** + * 设置校验规则 + * @var string[] + */ + protected $rule = [ + 'id' => 'require', + 'org_id' => 'require|checkOrg', + 'dept_id' => 'require|checkDept', + 'project_id' => 'require|checkProject', + 'name' => 'require', + 'is_mrp' => 'require|in:0,1', + 'head_user' => 'require|checkUser', + 'annex' => 'checkAnnex' + ]; + + protected $message = [ + 'id.require' => '缺少必要参数', + 'org_id.require' => '请选择组织', + 'dept_id.require' => '请选择部门', + 'project_id.require' => '请选择项目', + 'name.require' => '请填写仓库名称', + 'is_mrp.require' => '请选择是否是MRP仓库', + 'is_mrp.in' => '是否是MRP仓库选项值无效', + 'head_user.require' => '请选择负责人', + ]; + + + /** + * @notes 添加场景 + * @return MaterialWarehouseValidate + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function sceneAdd() + { + return $this->remove('id',true); + } + + + /** + * @notes 编辑场景 + * @return MaterialWarehouseValidate + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function sceneEdit() + {} + + + /** + * @notes 删除场景 + * @return MaterialWarehouseValidate + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return MaterialWarehouseValidate + * @author likeadmin + * @date 2024/01/04 14:23 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkOrg($value): bool|string + { + $org = Orgs::where('id',$value)->findOrEmpty(); + if($org->isEmpty()) { + return '组织不存在'; + } + return true; + } + + public function checkDept($value,$rule,$data): bool|string + { + $dept = Dept::where('id',$value)->findOrEmpty(); + if($dept->isEmpty()){ + return '部门不存在'; + } + if($dept['org_id'] != $data['org_id']){ + return '当前部门不属于所选择的组织'; + } + return true; + } + + public function checkProject($value): bool|string + { + $project = Project::where('id',$value)->findOrEmpty(); + if($project->isEmpty()){ + return '项目不存在'; + } + return true; + } + + public function checkUser($value): bool|string + { + $user = Admin::where('id',$value)->findOrEmpty(); + if($user->isEmpty()){ + return '负责人信息不存在'; + } + return true; + } + + public function checkAnnex($value): bool|string + { + if(!empty($value) && $value != ''){ + $annex = json_decode($value,true); + if(empty($annex) || !is_array($annex)){ + return '附件格式错误'; + } + } + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/material/MaterialWarehouse.php b/app/common/model/material/MaterialWarehouse.php new file mode 100644 index 000000000..64dc6fd57 --- /dev/null +++ b/app/common/model/material/MaterialWarehouse.php @@ -0,0 +1,43 @@ +<?php +// +---------------------------------------------------------------------- +// | likeadmin快速开发前后端分离管理后台(PHP版) +// +---------------------------------------------------------------------- +// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力 +// | 开源版本可自由商用,可去除界面版权logo +// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin +// | github下载:https://github.com/likeshop-github/likeadmin +// | 访问官网:https://www.likeadmin.cn +// | likeadmin团队 版权所有 拥有最终解释权 +// +---------------------------------------------------------------------- +// | author: likeadminTeam +// +---------------------------------------------------------------------- + +namespace app\common\model\material; + + +use app\common\model\BaseModel; +use think\model\concern\SoftDelete; + + +/** + * 仓库管理模型 + * Class MaterialWarehouse + * @package app\common\model\material + */ +class MaterialWarehouse extends BaseModel +{ + use SoftDelete; + protected $name = 'material_warehouse'; + protected $deleteTime = 'delete_time'; + + public function getAnnexAttr($value) + { + return empty($value) ? null : json_decode($value,true); + } + + public function getIsMrpTextAttr($value,$data): string + { + $mrp = [0=>'否',1=>'是']; + return $mrp[$data['is_mrp']]; + } +} \ No newline at end of file