基于javaweb的SSM+Maven医药进销存系统(java+ssm+jsp+layui+jquery+maven+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

030023122402

040023122402

060023122402

070023122402

080023122402

090023122402

基于javaweb的SSM+Maven医药进销存系统(java+ssm+jsp+layui+jquery+maven+mysql)

功能介绍

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

公告管理:发布公告、公告列表; 生产管理:订单列表、增加生产、订单日志; 分店采购:分店审核、采购; 总店仓库:出库管理、仓库列表、入库管理; 分店管理:分店库存、分店列表、分店财务; 商品管理:原材料、药效、商品列表、药品类型; 总店采购:采购列表、采购审核; 合同管理:合同类型管理、合同列表; 会员管理:会员列表; 质检:质检; 权限管理:人员管理、模块管理、部门管理、角色管理; 审核管理:财务审核、生产审核、采购审核; 分店销售:销售统计图、订单批发审核、订单列表、分店销售; 该项目共有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配置文件中的数据库配置改为自己的配置;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
}
/**
* 显示采购图
* @param date
* @return
*/
@RequestMapping("/showTuxing")
@ResponseBody
public Map<String,Object> showTuxing(String date){
//判断前台传值是否为空
if(Tools.isEmpty(date)){
date="";
}else{
date="%"+date+"%";
}
List<ErpPurchase> erpPurchase = erpPurchaseService.findTuxing(date);//查询年月日
Map<String,Object> map = new HashMap<String,Object>();//定义一个map集合
map.put("erpPurchase",erpPurchase);//map放入资金申请集合
return map;//返回map
}

