完善批量新增入库或出库单据接口

This commit is contained in:
季圣华 2023-12-10 23:30:30 +08:00
parent da847f0388
commit 5962e00b92
2 changed files with 42 additions and 4 deletions

View File

@ -421,6 +421,9 @@ public class ExceptionConstants {
//单据录入-部分采购的单据不能进行反审核
public static final int DEPOT_HEAD_PURCHASE_STATUS_THREE_CODE = 8500027;
public static final String DEPOT_HEAD_PURCHASE_STATUS_THREE_MSG = "抱歉,部分采购的单据不能进行反审核";
//单据录入-单据中存在部分状态需要到新增界面关联单据
public static final int DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_CODE = 8500028;
public static final String DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_MSG = "抱歉,单据:%s是部分%s状态需要到新增界面关联单据";
/**
* 单据明细信息
@ -441,6 +444,12 @@ public class ExceptionConstants {
//单据明细-明细中仓库不存在
public static final int DEPOT_ITEM_DEPOTNAME_IS_NOT_EXIST_CODE = 9000004;
public static final String DEPOT_ITEM_DEPOTNAME_IS_NOT_EXIST_MSG = "抱歉,仓库:%s在基础资料-仓库信息中不存在";
//单据明细-单据中存在序列号需要到新增界面关联单据
public static final int DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_CODE = 9000005;
public static final String DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_MSG = "抱歉,单据:%s里面存在序列号需要到新增界面关联单据";
//单据明细-单据中存在批号需要到新增界面关联单据
public static final int DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_CODE = 9000006;
public static final String DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_MSG = "抱歉,单据:%s里面存在批号需要到新增界面关联单据";
/**
* 财务信息

View File

@ -1512,12 +1512,20 @@ public class DepotHeadService {
return result;
}
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public void batchAddDepotHeadAndDetail(String ids, HttpServletRequest request) throws Exception {
List<DepotHead> dhList = getDepotHeadListByIds(ids);
StringBuilder sb = new StringBuilder();
User userInfo=userService.getCurrentUser();
for(DepotHead depotHead : dhList) {
String prefixNo = BusinessConstants.DEPOTHEAD_TYPE_IN.equals(depotHead.getType())?"QTRK":"QTCK";
//关联单据单号
depotHead.setLinkNumber(depotHead.getNumber());
String oldNumber = depotHead.getNumber();
if("3".equals(depotHead.getStatus())) {
throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_CODE,
String.format(ExceptionConstants.DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_MSG, oldNumber, depotHead.getType()));
}
depotHead.setLinkNumber(oldNumber);
//给单号重新赋值
depotHead.setNumber(prefixNo + sequenceService.buildOnlyNumber());
depotHead.setDefaultNumber(prefixNo + sequenceService.buildOnlyNumber());
@ -1526,16 +1534,24 @@ public class DepotHeadService {
depotHead.setChangeAmount(BigDecimal.ZERO);
depotHead.setTotalPrice(BigDecimal.ZERO);
depotHead.setDiscountLastMoney(BigDecimal.ZERO);
depotHead.setCreator(userInfo==null?null:userInfo.getId());
depotHead.setOrganId(null);
depotHead.setAccountId(null);
depotHead.setStatus("0");
depotHead.setTenantId(null);
//查询明细
List<DepotItemVo4WithInfoEx> itemList = depotItemService.getDetailList(depotHead.getId());
depotHead.setId(null);
String beanJson = JSONObject.toJSONString(depotHead);
JSONArray rowArr = new JSONArray();
for(DepotItemVo4WithInfoEx item: itemList) {
//TODO 增加序列号和批次的提示不能进行录入
if("1".equals(item.getEnableSerialNumber())) {
throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_CODE,
String.format(ExceptionConstants.DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_MSG, oldNumber));
}
if("1".equals(item.getEnableBatchNumber())) {
throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_CODE,
String.format(ExceptionConstants.DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_MSG, oldNumber));
}
item.setUnitPrice(BigDecimal.ZERO);
item.setAllPrice(BigDecimal.ZERO);
item.setLinkId(item.getId());
@ -1547,7 +1563,20 @@ public class DepotHeadService {
}
String rows = rowArr.toJSONString();
//新增其它入库单或其它出库单
this.addDepotHeadAndDetail(beanJson, rows, request);
sb.append("[").append(depotHead.getNumber()).append("]");
depotHeadMapper.insertSelective(depotHead);
//根据单据编号查询单据id
DepotHeadExample dhExample = new DepotHeadExample();
dhExample.createCriteria().andNumberEqualTo(depotHead.getNumber()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
List<DepotHead> list = depotHeadMapper.selectByExample(dhExample);
if(list!=null) {
Long headId = list.get(0).getId();
/**入库和出库处理单据子表信息*/
depotItemService.saveDetials(rows, headId, "add", request);
}
}
logService.insertLog("单据",
new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_BATCH_ADD).append(sb).toString(),
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
}
}