• Java项目:ssm+mysql医药进销存系统


    作者主页:夜未央5788

     简介:Java领域优质创作者、Java项目、学习资料、技术互助

    文末获取源码

    功能介绍

    医药进销存系统,主要功能包括:

    公告管理:发布公告、公告列表;
    生产管理:订单列表、增加生产、订单日志;
    分店采购:分店审核、采购;
    总店仓库:出库管理、仓库列表、入库管理;
    分店管理:分店库存、分店列表、分店财务;
    商品管理:原材料、药效、商品列表、药品类型;
    总店采购:采购列表、采购审核;
    合同管理:合同类型管理、合同列表;
    会员管理:会员列表;
    质检:质检;
    权限管理:人员管理、模块管理、部门管理、角色管理;
    审核管理:财务审核、生产审核、采购审核;
    分店销售:销售统计图、订单批发审核、订单列表、分店销售;
    该项目共有49张表,功能比较复杂;

    其他管理:供货商管理,新增、搜索、编辑、删除;

    环境需要

    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.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 
    6.数据库:MySql 5.7版本;

    技术栈

    1. 后端:Spring SpringMVC MyBatis
    2. 前端:JSP+Layui+jQuery

    运行说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
    2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
    若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行;
    3. 将项目中db.properties和spring.xml配置文件中的数据库配置改为自己的配置;

    4. 运行项目,输入http://localhost:8080/medicine/page/login.jsp 登录

    运行截图

     

     

     

     

     

     

     

    相关代码 

    分店action

    1. /**
    2. *
    3. */
    4. package com.yidu.action.annex;
    5. import java.text.SimpleDateFormat;
    6. import java.util.Date;
    7. import java.util.HashMap;
    8. import java.util.List;
    9. import java.util.Map;
    10. import java.util.UUID;
    11. import javax.annotation.Resource;
    12. import javax.servlet.http.HttpSession;
    13. import org.springframework.stereotype.Controller;
    14. import org.springframework.web.bind.annotation.RequestMapping;
    15. import org.springframework.web.bind.annotation.ResponseBody;
    16. import com.yidu.common.Tools;
    17. import com.yidu.model.ErpAnnex;
    18. import com.yidu.model.ErpStaff;
    19. import com.yidu.service.annex.AnnexService;
    20. /**
    21. * 分店action
    22. * @author ouyang
    23. * @dateTime 2017年11月16日10:39:49
    24. */
    25. @Controller
    26. @RequestMapping("/annex")
    27. public class AnnexAction {
    28. @Resource
    29. AnnexService service;
    30. /**
    31. * 查找所有分店的数量
    32. * @return 分店数量
    33. * @author ouyang
    34. * @dateTime 2017年11月28日11:23:35
    35. */
    36. @RequestMapping("/findAllSize")
    37. @ResponseBody
    38. public int findAllSize(){
    39. return service.findAllSize(new HashMap());
    40. }
    41. /**
    42. * 查询所有分店
    43. * @param page 当前页数
    44. * @param limit 显示行数
    45. * @param annexData 查询参数
    46. * @param annexTime 查询创建时间
    47. * @return 产品集合
    48. * @author ouyang
    49. * @dateTime 2017年11月28日11:23:35
    50. */
    51. @RequestMapping("/findAll")
    52. @ResponseBody
    53. public Map findAll(int page,int limit,String annexData,String annexTime){
    54. Map map = new HashMap();
    55. map.put("firstRows", limit*(page-1));
    56. map.put("limit", limit);
    57. map.put("annexData", annexData);
    58. if(annexTime!=null && !"".equals(annexTime)){
    59. System.out.println("时间:"+annexTime);
    60. String str[] = annexTime.split(" "+"-"+" ");
    61. map.put("annexTime_begin", str[0]);
    62. map.put("annexTime_end", str[1]);
    63. }
    64. List data = service.findAll(map);
    65. int count = service.findAllSize(map);
    66. Map mapResult = new HashMap();
    67. //layui数据表格需要返回的参数
    68. map.put("count", count);
    69. map.put("data", data);
    70. map.put("code",0);
    71. map.put("msg", "");
    72. return map;
    73. }
    74. /**
    75. * 增加或修改
    76. * @param annex 分店实体类
    77. * @param session HttpSession
    78. * @return 影响行数
    79. * @author ouyang
    80. * @dateTime 2017年11月28日11:23:35
    81. */
    82. @RequestMapping("/addOrUpdate")
    83. @ResponseBody
    84. public int addOrUpdate(ErpAnnex annex,HttpSession session){
    85. ErpStaff staff=(ErpStaff) session.getAttribute("staff");
    86. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    87. if(staff!=null){
    88. annex.setCreater(staff.getStaId());
    89. annex.setCreatetime(sdf.format(new Date()));
    90. }
    91. int row =0;
    92. if(annex.getAnnexId()!=null && !"".equals(annex.getAnnexId())){//修改
    93. row = service.updateByPrimaryKeySelective(annex);
    94. }else{//增加
    95. annex.setAnnexId(UUID.randomUUID()+"");
    96. annex.setAnnexNumber(UUID.randomUUID()+"");
    97. annex.setIsva(1);
    98. annex.setAnnexTime(sdf.format(new Date()));
    99. row = service.insertSelective(annex);
    100. }
    101. return row;
    102. }
    103. /**
    104. * 查找所有分店集合
    105. * @return 分店集合
    106. * @author ouyang
    107. * @dateTime 2017年11月28日11:23:35
    108. */
    109. @RequestMapping("/showList")
    110. @ResponseBody
    111. public List showList(){
    112. return service.getAnnex();
    113. }
    114. /**
    115. * 初始化加载所有分店统计图
    116. * @author 胡鑫
    117. * @date 2017年12月7日10:25:27
    118. * @return 返回map集合
    119. */
    120. @RequestMapping("/showChar")
    121. @ResponseBody
    122. public Map showChar(String annexId,String year,String month){
    123. MapparMap = new HashMap();//定义一个map集合用于sql查询参数
    124. parMap.put("annexId", annexId);//分店id主键
    125. if(Tools.isEmpty(year)){
    126. parMap.put("year", "");//年份
    127. }else{
    128. parMap.put("year", "%"+year+"%");//年份
    129. }
    130. if(Tools.isEmpty(month)){
    131. parMap.put("month", "");//月份
    132. }else{
    133. parMap.put("month", "%"+month+"%");//月份
    134. }
    135. Mapmap = new HashMap();//定义一个HashMap用于返回jsp调用参数
    136. Map shouru = service.showShouChar(parMap);//收入统计
    137. map.put("shouruMap", shouru);
    138. Map zhichu = service.showZhiChar(parMap);//支出统计
    139. map.put("zhichuMap", zhichu);
    140. return map;
    141. }
    142. }

    审核记录action

    1. /**
    2. *
    3. */
    4. package com.yidu.action.audit;
    5. import java.util.HashMap;
    6. import java.util.List;
    7. import java.util.Map;
    8. import javax.annotation.Resource;
    9. import org.springframework.stereotype.Controller;
    10. import org.springframework.web.bind.annotation.RequestMapping;
    11. import org.springframework.web.bind.annotation.ResponseBody;
    12. import com.yidu.model.ErpAudit;
    13. import com.yidu.service.audit.AuditService;
    14. /**
    15. * 审核记录action
    16. * @author 胡鑫
    17. * @date 2017年11月30日10:27:46
    18. */
    19. @Controller
    20. @RequestMapping("auditAction")
    21. public class AuditAction {
    22. @Resource
    23. private AuditService auditService;//审核记录service接口
    24. /**
    25. * 根据业务id查询该条业务审核记录
    26. * @author 胡鑫
    27. * @date 2017年11月30日13:48:32
    28. * @param purcId 采购id
    29. * @return 返回map集合
    30. */
    31. @ResponseBody
    32. @RequestMapping("/showListById")
    33. public List showListById(String purcId){
    34. MapparMap = new HashMap();//定义一个map集合用于传入mapper查询
    35. parMap.put("businessId", purcId);//存入业务id
    36. Listlist = auditService.showListById(parMap);//执行查询方法
    37. return list;
    38. }
    39. }

    部门action

    1. package com.yidu.action.depa;
    2. import java.util.HashMap;
    3. import java.util.List;
    4. import java.util.Map;
    5. import javax.annotation.Resource;
    6. import org.springframework.stereotype.Controller;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.ResponseBody;
    9. import com.yidu.common.Tools;
    10. import com.yidu.model.ErpDepa;
    11. import com.yidu.service.ErpDepa.ErpDepaService;
    12. import com.yidu.util.Pages;
    13. import com.yidu.util.SsmMessage;
    14. /**
    15. * 部门action
    16. * @author 胡鑫
    17. * @date 2017年10月27日
    18. */
    19. @Controller
    20. @RequestMapping("/depaAction")
    21. public class DepaAction {
    22. @Resource
    23. private ErpDepaService service;//部门service
    24. /**
    25. * 查询部门集合、模糊查询、分页查询
    26. * @author 胡鑫
    27. * @date 2017年10月27日11:41:26
    28. * @param key 查询参数
    29. * @param page 分页开始页数
    30. * @param limit 每页最大显示的行数
    31. * @return 返回map集合
    32. */
    33. @RequestMapping("/depaFindList")
    34. @ResponseBody
    35. public Map depaFindList(String key,String page,String limit){
    36. Map parMap = new HashMap();//定义map 用于存放参数
    37. Pages pages = new Pages();//定义一个分页对象
    38. pages.setCurPage(Integer.valueOf(page));//设置开始的行数
    39. pages.setMaxResult(Integer.valueOf(limit));//设置每页显示的行数
    40. parMap.put("pages", pages);//将分页对象存入map集合
    41. if(Tools.isEmpty(key)){//判断查询参数是否为空
    42. parMap.put("key", "");
    43. }else{
    44. parMap.put("key", "%"+key+"%");
    45. }
    46. Map map = new HashMap();//定义map 用于返回至页面
    47. List list = service.depaFindList(parMap);//得到部门集合
    48. map.put("data", list);//存入参数
    49. map.put("count", service.depaFindListRows(parMap));
    50. map.put("msg", "");
    51. map.put("code", 0);
    52. return map;//返回map
    53. }
    54. /**
    55. * 增加or修改
    56. * @author 胡鑫
    57. * @date 2017年10月30日15:31:45
    58. * @param depa 部门实体类
    59. * @return 返回消息类
    60. */
    61. @RequestMapping("/addOrUpdate")
    62. @ResponseBody
    63. public SsmMessage addOrUpdate(ErpDepa depa){
    64. SsmMessage mes = new SsmMessage();//定义一个消息类
    65. depa.setCreatetime(Tools.getCurDateTime());//设置修改时间
    66. if(Tools.isEmpty(depa.getDepaId())){//判断部门ID是否为空 为空则进行增加 否则修改
    67. int rows = service.insertSelective(depa);//执行增加方法传入部门对象
    68. if(rows>0){
    69. mes.setMes("数据提交成功..");
    70. mes.setState(1);
    71. }else{
    72. mes.setMes("数据提交失败");
    73. mes.setState(0);
    74. }
    75. }else{
    76. int rows = service.updateByPrimaryKeySelective(depa);//修改修改方法 传入部门对象
    77. if(rows>0){
    78. mes.setMes("数据修改成功");
    79. mes.setState(1);
    80. }else{
    81. mes.setMes("数据修改失败");
    82. mes.setState(0);
    83. }
    84. }
    85. return mes;
    86. }
    87. /**
    88. * 显示修改信息 根据部门id查询该部门信息
    89. * @author 胡鑫
    90. * @date 2017年10月31日09:29:56
    91. * @param depaId 部门id
    92. * @return 返回消息类
    93. */
    94. @RequestMapping("/showUpdate")
    95. @ResponseBody
    96. public ErpDepa showUpdate(String depaId){
    97. return service.selectByPrimaryKey(depaId);
    98. }
    99. /**
    100. * 根据部门id删除该部门(修改该部门的状态isva为1)
    101. * @author 胡鑫
    102. * @date 2017年10月31日15:46:49
    103. * @param depaId 部门id
    104. * @return 返回消息类
    105. */
    106. @RequestMapping("/deleteByDepaId")
    107. @ResponseBody
    108. public SsmMessage deleteByDepaId(String depaId){
    109. SsmMessage mes = new SsmMessage();
    110. int rows = service.deleteByDepaId(depaId);//执行删除方法(修改isva)
    111. if(rows>0){
    112. mes.setMes("删除成功");
    113. mes.setState(1);
    114. }else{
    115. mes.setMes("删除失败");
    116. mes.setState(0);
    117. }
    118. return mes;
    119. }
    120. }

    EepApplyAction

    1. /**
    2. *
    3. */
    4. package com.yidu.action.ErpApply;
    5. import java.util.HashMap;
    6. import java.util.List;
    7. import java.util.Map;
    8. import javax.annotation.Resource;
    9. import org.springframework.stereotype.Controller;
    10. import org.springframework.web.bind.annotation.RequestMapping;
    11. import org.springframework.web.bind.annotation.ResponseBody;
    12. import com.yidu.common.Tools;
    13. import com.yidu.model.ErpApply;
    14. import com.yidu.service.ErpApply.ErpApplyService;
    15. import com.yidu.util.Pages;
    16. /**
    17. * 供货商
    18. * @author Gjwen
    19. * 2017年11月9日-下午2:47:00
    20. */
    21. @Controller
    22. @RequestMapping("EepApplyAction")
    23. public class EepApplyAction {
    24. /**
    25. * 注入供货商Service
    26. */
    27. @Resource
    28. private ErpApplyService service;
    29. /**
    30. * 查询所有供应商
    31. * @return 返回供应商list
    32. */
    33. @RequestMapping("findErpApply")
    34. @ResponseBody
    35. public List findErpApply(){
    36. List list =service.findErpApply();//查询供货商方法
    37. return list;//返回list
    38. }
    39. /**
    40. * 显示Or查询
    41. * @param keywords
    42. * @return map
    43. */
    44. @RequestMapping("/showList")
    45. @ResponseBody
    46. public Map selectAll(String keywords,String page,String limit){
    47. Map mapPage = new HashMap();//创建一个Map集合
    48. Pages pages = new Pages();//得到分页工具类
    49. pages.setCurPage(Integer.valueOf(page));//起始页
    50. pages.setMaxResult(Integer.valueOf(limit));//结束页
    51. mapPage.put("pages", pages);//传入分页参数
    52. //判断前台传过来的值是否为空,否则进行模糊查询
    53. if(keywords==null || "".equals(keywords)){
    54. mapPage.put("keywords", "");
    55. }else{
    56. mapPage.put("keywords", "%"+keywords+"%");
    57. }
    58. Map map = new HashMap();//创建一个Map集合
    59. List list = service.selectAll(mapPage);//查询所有供货商信息,传过去分页参数,放入list
    60. map.put("code", 0);
    61. map.put("msg", "");
    62. map.put("count", service.applyFindRows(mapPage));//传入分页参数,规定分页
    63. map.put("data", list);//传入list
    64. return map;//返回map
    65. }
    66. /**
    67. * 根据ID删除 修改状态
    68. * @param isva
    69. * @param applyId
    70. * @return apply
    71. */
    72. @RequestMapping("/delete")
    73. @ResponseBody
    74. public ErpApply delete(ErpApply isva , String applyId){
    75. ErpApply apply = new ErpApply();//得到供货商模型
    76. isva.setIsva(1);//得到状态值
    77. isva.setApplyId(applyId);//传入状态值
    78. int updateIsva = service.delete(isva);//传入ID进行修改
    79. return apply;//返回apply
    80. }
    81. /**
    82. * 根据ID查询数据
    83. * @param applyId
    84. * @return
    85. */
    86. @RequestMapping("/showUpdate")
    87. @ResponseBody
    88. public ErpApply showUpdate(String applyId){
    89. return service.selectByPrimaryKey(applyId);//传入查询ID
    90. }
    91. /**
    92. * 增加或修改
    93. * @param record
    94. * @return
    95. */
    96. @RequestMapping("/addOrUpdate")
    97. @ResponseBody
    98. public int addOrUpdate(ErpApply record){
    99. int rows = 0;//定义参数rows为0
    100. //判断前台传过来的值是否为空,为空就进入增加,不为空则进入修改
    101. if(record.getApplyId()!=null && !"".equals(record.getApplyId())){
    102. rows = service.updateByPrimaryKeySelective(record);
    103. }else{
    104. String serial = Tools.getDateOrderNo();//得到订单编码格式:日期格式如:20161222211800,分别代表的是年月日时分秒+5位随机字符串
    105. record.setApplyNumber("GHS-"+serial);//编号
    106. rows = service.insert(record);//传入编码
    107. }
    108. return rows;//返回rows
    109. }
    110. }

    如果也想学习本系统,下面领取。关注并回复:004ssm 

  • 相关阅读:
    linux 基础(10)进程管理
    qemu 运行 linux
    Docker 安装Redis 无法使用配置文件设置密码问题
    趣味算法第二章-例题
    学习笔记16--汽车运动控制理论之经典控制理论
    传输层_TCP&UDP
    静态HTML旅行主题网页设计与实现——联途旅游网服务平台网(39页)HTML+CSS+JavaScript
    一文速通MybatisPlus
    R语言ggplot2可视化时间序列柱形图:通过双色渐变配色颜色主题可视化时间序列柱形图
    【翻译】驯服野兽:Scylla 如何利用控制理论来控制压实
  • 原文地址:https://blog.csdn.net/hanyunlong1989/article/details/126798673