diff --git a/erp_web/pages/manage/serialNumber.html b/erp_web/pages/manage/serialNumber.html index 5082dde6..2ad42c73 100644 --- a/erp_web/pages/manage/serialNumber.html +++ b/erp_web/pages/manage/serialNumber.html @@ -364,12 +364,20 @@ info: JSON.stringify(objInfo) }), success: function(res) { - if(res && res.code === 200) { - $('#serialNumberDlg').dialog('close'); - //加载完以后重新初始化 - var opts = $("#tableData").datagrid('options'); - showSerialNumberDetails(opts.pageNumber, opts.pageSize); + if(res){ + if(res.code!=200){ + $.messager.alert('提示', res.msg, 'error'); + return; + } + if(res.code === 200) { + $('#serialNumberDlg').dialog('close'); + //加载完以后重新初始化 + var opts = $("#tableData").datagrid('options'); + showSerialNumberDetails(opts.pageNumber, opts.pageSize); + } + } + }, //此处添加错误处理 error: function () { diff --git a/sql/jsh_erp.sql b/sql/jsh_erp.sql index e40f3824..e62ae3af 100644 --- a/sql/jsh_erp.sql +++ b/sql/jsh_erp.sql @@ -5179,6 +5179,12 @@ INSERT INTO `jsh_userbusiness` VALUES ('24', 'UserDepot', '65', '[1]', null); INSERT INTO `jsh_userbusiness` VALUES ('25', 'UserCustomer', '64', '[5][2]', null); INSERT INTO `jsh_userbusiness` VALUES ('26', 'UserCustomer', '65', '[6]', null); INSERT INTO `jsh_userbusiness` VALUES ('27', 'UserCustomer', '63', '[5][2]', null); +-- ---------------------------- +-- 时间:2019年1月21日 +-- version:1.0.0 +-- 此次更新添加序列号功能 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- -- ---------------------------- -- 添加序列号表 @@ -5202,4 +5208,16 @@ CREATE TABLE `jsh_serial_number` ( -- 产品表新增字段是否启用序列号 -- ---------------------------- alter table jsh_material add enableSerialNumber bit(1) DEFAULT 0 COMMENT '是否开启序列号,0否,1是'; +-- ---------------------------- +-- 时间:2019年1月24日 +-- version:1.0.1 +-- 此次更新添加序列号菜单 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 添加序列号菜单 +-- ---------------------------- +delete from `jsh_functions` where Name='序列号'; +INSERT INTO `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) VALUES ('010104', '序列号', '0101', '../manage/serialNumber.html', b'0', '0246', b'1', '电脑版', ''); + diff --git a/sql/华夏ERP数据库设计汇总.xlsx b/sql/华夏ERP数据库设计汇总.xlsx index f13a512e..cc2f72ea 100644 Binary files a/sql/华夏ERP数据库设计汇总.xlsx and b/sql/华夏ERP数据库设计汇总.xlsx differ diff --git a/src/main/java/com/jsh/erp/constants/BusinessConstants.java b/src/main/java/com/jsh/erp/constants/BusinessConstants.java index f72c6c64..9842ebff 100644 --- a/src/main/java/com/jsh/erp/constants/BusinessConstants.java +++ b/src/main/java/com/jsh/erp/constants/BusinessConstants.java @@ -21,6 +21,20 @@ public class BusinessConstants { * 默认的分页页数 */ public static final String DEFAULT_PAGINATION_PAGE_SIZE = "10"; + /** + * 商品是否开启序列号标识enableSerialNumber 0否false,1是true + * + * */ + public static final boolean MATERIAL_ENABLE_SERIAL_NUMBER = true; + public static final boolean MATERIAL_NOT_ENABLE_SERIAL_NUMBER = false; + /** + * 单据主表出入库类型 type 入库 出库 + * depothead + * */ + public static final String DEPOTHEAD_TYPE_STORAGE = "入库"; + public static final String DEPOTHEAD_TYPE_OUT = "出库"; + + diff --git a/src/main/java/com/jsh/erp/constants/ExceptionConstants.java b/src/main/java/com/jsh/erp/constants/ExceptionConstants.java index cd11f548..913eaf53 100644 --- a/src/main/java/com/jsh/erp/constants/ExceptionConstants.java +++ b/src/main/java/com/jsh/erp/constants/ExceptionConstants.java @@ -43,10 +43,16 @@ public class ExceptionConstants { * */ //商品信息不存在 public static final int MATERIAL_NOT_EXISTS_CODE = 8000000; - public static final String MATERIAL_NOT_EXISTS__MSG = "商品信息不存在"; + public static final String MATERIAL_NOT_EXISTS_MSG = "商品信息不存在"; //商品信息不唯一 public static final int MATERIAL_NOT_ONLY_CODE = 8000001; - public static final String MATERIAL_NOT_ONLY__MSG = "商品信息不唯一"; + public static final String MATERIAL_NOT_ONLY_MSG = "商品信息不唯一"; + //该商品未开启序列号 + public static final int MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE = 8000002; + public static final String MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG = "该商品未开启序列号功能"; + //该商品已绑定序列号数量小于等于商品现有库存 + public static final int MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE = 8000003; + public static final String MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG = "该商品已绑定序列号数量大于等于商品现有库存"; /** * 标准正常返回/操作成功返回 diff --git a/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java b/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java index 686970eb..b8b4276d 100644 --- a/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java +++ b/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java @@ -37,4 +37,9 @@ public interface SerialNumberMapperEx { * 修改序列号信息 * */ int updateSerialNumber(SerialNumberEx serialNumberEx); + /** + * 查询指定商品下有效的序列号数量 + * 未删除为卖出的视为有效 + * */ + int findSerialNumberByMaterialId(@Param("materialId") Long materialId); } diff --git a/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java b/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java index e893c08e..ec2a2e0b 100644 --- a/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java +++ b/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java @@ -1,27 +1,26 @@ package com.jsh.erp.service.serialNumber; import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.constants.ExceptionConstants; import com.jsh.erp.datasource.entities.*; import com.jsh.erp.datasource.mappers.MaterialMapperEx; import com.jsh.erp.datasource.mappers.SerialNumberMapper; import com.jsh.erp.datasource.mappers.SerialNumberMapperEx; import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.depotItem.DepotItemService; import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.user.UserService; import com.jsh.erp.utils.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.List; -import java.util.Objects; /** * Description @@ -39,6 +38,10 @@ public class SerialNumberService { private SerialNumberMapperEx serialNumberMapperEx; @Resource private MaterialMapperEx materialMapperEx; + @Resource + private DepotItemService depotItemService; + @Resource + private UserService userService; public SerialNumber getSerialNumber(long id) { @@ -121,11 +124,11 @@ public class SerialNumberService { if(mlist==null||mlist.size()<1){ //商品名称不存在 throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE, - ExceptionConstants.MATERIAL_NOT_EXISTS__MSG); + ExceptionConstants.MATERIAL_NOT_EXISTS_MSG); }else if(mlist.size()>1){ //商品信息不唯一 throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE, - ExceptionConstants.MATERIAL_NOT_ONLY__MSG); + ExceptionConstants.MATERIAL_NOT_ONLY_MSG); } } @@ -167,21 +170,7 @@ public class SerialNumberService { } /**处理商品id*/ if(serialNumberEx.getMaterialId()==null){ - if(StringUtil.isNotEmpty(serialNumberEx.getMaterialName())){ - List mlist = materialMapperEx.findByMaterialName(serialNumberEx.getMaterialName()); - if(mlist==null||mlist.size()<1){ - //商品名称不存在 - throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE, - ExceptionConstants.MATERIAL_NOT_EXISTS__MSG); - }else if(mlist.size()>1){ - //商品信息不唯一 - throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE, - ExceptionConstants.MATERIAL_NOT_ONLY__MSG); - - }else{ - serialNumberEx.setMaterialId(mlist.get(0).getId()); - } - } + serialNumberEx.setMaterialId(getSerialNumberMaterialIdByMaterialName(serialNumberEx.getMaterialName())); } //删除标记,默认未删除 serialNumberEx.setDeleteFlag(false); @@ -190,8 +179,7 @@ public class SerialNumberService { Date date=new Date(); serialNumberEx.setCreateTime(date); serialNumberEx.setUpdateTime(date); - HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - User userInfo=(User)request.getSession().getAttribute("user"); + User userInfo=userService.getCurrentUser(); serialNumberEx.setCreator(userInfo==null?null:userInfo.getId()); serialNumberEx.setUpdater(userInfo==null?null:userInfo.getId()); int result=serialNumberMapperEx.addSerialNumber(serialNumberEx); @@ -206,25 +194,10 @@ public class SerialNumberService { return null; } /**处理商品id*/ - if(StringUtil.isNotEmpty(serialNumberEx.getMaterialName())){ - List mlist = materialMapperEx.findByMaterialName(serialNumberEx.getMaterialName()); - if(mlist==null||mlist.size()<1){ - //商品名称不存在 - throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE, - ExceptionConstants.MATERIAL_NOT_EXISTS__MSG); - }else if(mlist.size()>1){ - //商品信息不唯一 - throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE, - ExceptionConstants.MATERIAL_NOT_ONLY__MSG); - - }else{ - serialNumberEx.setMaterialId(mlist.get(0).getId()); - } - } + serialNumberEx.setMaterialId(getSerialNumberMaterialIdByMaterialName(serialNumberEx.getMaterialName())); Date date=new Date(); serialNumberEx.setUpdateTime(date); - HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - User userInfo=(User)request.getSession().getAttribute("user"); + User userInfo=userService.getCurrentUser(); serialNumberEx.setUpdater(userInfo==null?null:userInfo.getId()); int result = serialNumberMapperEx.updateSerialNumber(serialNumberEx); if(result==1){ @@ -232,4 +205,53 @@ public class SerialNumberService { } return null; } + /** + * create by: cjl + * description: + * 根据商品名称判断给商品添加序列号是否可行 + * 1、根据商品名称必须查询到唯一的商品 + * 2、该商品必须已经启用序列号 + * 3、该商品已绑定序列号数量小于商品现有库存 + * create time: 2019/1/23 17:04 + * @Param: materialName + * @return Long 满足使用条件的商品的id + */ + public Long getSerialNumberMaterialIdByMaterialName(String materialName){ + if(StringUtil.isNotEmpty(materialName)){ + List mlist = materialMapperEx.findByMaterialName(materialName); + if(mlist==null||mlist.size()<1){ + //商品名称不存在 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE, + ExceptionConstants.MATERIAL_NOT_EXISTS_MSG); + } + if(mlist.size()>1){ + //商品信息不唯一 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE, + ExceptionConstants.MATERIAL_NOT_ONLY_MSG); + + } + //获得唯一商品 + if(BusinessConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER==mlist.get(0).getEnableSerialNumber()){ + //商品未开启序列号 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE, + ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG); + } + //计算商品库存和目前占用的可用序列号数量关系 + //库存=入库-出库 + //入库数量 + Long materialId=mlist.get(0).getId(); + int inSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId); + //出库数量 + int outSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId); + //查询当前商品下有效的序列号 + int serialNumberSum = serialNumberMapperEx.findSerialNumberByMaterialId(materialId); + if((inSum-outSum)<=serialNumberSum){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE, + ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG); + } + return materialId; + } + return null; + } + } diff --git a/src/main/java/com/jsh/erp/service/user/UserService.java b/src/main/java/com/jsh/erp/service/user/UserService.java index c4ce6840..e671251e 100644 --- a/src/main/java/com/jsh/erp/service/user/UserService.java +++ b/src/main/java/com/jsh/erp/service/user/UserService.java @@ -10,12 +10,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.security.NoSuchAlgorithmException; import java.util.List; import java.util.Map; +import java.util.Objects; @Service public class UserService { @@ -168,4 +171,16 @@ public class UserService { List list = userMapper.selectByExample(example); return list.size(); } + /** + * create by: cjl + * description: + * 获取当前用户信息 + * create time: 2019/1/24 10:01 + * @Param: + * @return com.jsh.erp.datasource.entities.User + */ + public User getCurrentUser(){ + HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + return (User)request.getSession().getAttribute("user"); + } } diff --git a/src/main/resources/mapper_xml/SerialNumberMapperEx.xml b/src/main/resources/mapper_xml/SerialNumberMapperEx.xml index 31fc202d..ba257422 100644 --- a/src/main/resources/mapper_xml/SerialNumberMapperEx.xml +++ b/src/main/resources/mapper_xml/SerialNumberMapperEx.xml @@ -113,4 +113,16 @@ where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file