解决序列号和批号出库的时候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( Long getCountByMaterialAndBatchNumber(
@Param("meId") Long meId, @Param("meId") Long meId,
@Param("batchNumber") String batchNumber, @Param("batchNumber") String batchNumber);
@Param("type") String type);
} }

View File

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

View File

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