• Java项目:送水公司管理系统(java+SpringBoot+html+Mybatis+Mysql)


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

    项目介绍

    这个项目是一个基于SpringBoot+MyBatis的送水公司管理系统

    管理员权限包括:
    客户管理
    送水工管理
    送水历史管理
    计算工资
    统计送水数量

    环境需要

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


    技术栈

    1.后端:SpringBoot+Mybatis+Mysql
    2.前端:html+css+javascript


    使用说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
    2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
    3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
    4. 运行项目,在浏览器中输入http://localhost:8091/ 注意:端口不要修改,否则会有异常
    管理员账户:admin/admin

     

     

     

     

     

    用户管理控制层: 

    1. @Controller
    2. @RequestMapping("/cust")
    3. @Slf4j
    4. public class CustomerController {
    5. /**
    6. * 控制器依赖业务逻辑,按照类型自动装配CustomerService对象
    7. */
    8. @Autowired
    9. private CustomerService customerService ;
    10. /**
    11. * 用户点击"客户管理"超链接按钮,显示所有的客户信息
    12. * 步骤:
    13. * 1 调用CustomerService对象的listCustomer方法查询所有的客户信息
    14. * 2 将客户信息渲染到客户列表页面
    15. * 3 跳转到客户列表页面
    16. * @param model 在前端和后端之间传递数据的对象
    17. * @return 客户列表页面
    18. */
    19. @RequestMapping("/listCust")
    20. public String listCustomer(Model model) {
    21. List<Customer> custList = customerService.listCustomer();
    22. model.addAttribute("custList",custList);
    23. return "customerList";
    24. }
    25. /**
    26. 点击“客户列表”页面的“添加”按钮,跳转到“添加客户”页面
    27. */
    28. @RequestMapping("/preSaveCust")
    29. public String preSaveCustomer() {
    30. return "customerSave";
    31. }
    32. /**
    33. * 在“添加客户”页面的表单填写要添加的客户信息,点击“提交”按钮,处理添加客户的请求
    34. * 步骤:
    35. * 1 调用CustomerService对象的saveCustomer添加客户信息
    36. * 2 重定向到客户列表,显示新添加的客户信息
    37. * @param customer 表单采集的客户对象
    38. * @return 客户列表,显示添加的新客户信息
    39. */
    40. @RequestMapping(value = "/saveCust",method = RequestMethod.POST)
    41. public String saveCustomer(Customer customer) {
    42. log.info("customer ==="+ customer);
    43. int rows = customerService.saveCustomer(customer);
    44. log.info("save customer rows = "+rows);
    45. // 添加成功之后重新查询客户列表,显示新添加的客户信息
    46. return "redirect:/cust/listCust";
    47. }
    48. /**
    49. * 在浏览器上输入要搜索的“客户名称”,点击“搜索按钮”,根据条件搜索满足条件的客户,将客户列表显示到前端页面
    50. * 步骤:
    51. * 1 调用CustomerService对象的searchCustomer方法根据客户名称搜索满足条件的客户
    52. * 2 将客户列表渲染到前端(客户列表)页面
    53. * 3 跳转到客户列表页面
    54. * @param custName 客户名称
    55. * @param model
    56. * @return 客户列表页面
    57. */
    58. @RequestMapping("/searchCust")
    59. public String searchCustomer(String custName, Model model) {
    60. log.info("searchCustomer custName = "+custName);
    61. List<Customer> custList = customerService.searchCustomer(custName);
    62. model.addAttribute("custList",custList);
    63. // 把搜索条件回传到前端页面
    64. model.addAttribute("searchName",custName);
    65. return "customerList";
    66. }
    67. /**
    68. * 处理删除请求
    69. * 步骤:
    70. * 1 调用CustomerService对象的deleteCustomerById方法根据客户ID删除客户信息
    71. * 2 打印受影响行数
    72. * 3 返回客户列表路径,重新执行查询客户列表方法listCustomer,显示删除之后的数据
    73. * @param cid 前端传入的客户id
    74. * @return 返回客户列表路径,重新执行查询客户列表方法listCustomer,显示删除之后的数据
    75. */
    76. @RequestMapping("/delCust/{cid}")
    77. public String deleteCustomer(@PathVariable("cid") Integer cid) {
    78. log.info("delete Customer cid = "+cid);
    79. int rows = customerService.deleteCustomerById(cid);
    80. log.info("delte customer rows = "+rows);
    81. return "redirect:/cust/listCust";
    82. }
    83. /**
    84. * 用户在页面上点击“修改”按钮,完成数据回显
    85. * 步骤:
    86. * 1 根据ID查询对应的客户信息
    87. * 2 将客户信息渲染到“修改客户”页面
    88. * 3 返回“修改客户”页面
    89. * @param cid 客户id
    90. * @param model
    91. * @return 修改客户
    92. */
    93. @RequestMapping("/preUpdateCust/{cid}")
    94. public String preUpdateCustomer(@PathVariable("cid") Integer cid,Model model) {
    95. log.info("pre update customer cid = "+cid);
    96. Customer customer = customerService.getCustomerById(cid);
    97. model.addAttribute("customer",customer);
    98. return "customerUpdate";
    99. }
    100. /**
    101. * 在“修改客户”页面点击“提交”按钮,处理“修改客户”的请求
    102. * 修改成功重新执行查询客户列表,显示修改之后的客户信息
    103. * @param customer “修改客户”页面采集的客户信息
    104. * @return 客户列表
    105. */
    106. @RequestMapping(value="/updateCust",method = RequestMethod.POST)
    107. public String updateCustomer(Customer customer) {
    108. log.info("update Customer "+customer);
    109. int rows = customerService.updateCustomer(customer);
    110. log.info("update customer rows = "+rows);
    111. return "redirect:/cust/listCust";
    112. }
    113. }

    访问管理控制层:

    1. @Controller
    2. @Slf4j
    3. public class AccountController {
    4. /**
    5. * Controller控制器依赖于业务逻辑层,将AccountService自动装配到控制器(AccountController对象)
    6. */
    7. @Autowired
    8. private AccountService accountService;
    9. /**
    10. * 该方法用来处理前端浏览器的登录请求,登录成功跳转到"送水工管理系统"主页面,登录失败返回index.html页面
    11. * 步骤:
    12. * 1 调用业务逻辑对象(AccountService)的login方法判断登录是否成功
    13. * 2 登录成功跳转到"送水工管理系统"主页面
    14. * 3 登录失败返回index.html页面,并给出提示"用户名或者密码错误"
    15. * @param userName 浏览器表单采集的用户名
    16. * @param userPwd 浏览器表单采集的密码
    17. * @param model 用来在视图层和控制层之间传递数据的对象
    18. * @return 登录成功跳转到"送水工管理系统"主页面,登录失败返回index.html页面
    19. */
    20. @RequestMapping(value="/login",method = RequestMethod.POST)
    21. public String login(String userName, String userPwd, Model model, HttpSession session) {
    22. boolean result = accountService.login(userName, userPwd);
    23. // 条件成立:登录成功,否则登录失败
    24. if(result) {
    25. //登陆成功,将表单输入的用户名传递到前端页面
    26. session.setAttribute("currentUser",userName);
    27. // 登录成功跳转到主页面
    28. return "waterMainMenu";
    29. } else {
    30. model.addAttribute("loginFail","用户名或者密码错误");
    31. return "index";
    32. }
    33. }
    34. /***
    35. * 退出系统
    36. * @return
    37. */
    38. @RequestMapping("/logout")
    39. public String logout() {
    40. return "index";
    41. }
    42. /***
    43. * 跳转到修改密码页面
    44. * @return
    45. */
    46. @RequestMapping("/changePwd")
    47. public String changePwd() {
    48. return "changePwd";
    49. }
    50. /**
    51. * 修改密码
    52. * @param
    53. * @return
    54. */
    55. @RequestMapping(value="/updatePassword",method = RequestMethod.POST)
    56. public String updatePassword(String oldPassword,String confirmPassword, Model model, HttpSession session) {
    57. String username = (String) session.getAttribute("currentUser");
    58. boolean checkOldPwd = accountService.checkOldPassword(username,oldPassword);
    59. if (!checkOldPwd){
    60. model.addAttribute("changePwdMsg","原密码错误");
    61. return "changePwd";
    62. }
    63. // 将新密码信息持久化到数据库
    64. int count = accountService.updateAccount(username,confirmPassword);
    65. if (count>0){
    66. model.addAttribute("changePwdMsg","密码修改成功");
    67. return "changePwd";
    68. }else {
    69. model.addAttribute("changePwdMsg","密码修改失败");
    70. return "changePwd";
    71. }
    72. }
    73. }

    计算工资的控制器: 

    1. /**
    2. * TODO:计算工资的控制器,处理计算工资的请求
    3. */
    4. @RequestMapping("/salary")
    5. @Controller
    6. @Slf4j
    7. public class SalaryController {
    8. /**
    9. * 自动装配计算工资业务逻辑
    10. */
    11. @Autowired
    12. private SalaryService salaryService;
    13. /**
    14. * 点击“计算工资”按钮,查询所有送水工的工资,然后将工资渲染到前端页面,并返回
    15. * @param model
    16. * @return 计算工资列表页面
    17. */
    18. @RequestMapping("/calcSalary")
    19. public String calcWorkerSalary(Model model) {
    20. List<Salary> salaryList = salaryService.listCalcSalary();
    21. log.info("calc worker salary list size = "+salaryList.size());
    22. model.addAttribute("salaryList",salaryList);
    23. return "salaryList";
    24. }
    25. /**
    26. * 在“计算工资”页面表单输入开始时间和结束时间统计工资
    27. * @param startDate 开始时间
    28. * @param endDate 结束时间
    29. * @param model
    30. * @return
    31. */
    32. @RequestMapping("/searchCalcSalay")
    33. public String searchWorkerCalcSalary(String startDate,String endDate,Model model) {
    34. log.info("start date = "+startDate);
    35. log.info("end date = "+endDate);
    36. List<Salary> salaryList = salaryService.listCalcSalaryByCondition(startDate, endDate);
    37. log.info("search calc list size = "+salaryList.size());
    38. model.addAttribute("salaryList",salaryList);
    39. // 修复BUG,将搜索条件传入到前端页面
    40. model.addAttribute("startDate",startDate);
    41. model.addAttribute("endDate",endDate);
    42. return "salaryList";
    43. }
    44. }

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

  • 相关阅读:
    vue-element-admin用户登录流程(上)
    【自动化测试框架】关于unitttest你需要知道的事
    Java中List如何转数组呢?
    【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
    SpringCloud Stream消息驱动代码实战
    管理员模式运行cmd或则bat文件的时候,出现路径错误的问题
    爱普生机器人修改IP
    Dubbo入门
    编写Servlet代码获取页面body中json数据
    IGBT和SiC MOSFET的驱动参数的计算方法
  • 原文地址:https://blog.csdn.net/m0_66863468/article/details/125440012