/**
* 用于审核采购
* @param purcId 采购订单id
* @param state 状态信息
* @param feedBack 回馈信息
* @param session 得到session
* @return 返回消息类
*/
@ResponseBody
@RequestMapping("/auditPurchase")
public SsmMessage auditPurchase(String purcId,String state,String feedBack,HttpSession session){
SsmMessage mes = new SsmMessage();//定义一个消息类用于返回jsp
Map<String,Object>map = new HashMap<String,Object>();//定义一个map集合
if(Tools.isEmpty(feedBack)){//判断字符串是否为空
map.put("feedBack", "暂无反馈信息");
}else{
map.put("feedBack", feedBack);//map集合中存入 反馈消息
}
map.put("purcId", purcId);//map集合中存入财务id
map.put("state", state);//map集合中存入 审核是否通过 state=2 通过 state=0 不通过
ErpStaff staff = (ErpStaff) session.getAttribute("staff");//得到人员session
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32





/**
* 工具类
* @version 1.0
*
* @update 修改人
* 修改内容.................
*/
public class Tools {
static Random random = new Random();

static char[] char_random = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '2', '3', '4', '5', '6', '7', '8', '9', '0' };

/**
* 随机生成字符串 共40位
* @return 随机字符串
*/
public static String getRandomString(){
String s = RandomStringUtils.random(20,char_random) ;
String s1 = RandomStringUtils.random(20, char_random) ;
return s+s1 ;
}

/**
* 随机生成字符串
* @param size 位数
* @return 随机字符串
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
	map.put("purcId", purcId);//map集合中存入财务id
map.put("state", state);//map集合中存入 审核是否通过 state=2 通过 state=0 不通过
ErpStaff staff = (ErpStaff) session.getAttribute("staff");//得到人员session
map.put("staff", staff);
int rows = erpPurchaseService.auditPurchase(map);
return mes;
}
/**
* 查询合同表
* @return map
*/
@ResponseBody
@RequestMapping("/pact")
public List<ErpPact> findPactText(){
return erpPactService.findPactText();//查询合同表
}
/**
* 查询单个对象
* @param purcId 采购id
* @return 返回采购对象
*/
@ResponseBody
@RequestMapping("/selectByPrimaryKey")
public ErpPurchase selectByPrimaryKey(String purcId){
return erpPurchaseService.selectByPrimaryKey(purcId);//根据ID查询
}
/**
* 查询采购信息(采购原材料)
* @param purcId
* @return
*/
@RequestMapping("/showErp")
@ResponseBody
public ErpPurchase updateRaw(String purcId){
return erpPurchaseService.showErp(purcId);//查询修改信息(原材料)
}
/**
* 查询采购信息(采购成品)
* @param purcId
* @return
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
	//新建一个质检明细的集合
List<ErpQualityDetail> detlist = new ArrayList<ErpQualityDetail>();
for(int i =0;i<qdetGood.length;i++){//循环一个数组因为两个数组的值对应只有循环一个就好了
ErpQualityDetail det = new ErpQualityDetail();//创建一个质检对象
det.setQdetGood(qdetGood[i]);//把数组里面的东西放入对象
det.setQdetBab(qdetBab[i]);
if(kinId!=null){
det.setKinId(kinId[i]);
}else{
det.setRawId(rawId[i]);
}
det.setQuaId(qua.getQuaId());
detlist.add(det);//把对象放入集合
}
SsmMessage mes = new SsmMessage();
ErpStaff staff = (ErpStaff) session.getAttribute("staff");//得到用户对象
qua.setQuaQc(staff.getStaName());//把当前用户名放入质检里
int rows;
try {
rows = service.updateByPrimaryKeySelective(qua,detlist);
if(rows>-1){
mes.setMes("成功");
mes.setState(1);
}else{
mes.setMes("失败");
mes.setState(0);
}
} catch (BackException e) {
e.printStackTrace();
}

return mes;
}
/**
* 查询单个对象
* @param quaId
* @param indentId
* @param purcId
* @return
*/
@RequestMapping("selectByPrimaryKey")
@ResponseBody
public ErpQuality selectByPrimaryKey(String quaId,String indentId, String purcId){
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
	List<Map<String, Object>> map=proindentService.findByshow(m);//查询产品,订单,订单明细,订单生产日志,订单生产日志明细,根据订单ID查询和订单明细总行数查询

return map;

}

/**
* 查询所有方法
* @param page 当前页数
* @param limit 每页最大显示条数
* @param key 关键字
* @param indentUrgency 是否紧急
* @param state 审核状态
* @param indentState 订单状态
* @param data 返回所有
* @return
*/
@RequestMapping("/showList")
@ResponseBody //ajax注解
public Map<String,Object> showList(int page ,int limit,ErpProindent dent,String key){

Map<String,Object> map = new HashMap<String, Object>();//定义map

Map<String,Object> pagmap = new HashMap<String, Object>();//定义map

Pages ps=new Pages();//new出分页工具类
ps.setCurPage(page);//分页工具类赋值,当前页数
ps.setMaxResult(limit);//分页工具类赋值,每页最大显示条数
pagmap.put("page", ps.getFirstRows());//map赋值,取出,开始的行数 --需要计算的
pagmap.put("limit", ps.getMaxResult());//map赋值,取出,每页最大显示条数
pagmap.put("key", key);//map赋值,关键字
pagmap.put("indentUrgency", dent.getIndentUrgency());//map赋值,是否紧急
pagmap.put("state", dent.getState());//map赋值,订单取出,审核状态
pagmap.put("indentState", dent.getIndentState());//map赋值,订单状态


List<ErpProindent> list=proindentService.selectByPrimaryKey(pagmap);//定义订单list查询所有

//layui数据表格需要返回的参数
map.put("count",proindentService.findRowCount(pagmap));//总行数返回count

map.put("data", list);//返回所有,传list
map.put("code",0);
map.put("msg", "");
return map;
}


/**
* 修改订单明细和修改订单
* @param detail 订单明细表
* @param dent 订单表
* @return
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
	//增加销售订单明细
int row2 = sctockmpDetailDao.addSctockmpDetailList(list);//订单明细:批量增加销售订单明细
//如果为零售(则需减库存,增加财务)
if(sctockmp.getSaleIfWholesale()==0){//如果销售订单对象的是否批发 等于零的时候
//减库存
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();//实例化一个map集合
for(int i =0;i<list.size();i++){//循环分店销售订单明细集合
Map<String, Object> map = new HashMap<String, Object>();//实例化map集合
map.put("annexId",sctockmp.getAnnexId());//map赋值-分店ID-订单中的分店ID
map.put("kinId",list.get(i).getKinId());//map赋值-商品ID-明细订单集合第i个中的商品ID
map.put("kmpNum",list.get(i).getKmpNum());//map赋值-商品数量-明细订单集合第i个中的商品数量
mapList.add(map);//把map加入到map集合
}
int row3 = sumstockDao.updateStockSuount(mapList);//分店库存:批量减少库存(根据分店ID和商品ID减少)
if(row3<1){//如果减少库存的影响行数小于1
return 0;//返回0
}

//增加财务(先增加分店收入明细,再增加分店表的总资产)
/* 增加分店收入明细 */
ErpLedgyr ledgyr = new ErpLedgyr();//实例化一个分店财务模型
ledgyr.setGyrId(UUID.randomUUID()+"");//赋值-分店财务ID-随机生成
ledgyr.setSaleId(sctockmp.getSaleId());//赋值-分店销售ID
ledgyr.setAnnexId(sctockmp.getAnnexId());//赋值-分店ID-订单中的分店ID
ledgyr.setGyrSreial(UUID.randomUUID()+"");//赋值-分店支出收入编号-随机生成
ledgyr.setGyrPrice(sctockmp.getSaleMoney1());//赋值-分店支出金钱-订单中的应付金额
ledgyr.setCreater(sctockmp.getCreater());//赋值-创建人-订单中的创建人
ledgyr.setCreatetime(sctockmp.getCreatetime()+"");//赋值-创建时间-订单中的创建时间
int row4 = ledgyrDao.insertSelective(ledgyr);//分店财务:增加(可以为空)
if(row4<1){//如果增加的影响行数小于1
return 0;
}

/* 增加分店表的总资产 */
ErpAnnex annex = new ErpAnnex();//实例化一个分店模型
annex.setAnnexId(sctockmp.getAnnexId());//分店赋值-分店ID-订单中的分店ID
annex.setAnnexPrice(sctockmp.getSaleMoney1());//分店赋值-分店总资产-订单中的应付金额
int row5 = annexDao.updateAnnexPriceAdd(annex);//分店:增加分店的总资产
if(row5<1){//如果 增加分店的总资产 的影响行数小于1
return 0;
}
}
int rows = row1+row2;
return rows;
}


项目链接:
https://javayms.github.io?id=181422272105200aq
https://javayms.pages.dev?id=181422272105200aq