• Java项目:物资发放管理系统(java+Springboot+HTML+layui+Mysql)


    源码获取:俺的博客首页 "资源" 里下载!

    项目介绍

    本项目有物资管理员与普通员工两种角色;

    普通员工具有以下功能:申领物资;撤销申请;查看待领任务。
    (1)申领物资:提交物资领取申请。
    (2)撤销申请:对于物资管理员还未审核的申请,可以撤销;已审核的申请则不能撤销。
    (3)查看待领任务:查看已通过审核的申请和物资管理员发起的领取任务。

    物资管理员拥有以下功能:物资信息管理;物资入库;物资发放;查看物资库存;审批申请。
    (1)物资信息管理:添加物资类别;添加、修改、删除物资信息;按名称或类别或编号查询物资信息。
    (2)物资入库:增加物资的库存量;可以按入库时间来查看入库信息。
    (3)物资发放:向指定人发放一定数量的物资,并在其领取后进行登记。
    (4)查看物资库存:查看所有物资的库存量。
    (5)审批申请:查看和审批物资领取申请,同意则员工可以领取物资,不同意则驳回该申请,不允许领取物资。

    环境需要

    1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
    2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
    3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
    4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
    5.数据库:MySql 8.0/5.7版本;
    6.是否Maven项目:是;

    技术栈

    springboot+mysql+layui+CSS+JavaScript

    使用说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
    2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
    3. 将项目中application.properties配置文件中的数据库配置改为自己的配置;
    4. 运行项目,在浏览器中输入http://localhost:8080 访问

     

     

     

     

     

     

     

    登录管理控制层:

    1. @Controller
    2. @RequestMapping("/")
    3. public class IndexController {
    4. @Resource
    5. private IndexService indexService;
    6. @Resource
    7. private MenuService menuService;
    8. @RequestMapping(value = "/")
    9. public String index() {
    10. return "/login";
    11. }
    12. @RequestMapping(value = "/login.html")
    13. public String toLogin() {
    14. return "/login";
    15. }
    16. @RequestMapping(value = "/home.html")
    17. public String home() {
    18. return "/home";
    19. }
    20. @RequestMapping(value = "/welcome.html")
    21. public String welcome() {
    22. return "/welcome";
    23. }
    24. /**
    25. * 登录
    26. *
    27. * @param request
    28. * @param session
    29. * @return
    30. */
    31. @ResponseBody
    32. @RequestMapping(value = "/login.action")
    33. public String login(@RequestBody Map<String, String> request, HttpSession session) {
    34. Map<String, Object> map = new HashMap<>();
    35. String uid = request.get("uid");
    36. String password = request.get("password");
    37. System.out.println("uid:" + uid + "--pwd:" + password);
    38. User user = indexService.findUser(uid, password);
    39. if (user != null) {
    40. session.setAttribute("uid", uid);
    41. session.setAttribute("uname", user.getUname());
    42. session.setAttribute("utype", user.getUtype());
    43. map.put("msg","登录成功");
    44. map.put("success", true);
    45. } else {
    46. map.put("success", false);
    47. map.put("msg", "账号或密码错误!");
    48. }
    49. return JSON.toJSONString(map);
    50. }
    51. /**
    52. * 加载菜单列表
    53. *
    54. * @param session
    55. * @return
    56. */
    57. @ResponseBody
    58. @RequestMapping(value = "/api/loadMenuList")
    59. public String loadMenuList(HttpSession session) {
    60. Integer utype = (Integer) session.getAttribute("utype");
    61. String initJson = menuService.loadMenuList(utype);
    62. return initJson;
    63. }
    64. /**
    65. * 退出登录
    66. *
    67. * @param session
    68. * @return 返回到登录界面
    69. */
    70. @RequestMapping(value = "/logout.action")
    71. public String logout(HttpSession session) {
    72. // 清空session中的属性
    73. session.removeAttribute("uid");
    74. session.removeAttribute("uname");
    75. session.removeAttribute("utype");
    76. //让session无效
    77. session.invalidate();
    78. return "redirect:/login.html";
    79. }
    80. }

    物资管理控制层:

    1. @Controller
    2. @RequestMapping("/mh")
    3. public class MHController {
    4. @Resource
    5. private KindService kindService;
    6. @Resource
    7. private MaterialService materialService;
    8. @Resource
    9. private PutinService putinService;
    10. @Resource
    11. private StoreService storeService;
    12. @Resource
    13. private RequisitionService requisitionService;
    14. @Resource
    15. private IndexService indexService;
    16. @RequestMapping(value = "/info.html")
    17. public String materialInfo() {
    18. return "/mh/material-info.html";
    19. }
    20. /**
    21. * 获取全部种类
    22. *
    23. * @return
    24. */
    25. @ResponseBody
    26. @RequestMapping(value = "/info/getOptions.action")
    27. public String getSelectOptions() {
    28. Map<String, Object> map = new HashMap<>();
    29. List<Kind> list = kindService.findAllKind();
    30. if (list != null) {
    31. map.put("success", true);
    32. map.put("data", list);
    33. } else {
    34. map.put("success", false);
    35. Kind kind = new Kind("005", "其它");
    36. map.put("data", kind);
    37. }
    38. System.out.println(map);
    39. return JSON.toJSONString(map);
    40. }
    41. /**
    42. * 上传物资图片
    43. *
    44. * @param file
    45. * @param request
    46. * @return
    47. */
    48. @ResponseBody
    49. @RequestMapping(value = "/info/uploadImage")
    50. public String uploadImage(MultipartFile file, HttpServletRequest request) {
    51. HashMap<String, Object> map = new HashMap<>();
    52. HashMap<String, Object> data = new HashMap<>();
    53. try {
    54. if (file != null) {
    55. String originalFilename = file.getOriginalFilename();
    56. Date date = new Date();
    57. String fileName = date.getTime() + "-" + originalFilename;
    58. // 类路径
    59. String classPath = "F:/IDEA/workspace/MMS/mms/target/classes/static";
    60. // 父路径
    61. String src = "/upload/";
    62. File directory = new File(classPath, src);
    63. if (!directory.exists()) {
    64. directory.mkdir();
    65. }
    66. // 文件名
    67. String imagePath = directory.getPath() + "\\" + fileName;
    68. file.transferTo(new File(imagePath));
    69. data.put("src", src + fileName);
    70. map.put("code", 0);
    71. map.put("msg", "上传成功!");
    72. map.put("data", data);
    73. return JSON.toJSONString(map);
    74. } else {
    75. map.put("code", -1);
    76. map.put("msg", "请选择图片!");
    77. return JSON.toJSONString(map);
    78. }
    79. } catch (Exception e) {
    80. e.printStackTrace();
    81. map.put("code", -1);
    82. map.put("msg", "上传失败,请稍后重试!");
    83. return JSON.toJSONString(map);
    84. }
    85. }
    86. /**
    87. * 添加物资信息
    88. *
    89. * @param mi
    90. * @return
    91. */
    92. @ResponseBody
    93. @RequestMapping(value = "/info/add")
    94. public String addMaterialInfo(Material mi) {
    95. HashMap<String, Object> map = new HashMap<>();
    96. System.out.println(mi);
    97. boolean result = materialService.addMaterialInfo(mi);
    98. if (result) {
    99. map.put("success", true);
    100. map.put("msg", "添加成功!");
    101. } else {
    102. map.put("success", false);
    103. map.put("msg", "添加失败,请稍后再试!");
    104. }
    105. return JSON.toJSONString(map);
    106. }
    107. /**
    108. * 查看物资信息列表
    109. *
    110. * @param mv
    111. * @return
    112. */
    113. @ResponseBody
    114. @RequestMapping(value = "/info/list")
    115. public DataGridViewResult materialInfoList(MaterialVo mv) {
    116. // 设置分页信息
    117. PageHelper.startPage(mv.getPage(), mv.getLimit());
    118. // 查询
    119. List<Material> list = materialService.findMaterialInfoListByPage(mv);
    120. // 创建分页对象
    121. PageInfo<Material> pageInfo = new PageInfo<Material>(list);
    122. // 按接口要求返回数据
    123. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    124. return data;
    125. }
    126. /**
    127. * 修改物资信息
    128. *
    129. * @param mi
    130. * @return
    131. */
    132. @ResponseBody
    133. @RequestMapping(value = "/info/update")
    134. public String updateMaterialInfo(Material mi) {
    135. HashMap<String, Object> map = new HashMap<>();
    136. boolean result = materialService.updateMaterialInfo(mi);
    137. if (result) {
    138. map.put("success", true);
    139. map.put("msg", "更改成功!");
    140. } else {
    141. map.put("success", false);
    142. map.put("msg", "更改失败!");
    143. }
    144. return JSON.toJSONString(map);
    145. }
    146. /**
    147. * 删除物资信息
    148. *
    149. * @param request
    150. * @return
    151. */
    152. @ResponseBody
    153. @RequestMapping(value = "/info/delete")
    154. public String deleteMaterialInfo(HttpServletRequest request) {
    155. HashMap<String, Object> map = new HashMap<>();
    156. String params = request.getParameter("params");
    157. try {
    158. if (!params.equals("") && params != "") {
    159. // 获取mid数组
    160. JSONArray jsonArray = JSONArray.parseArray(params);
    161. List<String> list = new ArrayList<>();
    162. for (int i = 0; i < jsonArray.size(); i++) {
    163. JSONObject obj = jsonArray.getJSONObject(i);
    164. String mid = (String) obj.get("mid");
    165. System.out.println(mid);
    166. list.add(mid);
    167. }
    168. boolean result = materialService.deleteMaterialInfo(list);
    169. if (result) {
    170. map.put("success", true);
    171. map.put("msg", "删除成功!");
    172. } else {
    173. map.put("success", false);
    174. map.put("msg", "删除失败!");
    175. }
    176. }
    177. } catch (Exception e) {
    178. e.printStackTrace();
    179. map.put("success", false);
    180. map.put("msg", "删除失败!");
    181. }
    182. return JSON.toJSONString(map);
    183. }
    184. /**
    185. * 添加物资类别
    186. *
    187. * @param kd
    188. * @return
    189. */
    190. @ResponseBody
    191. @RequestMapping(value = "/kind/add")
    192. public String addKind(Kind kd) {
    193. HashMap<String, Object> map = new HashMap<>();
    194. System.out.println(kd);
    195. boolean result = kindService.addKind(kd);
    196. if (result) {
    197. map.put("success", true);
    198. map.put("msg", "添加成功!");
    199. } else {
    200. map.put("success", false);
    201. map.put("msg", "添加失败,请稍后再试!");
    202. }
    203. return JSON.toJSONString(map);
    204. }
    205. @RequestMapping(value = "/putin.html")
    206. public String putinRecords(){
    207. return "/mh/putin.html";
    208. }
    209. /**
    210. * 获取全部的物资名称
    211. *
    212. * @return
    213. */
    214. @ResponseBody
    215. @RequestMapping(value = "/putin/getMname.action")
    216. public String getMnameOptions() {
    217. Map<String, Object> map = new HashMap<>();
    218. List<Material> list = materialService.findAllMname();
    219. if (list != null) {
    220. map.put("success", true);
    221. map.put("data", list);
    222. } else {
    223. map.put("success", false);
    224. }
    225. return JSON.toJSONString(map);
    226. }
    227. /**
    228. * 物资入库
    229. * @param pi
    230. * @return
    231. */
    232. @ResponseBody
    233. @RequestMapping(value = "/putin/add")
    234. public String addPutinInfo(Putin pi,HttpServletRequest request) {
    235. HashMap<String, Object> map = new HashMap<>();
    236. // 获取经办人信息
    237. String uname = (String)request.getSession().getAttribute("uname");
    238. pi.setPagent(uname);
    239. // 获取当前日期
    240. Date date = new Date();
    241. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    242. pi.setPdate(sdf.format(date));
    243. // 生成时间戳,保证主键的唯一性
    244. String pno = String.valueOf(date.getTime());
    245. pi.setPno(pno);
    246. System.out.println(pi);
    247. boolean result = putinService.addPutin(pi);
    248. if (result) {
    249. map.put("success", true);
    250. map.put("msg", "入库成功!");
    251. } else {
    252. map.put("success", false);
    253. map.put("msg", "入库失败,请稍后再试!");
    254. }
    255. return JSON.toJSONString(map);
    256. }
    257. /**
    258. * 查询物资入库信息
    259. * @param pv
    260. * @return
    261. */
    262. @RequestMapping(value = "/putin/list")
    263. @ResponseBody
    264. public DataGridViewResult findPutinList(PutinVo pv){
    265. // 设置分页信息
    266. PageHelper.startPage(pv.getPage(), pv.getLimit());
    267. // 查询
    268. List<Putin> list = putinService.findPutinList(pv);
    269. // 创建分页对象
    270. PageInfo<Putin> pageInfo = new PageInfo<Putin>(list);
    271. // 按接口要求返回数据
    272. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    273. return data;
    274. }
    275. @RequestMapping(value = "/store.html")
    276. public String storeInfo(){
    277. return "/mh/store.html";
    278. }
    279. /**
    280. * 查询物资的库存信息
    281. * @param sv
    282. * @return
    283. */
    284. @RequestMapping(value = "/store/list")
    285. @ResponseBody
    286. public DataGridViewResult findStoreList(StoreVo sv){
    287. // 设置分页信息
    288. PageHelper.startPage(sv.getPage(), sv.getLimit());
    289. // 查询
    290. List<Store> list = storeService.findStoreList(sv);
    291. // 创建分页对象
    292. PageInfo<Store> pageInfo = new PageInfo<Store>(list);
    293. // 按接口要求返回数据
    294. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    295. return data;
    296. }
    297. @RequestMapping(value = "/approve.html")
    298. public String approve(){
    299. return "/mh/approve.html";
    300. }
    301. /**
    302. * 查询待审核的领用申请
    303. * @param rv
    304. * @return
    305. */
    306. @RequestMapping(value = "/approve/list")
    307. @ResponseBody
    308. public DataGridViewResult approveList(RequisitionVo rv){
    309. rv.setRstatus("申请中");
    310. // 设置分页信息
    311. PageHelper.startPage(rv.getPage(), rv.getLimit());
    312. // 查询
    313. List<Requisition> list = requisitionService.findApproveList(rv);
    314. // 创建分页对象
    315. PageInfo<Requisition> pageInfo = new PageInfo<>(list);
    316. // 按接口要求返回数据
    317. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    318. return data;
    319. }
    320. /**
    321. * 审批申请
    322. * @param rt
    323. * @param request
    324. * @return
    325. */
    326. @ResponseBody
    327. @RequestMapping(value = "/approve/approve.action")
    328. public String doApprove(Requisition rt,HttpServletRequest request){
    329. // 审核人
    330. String uname = (String)request.getSession().getAttribute("uname");
    331. rt.setRverifier(uname);
    332. System.out.println(rt);
    333. HashMap<String, Object> map = new HashMap<>();
    334. boolean result = requisitionService.updateRstatus(rt);
    335. if (result) {
    336. map.put("success", true);
    337. map.put("msg", "审核成功!");
    338. } else {
    339. map.put("success", false);
    340. map.put("msg", "审核失败,请稍后再试!");
    341. }
    342. return JSON.toJSONString(map);
    343. }
    344. /**
    345. * 物资发放页面
    346. * @return
    347. */
    348. @RequestMapping(value = "/distribute.html")
    349. public String distribute(){
    350. return "/mh/distribute.html";
    351. }
    352. /**
    353. * 查询所有的领用记录
    354. * @param rv
    355. * @return
    356. */
    357. @RequestMapping(value = "/distribute/list")
    358. @ResponseBody
    359. public DataGridViewResult distributeList(RequisitionVo rv){
    360. // 设置分页信息
    361. PageHelper.startPage(rv.getPage(), rv.getLimit());
    362. // 查询
    363. List<Requisition> list = requisitionService.findAll(rv);
    364. // 创建分页对象
    365. PageInfo<Requisition> pageInfo = new PageInfo<>(list);
    366. // 按接口要求返回数据
    367. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    368. return data;
    369. }
    370. /**
    371. * 领用登记
    372. * @param rt
    373. * @param request
    374. * @return
    375. */
    376. @ResponseBody
    377. @RequestMapping(value = "/distribute/received.action")
    378. public String received(Requisition rt,HttpServletRequest request){
    379. // 发放人
    380. String uname = (String)request.getSession().getAttribute("uname");
    381. rt.setRagent(uname);
    382. // 领用日期
    383. Date date = new Date();
    384. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    385. rt.setRtaketime(sdf.format(date));
    386. HashMap<String, Object> map = new HashMap<>();
    387. boolean result = requisitionService.received(rt);
    388. if (result) {
    389. map.put("success", true);
    390. map.put("msg", "登记成功!");
    391. } else {
    392. map.put("success", false);
    393. map.put("msg", "登记失败,库存不足或系统错误,请稍后重试!");
    394. }
    395. return JSON.toJSONString(map);
    396. }
    397. /**
    398. * 获取普通员工
    399. * @return
    400. */
    401. @RequestMapping(value = "/distribute/getUname.action")
    402. @ResponseBody
    403. public String getUname(){
    404. Map<String, Object> map = new HashMap<>();
    405. Integer utype = 0;
    406. List<User> list = indexService.getUname(utype);
    407. if (list != null) {
    408. map.put("success", true);
    409. map.put("data", list);
    410. } else {
    411. map.put("success", false);
    412. }
    413. return JSON.toJSONString(map);
    414. }
    415. /**
    416. * 发布领取任务
    417. * @param rt
    418. * @param request
    419. * @return
    420. */
    421. @ResponseBody
    422. @RequestMapping(value = "/distribute/give")
    423. public String give(Requisition rt,HttpServletRequest request){
    424. // 审核人
    425. String uname = (String)request.getSession().getAttribute("uname");
    426. rt.setRverifier(uname);
    427. // 任务发布日期(即申请日期)
    428. Date date = new Date();
    429. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    430. rt.setRapplytime(sdf.format(date));
    431. // 申请类型
    432. rt.setRtype("直接发放");
    433. // 时间戳,作为主键
    434. String rid = String.valueOf(date.getTime());
    435. rt.setRid(rid);
    436. // 申请进度
    437. rt.setRstatus("待领取");
    438. System.out.println(rt);
    439. HashMap<String, Object> map = new HashMap<>();
    440. boolean result = requisitionService.give(rt);
    441. if (result) {
    442. map.put("success", true);
    443. map.put("msg", "发布任务成功!");
    444. } else {
    445. map.put("success", false);
    446. map.put("msg", "发布任务失败,请稍后重试!");
    447. }
    448. return JSON.toJSONString(map);
    449. }
    450. }

    申领信息管理控制层: 

    1. @Controller
    2. @RequestMapping("/staff")
    3. public class StaffController {
    4. @Resource
    5. private RequisitionService requisitionService;
    6. @RequestMapping(value = "/apply.html")
    7. public String apply() {
    8. return "/staff/apply.html";
    9. }
    10. /**
    11. * 查看申领信息,只能查看自己的
    12. * @param rv
    13. * @param request
    14. * @return
    15. */
    16. @ResponseBody
    17. @RequestMapping(value = "/apply/list")
    18. public DataGridViewResult applyList(RequisitionVo rv,HttpServletRequest request) {
    19. String uname = (String)request.getSession().getAttribute("uname");
    20. rv.setRtaker(uname);
    21. // 设置分页信息
    22. PageHelper.startPage(rv.getPage(), rv.getLimit());
    23. // 查询
    24. List<Requisition> list = requisitionService.findRequisitionList(rv);
    25. // 创建分页对象
    26. PageInfo<Requisition> pageInfo = new PageInfo<>(list);
    27. // 按接口要求返回数据
    28. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    29. return data;
    30. }
    31. /**
    32. * 提交申请
    33. *
    34. * @param rt
    35. * @return
    36. */
    37. @ResponseBody
    38. @RequestMapping(value = "/apply/add")
    39. public String addPutinInfo(Requisition rt, HttpServletRequest request) {
    40. HashMap<String, Object> map = new HashMap<>();
    41. // 获取领用人
    42. String uname = (String) request.getSession().getAttribute("uname");
    43. rt.setRtaker(uname);
    44. // 生成时间戳,保证主键的唯一性
    45. Date date = new Date();
    46. String rid = String.valueOf(date.getTime());
    47. rt.setRid(rid);
    48. rt.setRstatus("申请中");
    49. rt.setRtype("申请发放");
    50. System.out.println(rt);
    51. boolean result = requisitionService.add(rt);
    52. if (result) {
    53. map.put("success", true);
    54. map.put("msg", "提交申请成功!");
    55. } else {
    56. map.put("success", false);
    57. map.put("msg", "提交申请失败,请稍后再试!");
    58. }
    59. return JSON.toJSONString(map);
    60. }
    61. /**
    62. * 撤销申请
    63. * @param rid
    64. * @return
    65. */
    66. @ResponseBody
    67. @RequestMapping(value = "/apply/revoke")
    68. public String revoke(@RequestParam("rid") String rid) {
    69. HashMap<String, Object> map = new HashMap<>();
    70. boolean result = requisitionService.revoke(rid);
    71. if (result) {
    72. map.put("success", true);
    73. map.put("msg", "撤销成功!");
    74. } else {
    75. map.put("success", false);
    76. map.put("msg", "撤销失败,请稍后重试!");
    77. }
    78. return JSON.toJSONString(map);
    79. }
    80. @RequestMapping(value = "/todo.html")
    81. public String todo(){
    82. return "/staff/todo.html";
    83. }
    84. /**
    85. * 待领取列表
    86. * @param rv
    87. * @return
    88. */
    89. @ResponseBody
    90. @RequestMapping(value = "/todo/list")
    91. public DataGridViewResult todoList(RequisitionVo rv,HttpServletRequest request){
    92. String uname = (String)request.getSession().getAttribute("uname");
    93. rv.setRtaker(uname);
    94. rv.setRstatus("待领取");
    95. // 设置分页信息
    96. PageHelper.startPage(rv.getPage(), rv.getLimit());
    97. // 查询
    98. List<Requisition> list = requisitionService.findRequisitionList(rv);
    99. // 创建分页对象
    100. PageInfo<Requisition> pageInfo = new PageInfo<Requisition>(list);
    101. // 按接口要求返回数据
    102. DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
    103. return data;
    104. }
    105. }

    源码获取:俺的博客首页 "资源" 里下载! 

  • 相关阅读:
    Qt多弹窗实现包括QDialog、QWidget、QMainWindow
    【SpringCloud】SpringCloud简介
    基于遗传算法的红绿灯间隔时间优化(代码完整,数据齐全)
    Rust错误处理机制:优雅地管理错误
    1.工具-VSCode有哪些常用快捷键
    Python实现喷泉粒子系统(Win11)
    java-php-python-基于Web的社区商超系统的设计与实现计算机毕业设计
    MySQl有哪些索引(种类)?索引特点?为什么要使用索引?
    史上超全!Docker命令全集,值得收藏!
    针对多分类问题,使用深度学习--Keras进行微调提升性能
  • 原文地址:https://blog.csdn.net/m0_66863468/article/details/125612014