解决序列号和批号出库的时候bug

This commit is contained in:
季圣华
2022-05-24 23:22:51 +08:00
parent da526fa89a
commit 829e9552d5
3 changed files with 63 additions and 44 deletions

View File

@@ -169,6 +169,5 @@ public interface DepotItemMapperEx {
Long getCountByMaterialAndBatchNumber(
@Param("meId") Long meId,
@Param("batchNumber") String batchNumber,
@Param("type") String type);
@Param("batchNumber") String batchNumber);
}

View File

@@ -405,11 +405,8 @@ public class DepotItemService {
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_OTHER.equals(depotHead.getSubType())||
BusinessConstants.SUB_TYPE_SALES_RETURN.equals(depotHead.getSubType())) {
serialNumberService.addSerialNumberByBill(depotHead.getNumber(), materialExtend.getMaterialId(), depotId, depotItem.getSnList());
}
serialNumberService.addSerialNumberByBill(depotHead.getType(), depotHead.getSubType(),
depotHead.getNumber(), materialExtend.getMaterialId(), depotId, depotItem.getSnList());
}
} else {
//序列号不能为空
@@ -419,15 +416,9 @@ public class DepotItemService {
}
}
if (StringUtil.isExist(rowObj.get("batchNumber"))) {
//入库的时候批号不能重复
Long bnCount = depotItemMapperEx.getCountByMaterialAndBatchNumber(materialExtend.getId(), rowObj.getString("batchNumber"), "入库");
if(bnCount == 0) {
depotItem.setBatchNumber(rowObj.getString("batchNumber"));
} else {
throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BATCH_NUMBERE_EXISTS_CODE,
String.format(ExceptionConstants.DEPOT_HEAD_BATCH_NUMBERE_EXISTS_MSG, barCode));
}
//校验录入的批号是否重复
checkBatchNumberIsExist(depotHead.getType(), depotHead.getSubType(), materialExtend.getId(), rowObj.getString("batchNumber"), barCode);
depotItem.setBatchNumber(rowObj.getString("batchNumber"));
} else {
//批号不能为空
if(BusinessConstants.ENABLE_BATCH_NUMBER_ENABLED.equals(material.getEnableBatchNumber())) {
@@ -580,13 +571,34 @@ public class DepotItemService {
String.format(ExceptionConstants.DEPOT_HEAD_ROW_FAILED_MSG));
}
}
/**
* 校验录入的批号是否重复
* @param type
* @param subType
* @param meId
* @param batchNumber
* @param barCode
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void checkBatchNumberIsExist(String type, String subType, Long meId, String batchNumber, String barCode) {
if ((BusinessConstants.SUB_TYPE_PURCHASE.equals(subType) ||
BusinessConstants.SUB_TYPE_OTHER.equals(subType) ||
BusinessConstants.SUB_TYPE_SALES_RETURN.equals(subType)) &&
BusinessConstants.DEPOTHEAD_TYPE_IN.equals(type)) {
Long bnCount = depotItemMapperEx.getCountByMaterialAndBatchNumber(meId, batchNumber);
if (bnCount > 0) {
throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BATCH_NUMBERE_EXISTS_CODE,
String.format(ExceptionConstants.DEPOT_HEAD_BATCH_NUMBERE_EXISTS_MSG, barCode));
}
}
}
/**
* 判断单据的状态
* 通过数组对比:原单据的商品和商品数量(汇总) 与 分批操作后单据的商品和商品数量(汇总)
* @param depotHead
* @return
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public String getBillStatusByParam(DepotHead depotHead) {
String res = BusinessConstants.BILLS_STATUS_SKIPED;
//获取原单据的商品和商品数量(汇总)
@@ -616,6 +628,7 @@ public class DepotItemService {
* @param depotHead
* @param billStatus
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void changeBillStatus(DepotHead depotHead, String billStatus) {
DepotHead depotHeadOrders = new DepotHead();
depotHeadOrders.setStatus(billStatus);
@@ -637,6 +650,7 @@ public class DepotItemService {
* @param depotHead
* @param billStatus
*/
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void changeBillPurchaseStatus(DepotHead depotHead, String billStatus) {
DepotHead depotHeadOrders = new DepotHead();
depotHeadOrders.setPurchaseStatus(billStatus);

View File

@@ -394,33 +394,39 @@ public class SerialNumberService {
return count;
}
public void addSerialNumberByBill(String inBillNo, Long materialId, Long depotId, String snList) throws Exception {
//将中文的逗号批量替换为英文逗号
snList = snList.replaceAll("",",");
List<String> snArr = StringUtil.strToStringList(snList);
for(String sn: snArr) {
List<SerialNumber> list = new ArrayList<>();
SerialNumberExample example = new SerialNumberExample();
example.createCriteria().andMaterialIdEqualTo(materialId).andSerialNumberEqualTo(sn)
.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
list = serialNumberMapper.selectByExample(example);
//判断如果不存在重复序列号就新增
if(list == null || list.size() == 0) {
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());
serialNumber.setInBillNo(inBillNo);
serialNumberMapper.insertSelective(serialNumber);
} else {
throw new BusinessRunTimeException(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_CODE,
String.format(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_MSG, sn));
public void addSerialNumberByBill(String type, String subType, String inBillNo, Long materialId, Long depotId, String snList) throws Exception {
//录入序列号的时候不能重复
if ((BusinessConstants.SUB_TYPE_PURCHASE.equals(subType) ||
BusinessConstants.SUB_TYPE_OTHER.equals(subType) ||
BusinessConstants.SUB_TYPE_SALES_RETURN.equals(subType)) &&
BusinessConstants.DEPOTHEAD_TYPE_IN.equals(type)) {
//将中文的逗号批量替换为英文逗号
snList = snList.replaceAll("", ",");
List<String> snArr = StringUtil.strToStringList(snList);
for (String sn : snArr) {
List<SerialNumber> list = new ArrayList<>();
SerialNumberExample example = new SerialNumberExample();
example.createCriteria().andMaterialIdEqualTo(materialId).andSerialNumberEqualTo(sn)
.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
list = serialNumberMapper.selectByExample(example);
//判断如果不存在重复序列号就新增
if (list == null || list.size() == 0) {
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());
serialNumber.setInBillNo(inBillNo);
serialNumberMapper.insertSelective(serialNumber);
} else {
throw new BusinessRunTimeException(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_CODE,
String.format(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_MSG, sn));
}
}
}
}