1. 删除OrderInCheckor定时任务, 将MES与ERP的校验转移到创建任务时处理

2. 添加xsfbillno, xsfseq, neibubianhao, goodsBarcode字段
This commit is contained in:
李宇奇 2025-04-08 19:43:28 +08:00
parent e7436bcf46
commit 7ab3096b94
11 changed files with 123 additions and 23 deletions

View File

@ -11,7 +11,7 @@
Target Server Version : 80034 (8.0.34) Target Server Version : 80034 (8.0.34)
File Encoding : 65001 File Encoding : 65001
Date: 07/04/2025 16:52:04 Date: 08/04/2025 19:42:54
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;
@ -2223,7 +2223,6 @@ CREATE TABLE `t_app_jobs` (
-- ---------------------------- -- ----------------------------
-- Records of t_app_jobs -- Records of t_app_jobs
-- ---------------------------- -- ----------------------------
INSERT INTO `t_app_jobs` VALUES ('OrderInCheckor', 'com.wms_main.service.quartz_job.job_executor.OrderInCheckor', '0/2 * * * * ? *', 2000, 1, 1);
INSERT INTO `t_app_jobs` VALUES ('OutsExecutor', 'com.wms_main.service.quartz_job.job_executor.OutsExecutor', '0/2 * * * * ? *', 2000, 1, 1); INSERT INTO `t_app_jobs` VALUES ('OutsExecutor', 'com.wms_main.service.quartz_job.job_executor.OutsExecutor', '0/2 * * * * ? *', 2000, 1, 1);
INSERT INTO `t_app_jobs` VALUES ('WcsStackerTaskSender', 'com.wms_main.service.quartz_job.job_executor.WcsStackerTaskSender', '0/2 * * * * ? *', 2000, 1, 1); INSERT INTO `t_app_jobs` VALUES ('WcsStackerTaskSender', 'com.wms_main.service.quartz_job.job_executor.WcsStackerTaskSender', '0/2 * * * * ? *', 2000, 1, 1);
INSERT INTO `t_app_jobs` VALUES ('WmsTaskFinisher', 'com.wms_main.service.quartz_job.job_executor.WmsTaskFinisher', '0/2 * * * * ? *', 2000, 1, 1); INSERT INTO `t_app_jobs` VALUES ('WmsTaskFinisher', 'com.wms_main.service.quartz_job.job_executor.WmsTaskFinisher', '0/2 * * * * ? *', 2000, 1, 1);
@ -4999,11 +4998,15 @@ CREATE TABLE `t_app_order_in` (
`goods_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `goods_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`specification` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `specification` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`quantity` double NOT NULL, `quantity` double NOT NULL,
`goods_bar_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`goods_desc` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `goods_desc` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`order_status` int NOT NULL, `order_status` int NOT NULL,
`create_time` datetime NOT NULL, `create_time` datetime NOT NULL,
`update_time` datetime NULL DEFAULT NULL, `update_time` datetime NULL DEFAULT NULL,
`complete_time` datetime NULL DEFAULT NULL, `complete_time` datetime NULL DEFAULT NULL,
`xsfbillno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`xsfseq` int NULL DEFAULT NULL,
`neibubianhao` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`record_id`) USING BTREE PRIMARY KEY (`record_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
@ -5498,6 +5501,10 @@ CREATE TABLE `t_app_stock` (
`mes_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'mes单号', `mes_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'mes单号',
`batch` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `batch` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`goods_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `goods_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`xsfbillno` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`xsfseq` int NULL DEFAULT NULL,
`neibubianhao` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`goods_bar_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`stock_id`) USING BTREE PRIMARY KEY (`stock_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
@ -5613,8 +5620,8 @@ CREATE TABLE `t_app_vehicle` (
-- Records of t_app_vehicle -- Records of t_app_vehicle
-- ---------------------------- -- ----------------------------
INSERT INTO `t_app_vehicle` VALUES ('0401', 0, 3, '1', 0, '', '2025-04-01 13:11:48'); INSERT INTO `t_app_vehicle` VALUES ('0401', 0, 3, '1', 0, '', '2025-04-01 13:11:48');
INSERT INTO `t_app_vehicle` VALUES ('0402', 0, 2, '1', 0, 'A04-19-06-01', '2025-04-01 13:11:56'); INSERT INTO `t_app_vehicle` VALUES ('0402', 0, 2, '1', 0, '', '2025-04-01 13:11:56');
INSERT INTO `t_app_vehicle` VALUES ('20250401150031', 0, 3, '1', 0, '', '2025-04-07 16:20:15'); INSERT INTO `t_app_vehicle` VALUES ('20250401150031', 0, 3, '1', 0, '', '2025-04-08 19:30:11');
-- ---------------------------- -- ----------------------------
-- Table structure for t_app_wcs_task -- Table structure for t_app_wcs_task
@ -5713,6 +5720,19 @@ INSERT INTO `t_app_wcs_task_bak` VALUES ('1744013622086010000', 2, 1, 0, '202504
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744013869045010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '103', '2025-04-07 16:17:49', NULL, NULL, NULL); INSERT INTO `t_app_wcs_task_bak` VALUES ('1744013869045010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '103', '2025-04-07 16:17:49', NULL, NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744013987278010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-07 16:19:47', '2025-04-07 16:19:47', NULL, NULL); INSERT INTO `t_app_wcs_task_bak` VALUES ('1744013987278010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-07 16:19:47', '2025-04-07 16:19:47', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744014051040010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '103', '2025-04-07 16:20:51', NULL, NULL, NULL); INSERT INTO `t_app_wcs_task_bak` VALUES ('1744014051040010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '103', '2025-04-07 16:20:51', NULL, NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744101715450010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 16:41:55', '2025-04-08 16:41:55', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744103504534010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '272399-343153-97', '2025-04-08 17:11:45', NULL, NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744104108494010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 17:21:48', '2025-04-08 17:21:48', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744104795372010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 17:33:15', '2025-04-08 17:33:15', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744107367237010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 18:16:07', '2025-04-08 18:16:07', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744108481848010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 18:34:42', '2025-04-08 18:34:42', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744110229130010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-01', '2025-04-08 19:03:49', '2025-04-08 19:03:49', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744110590961010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-01', '2025-04-08 19:09:51', '2025-04-08 19:09:51', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744110928097010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 19:15:28', '2025-04-08 19:15:28', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744110975061010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '103', '2025-04-08 19:16:15', NULL, NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744111374581010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 19:22:55', '2025-04-08 19:22:55', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744111790731010000', 2, 1, 0, '20250401150031', '103', 'A04-20-05-02', '2025-04-08 19:29:51', '2025-04-08 19:29:51', NULL, NULL);
INSERT INTO `t_app_wcs_task_bak` VALUES ('1744111948895010000', 100, 2, 1, '20250401150031', 'A04-20-05-02', '103', '2025-04-08 19:32:29', NULL, NULL, NULL);
-- ---------------------------- -- ----------------------------
-- Table structure for t_app_work -- Table structure for t_app_work

View File

@ -20,6 +20,6 @@ public class ErpGoodsDetail {
private String goodsDesc; private String goodsDesc;
private String goodsBarcode; private String goodsBarcode;
private String xsfbillno; private String xsfbillno;
private String xsfseq; private Integer xsfseq;
private String neibubianhao; private String neibubianhao;
} }

View File

@ -59,6 +59,9 @@ public class TAppOrderIn {
@TableField(value = "order_status") @TableField(value = "order_status")
private Integer orderStatus; private Integer orderStatus;
@TableField(value = "goods_bar_code")
private String goodsBarcode;
@TableField(value = "create_time") @TableField(value = "create_time")
private LocalDateTime createTime; private LocalDateTime createTime;
@ -68,6 +71,15 @@ public class TAppOrderIn {
@TableField(value = "complete_time") @TableField(value = "complete_time")
private LocalDateTime completeTime; private LocalDateTime completeTime;
@TableField(value = "xsfbillno")
private String xsfbillno;
@TableField(value = "xsfseq")
private Integer xsfseq;
@TableField(value = "neibubianhao")
private String neibubianhao;
@TableField(value = "remark") @TableField(value = "remark")
private String remark; private String remark;

View File

@ -117,4 +117,16 @@ public class TAppStock {
@TableField(value = "goods_type") @TableField(value = "goods_type")
private String goodsType; private String goodsType;
@TableField(value = "xsfbillno")
private String xsfbillno;
@TableField(value = "xsfseq")
private Integer xsfseq;
@TableField(value = "neibubianhao")
private String neibubianhao;
@TableField(value = "goods_bar_code")
private String goodsBarCode;
} }

View File

@ -72,7 +72,7 @@ public class ExternalApiServiceImpl implements IExternalApiService {
goodsDetail.setQuantity(Double.parseDouble(detail.get("quantity").toString())); goodsDetail.setQuantity(Double.parseDouble(detail.get("quantity").toString()));
goodsDetail.setGoodsDesc((String) detail.get("goodsDesc")); goodsDetail.setGoodsDesc((String) detail.get("goodsDesc"));
goodsDetail.setXsfbillno((String) detail.get("xsfbillno")); goodsDetail.setXsfbillno((String) detail.get("xsfbillno"));
goodsDetail.setXsfseq((String) detail.get("xsfseq")); goodsDetail.setXsfseq(Integer.parseInt(detail.get("xsfseq").toString()));
goodsDetail.setNeibubianhao((String) detail.get("neibubianhao")); goodsDetail.setNeibubianhao((String) detail.get("neibubianhao"));
goodsDetail.setGoodsBarcode((String) detail.get("goodsBarcode")); goodsDetail.setGoodsBarcode((String) detail.get("goodsBarcode"));
erpsGoodsDetails.add(goodsDetail); erpsGoodsDetails.add(goodsDetail);

View File

@ -383,7 +383,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
needDeleteOrderIns.add(thisOrderIn.getRecordId()); needDeleteOrderIns.add(thisOrderIn.getRecordId());
orderCBIds.add(thisOrderIn.getOrderId()); orderCBIds.add(thisOrderIn.getOrderId());
// 添加库存 // 添加库存
String validateStr = thisOrderIn.getGoodsId() + thisOrderIn.getBatch() + thisOrderIn.getGoodsType() + thisOrderIn.getSpecification(); String validateStr = thisOrderIn.getGoodsId() + thisOrderIn.getGoodsBarcode() + thisOrderIn.getGoodsType() + thisOrderIn.getSpecification() + thisOrderIn.getXsfbillno() + thisOrderIn.getXsfseq().toString() + thisOrderIn.getNeibubianhao();
if (!stockMap.containsKey(validateStr)) { if (!stockMap.containsKey(validateStr)) {
TAppStock newStock = new TAppStock(); TAppStock newStock = new TAppStock();
newStock.setStockId(UUIDUtils.getNewUUID()); newStock.setStockId(UUIDUtils.getNewUUID());
@ -405,7 +405,10 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
newStock.setBatch(thisOrderIn.getBatch()); newStock.setBatch(thisOrderIn.getBatch());
newStock.setGoodsType(thisOrderIn.getGoodsType()); newStock.setGoodsType(thisOrderIn.getGoodsType());
newStock.setBarCode(thisOrderIn.getInStand()); newStock.setBarCode(thisOrderIn.getInStand());
// newStockList.add(newStock); newStock.setGoodsBarCode(thisOrderIn.getGoodsBarcode());
newStock.setXsfbillno(thisOrderIn.getXsfbillno());
newStock.setXsfseq(thisOrderIn.getXsfseq());
newStock.setNeibubianhao(thisOrderIn.getNeibubianhao());
stockMap.put(validateStr, newStock); stockMap.put(validateStr, newStock);
} else { } else {
TAppStock newStock = stockMap.get(validateStr); TAppStock newStock = stockMap.get(validateStr);
@ -572,6 +575,10 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
thisVehicleInTask.getBarCode(), thisVehicleInTask.getBarCode(),
thisVehicleInTask.getMesId(), thisVehicleInTask.getMesId(),
"", "",
"",
"",
0,
"",
"" ""
)); ));
} else { } else {
@ -605,7 +612,12 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
thisVehicleInTask.getBarCode(), thisVehicleInTask.getBarCode(),
thisVehicleInTask.getMesId(), thisVehicleInTask.getMesId(),
"", "",
"",
"",
0,
"",
"" ""
)); ));
needDeleteStockIds.addAll(oldStockList.stream() needDeleteStockIds.addAll(oldStockList.stream()
.map(TAppStock::getStockId) .map(TAppStock::getStockId)

View File

@ -2,9 +2,12 @@ package com.wms_main.service.controller.serviceImpl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wms_main.constant.enums.wms.OrderStatusEnum; import com.wms_main.constant.enums.wms.OrderStatusEnum;
import com.wms_main.constant.enums.wms.WmsApiResponseCodeEnums;
import com.wms_main.dao.ITAppOrderInService; import com.wms_main.dao.ITAppOrderInService;
import com.wms_main.dao.ITAppOrderOutService; import com.wms_main.dao.ITAppOrderOutService;
import com.wms_main.dao.ITAppStockService; import com.wms_main.dao.ITAppStockService;
import com.wms_main.model.bo.erp.ErpGoodsDetail;
import com.wms_main.model.bo.erp.ErpVehicleNoResp;
import com.wms_main.model.dto.request.ycwms.*; import com.wms_main.model.dto.request.ycwms.*;
import com.wms_main.model.dto.response.ycwms.YcwmsResponse; import com.wms_main.model.dto.response.ycwms.YcwmsResponse;
import com.wms_main.model.po.TAppOrderIn; import com.wms_main.model.po.TAppOrderIn;
@ -12,6 +15,7 @@ import com.wms_main.model.po.TAppOrderOut;
import com.wms_main.model.po.TAppStock; import com.wms_main.model.po.TAppStock;
import com.wms_main.repository.utils.StringUtils; import com.wms_main.repository.utils.StringUtils;
import com.wms_main.repository.utils.UUIDUtils; import com.wms_main.repository.utils.UUIDUtils;
import com.wms_main.service.api.IExternalApiService;
import com.wms_main.service.controller.IYcwmsControllerService; import com.wms_main.service.controller.IYcwmsControllerService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -19,7 +23,9 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects;
@Service @Service
@Slf4j @Slf4j
@ -29,6 +35,7 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
private final ITAppOrderInService appOrderInService; private final ITAppOrderInService appOrderInService;
private final ITAppOrderOutService appOrderOutService; private final ITAppOrderOutService appOrderOutService;
private final ITAppStockService appStockService; private final ITAppStockService appStockService;
private final IExternalApiService externalApiService;
@Override @Override
public YcwmsResponse<Object> orderIn(OrderInReq request) { public YcwmsResponse<Object> orderIn(OrderInReq request) {
@ -47,8 +54,40 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
if(!withOrderId.isEmpty()) { if(!withOrderId.isEmpty()) {
return YcwmsResponse.error("入库单已存在,请勿重复推送", null); return YcwmsResponse.error("入库单已存在,请勿重复推送", null);
} }
String vehicleNo = request.getVehicleNo();
List<ErpGoodsDetail> erpGoodsDetails = new ArrayList<>();
try {
YcwmsResponse<ErpVehicleNoResp> erpResp = externalApiService.getVehicleNoData(vehicleNo);
if (erpResp != null && WmsApiResponseCodeEnums.SUCCESS.getCode() == erpResp.getCode() && !erpResp.getReturnData().getGoodsDetail().isEmpty()) {
erpGoodsDetails = erpResp.getReturnData().getGoodsDetail();
} else {
log.warn("获取载具[{}]数据失败,响应:{}", vehicleNo, erpResp);
}
} catch (Exception e) {
log.error("处理载具[{}]数据时发生异常:", vehicleNo, e);
}
List<OrderInGoodsDetail> mesGoodsDetails = request.getGoodsDetail();
// 对比inTasks和goodsDetails
Iterator<OrderInGoodsDetail> iterator = mesGoodsDetails.iterator();
while (iterator.hasNext()) {
OrderInGoodsDetail goodsDetail = iterator.next();
boolean matchFound = erpGoodsDetails.stream().anyMatch(erpGoodsDetail ->
erpGoodsDetail.getGoodsId().equals(goodsDetail.getGoodsId()) &&
erpGoodsDetail.getGoodsBarcode().equals(goodsDetail.getGoodsBarcode()) &&
Objects.equals(erpGoodsDetail.getQuantity(), goodsDetail.getQuantity()) &&
erpGoodsDetail.getGoodsType().equals(goodsDetail.getGoodsType()) &&
Objects.equals(erpGoodsDetail.getSpecification(), goodsDetail.getSpecification())
);
if (matchFound) {
// 找到匹配的任务删除该 goodsDetail
iterator.remove();
}
}
if (!mesGoodsDetails.isEmpty()) {
return YcwmsResponse.error("MES与ERP校验失败", null);
}
List<TAppOrderIn> orderInList = new ArrayList<>(); List<TAppOrderIn> orderInList = new ArrayList<>();
for (var goodsDetail : request.getGoodsDetail()) { for (ErpGoodsDetail goodsDetail : erpGoodsDetails) {
if(goodsDetail == null || StringUtils.isEmpty(goodsDetail.getGoodsId()) || goodsDetail.getQuantity() == null) { if(goodsDetail == null || StringUtils.isEmpty(goodsDetail.getGoodsId()) || goodsDetail.getQuantity() == null) {
return YcwmsResponse.error("参数错误", null); return YcwmsResponse.error("参数错误", null);
} }
@ -66,7 +105,11 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
orderIn.setSpecification(goodsDetail.getSpecification()); orderIn.setSpecification(goodsDetail.getSpecification());
orderIn.setQuantity(goodsDetail.getQuantity()); orderIn.setQuantity(goodsDetail.getQuantity());
orderIn.setGoodsDesc(goodsDetail.getGoodsDesc()); orderIn.setGoodsDesc(goodsDetail.getGoodsDesc());
orderIn.setGoodsBarcode(goodsDetail.getGoodsBarcode());
orderIn.setOrderStatus(OrderStatusEnum.CREATE.getCode()); orderIn.setOrderStatus(OrderStatusEnum.CREATE.getCode());
orderIn.setXsfbillno(goodsDetail.getXsfbillno());
orderIn.setXsfseq(goodsDetail.getXsfseq());
orderIn.setNeibubianhao(goodsDetail.getNeibubianhao());
orderIn.setCreateTime(LocalDateTime.now()); orderIn.setCreateTime(LocalDateTime.now());
orderIn.setUpdateTime(LocalDateTime.now()); orderIn.setUpdateTime(LocalDateTime.now());
orderInList.add(orderIn); orderInList.add(orderIn);

View File

@ -26,12 +26,11 @@ import java.util.stream.Collectors;
// 以下注解用于实现fixed_delay // 以下注解用于实现fixed_delay
@DisallowConcurrentExecution @DisallowConcurrentExecution
@RequiredArgsConstructor @RequiredArgsConstructor
public class OrderInCheckor implements Job { public class OrderInCheckor {
private final ITAppOrderInService orderInService; private final ITAppOrderInService orderInService;
private final ITAppWcsTaskService wcsTaskService; private final ITAppWcsTaskService wcsTaskService;
private final IExternalApiService externalApiService; private final IExternalApiService externalApiService;
@Override
public void execute(JobExecutionContext jobExecutionContext) { public void execute(JobExecutionContext jobExecutionContext) {
List<TAppOrderIn> inOrdersToCheck = orderInService.list( List<TAppOrderIn> inOrdersToCheck = orderInService.list(
new LambdaQueryWrapper<TAppOrderIn>() new LambdaQueryWrapper<TAppOrderIn>()
@ -69,6 +68,7 @@ public class OrderInCheckor implements Job {
ErpGoodsDetail goodsDetail = iterator.next(); ErpGoodsDetail goodsDetail = iterator.next();
boolean matchFound = inTasks.stream().anyMatch(task -> boolean matchFound = inTasks.stream().anyMatch(task ->
task.getGoodsId().equals(goodsDetail.getGoodsId()) && task.getGoodsId().equals(goodsDetail.getGoodsId()) &&
task.getGoodsBarcode().equals(goodsDetail.getGoodsBarcode()) &&
Objects.equals(task.getQuantity(), goodsDetail.getQuantity()) && Objects.equals(task.getQuantity(), goodsDetail.getQuantity()) &&
task.getGoodsType().equals(goodsDetail.getGoodsType()) && task.getGoodsType().equals(goodsDetail.getGoodsType()) &&
Objects.equals(task.getSpecification(), goodsDetail.getSpecification()) Objects.equals(task.getSpecification(), goodsDetail.getSpecification())

View File

@ -74,11 +74,10 @@ public class OutsExecutor implements Job {
} }
TAppStock stock = new TAppStock(); TAppStock stock = new TAppStock();
stock.setGoodsId(orderOut.getGoodsId()); stock.setGoodsId(orderOut.getGoodsId());
stock.setBatch(orderOut.getBatch());
stock.setSled(orderOut.getSpecification()); stock.setSled(orderOut.getSpecification());
List<TAppStock> stockList = stockService.getWithEntity(stock); List<TAppStock> stockList = stockService.getWithEntity(stock);
// 提取所有相关库存的载具号 // 提取所有相关库存的载具号
List<String> vehicleIds = stockList.stream().map(TAppStock::getVehicleId).toList(); List<String> vehicleIds = stockList.stream().map(TAppStock::getVehicleId).distinct().toList();
List<TAppStock> outStockList = new ArrayList<TAppStock>(); List<TAppStock> outStockList = new ArrayList<TAppStock>();
if(vehicleIds.isEmpty()) { if(vehicleIds.isEmpty()) {
log.warn("缺少库存, goodsId is {}, batch is {}, specification is {}", orderOut.getGoodsId(), orderOut.getBatch(), orderOut.getSpecification()); log.warn("缺少库存, goodsId is {}, batch is {}, specification is {}", orderOut.getGoodsId(), orderOut.getBatch(), orderOut.getSpecification());
@ -92,11 +91,9 @@ public class OutsExecutor implements Job {
continue; continue;
} }
if (stockItem.getGoodsId().equals(orderOut.getGoodsId()) && stockItem.getStockStatus().equals(WmsStockStatusEnums.OK.getCode())) { if (stockItem.getGoodsId().equals(orderOut.getGoodsId()) && stockItem.getStockStatus().equals(WmsStockStatusEnums.OK.getCode())) {
needQuantity -= stockItem.getRemainNum(); needQuantity -= stockItem.getTotalNum();
} }
stockItem.setStockStatus(WmsStockStatusEnums.OUTING.getCode()); stockItem.setStockStatus(WmsStockStatusEnums.OUTING.getCode());
stockItem.setRemainNum(0.0);
stockItem.setRealNum(0.0);
outStockList.add(stockItem); outStockList.add(stockItem);
} }
} }
@ -122,23 +119,27 @@ public class OutsExecutor implements Job {
// appTaskList.add(appTask); // appTaskList.add(appTask);
// } // }
List<TAppWcsTask> wcsTasks = new ArrayList<>(); List<TAppWcsTask> wcsTasks = new ArrayList<>();
for (TAppStock stockItem : outStockList) { Map<String, List<TAppStock>> vehicleIdToStockMap = outStockList.stream()
.filter(stockMap -> Objects.equals(stockMap.getStockStatus(), WmsStockStatusEnums.OUTING.getCode()))
.collect(Collectors.groupingBy(TAppStock::getVehicleId));
for (String vehicleId : vehicleIdToStockMap.keySet()) {
List<TAppStock> stocks = vehicleIdToStockMap.get(vehicleId);
TAppWcsTask wcsTask = new TAppWcsTask(); TAppWcsTask wcsTask = new TAppWcsTask();
wcsTask.setWcsTaskId(UUIDUtils.getNewUUID()); wcsTask.setWcsTaskId(UUIDUtils.getNewUUID());
wcsTask.setWcsTaskType(WmsTaskTypeEnums.OUT.getCode()); wcsTask.setWcsTaskType(WmsTaskTypeEnums.OUT.getCode());
wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode()); wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode());
wcsTask.setTaskPriority(1); wcsTask.setTaskPriority(1);
wcsTask.setVehicleId(stockItem.getVehicleId()); wcsTask.setVehicleId(stocks.getFirst().getVehicleId());
wcsTask.setOrderId(orderOut.getOrderId()); wcsTask.setOrderId(orderOut.getOrderId());
wcsTask.setCreateTime(LocalDateTime.now()); wcsTask.setCreateTime(LocalDateTime.now());
wcsTask.setOrigin(stockItem.getLocationId()); wcsTask.setOrigin(stocks.getFirst().getLocationId());
wcsTask.setDestination(stockItem.getBarCode()); wcsTask.setDestination(stocks.getFirst().getBarCode());
wcsTasks.add(wcsTask); wcsTasks.add(wcsTask);
} }
orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode()); orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode());
orderOutService.updateById(orderOut); orderOutService.updateById(orderOut);
// taskService.saveBatch(appTaskList);
wcsTaskService.saveBatch(wcsTasks); wcsTaskService.saveBatch(wcsTasks);
stockService.updateBatchById(outStockList); stockService.updateBatchById(outStockList);
} }

View File

@ -7,7 +7,7 @@ import axios from "axios";
const _request = axios.create({ const _request = axios.create({
// baseURL: 'http://10.18.58.20:12315/wms', // baseURL: 'http://10.18.58.20:12315/wms',
baseURL: 'http://10.18.58.20:12315', baseURL: 'http://10.18.58.21:12315',
timeout: 5000 timeout: 5000
}) })

View File

@ -7,7 +7,7 @@ import axios from "axios";
const _request = axios.create({ const _request = axios.create({
// baseURL: 'http://10.18.58.20:12315/wms', // baseURL: 'http://10.18.58.20:12315/wms',
baseURL: 'http://10.18.58.20:12315', baseURL: 'http://10.18.58.21:12315',
timeout: 5000 timeout: 5000
}) })