1. 完善场内wms出入库回调功能
2. 添加xsfbillno, xsfseq, neibubianhao字段 3. 添加单机出入库功能 4. 调整入库单与出库单页面 5. 添加mes出库时对于物料号与载具号的区分逻辑, goodsId长度小于等于3为物料号, 否则为载具号
This commit is contained in:
parent
7ab3096b94
commit
16a9981ece
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 -> "";
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<TAppStock>()
|
||||
.eq(TAppStock::getVehicleId, vehicleId));
|
||||
// List<String> orderIds = thisVehicleOutTasks.stream()
|
||||
// .map(TAppWcsTask::getOrderId)
|
||||
// .filter(Objects::nonNull)
|
||||
// .distinct()
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// List<TAppOrderOut> thisVehicleOutOrders = orderIds.isEmpty() ?
|
||||
// Collections.emptyList() :
|
||||
// appOrderOutService.list(
|
||||
// new LambdaQueryWrapper<TAppOrderOut>()
|
||||
// .in(TAppOrderOut::getOrderId, orderIds)
|
||||
// );
|
||||
|
||||
if (!thisVehicleOutTasks.isEmpty()) {
|
||||
// 存储出库记录
|
||||
List<TAppWcsTaskBak> stockOutRecordList = thisVehicleOutTasks.stream()
|
||||
|
|
@ -812,10 +806,15 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
}
|
||||
List<String> orderOutsId = thisVehicleOutTasks.stream().map(TAppWcsTask::getOrderId).distinct().toList();
|
||||
for (String orderId : orderOutsId) {
|
||||
if (orderId.contains("baokai")) {
|
||||
continue;
|
||||
}
|
||||
List<TAppWcsTask> 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<TAppOrderOut>().le(TAppOrderOut::getQuantity, 0));
|
||||
List<String> orderOutIds = stackerOutTasks.stream().map(TAppWcsTask::getOrderId).distinct().toList();
|
||||
for (String orderId : orderOutIds) {
|
||||
appOrderOutService.remove(new LambdaUpdateWrapper<TAppOrderOut>().eq(TAppOrderOut::getOrderId, orderId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
|
|||
log.error("处理载具[{}]数据时发生异常:", vehicleNo, e);
|
||||
}
|
||||
List<OrderInGoodsDetail> mesGoodsDetails = request.getGoodsDetail();
|
||||
if (request.getOrderId().contains("baokai")) {
|
||||
mesGoodsDetails.clear();
|
||||
}
|
||||
// 对比inTasks和goodsDetails
|
||||
Iterator<OrderInGoodsDetail> 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);
|
||||
|
|
|
|||
|
|
@ -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<TAppOrderOut> 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<TAppStock> stockList = stockService.getWithEntity(stock);
|
||||
// 提取所有相关库存的载具号
|
||||
List<String> vehicleIds = stockList.stream().map(TAppStock::getVehicleId).distinct().toList();
|
||||
List<TAppStock> outStockList = new ArrayList<TAppStock>();
|
||||
if (vehicleIds.isEmpty()) {
|
||||
log.warn("缺少库存, goodsId is {}, batch is {}, specification is {}", orderOut.getGoodsId(), orderOut.getBatch(), orderOut.getSpecification());
|
||||
return;
|
||||
}
|
||||
for (String vehicleId : vehicleIds) {
|
||||
List<TAppStock> stockListToOut = stockService.list(new LambdaQueryWrapper<TAppStock>().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<TAppWcsTask> wcsTasks = new ArrayList<>();
|
||||
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();
|
||||
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<TAppStock> stocks = stockService.list(new LambdaQueryWrapper<TAppStock>().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<TAppStock>()
|
||||
.eq(TAppStock::getVehicleId, vehicleId)
|
||||
.set(TAppStock::getStockStatus, WmsStockStatusEnums.OUTING.getCode()));
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -7,12 +7,6 @@
|
|||
<el-form ref="orderInFormRef" :model="orderInForm" :rules="rules" label-width="100px"
|
||||
:label-position="labelPosition" status-icon>
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="6" :lg="5">
|
||||
<el-form-item label="订单号" prop="orderId">
|
||||
<el-input v-model="orderInForm.orderId" clearable @keyup.enter="handleEnter('vehicleNo')"
|
||||
ref="orderIdRef"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6" :lg="5">
|
||||
<el-form-item label="料箱号" prop="vehicleNo">
|
||||
<el-input v-model="orderInForm.vehicleNo" clearable @keyup.enter="handleEnter('vehicleSize')"
|
||||
|
|
@ -301,10 +295,23 @@ import {errorBox} from '@/utils/myMessageBox.js'
|
|||
import {labelPosition} from '@/constant/form'
|
||||
import {submitOrderInForm, getOrderIns, updateOrderIn} from '@/api/orderIn.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 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}`)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,11 +6,6 @@
|
|||
<legend>出库单信息</legend>
|
||||
<el-form ref="orderOutFormRef" :model="orderOutForm" :rules="rules" label-width="70px" :label-position="labelPosition" status-icon>
|
||||
<el-row :gutter="5" class="form-row">
|
||||
<el-col :xs="24" :sm="4" :md="4" :lg="4">
|
||||
<el-form-item label="订单号" prop="orderId">
|
||||
<el-input v-model="orderOutForm.orderId" clearable @keyup.enter="handleEnter('goodsId')" ref="orderIdRef" class="custom-input" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="4" :md="4" :lg="4">
|
||||
<el-form-item label="物料编号" prop="goodsId">
|
||||
<el-input v-model="orderOutForm.goodsId" clearable @keyup.enter="handleEnter('batch')" ref="goodsIdRef" class="custom-input" />
|
||||
|
|
@ -23,7 +18,7 @@
|
|||
</el-col>
|
||||
<el-col :xs="24" :sm="4" :md="4" :lg="4">
|
||||
<el-form-item label="规格" prop="specification">
|
||||
<el-input-number v-model="orderOutForm.specification" :min="1" controls-position="right" clearable @keyup.enter="handleEnter('quantity')" ref="specificationRef" class="custom-input" />
|
||||
<el-input v-model="orderOutForm.specification" placeholder="请输入规格" clearable @keyup.enter="handleEnter('quantity')" ref="specificationRef" class="custom-input" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="4" :md="4" :lg="4">
|
||||
|
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user