diff --git a/db/wms_ntyc.sql b/db/wms_ntyc.sql index b7bda96..22b8fb1 100644 --- a/db/wms_ntyc.sql +++ b/db/wms_ntyc.sql @@ -11,7 +11,7 @@ Target Server Version : 80034 (8.0.34) File Encoding : 65001 - Date: 08/04/2025 19:42:54 + Date: 14/04/2025 22:45:54 */ SET NAMES utf8mb4; @@ -2223,9 +2223,9 @@ CREATE TABLE `t_app_jobs` ( -- ---------------------------- -- Records of t_app_jobs -- ---------------------------- -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 ('WmsTaskFinisher', 'com.wms_main.service.quartz_job.job_executor.WmsTaskFinisher', '0/2 * * * * ? *', 2000, 1, 1); +INSERT INTO `t_app_jobs` VALUES ('YcOutExecutor', 'com.wms_main.service.quartz_job.job_executor.YcOutExecutor', '0/2 * * * * ? *', 2000, 1, 1); -- ---------------------------- -- Table structure for t_app_kanban @@ -5622,6 +5622,7 @@ CREATE TABLE `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 ('0402', 0, 2, '1', 0, '', '2025-04-01 13:11:56'); INSERT INTO `t_app_vehicle` VALUES ('20250401150031', 0, 3, '1', 0, '', '2025-04-08 19:30:11'); +INSERT INTO `t_app_vehicle` VALUES ('TU1250410142129', 0, 3, '1', 0, '', '2025-04-14 10:35:53'); -- ---------------------------- -- Table structure for t_app_wcs_task @@ -5733,6 +5734,14 @@ INSERT INTO `t_app_wcs_task_bak` VALUES ('1744110975061010000', 100, 2, 1, '2025 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); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744433134762010000', 2, 1, 0, 'TU1250410142129', '103', 'A04-20-05-02', '2025-04-12 12:45:35', '2025-04-12 12:45:35', NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744433267719010000', 100, 2, 1, 'TU1250410142129', 'A04-20-05-02', '103', '2025-04-12 12:47:48', NULL, NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744434313304010000', 2, 1, 0, 'TU1250410142129', '103', 'A04-20-05-02', '2025-04-12 13:05:13', '2025-04-12 13:05:13', NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744434475517010000', 100, 2, 1, 'TU1250410142129', 'A04-20-05-02', '103', '2025-04-12 13:07:56', NULL, NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744434898455010000', 2, 1, 0, 'TU1250410142129', '103', 'A04-20-05-02', '2025-04-12 13:14:58', '2025-04-12 13:14:58', NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744435011511010000', 100, 2, 1, 'TU1250410142129', 'A04-20-05-02', '103', '2025-04-12 13:16:52', NULL, NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744598132392010000', 2, 1, 0, 'TU1250410142129', '103', 'A04-20-05-02', '2025-04-14 10:35:32', '2025-04-14 10:35:32', NULL, NULL); +INSERT INTO `t_app_wcs_task_bak` VALUES ('1744598438538010000', 100, 2, 1, 'TU1250410142129', 'A04-20-05-02', '103', '2025-04-14 10:40:39', NULL, NULL, NULL); -- ---------------------------- -- Table structure for t_app_work diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockReq.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockReq.java index 843d424..19862f7 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockReq.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockReq.java @@ -21,9 +21,28 @@ public class StockReq { @JsonProperty("specification") private String specification; + @JsonProperty("goodsBarCode") + private String goodsBarCode; + + @JsonProperty("xsfbillno") + private String xsfbillno; + + @JsonProperty("xsfseq") + private Integer xsfseq; + + @JsonProperty("neibubianhao") + private String neibubianhao; + public boolean empty() { - return StringUtils.isEmpty(location) && StringUtils.isEmpty(vehicleNo) && StringUtils.isEmpty(goodsId) && specification == null; + return StringUtils.isEmpty(location) + && StringUtils.isEmpty(vehicleNo) + && StringUtils.isEmpty(goodsId) + && StringUtils.isEmpty(specification) + && StringUtils.isEmpty(goodsBarCode) + && StringUtils.isEmpty(xsfbillno) + && xsfseq == null + && StringUtils.isEmpty(neibubianhao); } } diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockRespGoodsDetail.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockRespGoodsDetail.java index 2618395..f3e0e1d 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockRespGoodsDetail.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/model/dto/request/ycwms/StockRespGoodsDetail.java @@ -34,5 +34,15 @@ public class StockRespGoodsDetail { @JsonProperty("storeTime") private LocalDateTime storeTime; + @JsonProperty("goodsBarCode") + private String goodsBarCode; + @JsonProperty("xsfbillno") + private String xsfbillno; + + @JsonProperty("xsfseq") + private Integer xsfseq; + + @JsonProperty("neibubianhao") + private String neibubianhao; } diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/ConvertUtils.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/ConvertUtils.java index 3e904a8..dbeb8ba 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/ConvertUtils.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/ConvertUtils.java @@ -63,4 +63,17 @@ public class ConvertUtils { default -> -1; }; } + + public static String convertDestinationToPoint(String destination) { + return switch (destination) { + case "101" -> "LK-1"; + case "102" -> "LK-2"; + case "103" -> "LK-3"; + case "104" -> "LK-4"; + case "105" -> "LK-5"; + case "106" -> "LK-6"; + case "107" -> "LK-7"; + default -> ""; + }; + } } diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java index 5310d39..f067db2 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java @@ -28,6 +28,8 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +import static com.wms_main.repository.utils.ConvertUtils.convertDestinationToPoint; + /** * 服务实现 */ @@ -451,6 +453,9 @@ public class StackerTaskServiceImpl implements IStackerTaskService { orderCBIds = orderCBIds.stream().distinct().collect(Collectors.toList()); for (String orderId : orderCBIds) { + if (orderId.contains("baokai")) { + continue; + } OrderInCBReq orderInCBReq = new OrderInCBReq(); orderInCBReq.setOrderId(orderId); orderInCBReq.setVehicleNo(vehicleId); @@ -775,18 +780,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService { // 更新当前载具对应的所有库存的状态为已出库 appStockService.remove(new LambdaUpdateWrapper() .eq(TAppStock::getVehicleId, vehicleId)); -// List orderIds = thisVehicleOutTasks.stream() -// .map(TAppWcsTask::getOrderId) -// .filter(Objects::nonNull) -// .distinct() -// .collect(Collectors.toList()); -// -// List thisVehicleOutOrders = orderIds.isEmpty() ? -// Collections.emptyList() : -// appOrderOutService.list( -// new LambdaQueryWrapper() -// .in(TAppOrderOut::getOrderId, orderIds) -// ); + if (!thisVehicleOutTasks.isEmpty()) { // 存储出库记录 List stockOutRecordList = thisVehicleOutTasks.stream() @@ -812,10 +806,15 @@ public class StackerTaskServiceImpl implements IStackerTaskService { } List orderOutsId = thisVehicleOutTasks.stream().map(TAppWcsTask::getOrderId).distinct().toList(); for (String orderId : orderOutsId) { + if (orderId.contains("baokai")) { + continue; + } + List thisWcsTasks = vehicleIdToTaskMap.get(vehicleId); OrderOutCBReq orderOutCBReq = new OrderOutCBReq(); orderOutCBReq.setOrderId(orderId); orderOutCBReq.setVehicleNo(vehicleId); orderOutCBReq.setOrderStatus(OrderStatusEnum.COMPLETE.getCode()); + orderOutCBReq.setOutStand(convertDestinationToPoint(thisWcsTasks.getFirst().getDestination())); orderOutCBReq.setMessage("出库完成"); int times = 0; @@ -831,6 +830,9 @@ public class StackerTaskServiceImpl implements IStackerTaskService { } } } - appOrderOutService.remove(new LambdaUpdateWrapper().le(TAppOrderOut::getQuantity, 0)); + List orderOutIds = stackerOutTasks.stream().map(TAppWcsTask::getOrderId).distinct().toList(); + for (String orderId : orderOutIds) { + appOrderOutService.remove(new LambdaUpdateWrapper().eq(TAppOrderOut::getOrderId, orderId)); + } } } diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/WcsControllerServiceImpl.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/WcsControllerServiceImpl.java index 7a578bb..3501637 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/WcsControllerServiceImpl.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/WcsControllerServiceImpl.java @@ -68,9 +68,12 @@ public class WcsControllerServiceImpl implements IWcsControllerService { orderIn.setGoodsName("空托盘"); orderIn.setBatch("0"); orderIn.setGoodsType("0"); - orderIn.setSpecification(""); + orderIn.setSpecification("empty"); orderIn.setQuantity(1.0); orderIn.setGoodsDesc(""); + orderIn.setXsfbillno(""); + orderIn.setXsfseq(0); + orderIn.setNeibubianhao(""); orderIn.setOrderStatus(OrderStatusEnum.RUNNING.getCode()); orderIn.setCreateTime(LocalDateTime.now()); orderIn.setUpdateTime(LocalDateTime.now()); @@ -131,9 +134,12 @@ public class WcsControllerServiceImpl implements IWcsControllerService { orderIn.setGoodsName("空托盘"); orderIn.setBatch("0"); orderIn.setGoodsType("0"); - orderIn.setSpecification(""); + orderIn.setSpecification("empty"); orderIn.setQuantity(1.0); orderIn.setGoodsDesc(""); + orderIn.setXsfbillno(""); + orderIn.setXsfseq(0); + orderIn.setNeibubianhao(""); orderIn.setOrderStatus(OrderStatusEnum.RUNNING.getCode()); orderIn.setCreateTime(LocalDateTime.now()); orderIn.setUpdateTime(LocalDateTime.now()); diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java index 1e16a88..7e5d778 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java @@ -67,6 +67,9 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService { log.error("处理载具[{}]数据时发生异常:", vehicleNo, e); } List mesGoodsDetails = request.getGoodsDetail(); + if (request.getOrderId().contains("baokai")) { + mesGoodsDetails.clear(); + } // 对比inTasks和goodsDetails Iterator iterator = mesGoodsDetails.iterator(); while (iterator.hasNext()) { @@ -195,6 +198,10 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService { goodsDetail.setStoreTime(stock.getFirstInTime()); goodsDetail.setBatch(stock.getBatch()); goodsDetail.setGoodsType(stock.getGoodsType()); + goodsDetail.setGoodsBarCode(stock.getGoodsBarCode()); + goodsDetail.setXsfbillno(stock.getXsfbillno()); + goodsDetail.setXsfseq(stock.getXsfseq()); + goodsDetail.setNeibubianhao(stock.getNeibubianhao()); goodsDetails.add(goodsDetail); } stockResp.setGoodsDetail(goodsDetails); diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java new file mode 100644 index 0000000..23bb596 --- /dev/null +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java @@ -0,0 +1,161 @@ +package com.wms_main.service.quartz_job.job_executor; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums; +import com.wms_main.constant.enums.wcs.WcsStackerTaskTypeEnums; +import com.wms_main.constant.enums.wms.OrderStatusEnum; +import com.wms_main.constant.enums.wms.WmsStockStatusEnums; +import com.wms_main.dao.ITAppOrderOutService; +import com.wms_main.dao.ITAppStockService; +import com.wms_main.dao.ITAppTaskService; +import com.wms_main.dao.ITAppWcsTaskService; +import com.wms_main.model.po.TAppOrderOut; +import com.wms_main.model.po.TAppStock; +import com.wms_main.model.po.TAppWcsTask; +import com.wms_main.repository.utils.StringUtils; +import com.wms_main.repository.utils.UUIDUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.quartz.*; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 定时任务定义类---出库单解析类 + */ +@Slf4j +@PersistJobDataAfterExecution +// 以下注解用于实现fixed_delay +@DisallowConcurrentExecution +@RequiredArgsConstructor +public class YcOutExecutor implements Job { + private final ITAppOrderOutService orderOutService; + private final ITAppStockService stockService; + private final ITAppTaskService taskService; + private final ITAppWcsTaskService wcsTaskService; + + /** + * 运行定时任务 + * + * @param jobExecutionContext 定时任务执行的环境(上下文) + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) { + // 处理出库单 + try { + executeOrderOut(); + } catch (Exception e) { + log.error("处理出库单失败{}", StringUtils.objectToString(e)); + } + } + + /** + * 解析出库单 + */ + private void executeOrderOut() { + List orderOutsList = orderOutService.getWithStatus(OrderStatusEnum.CREATE.getCode()); + if (orderOutsList == null || orderOutsList.isEmpty()) { + return; + } + for (TAppOrderOut orderOut : orderOutsList) { + String strId = orderOut.getGoodsId(); + if (strId != null && strId.length() <= 3) { + _resolveGoodsId(orderOut); + } else if (strId != null) { + _resolveVehicleId(orderOut); + } + } + } + + private void _resolveGoodsId(TAppOrderOut orderOut) { + Double needQuantity = orderOut.getQuantity(); + if (needQuantity == null || needQuantity < 1) { + return; + } + TAppStock stock = new TAppStock(); + stock.setGoodsId(orderOut.getGoodsId()); + stock.setSled(orderOut.getSpecification()); + List stockList = stockService.getWithEntity(stock); + // 提取所有相关库存的载具号 + List vehicleIds = stockList.stream().map(TAppStock::getVehicleId).distinct().toList(); + List outStockList = new ArrayList(); + if (vehicleIds.isEmpty()) { + log.warn("缺少库存, goodsId is {}, batch is {}, specification is {}", orderOut.getGoodsId(), orderOut.getBatch(), orderOut.getSpecification()); + return; + } + for (String vehicleId : vehicleIds) { + List stockListToOut = stockService.list(new LambdaQueryWrapper().eq(TAppStock::getVehicleId, vehicleId)); + for (TAppStock stockItem : stockListToOut) { + if (needQuantity <= 0) break; + if (stockItem == null) { + continue; + } + if (stockItem.getGoodsId().equals(orderOut.getGoodsId()) && stockItem.getStockStatus().equals(WmsStockStatusEnums.OK.getCode())) { + needQuantity -= stockItem.getTotalNum(); + } + stockItem.setStockStatus(WmsStockStatusEnums.OUTING.getCode()); + outStockList.add(stockItem); + } + } + List wcsTasks = new ArrayList<>(); + Map> vehicleIdToStockMap = outStockList.stream() + .filter(stockMap -> Objects.equals(stockMap.getStockStatus(), WmsStockStatusEnums.OUTING.getCode())) + .collect(Collectors.groupingBy(TAppStock::getVehicleId)); + + for (String vehicleId : vehicleIdToStockMap.keySet()) { + List stocks = vehicleIdToStockMap.get(vehicleId); + TAppWcsTask wcsTask = new TAppWcsTask(); + wcsTask.setWcsTaskId(UUIDUtils.getNewUUID()); + wcsTask.setWcsTaskType(WcsStackerTaskTypeEnums.OUT.getCode()); + wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode()); + wcsTask.setTaskPriority(1); + wcsTask.setVehicleId(stocks.getFirst().getVehicleId()); + wcsTask.setOrderId(orderOut.getOrderId()); + wcsTask.setCreateTime(LocalDateTime.now()); + wcsTask.setOrigin(stocks.getFirst().getLocationId()); + wcsTask.setDestination(stocks.getFirst().getBarCode()); + wcsTasks.add(wcsTask); + } + + orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode()); + orderOutService.updateById(orderOut); + wcsTaskService.saveBatch(wcsTasks); + stockService.updateBatchById(outStockList); + } + + private void _resolveVehicleId(TAppOrderOut orderOut) { + String vehicleId = orderOut.getGoodsId(); + List stocks = stockService.list(new LambdaQueryWrapper().eq(TAppStock::getVehicleId, vehicleId)); + if (stocks == null) { + log.warn("数据库连接异常"); + return; + } else if (stocks.isEmpty()) { + log.warn("载具{} 无库存", vehicleId); + return; + } + TAppWcsTask wcsTask = new TAppWcsTask(); + wcsTask.setWcsTaskId(UUIDUtils.getNewUUID()); + wcsTask.setWcsTaskType(WcsStackerTaskTypeEnums.OUT.getCode()); + wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode()); + wcsTask.setTaskPriority(1); + wcsTask.setVehicleId(vehicleId); + wcsTask.setOrderId(orderOut.getOrderId()); + wcsTask.setCreateTime(LocalDateTime.now()); + wcsTask.setOrigin(stocks.getFirst().getLocationId()); + wcsTask.setDestination(stocks.getFirst().getBarCode()); + + orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode()); + orderOutService.updateById(orderOut); + wcsTaskService.save(wcsTask); + stockService.update( + new LambdaUpdateWrapper() + .eq(TAppStock::getVehicleId, vehicleId) + .set(TAppStock::getStockStatus, WmsStockStatusEnums.OUTING.getCode())); + } +} diff --git a/wms_web_nantong_yachi/src/api/orderIn.js b/wms_web_nantong_yachi/src/api/orderIn.js index 8d11afd..522ef30 100644 --- a/wms_web_nantong_yachi/src/api/orderIn.js +++ b/wms_web_nantong_yachi/src/api/orderIn.js @@ -6,7 +6,7 @@ import axios from "axios"; */ const _request = axios.create({ - // baseURL: 'http://10.18.58.20:12315/wms', + // baseURL: 'http://localhost:12315', baseURL: 'http://10.18.58.21:12315', timeout: 5000 }) diff --git a/wms_web_nantong_yachi/src/api/orderOut.js b/wms_web_nantong_yachi/src/api/orderOut.js index 949d38a..a0835d4 100644 --- a/wms_web_nantong_yachi/src/api/orderOut.js +++ b/wms_web_nantong_yachi/src/api/orderOut.js @@ -6,7 +6,7 @@ import axios from "axios"; */ const _request = axios.create({ - // baseURL: 'http://10.18.58.20:12315/wms', + // baseURL: 'http://localhost:12315', baseURL: 'http://10.18.58.21:12315', timeout: 5000 }) diff --git a/wms_web_nantong_yachi/src/http/request.js b/wms_web_nantong_yachi/src/http/request.js index 1db6397..eca3e98 100644 --- a/wms_web_nantong_yachi/src/http/request.js +++ b/wms_web_nantong_yachi/src/http/request.js @@ -1,8 +1,8 @@ import axios from 'axios' const request = axios.create({ - // baseURL: 'http://10.18.58.20:12315/wms', - baseURL: 'http://localhost:12315/wms', + baseURL: 'http://10.18.58.21:12315/wms', + // baseURL: 'http://localhost:12315/wms', timeout: 5000 }) diff --git a/wms_web_nantong_yachi/src/layout/orderIn.vue b/wms_web_nantong_yachi/src/layout/orderIn.vue index b685283..eedd8a1 100644 --- a/wms_web_nantong_yachi/src/layout/orderIn.vue +++ b/wms_web_nantong_yachi/src/layout/orderIn.vue @@ -7,12 +7,6 @@ - - - - - { + const now = new Date() + const year = now.getFullYear() + const month = String(now.getMonth() + 1).padStart(2, '0') + const day = String(now.getDate()).padStart(2, '0') + const hours = String(now.getHours()).padStart(2, '0') + const minutes = String(now.getMinutes()).padStart(2, '0') + const seconds = String(now.getSeconds()).padStart(2, '0') + const milliseconds = String(now.getMilliseconds()).padStart(3, '0') + return `baokai${year}${month}${day}${hours}${minutes}${seconds}${milliseconds}` +} + // 表单数据 const orderInFormRef = ref() const orderInForm = reactive({ - orderId: '', + orderId: generateOrderId(), vehicleNo: '', vehicleSize: '', inStand: '', @@ -333,14 +340,12 @@ const queryForm = reactive({ // 表单规则 const rules = reactive({ - orderId: [{required: true, message: '请输入订单号', trigger: 'blur'}], vehicleNo: [{required: true, message: '请输入料箱号', trigger: 'blur'}], vehicleSize: [{required: true, message: '请输入料箱尺寸', trigger: 'blur'}], inStand: [{required: true, message: '请输入入库站台', trigger: 'blur'}], }) // 引用DOM元素 -const orderIdRef = ref() const vehicleNoRef = ref() const vehicleSizeRef = ref() const inStandRef = ref() @@ -360,7 +365,7 @@ const currentOrderIn = ref(null) // 初始化时聚焦第一个输入框 onMounted(() => { nextTick(() => { - orderIdRef.value.focus() + vehicleNoRef.value.focus() window.addEventListener('resize', resizeHeight) }) }) @@ -410,6 +415,15 @@ const clearGoodsDetail = () => { orderInForm.goodsDetail = [] } +// 重置表单(添加重置表单的方法,包括重新生成订单号) +const resetOrderInForm = () => { + orderInForm.orderId = generateOrderId() + orderInForm.vehicleNo = '' + orderInForm.vehicleSize = '' + orderInForm.inStand = '' + orderInForm.goodsDetail = [] +} + // 提交入库单 const submitOrderIn = () => { orderInFormRef.value.validate((valid) => { @@ -437,6 +451,8 @@ const submitOrderIn = () => { if (res.data.code === 0) { ElMessage.success('入库单提交成功') + // 提交成功后重置表单,生成新的订单号 + resetOrderInForm() } else { errorBox(`入库单提交失败: ${res.data.message}`) } diff --git a/wms_web_nantong_yachi/src/layout/orderOut.vue b/wms_web_nantong_yachi/src/layout/orderOut.vue index ab18bdc..106aec6 100644 --- a/wms_web_nantong_yachi/src/layout/orderOut.vue +++ b/wms_web_nantong_yachi/src/layout/orderOut.vue @@ -6,11 +6,6 @@ 出库单信息 - - - - - @@ -23,7 +18,7 @@ - + @@ -61,19 +56,31 @@ import { errorBox } from '@/utils/myMessageBox.js' import { labelPosition } from '@/constant/form' import { submitOrderOutForm } from '@/api/orderOut.js' +// 生成订单号方法 +const generateOrderId = () => { + const now = new Date() + const year = now.getFullYear() + const month = String(now.getMonth() + 1).padStart(2, '0') + const day = String(now.getDate()).padStart(2, '0') + const hours = String(now.getHours()).padStart(2, '0') + const minutes = String(now.getMinutes()).padStart(2, '0') + const seconds = String(now.getSeconds()).padStart(2, '0') + const milliseconds = String(now.getMilliseconds()).padStart(3, '0') + return `baokai${year}${month}${day}${hours}${minutes}${seconds}${milliseconds}` +} + // 表单数据 const orderOutFormRef = ref() const orderOutForm = reactive({ - orderId: '', + orderId: generateOrderId(), goodsId: '', batch: '', - specification: null, + specification: '', quantity: null }) // 表单规则 const rules = reactive({ - orderId: [{ required: true, message: '请输入订单号', trigger: 'blur' }], goodsId: [{ required: true, message: '请输入物料编号', trigger: 'blur' }], batch: [{ required: true, message: '请输入批次', trigger: 'blur' }], specification: [{ required: true, message: '请输入规格', trigger: 'blur' }], @@ -81,7 +88,6 @@ const rules = reactive({ }) // 引用DOM元素 -const orderIdRef = ref() const goodsIdRef = ref() const batchRef = ref() const specificationRef = ref() @@ -94,7 +100,7 @@ const responseResult = ref({}) // 初始化时聚焦第一个输入框 onMounted(() => { nextTick(() => { - orderIdRef.value.focus() + goodsIdRef.value.focus() window.addEventListener('resize', resizeHeight) }) }) @@ -125,8 +131,10 @@ const handleEnter = (nextField) => { // 重置表单 const resetForm = () => { orderOutFormRef.value.resetFields() + // 重新生成订单号 + orderOutForm.orderId = generateOrderId() nextTick(() => { - orderIdRef.value.focus() + goodsIdRef.value.focus() }) }