入库单按规则生成;
This commit is contained in:
+91
-4
@@ -30,6 +30,7 @@ import com.mhd.oms.domain.executionStockInOrder.repository.todo.ExecutionStockIn
|
|||||||
import com.mhd.oms.domain.executionStockOutOrder.entity.ExecutionStockOutOrder;
|
import com.mhd.oms.domain.executionStockOutOrder.entity.ExecutionStockOutOrder;
|
||||||
import com.mhd.oms.domain.executionStockOutOrder.repository.facade.IExecutionStockOutOrderService;
|
import com.mhd.oms.domain.executionStockOutOrder.repository.facade.IExecutionStockOutOrderService;
|
||||||
import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper;
|
import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper;
|
||||||
|
import com.mhd.oms.domain.reserveStockInOrder.repository.mapper.ReserveStockInOrderMapper;
|
||||||
import com.mhd.system.api.SystemServiceFeign;
|
import com.mhd.system.api.SystemServiceFeign;
|
||||||
import com.mhd.system.api.WmsServiceFeign;
|
import com.mhd.system.api.WmsServiceFeign;
|
||||||
import com.mhd.system.api.domain.*;
|
import com.mhd.system.api.domain.*;
|
||||||
@@ -43,6 +44,7 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -89,6 +91,8 @@ public class ExecutionStockInOrderDomainService {
|
|||||||
// private IShelfMaterialDetailService shelfMaterialDetailService;
|
// private IShelfMaterialDetailService shelfMaterialDetailService;
|
||||||
@Resource
|
@Resource
|
||||||
private ReservationStockInOrderMapper stockInOrderMapper;
|
private ReservationStockInOrderMapper stockInOrderMapper;
|
||||||
|
@Autowired
|
||||||
|
private ReserveStockInOrderMapper reserveStockInOrderMapper;
|
||||||
/**
|
/**
|
||||||
* 分页查询入库单列表
|
* 分页查询入库单列表
|
||||||
*/
|
*/
|
||||||
@@ -96,14 +100,70 @@ public class ExecutionStockInOrderDomainService {
|
|||||||
return stockInOrderService.queryList(stockInOrderDO);
|
return stockInOrderService.queryList(stockInOrderDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从单号列表中提取最大序号
|
||||||
|
* 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001)
|
||||||
|
* 即使中间有删单,也能保证序号递增不重复
|
||||||
|
*
|
||||||
|
* @param orderNumbers 匹配的单号列表
|
||||||
|
* @param prefixLength 前缀长度(序号从该位置开始截取)
|
||||||
|
* @return 最大序号值,列表为空时返回0
|
||||||
|
*/
|
||||||
|
private int extractMaxSequenceNumber(List<String> orderNumbers, int prefixLength) {
|
||||||
|
if (orderNumbers == null || orderNumbers.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int maxSeq = 0;
|
||||||
|
for (String orderNumber : orderNumbers) {
|
||||||
|
if (orderNumber != null && orderNumber.length() > prefixLength) {
|
||||||
|
try {
|
||||||
|
String seqStr = orderNumber.substring(prefixLength);
|
||||||
|
int seq = Integer.parseInt(seqStr);
|
||||||
|
if (seq > maxSeq) {
|
||||||
|
maxSeq = seq;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// 序号部分非数字,跳过
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxSeq;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增入库单
|
* 新增入库单
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insert(ExecutionStockInOrderDO stockInOrderDO) {
|
public Boolean insert(ExecutionStockInOrderDO stockInOrderDO) {
|
||||||
if (stockInOrderDO.getInOrderNumber() == null) {
|
//设置入库单号
|
||||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
}
|
}
|
||||||
// //设置默认值
|
// //设置默认值
|
||||||
// setDefaultValues(stockInOrderDO);
|
// setDefaultValues(stockInOrderDO);
|
||||||
@@ -132,8 +192,35 @@ public class ExecutionStockInOrderDomainService {
|
|||||||
*/
|
*/
|
||||||
public Boolean batchInsert(List<ExecutionStockInOrderDO> stockInOrderDOList) {
|
public Boolean batchInsert(List<ExecutionStockInOrderDO> stockInOrderDOList) {
|
||||||
for (ExecutionStockInOrderDO stockInOrderDO : stockInOrderDOList){
|
for (ExecutionStockInOrderDO stockInOrderDO : stockInOrderDOList){
|
||||||
if (StringUtils.isBlank(stockInOrderDO.getInOrderNumber())){
|
//设置入库单号
|
||||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
}
|
}
|
||||||
// //设置物料信息
|
// //设置物料信息
|
||||||
// setMaterialDetailInfo(stockInOrderDO);
|
// setMaterialDetailInfo(stockInOrderDO);
|
||||||
|
|||||||
+69
-3
@@ -39,6 +39,7 @@ import com.mhd.oms.domain.reservationStockOutOrder.repository.facade.IReservatio
|
|||||||
import com.mhd.oms.domain.reservationStockOutOrder.repository.mapper.ReservationStockOutOrderMapper;
|
import com.mhd.oms.domain.reservationStockOutOrder.repository.mapper.ReservationStockOutOrderMapper;
|
||||||
import com.mhd.oms.domain.reservationStockOutOrder.repository.todo.ReservationStockOutOrderDO;
|
import com.mhd.oms.domain.reservationStockOutOrder.repository.todo.ReservationStockOutOrderDO;
|
||||||
import com.mhd.oms.domain.reservationStockOutOrder.service.ReservationStockOutOrderApplicationService;
|
import com.mhd.oms.domain.reservationStockOutOrder.service.ReservationStockOutOrderApplicationService;
|
||||||
|
import com.mhd.oms.domain.reserveStockInOrder.repository.mapper.ReserveStockInOrderMapper;
|
||||||
import com.mhd.system.api.SystemServiceFeign;
|
import com.mhd.system.api.SystemServiceFeign;
|
||||||
import com.mhd.system.api.UserServiceFeign;
|
import com.mhd.system.api.UserServiceFeign;
|
||||||
import com.mhd.system.api.domain.SysDictData;
|
import com.mhd.system.api.domain.SysDictData;
|
||||||
@@ -87,7 +88,8 @@ public class ReservationStockInOrderImpl extends ServiceImpl<ReservationStockInO
|
|||||||
private IReservationInMaterialDetailService materialDetailService;
|
private IReservationInMaterialDetailService materialDetailService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ReservationStockInOrderDomainService reservationStockInOrderDomainService;
|
private ReservationStockInOrderDomainService reservationStockInOrderDomainService;
|
||||||
|
@Autowired
|
||||||
|
private ReserveStockInOrderMapper reservationStockInOrderMapper;
|
||||||
/**
|
/**
|
||||||
* 查询入库单列表
|
* 查询入库单列表
|
||||||
*/
|
*/
|
||||||
@@ -504,12 +506,76 @@ public class ReservationStockInOrderImpl extends ServiceImpl<ReservationStockInO
|
|||||||
return insertDomain(stockInOrderDO);
|
return insertDomain(stockInOrderDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从单号列表中提取最大序号
|
||||||
|
* 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001)
|
||||||
|
* 即使中间有删单,也能保证序号递增不重复
|
||||||
|
*
|
||||||
|
* @param orderNumbers 匹配的单号列表
|
||||||
|
* @param prefixLength 前缀长度(序号从该位置开始截取)
|
||||||
|
* @return 最大序号值,列表为空时返回0
|
||||||
|
*/
|
||||||
|
private int extractMaxSequenceNumber(List<String> orderNumbers, int prefixLength) {
|
||||||
|
if (orderNumbers == null || orderNumbers.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int maxSeq = 0;
|
||||||
|
for (String orderNumber : orderNumbers) {
|
||||||
|
if (orderNumber != null && orderNumber.length() > prefixLength) {
|
||||||
|
try {
|
||||||
|
String seqStr = orderNumber.substring(prefixLength);
|
||||||
|
int seq = Integer.parseInt(seqStr);
|
||||||
|
if (seq > maxSeq) {
|
||||||
|
maxSeq = seq;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// 序号部分非数字,跳过
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxSeq;
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insertDomain(ReservationStockInOrderDO stockInOrderDO) {
|
public Boolean insertDomain(ReservationStockInOrderDO stockInOrderDO) {
|
||||||
if (stockInOrderDO.getInOrderNumber() == null) {
|
// if (stockInOrderDO.getInOrderNumber() == null) {
|
||||||
|
|
||||||
|
//设置入库单号
|
||||||
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = reservationStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
stockInOrderDO.setBusinessOrderNo(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = reservationStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
|
stockInOrderDO.setBusinessOrderNo(prefix + seq);
|
||||||
|
}
|
||||||
stockInOrderDO.setInOrderNumber(reservationStockInOrderDomainService.generateReserveOrderNumber());
|
stockInOrderDO.setInOrderNumber(reservationStockInOrderDomainService.generateReserveOrderNumber());
|
||||||
stockInOrderDO.setBusinessOrderNo(stockInOrderDO.getInOrderNumber());
|
stockInOrderDO.setBusinessOrderNo(stockInOrderDO.getInOrderNumber());
|
||||||
}
|
// }
|
||||||
// //统计总计划数
|
// //统计总计划数
|
||||||
BigDecimal quantity = stockInOrderDO.getMaterialDetailList().stream().map(ReservationInMaterialDetailDO::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal quantity = stockInOrderDO.getMaterialDetailList().stream().map(ReservationInMaterialDetailDO::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
stockInOrderDO.setQuantity(quantity);
|
stockInOrderDO.setQuantity(quantity);
|
||||||
|
|||||||
+108
-5
@@ -99,16 +99,90 @@ public class ReservationStockInOrderDomainService {
|
|||||||
return stockInOrderService.queryList(stockInOrderDO);
|
return stockInOrderService.queryList(stockInOrderDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成入库预约单号
|
||||||
|
*/
|
||||||
|
// public String generateReserveOrderNumber() {
|
||||||
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
|
||||||
|
// String datePart = sdf.format(new Date());
|
||||||
|
// String prefix = "R" + datePart;
|
||||||
|
// int todayCount = reservationStockInOrderMapper.countByOrderNumberPrefix(prefix);
|
||||||
|
// String seq = String.format("%03d", todayCount + 1);
|
||||||
|
// return prefix + seq;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从单号列表中提取最大序号
|
||||||
|
* 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001)
|
||||||
|
* 即使中间有删单,也能保证序号递增不重复
|
||||||
|
*
|
||||||
|
* @param orderNumbers 匹配的单号列表
|
||||||
|
* @param prefixLength 前缀长度(序号从该位置开始截取)
|
||||||
|
* @return 最大序号值,列表为空时返回0
|
||||||
|
*/
|
||||||
|
private int extractMaxSequenceNumber(List<String> orderNumbers, int prefixLength) {
|
||||||
|
if (orderNumbers == null || orderNumbers.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int maxSeq = 0;
|
||||||
|
for (String orderNumber : orderNumbers) {
|
||||||
|
if (orderNumber != null && orderNumber.length() > prefixLength) {
|
||||||
|
try {
|
||||||
|
String seqStr = orderNumber.substring(prefixLength);
|
||||||
|
int seq = Integer.parseInt(seqStr);
|
||||||
|
if (seq > maxSeq) {
|
||||||
|
maxSeq = seq;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// 序号部分非数字,跳过
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxSeq;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增入库单
|
* 新增入库单
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insert(ReservationStockInOrderDO stockInOrderDO) {
|
public Boolean insert(ReservationStockInOrderDO stockInOrderDO) {
|
||||||
if (stockInOrderDO.getInOrderNumber() == null) {
|
// if (stockInOrderDO.getInOrderNumber() == null) {
|
||||||
stockInOrderDO.setInOrderNumber(generateReserveOrderNumber());
|
|
||||||
stockInOrderDO.setBusinessOrderNo(stockInOrderDO.getInOrderNumber());
|
//设置入库单号
|
||||||
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
}
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
|
}
|
||||||
|
|
||||||
|
// stockInOrderDO.setInOrderNumber(generateReserveOrderNumber());
|
||||||
|
// stockInOrderDO.setBusinessOrderNo(stockInOrderDO.getInOrderNumber());
|
||||||
|
// }
|
||||||
// //设置默认值
|
// //设置默认值
|
||||||
// setDefaultValues(stockInOrderDO);
|
// setDefaultValues(stockInOrderDO);
|
||||||
// //设置物料信息
|
// //设置物料信息
|
||||||
@@ -136,9 +210,38 @@ public class ReservationStockInOrderDomainService {
|
|||||||
*/
|
*/
|
||||||
public Boolean batchInsert(List<ReservationStockInOrderDO> stockInOrderDOList) {
|
public Boolean batchInsert(List<ReservationStockInOrderDO> stockInOrderDOList) {
|
||||||
for (ReservationStockInOrderDO stockInOrderDO : stockInOrderDOList){
|
for (ReservationStockInOrderDO stockInOrderDO : stockInOrderDOList){
|
||||||
if (StringUtils.isBlank(stockInOrderDO.getInOrderNumber())){
|
|
||||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
//设置入库单号
|
||||||
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
}
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
|
}
|
||||||
|
|
||||||
// //设置物料信息
|
// //设置物料信息
|
||||||
// setMaterialDetailInfo(stockInOrderDO);
|
// setMaterialDetailInfo(stockInOrderDO);
|
||||||
// //统计总物料种数
|
// //统计总物料种数
|
||||||
|
|||||||
+8
@@ -34,4 +34,12 @@ public interface StockInOrderMapper extends BaseMapper<StockInOrder>
|
|||||||
String queryWarehouseUserId(@Param("organizationId") Long organizationId, @Param("warehouseId") Long warehouseId, @Param("topOrganizationId") Long topOrganizationId);
|
String queryWarehouseUserId(@Param("organizationId") Long organizationId, @Param("warehouseId") Long warehouseId, @Param("topOrganizationId") Long topOrganizationId);
|
||||||
|
|
||||||
void updateExecution(@Param("inOrderNumber") String inOrderNumber, @Param("remark") String remark);
|
void updateExecution(@Param("inOrderNumber") String inOrderNumber, @Param("remark") String remark);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(用于取最大序号+1,防止删单后单号重复)
|
||||||
|
* 包含: reserve_stock_in_order, reservation_stock_in_order, execution_stock_in_order, WMS stock_in_order
|
||||||
|
*/
|
||||||
|
List<String> getMaxStockInOrderByPrefixAndOrgAndWarehouse(@Param("prefix") String prefix,
|
||||||
|
@Param("organizationId") Long organizationId,
|
||||||
|
@Param("warehouseId") Long warehouseId);
|
||||||
}
|
}
|
||||||
+92
-4
@@ -21,6 +21,7 @@ import com.mhd.system.api.OmsServiceFeign;
|
|||||||
import com.mhd.system.api.SystemServiceFeign;
|
import com.mhd.system.api.SystemServiceFeign;
|
||||||
import com.mhd.system.api.domain.ElectronicSignatureSyncDTO;
|
import com.mhd.system.api.domain.ElectronicSignatureSyncDTO;
|
||||||
import com.mhd.system.api.domain.PackDetailFeignPO;
|
import com.mhd.system.api.domain.PackDetailFeignPO;
|
||||||
|
import com.mhd.system.api.domain.WarehouseFeignPO;
|
||||||
import com.mhd.system.api.model.LoginUser;
|
import com.mhd.system.api.model.LoginUser;
|
||||||
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
|
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
|
||||||
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
|
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
|
||||||
@@ -146,7 +147,35 @@ public class StockInOrderDomainService {
|
|||||||
return stockInOrderService.queryList(stockInOrderDO);
|
return stockInOrderService.queryList(stockInOrderDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从单号列表中提取最大序号
|
||||||
|
* 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001)
|
||||||
|
* 即使中间有删单,也能保证序号递增不重复
|
||||||
|
*
|
||||||
|
* @param orderNumbers 匹配的单号列表
|
||||||
|
* @param prefixLength 前缀长度(序号从该位置开始截取)
|
||||||
|
* @return 最大序号值,列表为空时返回0
|
||||||
|
*/
|
||||||
|
private int extractMaxSequenceNumber(List<String> orderNumbers, int prefixLength) {
|
||||||
|
if (orderNumbers == null || orderNumbers.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int maxSeq = 0;
|
||||||
|
for (String orderNumber : orderNumbers) {
|
||||||
|
if (orderNumber != null && orderNumber.length() > prefixLength) {
|
||||||
|
try {
|
||||||
|
String seqStr = orderNumber.substring(prefixLength);
|
||||||
|
int seq = Integer.parseInt(seqStr);
|
||||||
|
if (seq > maxSeq) {
|
||||||
|
maxSeq = seq;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// 序号部分非数字,跳过
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxSeq;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -154,7 +183,39 @@ public class StockInOrderDomainService {
|
|||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insert(StockInOrderDO stockInOrderDO) {
|
public Boolean insert(StockInOrderDO stockInOrderDO) {
|
||||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
// stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
||||||
|
|
||||||
|
//设置入库单号
|
||||||
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
|
}
|
||||||
|
|
||||||
// //设置默认值
|
// //设置默认值
|
||||||
// setDefaultValues(stockInOrderDO);
|
// setDefaultValues(stockInOrderDO);
|
||||||
// //设置物料信息
|
// //设置物料信息
|
||||||
@@ -179,8 +240,35 @@ public class StockInOrderDomainService {
|
|||||||
*/
|
*/
|
||||||
public Boolean batchInsert(List<StockInOrderDO> stockInOrderDOList) {
|
public Boolean batchInsert(List<StockInOrderDO> stockInOrderDOList) {
|
||||||
for (StockInOrderDO stockInOrderDO : stockInOrderDOList){
|
for (StockInOrderDO stockInOrderDO : stockInOrderDOList){
|
||||||
if (StringUtils.isBlank(stockInOrderDO.getInOrderNumber())){
|
//设置入库单号
|
||||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||||
|
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||||
|
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||||
|
throw new ServiceException("获取仓库信息失败");
|
||||||
|
}
|
||||||
|
//仓库信息
|
||||||
|
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||||
|
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||||
|
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||||
|
if (prefix == null || prefix.isEmpty()) {
|
||||||
|
prefix = "RK";
|
||||||
|
}
|
||||||
|
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||||
|
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||||
|
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||||
|
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||||
|
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||||
|
String datePrefix = prefix + dateStr;
|
||||||
|
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||||
|
} else {
|
||||||
|
//历史累加: 前缀 + 历史最大序号+1
|
||||||
|
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||||
|
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||||
|
String seq = String.format("%03d", maxSeq + 1);
|
||||||
|
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||||
}
|
}
|
||||||
// //设置物料信息
|
// //设置物料信息
|
||||||
// setMaterialDetailInfo(stockInOrderDO);
|
// setMaterialDetailInfo(stockInOrderDO);
|
||||||
|
|||||||
@@ -619,4 +619,54 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
where in_order_number = #{inOrderNumber} and del_flag = 1
|
where in_order_number = #{inOrderNumber} and del_flag = 1
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(取最大序号+1,防止删单后单号重复) -->
|
||||||
|
<select id="getMaxStockInOrderByPrefixAndOrgAndWarehouse" resultType="java.lang.String">
|
||||||
|
SELECT in_order_number FROM NGWL_TEST_OMS.reserve_stock_in_order
|
||||||
|
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||||
|
AND del_flag = 1
|
||||||
|
<if test="organizationId != null">
|
||||||
|
AND organization_id = #{organizationId}
|
||||||
|
</if>
|
||||||
|
<if test="warehouseId != null">
|
||||||
|
AND warehouse_id = #{warehouseId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT in_order_number FROM NGWL_TEST_OMS.reservation_stock_in_order
|
||||||
|
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||||
|
AND del_flag = 1
|
||||||
|
<if test="organizationId != null">
|
||||||
|
AND organization_id = #{organizationId}
|
||||||
|
</if>
|
||||||
|
<if test="warehouseId != null">
|
||||||
|
AND warehouse_id = #{warehouseId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT in_order_number FROM NGWL_TEST_OMS.execution_stock_in_order
|
||||||
|
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||||
|
AND del_flag = 1
|
||||||
|
<if test="organizationId != null">
|
||||||
|
AND organization_id = #{organizationId}
|
||||||
|
</if>
|
||||||
|
<if test="warehouseId != null">
|
||||||
|
AND warehouse_id = #{warehouseId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT in_order_number FROM stock_in_order
|
||||||
|
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||||
|
AND del_flag = 1
|
||||||
|
<if test="organizationId != null">
|
||||||
|
AND organization_id = #{organizationId}
|
||||||
|
</if>
|
||||||
|
<if test="warehouseId != null">
|
||||||
|
AND warehouse_id = #{warehouseId}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user