优化序列号和批次商品的逻辑

This commit is contained in:
季圣华
2021-09-29 19:44:59 +08:00
parent fdfcc81147
commit ecb0edca29
7 changed files with 67 additions and 50 deletions

View File

@@ -336,6 +336,13 @@ public class DepotItemService {
depotItem.setMaterialUnit(rowObj.getString("unit"));
if (StringUtil.isExist(rowObj.get("snList"))) {
depotItem.setSnList(rowObj.getString("snList"));
if(StringUtil.isExist(rowObj.get("depotId"))) {
Long depotId = rowObj.getLong("depotId");
if(BusinessConstants.SUB_TYPE_PURCHASE.equals(depotHead.getSubType())||
BusinessConstants.SUB_TYPE_SALES_RETURN.equals(depotHead.getSubType())) {
serialNumberService.addSerialNumberByBill(materialExtend.getMaterialId(), depotId, depotItem.getSnList());
}
}
}
if (StringUtil.isExist(rowObj.get("batchNumber"))) {
depotItem.setBatchNumber(rowObj.getString("batchNumber"));
@@ -442,7 +449,7 @@ public class DepotItemService {
//判断商品是否开启序列号,开启的收回序列号,未开启的跳过
if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) {
//查询单据子表中开启序列号的数据列表
serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo);
serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo, StringUtil.toNull(depotItem.getSnList()));
}
}
}

View File

@@ -341,19 +341,9 @@ public class SerialNumberService {
* @Param: List<DepotItem>
* @return void
*/
public void checkAndUpdateSerialNumber(DepotItem depotItem,User userInfo) throws Exception{
public void checkAndUpdateSerialNumber(DepotItem depotItem,User userInfo, String snList) throws Exception{
if(depotItem!=null){
//查询商品下已分配的可用序列号数量
int SerialNumberSum= serialNumberMapperEx.countSerialNumberByMaterialIdAndDepotheadId(depotItem.getMaterialId(),null,BusinessConstants.IS_SELL_HOLD);
//BasicNumber=OperNumber*ratio
if((depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue()>SerialNumberSum){
//获取商品名称
Material material= materialMapper.selectByPrimaryKey(depotItem.getMaterialId());
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE,
String.format(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG,material==null?"":material.getName()));
}
//商品下序列号充足,分配序列号
sellSerialNumber(depotItem.getMaterialId(),depotItem.getHeaderId(),(depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue(),userInfo);
sellSerialNumber(depotItem.getMaterialId(),depotItem.getHeaderId(), snList,userInfo);
}
}
/**
@@ -372,10 +362,11 @@ public class SerialNumberService {
* @return com.jsh.erp.datasource.entities.SerialNumberEx
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public int sellSerialNumber(Long materialId, Long depotHeadId,int count,User user) throws Exception{
public int sellSerialNumber(Long materialId, Long depotHeadId, String snList, User user) throws Exception{
int result=0;
try{
result = serialNumberMapperEx.sellSerialNumber(materialId,depotHeadId,count,new Date(),user==null?null:user.getId());
String [] snArray=snList.split(",");
result = serialNumberMapperEx.sellSerialNumber(materialId, depotHeadId, snArray, new Date(),user==null?null:user.getId());
}catch(Exception e){
JshException.writeFail(logger, e);
}
@@ -459,23 +450,40 @@ public class SerialNumberService {
return result;
}
public List<SerialNumber> getEnableSerialNumberList(String name, Long depotId, Long materialId, Integer offset, Integer rows)throws Exception {
public List<SerialNumber> getEnableSerialNumberList(String name, Long depotId, String barCode, Integer offset, Integer rows)throws Exception {
List<SerialNumber> list =null;
try{
list = serialNumberMapperEx.getEnableSerialNumberList(StringUtil.toNull(name), depotId, materialId, offset, rows);
list = serialNumberMapperEx.getEnableSerialNumberList(StringUtil.toNull(name), depotId, barCode, offset, rows);
}catch(Exception e){
JshException.readFail(logger, e);
}
return list;
}
public Long getEnableSerialNumberCount(String name, Long depotId, Long materialId)throws Exception {
public Long getEnableSerialNumberCount(String name, Long depotId, String barCode)throws Exception {
Long count = 0L;
try{
count = serialNumberMapperEx.getEnableSerialNumberCount(StringUtil.toNull(name), depotId, materialId);
count = serialNumberMapperEx.getEnableSerialNumberCount(StringUtil.toNull(name), depotId, barCode);
}catch(Exception e){
JshException.readFail(logger, e);
}
return count;
}
public void addSerialNumberByBill(Long materialId, Long depotId, String snList) throws Exception {
List<String> snArr = StringUtil.strToStringList(snList);
for(String sn: snArr) {
SerialNumber serialNumber = new SerialNumber();
serialNumber.setMaterialId(materialId);
serialNumber.setDepotId(depotId);
serialNumber.setSerialNumber(sn);
Date date=new Date();
serialNumber.setCreateTime(date);
serialNumber.setUpdateTime(date);
User userInfo=userService.getCurrentUser();
serialNumber.setCreator(userInfo==null?null:userInfo.getId());
serialNumber.setUpdater(userInfo==null?null:userInfo.getId());
serialNumberMapper.insertSelective(serialNumber);
}
}
}