优化入库单|Excel创建方法的命名

This commit is contained in:
李宇奇 2026-03-10 10:25:42 +08:00
parent 82e3d665df
commit fa1fd09170
6 changed files with 136 additions and 87 deletions

View File

@ -17,7 +17,7 @@ spring:
# password: Tony123 # password: Tony123
url: jdbc:mysql://localhost:3306/leader_wms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true url: jdbc:mysql://localhost:3306/leader_wms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
username: root username: root
password: 123456 password: root
# # 从库数据源 # # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭

View File

@ -33,7 +33,7 @@ server:
logging: logging:
level: level:
com.zbf: debug com.zbf: info
org.springframework: warn org.springframework: warn
org.quartz: warn org.quartz: warn

View File

@ -0,0 +1,29 @@
package com.zbf.common.enums.custom;
/**
* 入库通知单明细启停状态
*/
public enum InboundNoticeTabStatus
{
ENABLED("0", "启用"),
DISABLED("1", "停用");
private final String code;
private final String description;
InboundNoticeTabStatus(String code, String description)
{
this.code = code;
this.description = description;
}
public String getCode()
{
return code;
}
public String getDescription()
{
return description;
}
}

View File

@ -36,7 +36,6 @@ import org.springframework.stereotype.Component;
import shade.com.alibaba.fastjson2.JSONArray; import shade.com.alibaba.fastjson2.JSONArray;
import shade.com.alibaba.fastjson2.JSONObject; import shade.com.alibaba.fastjson2.JSONObject;
import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -93,7 +92,7 @@ public class D_Service {
* @param*/ * @param*/
@PostConstruct // @PostConstruct
public void initToken() { public void initToken() {
try { try {
oauth2Client = createOauth2Client(); oauth2Client = createOauth2Client();

View File

@ -1,14 +1,14 @@
package com.zbf.system.domain; package com.zbf.system.domain;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.zbf.common.core.domain.BaseEntity; import com.zbf.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
/** /**
* 入库通知单明细更新参数 * 入库通知单明细更新参数
@ -22,71 +22,113 @@ import java.util.Map;
public class TRkWareNoticeTabUpdate extends BaseEntity { public class TRkWareNoticeTabUpdate extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 通知单主键ID */ /**
* 通知单主键ID
*/
private String id; private String id;
/** 通知单ID */ /**
* 通知单ID
*/
private String noticeId; private String noticeId;
/**来源单号 */ /**
* 来源单号
*/
private String deliveryId; private String deliveryId;
/** 仓库ID */ /**
* 仓库ID
*/
private String storageId; private String storageId;
/** 仓库ID */ /**
* 仓库ID
*/
private String storageShortName; private String storageShortName;
/** 库位 */ /**
* 库位
*/
private String storageLocation; private String storageLocation;
/** 库区 */ /**
* 库区
*/
private String storageAreaId; private String storageAreaId;
/** 入库类型 */ /**
* 入库类型
*/
private String storageMode; private String storageMode;
/** 用户账号 */ /**
* 用户账号
*/
private String userName; private String userName;
private Map<String, String> extras = new HashMap<>(); private Map<String, String> extras = new HashMap<>();
/** 手持用字段 */ /**
* 手持用字段
*/
private String recordPerson; private String recordPerson;
/** 托盘号 */ /**
* 托盘号
*/
private String ctlNo; private String ctlNo;
/** 部门ID */ /**
* 部门ID
*/
private Long deptId; private Long deptId;
/**物料编码 */ /**
* 物料编码
*/
private String goodsId; private String goodsId;
/**物料名称 */ /**
* 物料名称
*/
private String goodsName; private String goodsName;
/**打印条码数量 */ /**
private int printNum; * 打印条码数量
*/
private int printNum;
/**收货数量 */ /**
* 收货数量
*/
private int receiveNum; private int receiveNum;
/**子需求编号 */ /**
* 子需求编号
*/
private String salesOrderNumber; private String salesOrderNumber;
/**虚拟收货 */ /**
* 虚拟收货
*/
private String fictitious; private String fictitious;
/**规格型号 */ /**
* 规格型号
*/
private String specification; private String specification;
/** 通知单明细 */ /**
* 通知单明细
*/
private List<TRkWareNoticeTab> trkWareNoticeTabList; private List<TRkWareNoticeTab> trkWareNoticeTabList;
/** 入库任务明细 */ /**
* 入库任务明细
*/
private List<TOngoodsshelf> tOngoodsshelfList; private List<TOngoodsshelf> tOngoodsshelfList;
private String rkMxId; private String rkMxId;
private String locationId; private String locationId;

View File

@ -12,9 +12,11 @@ import com.zbf.common.enums.custom.InboundLevelType;
import com.zbf.common.enums.custom.InboundNoticeReceivingStatus; import com.zbf.common.enums.custom.InboundNoticeReceivingStatus;
import com.zbf.common.enums.custom.InboundNoticeTabInStatus; import com.zbf.common.enums.custom.InboundNoticeTabInStatus;
import com.zbf.common.enums.custom.InboundNoticeTabReceivingStatus; import com.zbf.common.enums.custom.InboundNoticeTabReceivingStatus;
import com.zbf.common.enums.custom.InboundNoticeTabStatus;
import com.zbf.common.enums.custom.InboundOngoodsshelfInStatus; import com.zbf.common.enums.custom.InboundOngoodsshelfInStatus;
import com.zbf.common.enums.custom.InboundResourceLockStatus; import com.zbf.common.enums.custom.InboundResourceLockStatus;
import com.zbf.common.enums.custom.InboundResourceOccupancyStatus; import com.zbf.common.enums.custom.InboundResourceOccupancyStatus;
import com.zbf.common.enums.custom.InboundStorageMode;
import com.zbf.common.enums.custom.InboundTaskStatus; import com.zbf.common.enums.custom.InboundTaskStatus;
import com.zbf.common.enums.custom.InboundTaskType; import com.zbf.common.enums.custom.InboundTaskType;
import com.zbf.common.exception.ServiceException; import com.zbf.common.exception.ServiceException;
@ -1710,8 +1712,9 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
*/ */
@Override @Override
@Transactional @Transactional
// 入库流程
public String importData(List<TRkWareNoticeTab> importedNoticeTabs, boolean isUpdateSupport, String operName) { public String importData(List<TRkWareNoticeTab> importedNoticeTabs, boolean isUpdateSupport, String operName) {
if (StringUtils.isNull(importedNoticeTabs) || importedNoticeTabs.size() == 0) { if (StringUtils.isNull(importedNoticeTabs) || importedNoticeTabs.isEmpty()) {
throw new ServiceException("导入入库通知单数据不能为空!"); throw new ServiceException("导入入库通知单数据不能为空!");
} }
int successCount = 0; int successCount = 0;
@ -1721,18 +1724,12 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
TRkWareNoticeTab firstImportedNoticeTab = importedNoticeTabs.get(0); TRkWareNoticeTab firstImportedNoticeTab = importedNoticeTabs.get(0);
TRkWareNotice importedNotice = new TRkWareNotice(); TRkWareNotice importedNotice = new TRkWareNotice();
//来源单号生成
Random random = new Random();
// 生成一个1000到9999之间的随机数
// int randomFourDigit = 1000 + random.nextInt(9000);
importedNotice.setDeliveryId(firstImportedNoticeTab.getDeliveryId()); importedNotice.setDeliveryId(firstImportedNoticeTab.getDeliveryId());
List<TRkWareNotice> duplicateNotices = tRkWareNoticeMapper.selectTRkWareNoticeList(importedNotice); List<TRkWareNotice> duplicateNotices = tRkWareNoticeMapper.selectTRkWareNoticeList(importedNotice);
if (duplicateNotices.size() == 0) { if (duplicateNotices.isEmpty()) {
setTrkNotice(importedNotice, firstImportedNoticeTab, operName); setTrkNotice(importedNotice, firstImportedNoticeTab, operName);
importedNotice.setReceivingStatus("0"); importedNotice.setReceivingStatus(InboundNoticeReceivingStatus.CREATED.getCode());
importedNotice.setStorageMode("1"); importedNotice.setStorageMode(InboundStorageMode.STANDARD.getCode());
tRkWareNoticeMapper.insertTRkWareNotice(importedNotice); tRkWareNoticeMapper.insertTRkWareNotice(importedNotice);
} else if (isUpdateSupport) { } else if (isUpdateSupport) {
@ -1752,20 +1749,19 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
TRkWareNoticeTab importedNoticeTab = importedNoticeTabs.get(importIndex); TRkWareNoticeTab importedNoticeTab = importedNoticeTabs.get(importIndex);
validateImportedNoticeTab(importIndex, importedNoticeTab); validateImportedNoticeTab(importIndex, importedNoticeTab);
// 验证是否存在该明细 // 验证是否存在该明细
// importedNoticeTab.setDeliveryId(importedNoticeTab.getDeliveryId());
TRkWareNoticeTab noticeTabQuery = new TRkWareNoticeTab(); TRkWareNoticeTab noticeTabQuery = new TRkWareNoticeTab();
noticeTabQuery.setSalesOrderNumber(importedNoticeTab.getSalesOrderNumber()); noticeTabQuery.setSalesOrderNumber(importedNoticeTab.getSalesOrderNumber());
noticeTabQuery.setGoodsId(importedNoticeTab.getGoodsId()); noticeTabQuery.setGoodsId(importedNoticeTab.getGoodsId());
noticeTabQuery.setReceivingStatus("0"); noticeTabQuery.setReceivingStatus(InboundNoticeTabReceivingStatus.PENDING.getCode());
noticeTabQuery.setInStatus("0"); noticeTabQuery.setInStatus(InboundNoticeTabInStatus.INITIAL.getCode());
importedNoticeTab.setDataSource("二级库"); noticeTabQuery.setDataSource(InboundLevelType.LEVEL_TWO.getDescription());
noticeTabQuery.setDataSource("二级库");
importedNoticeTab.setLevelType("2"); importedNoticeTab.setLevelType(InboundLevelType.LEVEL_TWO.getCode());
importedNoticeTab.setDataSource(InboundLevelType.LEVEL_TWO.getDescription());
List<TRkWareNoticeTab> duplicateNoticeTabs = tRkWareNoticeTabMapper.selectTRkWareNoticeTabList(noticeTabQuery); List<TRkWareNoticeTab> duplicateNoticeTabs = tRkWareNoticeTabMapper.selectTRkWareNoticeTabList(noticeTabQuery);
if (duplicateNoticeTabs.size() == 0) { if (duplicateNoticeTabs.isEmpty()) {
initializeNoticeTabForInsert(importedNoticeTab, importedNotice.getId(), operName); initializeNoticeTabForInsert(importedNoticeTab, importedNotice.getId(), operName);
importedNoticeTab.setDeliveryId(firstImportedNoticeTab.getDeliveryId()); importedNoticeTab.setDeliveryId(firstImportedNoticeTab.getDeliveryId());
importedNoticeTab.setSourceNum(firstImportedNoticeTab.getDeliveryId()); importedNoticeTab.setSourceNum(firstImportedNoticeTab.getDeliveryId());
@ -1814,8 +1810,9 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
*/ */
@Override @Override
@Transactional @Transactional
// 入库流程
public String importExcelData(List<TRkWareNoticeTabExcel> importedExcelNoticeTabs, boolean isUpdateSupport, String operName) { public String importExcelData(List<TRkWareNoticeTabExcel> importedExcelNoticeTabs, boolean isUpdateSupport, String operName) {
if (StringUtils.isNull(importedExcelNoticeTabs) || importedExcelNoticeTabs.size() == 0) { if (StringUtils.isNull(importedExcelNoticeTabs) || importedExcelNoticeTabs.isEmpty()) {
throw new ServiceException("导入入库通知单数据不能为空!"); throw new ServiceException("导入入库通知单数据不能为空!");
} }
int successCount = 0; int successCount = 0;
@ -1825,54 +1822,44 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
TRkWareNoticeTabExcel firstImportedNoticeTab = importedExcelNoticeTabs.get(0); TRkWareNoticeTabExcel firstImportedNoticeTab = importedExcelNoticeTabs.get(0);
TRkWareNotice importedNotice = new TRkWareNotice(); TRkWareNotice importedNotice = new TRkWareNotice();
//来源单号生成
Random random = new Random();
// 生成一个1000到9999之间的随机数
// int randomFourDigit = 1000 + random.nextInt(9000);
//一级库发货单号唯一 //一级库发货单号唯一
importedNotice.setDeliveryId(firstImportedNoticeTab.getPurchaseId()); importedNotice.setDeliveryId(firstImportedNoticeTab.getPurchaseId());
List<TRkWareNotice> duplicateNotices = tRkWareNoticeMapper.selectTRkWareNoticeList(importedNotice); List<TRkWareNotice> duplicateNotices = tRkWareNoticeMapper.selectTRkWareNoticeList(importedNotice);
if (duplicateNotices.size() == 0) { if (duplicateNotices.isEmpty()) {
setExcelTrkNotice(importedNotice, firstImportedNoticeTab, operName); setExcelTrkNotice(importedNotice, firstImportedNoticeTab, operName);
importedNotice.setReceivingStatus("0"); importedNotice.setReceivingStatus(InboundNoticeReceivingStatus.CREATED.getCode());
importedNotice.setStorageMode("1"); importedNotice.setStorageMode(InboundStorageMode.STANDARD.getCode());
tRkWareNoticeMapper.insertTRkWareNotice(importedNotice); tRkWareNoticeMapper.insertTRkWareNotice(importedNotice);
// TRkWareNotice notice2 = new TRkWareNotice();
// notice2.setId(tRkWareNotice.getId());
// notice2.setCreateBy(operName);
// tRkWareNoticeMapper.updateTRkWareNotice(notice2);
} else if (isUpdateSupport) { } else if (isUpdateSupport) {
List<String> noticeIdsToDelete = duplicateNotices.stream().map(TRkWareNotice::getId).collect(Collectors.toList()); List<String> noticeIdsToDelete = duplicateNotices.stream().map(TRkWareNotice::getId).collect(Collectors.toList());
tRkWareNoticeMapper.deleteTRkWareNoticeByIds(noticeIdsToDelete.toArray(new String[noticeIdsToDelete.size()])); tRkWareNoticeMapper.deleteTRkWareNoticeByIds(noticeIdsToDelete.toArray(new String[noticeIdsToDelete.size()]));
setExcelTrkNotice(importedNotice, firstImportedNoticeTab, operName); setExcelTrkNotice(importedNotice, firstImportedNoticeTab, operName);
importedNotice.setReceivingStatus("0"); importedNotice.setReceivingStatus(InboundNoticeReceivingStatus.CREATED.getCode());
importedNotice.setStorageMode("1"); importedNotice.setStorageMode(InboundStorageMode.STANDARD.getCode());
tRkWareNoticeMapper.insertTRkWareNotice(importedNotice); tRkWareNoticeMapper.insertTRkWareNotice(importedNotice);
} else { } else {
throw new ServiceException("来源单号 " + firstImportedNoticeTab.getDeliveryId() + " 重复导入异常!"); throw new ServiceException("来源单号 " + firstImportedNoticeTab.getDeliveryId() + " 重复导入异常!");
} }
for (int importIndex = 0; importIndex < importedExcelNoticeTabs.size(); importIndex++) { for (TRkWareNoticeTabExcel importedExcelNoticeTab : importedExcelNoticeTabs) {
try { try {
//校验必输字段 // 校验必输字段
TRkWareNoticeTabExcel importedExcelNoticeTab = importedExcelNoticeTabs.get(importIndex);
// validateImportedNoticeTab(importIndex, importedExcelNoticeTab); // validateImportedNoticeTab(importIndex, importedExcelNoticeTab);
// 验证是否存在该明细 // 验证是否存在该明细
importedExcelNoticeTab.setDeliveryId(importedExcelNoticeTab.getPurchaseId());
TRkWareNoticeTab noticeTabQuery = new TRkWareNoticeTab(); TRkWareNoticeTab noticeTabQuery = new TRkWareNoticeTab();
noticeTabQuery.setSalesOrderNumber(importedExcelNoticeTab.getSalesOrderNumber()); noticeTabQuery.setSalesOrderNumber(importedExcelNoticeTab.getSalesOrderNumber());
noticeTabQuery.setGoodsId(importedExcelNoticeTab.getGoodsId()); noticeTabQuery.setGoodsId(importedExcelNoticeTab.getGoodsId());
noticeTabQuery.setReceivingStatus("0"); noticeTabQuery.setReceivingStatus(InboundNoticeTabReceivingStatus.PENDING.getCode());
noticeTabQuery.setInStatus("0"); noticeTabQuery.setInStatus(InboundNoticeTabInStatus.INITIAL.getCode());
noticeTabQuery.setDataSource("一级库"); noticeTabQuery.setDataSource(InboundLevelType.LEVEL_ONE.getDescription());
importedExcelNoticeTab.setDataSource("一级库"); importedExcelNoticeTab.setDataSource(InboundLevelType.LEVEL_ONE.getDescription());
importedExcelNoticeTab.setLevelType("1"); importedExcelNoticeTab.setLevelType(InboundLevelType.LEVEL_ONE.getCode());
importedExcelNoticeTab.setDeliveryId(importedExcelNoticeTab.getPurchaseId());
SimpleDateFormat originalFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); SimpleDateFormat originalFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@ -1887,27 +1874,19 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
importedExcelNoticeTab.setPlanDate(formattedPlanDate); importedExcelNoticeTab.setPlanDate(formattedPlanDate);
} }
} catch (ParseException e) { } catch (ParseException e) {
// e.printStackTrace(); // e.printStackTrace();
} }
TRkWareNoticeTab noticeTabToInsert = new TRkWareNoticeTab(); TRkWareNoticeTab noticeTabToInsert = new TRkWareNoticeTab();
BeanUtils.copyProperties(importedExcelNoticeTab, noticeTabToInsert); BeanUtils.copyProperties(importedExcelNoticeTab, noticeTabToInsert);
List<TRkWareNoticeTab> duplicateNoticeTabs = tRkWareNoticeTabMapper.selectTRkWareNoticeTabList(noticeTabQuery);
noticeTabToInsert.setDeliveryId(firstImportedNoticeTab.getDeliveryId()); noticeTabToInsert.setDeliveryId(firstImportedNoticeTab.getDeliveryId());
noticeTabToInsert.setSourceNum(firstImportedNoticeTab.getDeliveryId()); noticeTabToInsert.setSourceNum(firstImportedNoticeTab.getDeliveryId());
if (duplicateNoticeTabs.size() == 0) { List<TRkWareNoticeTab> duplicateNoticeTabs = tRkWareNoticeTabMapper.selectTRkWareNoticeTabList(noticeTabQuery);
if (duplicateNoticeTabs.isEmpty()) {
logger.info("createBy:{}", noticeTabToInsert.getCreateBy()); logger.info("createBy:{}", noticeTabToInsert.getCreateBy());
initializeNoticeTabForInsert(noticeTabToInsert, importedNotice.getId(), operName); initializeNoticeTabForInsert(noticeTabToInsert, importedNotice.getId(), operName);
noticeTabToInsert.setReceivingNum(importedExcelNoticeTab.getArraMount()); noticeTabToInsert.setReceivingNum(importedExcelNoticeTab.getArraMount());
logger.info("createBy:{}", noticeTabToInsert.getCreateBy());
tRkWareNoticeTabMapper.insertTRkWareNoticeTab(noticeTabToInsert); tRkWareNoticeTabMapper.insertTRkWareNoticeTab(noticeTabToInsert);
// TRkWareNoticeTab noticeTabToUpdate = new TRkWareNoticeTab();
// noticeTabToUpdate.setId(noticeTabToInsert.getId());
// noticeTabToUpdate.setCreateBy(operName);
// tRkWareNoticeTabMapper.updateTRkWareNoticeTab(noticeTabToUpdate);
// logger.info("createBy:{}", noticeTabToInsert.getCreateBy());
successCount++; successCount++;
successMessage.append("<br/>" + successCount + "、物料编号 " + importedExcelNoticeTab.getGoodsId() + " 导入成功"); successMessage.append("<br/>" + successCount + "、物料编号 " + importedExcelNoticeTab.getGoodsId() + " 导入成功");
} else if (isUpdateSupport) { } else if (isUpdateSupport) {
@ -1943,8 +1922,8 @@ public class TRkWareNoticeServiceImpl extends ServiceImpl<TRkWareNoticeMapper, T
noticeTabToInsert.setId(OrderCodeFactory.getOrderCode("", "")); noticeTabToInsert.setId(OrderCodeFactory.getOrderCode("", ""));
noticeTabToInsert.setNoticeId(noticeId); noticeTabToInsert.setNoticeId(noticeId);
noticeTabToInsert.setCreateBy(operName); noticeTabToInsert.setCreateBy(operName);
noticeTabToInsert.setInStatus("0"); noticeTabToInsert.setInStatus(InboundNoticeTabInStatus.INITIAL.getCode());
noticeTabToInsert.setStatus("0"); noticeTabToInsert.setStatus(InboundNoticeTabStatus.ENABLED.getCode());
noticeTabToInsert.setCreateTime(DateUtils.getNowDate()); noticeTabToInsert.setCreateTime(DateUtils.getNowDate());