From 2c55aa09e6699fa0981d0cbc17ec49a7490c09c5 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925258474@qq.com> Date: Fri, 26 Apr 2024 16:52:34 +0800 Subject: [PATCH] no message --- .../service/mapstruct/LogErrorMapperImpl.java | 2 +- .../service/mapstruct/LogSmallMapperImpl.java | 2 +- .../youchain/businessdata/domain/ItemKey.java | 2 +- .../youchain/businessdata/domain/Task.java | 2 +- .../businessdata/rest/KMReSController.java | 48 +++- .../businessdata/service/AgvTaskService.java | 18 +- .../businessdata/service/OrderService.java | 15 ++ .../service/dto/MoQueryCriteria.java | 4 + .../service/impl/AgvTaskServiceImpl.java | 69 +++-- .../service/impl/MlsServiceImpl.java | 249 ++++++++++-------- .../service/impl/MoServiceImpl.java | 8 +- .../service/impl/OrderServiceImpl.java | 51 +++- .../service/impl/TaskServiceImpl.java | 3 - .../youchain/modules/quartz/task/asnTask.java | 14 + .../youchain/modules/quartz/task/moTask.java | 54 ++++ .../modules/quartz/task/orderTask.java | 54 ++-- .../src/main/resources/config/application.yml | 4 +- 17 files changed, 406 insertions(+), 193 deletions(-) create mode 100644 youchain-system/src/main/java/com/youchain/modules/quartz/task/asnTask.java create mode 100644 youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java diff --git a/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogErrorMapperImpl.java b/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogErrorMapperImpl.java index e4bdff6..5b4730e 100644 --- a/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogErrorMapperImpl.java +++ b/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogErrorMapperImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Component; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2024-04-16T16:48:50+0800", + date = "2024-04-24T17:39:34+0800", comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_202 (Oracle Corporation)" ) @Component diff --git a/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogSmallMapperImpl.java b/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogSmallMapperImpl.java index fd947cc..720c971 100644 --- a/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogSmallMapperImpl.java +++ b/youchain-logging/target/generated-sources/annotations/com/youchain/service/mapstruct/LogSmallMapperImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Component; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2024-04-16T16:48:50+0800", + date = "2024-04-24T17:39:34+0800", comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_202 (Oracle Corporation)" ) @Component diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java index ee06eff..ab1570e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java @@ -87,7 +87,7 @@ public class ItemKey extends BaseEntity implements Serializable { private Dept dept; @Column(name = "`order_number`") - @ApiModelProperty(value = "工单号") + @ApiModelProperty(value = "工单编号") private String orderNumber; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java index 5354721..ba81129 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/Task.java @@ -58,7 +58,7 @@ public class Task extends BaseEntity implements Serializable { private ItemKey itemKey; @Column(name = "`bill_code`") - @ApiModelProperty(value = "任务号") + @ApiModelProperty(value = "送货单条码号") private String billCode; @Column(name = "`task_type`") diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java index b989966..41e1edb 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java @@ -67,21 +67,41 @@ public class KMReSController { String containerCode = missionStateCallback.getContainerCode();//容器编号 String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态 try { - //料箱任务 - AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id)); - AgvTask agvTask = agvTaskService.toEntity(agvTaskDto);//转实体 - List taskList = taskRepository.getAgvTaskList(agvTask.getId()); - if (taskList.isEmpty()) { - return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "任务不存在!", ""), BAD_REQUEST); - } - Task task = taskList.get(0); - agvTaskService.agvTaskCallback(agvTask, task, missionStatus); - //回传 - if (agvTask.getType().equals(BizStatus.ASN)) { - returnMo(task.getItemKey().getOrderNumber()); - } else if (agvTask.getType().equals(BizStatus.PICK)) { - returnIssue(task); + //料箱出库任务 + if(id.indexOf("XJ")!=-1){ + if(missionStatus.equals("CANCELED")){ + List agvTaskList= agvTaskService.findByjobCode(id); + for(AgvTask agvTask:agvTaskList){ + if(!agvTask.getStatus().equals(BizStatus.FINISH)){ + agvTask.setStatus(BizStatus.CANCEL); + agvTask.setEndTime(new Timestamp(new Date().getTime())); + agvTaskService.update(agvTask); + } + } + }else { + AgvTask agvTask= agvTaskService.findByjobCode(id,containerCode); + agvTaskService.agvTaskCallback(agvTask,missionStatus,containerCode); + List taskList = taskRepository.getAgvTaskList(agvTask.getId()); + Task task = taskList.get(0); + if(task==null){ + return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "任务不存在!", ""), BAD_REQUEST); + } + returnIssue(task);//叫料结果回传 + } + + }else{ + //入库 + AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id)); + AgvTask agvTask = agvTaskService.toEntity(agvTaskDto);//转实体 + List taskList = taskRepository.getAgvTaskList(agvTask.getId()); + if (taskList.isEmpty()) { + return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "任务不存在!", ""), BAD_REQUEST); + } + Task task = taskList.get(0); + agvTaskService.agvTaskCallback(agvTask, task, missionStatus); + returnMo(task.getBillCode());//回传MO信息 } + return new ResponseEntity<>(ApiResult.success(OK.value(), "", ""), HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "KMReS接口回调异常", e.getMessage()), BAD_REQUEST); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index 8de018a..a452107 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -148,10 +148,26 @@ public interface AgvTaskService { */ void agvTaskCallback(AgvTask agvTask,Task task, String status); - boolean findByendSlotCode(String endSlotCode,String type,String jobType); + void agvTaskCallback(AgvTask agvTask,String status,String containerCode); + List findById(List ids); double queryOrderNumberSum(String orderNumber); + /** + *根据组号+料箱号招找到对应的AGV + * @param jobForce-任务组号 + * @param containerCode-容器号 + * @return + */ + AgvTask findByjobCode(String jobForce,String containerCode); + + /** + *根据组号+找到对应的AGV集合 + * @param jobForce-任务组号 + * @return + */ + List findByjobCode(String jobForce); + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/OrderService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/OrderService.java index aa4b07b..5908a29 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/OrderService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/OrderService.java @@ -21,9 +21,12 @@ import com.youchain.businessdata.service.dto.MoDto; import com.youchain.businessdata.service.dto.OrderDto; import com.youchain.businessdata.service.dto.OrderQueryCriteria; import org.springframework.data.domain.Pageable; +import org.springframework.scheduling.annotation.Async; + import java.util.Map; import java.util.List; import java.io.IOException; +import java.util.Set; import javax.servlet.http.HttpServletResponse; /** @@ -70,6 +73,8 @@ public interface OrderService { */ OrderDto findByBarcodeNumber(String barcodeNumber); + Map findByBarcodeNumbers(Set barcodeNumbers); + /** * 创建 * @param resources / @@ -77,6 +82,16 @@ public interface OrderService { */ OrderDto create(Order resources); + /** + * 批量创建 + * @param orders 订单列表 + */ + @Async + void batchCreateOrders(List orders); + + @Async + void batchUpdateOrders(List orders); + /** * 编辑 * @param resources / diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/dto/MoQueryCriteria.java b/youchain-system/src/main/java/com/youchain/businessdata/service/dto/MoQueryCriteria.java index b8dc58a..2b9d25c 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/dto/MoQueryCriteria.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/dto/MoQueryCriteria.java @@ -37,6 +37,10 @@ public class MoQueryCriteria{ @Query(type = Query.Type.INNER_LIKE) private String labelNo; + /** 工单编号 */ + @Query(type = Query.Type.INNER_LIKE) + private String workOrderName; + @Query(joinName = "item", propName="code",type = Query.Type.INNER_LIKE) private long itemCode; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index 288bb6a..4f57e81 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -18,10 +18,12 @@ package com.youchain.businessdata.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.youchain.basicdata.domain.Box; import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.domain.Stock; import com.youchain.basicdata.repository.StockRepository; import com.youchain.basicdata.service.PointService; +import com.youchain.basicdata.service.impl.BoxServiceImpl; import com.youchain.businessdata.domain.*; import com.youchain.businessdata.repository.AsnDetailRepository; import com.youchain.businessdata.repository.TaskRepository; @@ -459,13 +461,9 @@ public class AgvTaskServiceImpl implements AgvTaskService { } @Override - public void agvTaskCallback(AgvTask agvTask, Task task, String status) { + public void agvTaskCallback(AgvTask agvTask, Task task, String status) { - if (status.equals("ARRIVED")) { - - } else if (status.equals("UP_CONTAINER")) { - - } else if (status.equals("COMPLETED")) { + if (status.equals("COMPLETED")) { //入库 if (agvTask.getType().equals(BizStatus.ASN)) { //增加库存 @@ -489,15 +487,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { inventory.setQuantity(task.getPlanQty()); inventoryService.update(inventory); inventoryLogService.storeInventoryLog(BizStatus.RECEIVING_UP, BizStatus.ADD, null, task.getItemKey(), task.getSrcPoint(), task.getDstPoint(), task.getSrcStock(), task.getSrcStock(), task.getPlanQty(), task.getPlanQty(), BizStatus.ASN, ad.getId(), inventory.getId(), ad.getRemark()); - } else if (agvTask.getType().equals(BizStatus.PICK)) { - //出库 - //扣除库存 - try { - taskService.pickConfirm(task.getId(), task.getPlanQty()); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); - } - //回传 } //任务完成 agvTask.setStatus(BizStatus.FINISH); @@ -512,15 +501,27 @@ public class AgvTaskServiceImpl implements AgvTaskService { } @Override - public boolean findByendSlotCode(String endSlotCode, String type, String jobType) { - String hql = " from AgvTask agv " + " where agv.endSlotCode='" + endSlotCode + "' " + " and agv.type='" + type + "' " + " and agv.jobType='" + jobType + "' " + " and agv.status in ('ATCALL','UP_CONTAINER') "; + public void agvTaskCallback(AgvTask agvTask, String status, String containerCode) { + + if (status.equals("PICKER_RECEIVE")) { + //小件:AGV把料箱放到料箱车上扣减库存 + + List taskList = taskRepository.getAgvTaskList(agvTask.getId()); + //扣除库存 + for (Task task : taskList) { + try { + taskService.pickConfirm(task.getId(), task.getPlanQty()); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + + agvTask.setStatus(BizStatus.FINISH); + agvTask.setEndTime(new Timestamp(new Date().getTime())); + this.update(agvTask); + - Query query = entityMapper.createQuery(hql); - List agvTaskList = query.getResultList(); - if (agvTaskList.size() > 0) { - return false; } - return true; } @Override @@ -535,7 +536,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { @Override public double queryOrderNumberSum(String orderNumber) { - String hql = "select sum(task.moveQty) from Task task where task.itemKey.orderNumber= :orderNumber"; + String hql = "select sum(task.moveQty) from Task task where task.billCode= :orderNumber"; Query query = entityMapper.createQuery(hql); query.setParameter("orderNumber", orderNumber); List orderNumberSumList = query.getResultList(); @@ -546,4 +547,26 @@ public class AgvTaskServiceImpl implements AgvTaskService { } + @Override + public AgvTask findByjobCode(String jobForce, String containerCode) { + String hql = " from AgvTask agv where agv.jobForce= :jobForce and agv.stockCode= :containerCode"; + Query query = entityMapper.createQuery(hql); + query.setParameter("jobForce", jobForce); + query.setParameter("containerCode", containerCode); + List agvTaskList = query.getResultList(); + if (agvTaskList.size() > 0) { + return agvTaskList.get(0); + } + return null; + } + + @Override + public List findByjobCode(String jobForce) { + String hql = " from AgvTask agv where agv.jobForce= :jobForce"; + Query query = entityMapper.createQuery(hql); + query.setParameter("jobForce", jobForce); + List agvTaskList = query.getResultList(); + return agvTaskList; + } + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java index dd03723..027a6da 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -100,8 +101,7 @@ public class MlsServiceImpl implements MlsService { * @return */ @Override - @Transactional(rollbackFor = Exception.class) - public void getOrderInfo(String resultJson) { + public void getOrderInfo(String resultJson) { if (StringUtils.isEmpty(resultJson)) { throw new RuntimeException("获取送货单接口失败!"); } @@ -127,75 +127,93 @@ public class MlsServiceImpl implements MlsService { if (details == null || details.size() == 0) { throw new RuntimeException("没有获取到送货单数据!"); } + + List ordersToCreate = new ArrayList<>();//新增订单集合 + List ordersToUpdate = new ArrayList<>();//更新订单集合 + //获取所有送货单条码号 + Set barcodeNumbers = details.stream() + .map(detail -> ((JSONObject) detail).getString("barcodeNumber")) + .collect(Collectors.toSet()); + //获取已存在的订单 + Map existingOrders = orderService.findByBarcodeNumbers(barcodeNumbers); //循环处理每个送货单 - log.info("送货单数量:" + details.size()); for (int i = 0; i < details.size(); i++) { JSONObject detail = details.getJSONObject(i); - String barcodeNumber = detail.getString("barcodeNumber");//送货单条码号 - String isCreatedLabel = detail.getString("isCreatedLabel");//是否已生成标签N - String itemCode = detail.getString("itemCode");//物料编码 - String iqcResult = detail.getString("iqcResult");//检验结果(不合格:REJECT,合格:ACCEPT) - String supplierCode = detail.getString("supplierCode");//供应商编码 - //String dispatchNumber=detail.getString("dispatchNumber");//文档没有该字段 - String receivedLocationName = detail.getString("receivedLocationName");//LMES货位名称 - String receivedInvCode = detail.getString("receivedInvCode");//LMES接收子库编码 - //Integer deliveryNotifyLineId = detail.getInteger("deliveryNotifyLineId");//送货通知单行ID - String deliveryNumber = detail.getString("deliveryNumber");//送货单号 - String receivedAreaCode = detail.getString("receivedAreaCode");//LMES接收货区编码 - String supplierName = detail.getString("supplierName");//供应商名称 - String isIqcInspected = detail.getString("isIqcInspected");//Y-已检验N-未检验 - Double deliveryQty = detail.getDouble("deliveryQty");//计划数量 - //String deliveryType=detail.getString("deliveryType");//文档没有该字段 - String receivedLocationCode = detail.getString("receivedLocationCode");//LMES货位编码 - String mlsUpdateTime = detail.getString("updateTime");//更新时间 - String receivedInvName = detail.getString("receivedInvName");//LMES接收子库名称 - Double receivedQty = detail.getDouble("receivedQty");//实际接收数量 - //Integer deliveryLineId = detail.getInteger("deliveryLineId");//送货单行ID - String inInspector = detail.getString("inInspector");//检验员 - Integer deliveryHeaderId = detail.getInteger("deliveryHeaderId");//送货单头ID和003接口关联 - String receivedAreaName = detail.getString("receivedAreaName");//mls接收货区名称 - String deliveryStatus = detail.getString("deliveryStatus");//送货单状态 - - //直接接收已合格的送货单 - OrderDto orderdto = orderService.findByBarcodeNumber(barcodeNumber); - if (orderdto == null) { - //创建 - Order newOrder = new Order(deliveryHeaderId, null, null, - deliveryNumber, barcodeNumber, deliveryStatus, receivedInvCode, receivedInvName, - receivedAreaCode, receivedAreaName, receivedLocationCode, receivedLocationName, - itemCode, deliveryQty, inInspector, receivedQty, isIqcInspected, iqcResult, isCreatedLabel, - supplierCode, supplierName, mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp() - ); - orderService.create(newOrder); + String barcodeNumber = detail.getString("barcodeNumber"); + //判断是否已存在订单 + if (existingOrders.containsKey(barcodeNumber)) { + Order existingOrder = existingOrders.get(barcodeNumber); + //更新订单信息 + ordersToUpdate.add(updateOrder(existingOrder, detail)); } else { - //更新 - Order order = orderService.toEntity(orderdto); - order.setDeliveryHeaderId(deliveryHeaderId); - order.setDeliveryNumber(deliveryNumber); - order.setDeliveryStatus(deliveryStatus); - order.setReceivedInvCode(receivedInvCode); - order.setReceivedInvName(receivedInvName); - order.setReceivedAreaCode(receivedAreaCode); - order.setReceivedAreaName(receivedAreaName); - order.setReceivedLocationCode(receivedLocationCode); - order.setReceivedLocationName(receivedLocationName); - order.setItemCode(itemCode); - order.setDeliveryQty(deliveryQty); - order.setInInspector(inInspector); - order.setReceivedQty(receivedQty); - order.setIsIqcInspected(isIqcInspected); - order.setIqcResult(iqcResult); - order.setIsCreatedLabel(isCreatedLabel); - order.setSupplierCode(supplierCode); - order.setSupplierName(supplierName); - order.setMlsUpdateTime(mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp()); - orderService.update(order); + //新增订单 + ordersToCreate.add(createOrder(detail)); } - - + } + //批量新增订单 + if (!ordersToCreate.isEmpty()) { + orderService.batchCreateOrders(ordersToCreate); + } + //批量更新订单 + if (!ordersToUpdate.isEmpty()) { + orderService.batchUpdateOrders(ordersToUpdate); } + } + /** + * 创建订单 + * + * @param detail + * @return + */ + private Order createOrder(JSONObject detail) { + + String barcodeNumber = detail.getString("barcodeNumber");//送货单条码号 + String isCreatedLabel = detail.getString("isCreatedLabel");//是否已生成标签N + String itemCode = detail.getString("itemCode");//物料编码 + String iqcResult = detail.getString("iqcResult");//检验结果(不合格:REJECT,合格:ACCEPT) + String supplierCode = detail.getString("supplierCode");//供应商编码 + //String dispatchNumber=detail.getString("dispatchNumber");//文档没有该字段 + String receivedLocationName = detail.getString("receivedLocationName");//LMES货位名称 + String receivedInvCode = detail.getString("receivedInvCode");//LMES接收子库编码 + //Integer deliveryNotifyLineId = detail.getInteger("deliveryNotifyLineId");//送货通知单行ID + String deliveryNumber = detail.getString("deliveryNumber");//送货单号 + String receivedAreaCode = detail.getString("receivedAreaCode");//LMES接收货区编码 + String supplierName = detail.getString("supplierName");//供应商名称 + String isIqcInspected = detail.getString("isIqcInspected");//Y-已检验N-未检验 + Double deliveryQty = detail.getDouble("deliveryQty") == null ? 0 : detail.getDouble("deliveryQty");//计划数量 + //String deliveryType=detail.getString("deliveryType");//文档没有该字段 + String receivedLocationCode = detail.getString("receivedLocationCode");//LMES货位编码 + String mlsUpdateTime = detail.getString("updateTime");//更新时间 + String receivedInvName = detail.getString("receivedInvName");//LMES接收子库名称 + Double receivedQty = detail.getDouble("receivedQty") == null ? 0 : detail.getDouble("receivedQty");//实际接收数量 + //Integer deliveryLineId = detail.getInteger("deliveryLineId");//送货单行ID + String inInspector = detail.getString("inInspector");//检验员 + Integer deliveryHeaderId = detail.getInteger("deliveryHeaderId");//送货单头ID和003接口关联 + String receivedAreaName = detail.getString("receivedAreaName");//mls接收货区名称 + String deliveryStatus = detail.getString("deliveryStatus");//送货单状态 + + //创建 + Order newOrder = new Order(deliveryHeaderId, null, null, + deliveryNumber, barcodeNumber, deliveryStatus, receivedInvCode, receivedInvName, + receivedAreaCode, receivedAreaName, receivedLocationCode, receivedLocationName, + itemCode, deliveryQty, inInspector, receivedQty, isIqcInspected, iqcResult, isCreatedLabel, + supplierCode, supplierName, mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp() + ); + + return newOrder; + } + + /** + * 更新订单信息 + * + * @param order + * @param detail + */ + private Order updateOrder(Order order, JSONObject detail) { + order.setDeliveryStatus(detail.getString("deliveryStatus")); + return order; } /** @@ -222,7 +240,7 @@ public class MlsServiceImpl implements MlsService { */ @Override @Transactional(rollbackFor = Exception.class) - public void getMoInfo(String resultJson) { + public void getMoInfo(String resultJson) { if (StringUtils.isEmpty(resultJson)) { throw new RuntimeException("获取MO票接口失败!"); } @@ -248,7 +266,6 @@ public class MlsServiceImpl implements MlsService { throw new RuntimeException("没有获取到MO票数据!"); } //循环处理每个MO票 - log.info("MO票数量:" + details.size()); for (int i = 0; i < details.size(); i++) { JSONObject detail = details.getJSONObject(i); Integer selfWorkOrderId = detail.getInteger("selfWorkOrderId");//自制件工单id @@ -268,7 +285,7 @@ public class MlsServiceImpl implements MlsService { Long itemId = detail.getLong("itemId");//物料id String updateUserCode = detail.getString("updateUserCode");//修改人 String mlsCreateTime = detail.getString("createTime");//创建时间 - Double qty = detail.getDouble("qty");//可用数量 + Double qty = detail.getDouble("qty") == null ? 0 : detail.getDouble("qty");//可用数量 String labelState = detail.getString("labelState");//标签状态 Integer deliveryHeaderId = detail.getInteger("deliveryHeaderId");//送货单头ID;通过该字段能找到002接口送货单 String workOrderName = detail.getString("workOrderName");//工单编号 @@ -276,64 +293,66 @@ public class MlsServiceImpl implements MlsService { String goodsLocationCode = detail.getString("goodsLocationCode");//MLS货位 String invCode = detail.getString("invCode");//MLS子库 + if ("PRINTED".equals(labelState)) { + //判断物料是否存在;不存在新增; + ItemDto itemDto = itemService.findByCode(itemCode); + Item item = itemService.toEntity(itemDto); + if (item == null) { + item = new Item(); + item.setCode(itemCode); + item.setName(itemDesc); + item.setUnit(uom); + DeptDto deptDto = deptService.findById(7L); + Dept dept = deptService.toEntity(deptDto); + item.setDept(dept); + item.setSourceName(sourceSystem); + item.setSourceId(itemId); + itemService.create(item); + } - //判断物料是否存在;不存在新增; - ItemDto itemDto = itemService.findByCode(itemCode); - Item item = itemService.toEntity(itemDto); - if (item == null) { - item = new Item(); - item.setCode(itemCode); - item.setName(itemDesc); - item.setUnit(uom); - DeptDto deptDto = deptService.findById(7L); - Dept dept = deptService.toEntity(deptDto); - item.setDept(dept); - item.setSourceName(sourceSystem); - item.setSourceId(itemId); - itemService.create(item); + MoDto moDto = moService.findByLabelNo(labelNo); + if (moDto == null) { + Mo mo = new Mo(labelNo, labelType, labelState, deliveryHeaderId, sourceSystem, qty, + workOrderId, workOrderName, selfWorkOrderId, selfWorkOrderName, null, item, + checkResult, Boolean.parseBoolean(deleteFlag), null, null, null, null, invCode, goodsAreaCode, goodsLocationCode, + datetimeStockIn == null ? null : DateUtil.parse(datetimeStockIn).toTimestamp(), + mlsCreateTime == null ? null : DateUtil.parse(mlsCreateTime).toTimestamp(), + mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp(), + createUserCode, updateUserCode + ); + moService.create(mo); + } else { + Mo mo = moService.toEntity(moDto); + mo.setLabelType(labelType); + mo.setLabelState(labelState); + mo.setDeliveryHeaderId(deliveryHeaderId); + mo.setSourceSystem(sourceSystem); + mo.setQty(qty); + mo.setWorkOrderId(workOrderId); + mo.setWorkOrderName(workOrderName); + mo.setSelfWorkOrderId(selfWorkOrderId); + mo.setSelfWorkOrderName(selfWorkOrderName); + mo.setDatetimeStockIn(datetimeStockIn == null ? null : DateUtil.parse(datetimeStockIn).toTimestamp()); + mo.setItem(item); + mo.setCheckResult(checkResult); + mo.setDeleteFlag(Boolean.parseBoolean(deleteFlag)); + mo.setInvCode(invCode); + mo.setGoodsAreaCode(goodsAreaCode); + mo.setGoodsLocationCode(goodsLocationCode); + mo.setMlsUpdateTime(mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp()); + mo.setUpdateUserCode(updateUserCode); + moService.update(mo); + } } - MoDto moDto = moService.findByLabelNo(labelNo); - if (moDto == null) { - Mo mo = new Mo(labelNo, labelType, labelState, deliveryHeaderId, sourceSystem, qty, - workOrderId, workOrderName, selfWorkOrderId, selfWorkOrderName, null, item, - checkResult, Boolean.parseBoolean(deleteFlag), null, null, null, null, invCode, goodsAreaCode, goodsLocationCode, - datetimeStockIn == null ? null : DateUtil.parse(datetimeStockIn).toTimestamp(), - mlsCreateTime == null ? null : DateUtil.parse(mlsCreateTime).toTimestamp(), - mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp(), - createUserCode, updateUserCode - ); - moService.create(mo); - } else { - Mo mo = moService.toEntity(moDto); - mo.setLabelType(labelType); - mo.setLabelState(labelState); - mo.setDeliveryHeaderId(deliveryHeaderId); - mo.setSourceSystem(sourceSystem); - mo.setQty(qty); - mo.setWorkOrderId(workOrderId); - mo.setWorkOrderName(workOrderName); - mo.setSelfWorkOrderId(selfWorkOrderId); - mo.setSelfWorkOrderName(selfWorkOrderName); - mo.setDatetimeStockIn(datetimeStockIn == null ? null : DateUtil.parse(datetimeStockIn).toTimestamp()); - mo.setItem(item); - mo.setCheckResult(checkResult); - mo.setDeleteFlag(Boolean.parseBoolean(deleteFlag)); - mo.setInvCode(invCode); - mo.setGoodsAreaCode(goodsAreaCode); - mo.setGoodsLocationCode(goodsLocationCode); - mo.setMlsUpdateTime(mlsUpdateTime == null ? null : DateUtil.parse(mlsUpdateTime).toTimestamp()); - mo.setUpdateUserCode(updateUserCode); - moService.update(mo); - } } } @Override @Transactional(rollbackFor = Exception.class) - public void getIssueInfo(IssueInfo issueInfo) { - String taskNumber=issueInfo.getTaskNumber();//任务号 + public void getIssueInfo(IssueInfo issueInfo) { + String taskNumber = issueInfo.getTaskNumber();//任务号 // 指定Set的类型 Set workOrderNameSet = issueInfo.getWorkOrderName(); if (workOrderNameSet.isEmpty()) { diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java index aea65bd..4f1ca09 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java @@ -239,16 +239,16 @@ public class MoServiceImpl implements MoService { // 生成入库任务 - AsnDetail asnDetail = asnDetailService.createAsnDetail(item, stock, srcPoint, propC1, orderDto.getBarcodeNumber()); + AsnDetail asnDetail = asnDetailService.createAsnDetail(item, stock, srcPoint, propC1, moDto.getWorkOrderName()); asnDetail.setOrderQty(moDto.getQty()); - asnDetail.setPo(orderDto.getBarcodeNumber()); + asnDetail.setPo(moDto.getWorkOrderName()); asnDetailService.create(asnDetail); //生成Itemkey - ItemKey itemKey = itemKeyService.getItemKey(item, moDto.getLabelNo(), orderDto.getBarcodeNumber()); + ItemKey itemKey = itemKeyService.getItemKey(item, moDto.getLabelNo(), moDto.getWorkOrderName()); //生成收货记录 - Task task = new Task(item, itemKey, asnDetail.getOrderNumber(), BizStatus.ASN, asnDetail, null, null, null, stock, stock, srcPoint, endPoint, stock.getCode(), stock.getCode(), srcPoint.getCode(), endPoint.getCode(), null, BizStatus.OPEN, asnDetail.getOrderQty(), null, null, item.getDept(), agvTask); + Task task = new Task(item, itemKey, orderDto.getBarcodeNumber(), BizStatus.ASN, asnDetail, null, null, null, stock, stock, srcPoint, endPoint, stock.getCode(), stock.getCode(), srcPoint.getCode(), endPoint.getCode(), null, BizStatus.OPEN, asnDetail.getOrderQty(), null, null, item.getDept(), agvTask); taskService.create(task); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/OrderServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/OrderServiceImpl.java index 66d9534..6a14b9a 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/OrderServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/OrderServiceImpl.java @@ -34,14 +34,11 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import java.util.List; -import java.util.Map; +import java.util.*; import java.io.IOException; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.LinkedHashMap; /** * @author huojin @@ -105,12 +102,58 @@ public class OrderServiceImpl implements OrderService { } + @Override + public Map findByBarcodeNumbers(Set barcodeNumbers) { + Map result = new HashMap<>(); + String hql = "from Order o where o.barcodeNumber in (:barcodeNumbers)"; + Query query = entityManager.createQuery(hql); // 这里的query是org.hibernate.query.Query + query.setParameter("barcodeNumbers", barcodeNumbers); + List orders = query.getResultList(); + if (orders.size() > 0) { + for (Order order : orders) { + result.put(order.getBarcodeNumber(), order); + } + } + return result; + } + @Override @Transactional(rollbackFor = Exception.class) public OrderDto create(Order resources) { return orderMapper.toDto(orderRepository.save(resources)); } + @Override + @Transactional(rollbackFor = Exception.class) + public void batchCreateOrders(List orders) { + int batchSize = 50; // 根据需求调整批处理大小 + for (int i = 0; i < orders.size(); i++) { + entityManager.persist(orders.get(i)); + if (i % batchSize == 0 && i > 0) { + entityManager.flush(); // 批量提交 + entityManager.clear(); // 清理缓存 + } + } + entityManager.flush(); // 最后确保所有剩余的实体也被flush到数据库 + entityManager.clear(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchUpdateOrders(List orders) { + int batchSize = 100; // 根据需求调整批处理大小 + for (int i = 0; i < orders.size(); i++) { + Order order = orders.get(i); + entityManager.merge(order); // 更新实体 + if (i % batchSize == 0 && i > 0) { // 每处理50个实体执行一次flush和clear + entityManager.flush(); + entityManager.clear(); + } + } + entityManager.flush(); // 确保最后的更改也被写入数据库 + entityManager.clear(); // 清理持久化上下文以释放内存 + } + @Override @Transactional(rollbackFor = Exception.class) public void update(Order resources) { diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java index ae83e30..3191672 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java @@ -163,9 +163,6 @@ public class TaskServiceImpl implements TaskService { taskRepository.save(task); Inventory inv = inventoryRepository.findById(task.getInvId()).get(); if (inv != null) { - ItemKey itemKey = inv.getItemKey(); - Item item = itemKey.getItem(); - Dept dept = item.getDept(); double srcQty=inv.getQuantity(); inv.setQuantity(inv.getQuantity() - pickedQuantity); inv.setQueuedQty(inv.getQueuedQty() - pickedQuantity); diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/asnTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/asnTask.java new file mode 100644 index 0000000..3b47d9e --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/asnTask.java @@ -0,0 +1,14 @@ +package com.youchain.modules.quartz.task; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +/** + * 料箱入库任务下发 + */ +@Slf4j +@Service +public class asnTask { + public void asnTask() { + log.info("asnTask start"); + } +} diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java new file mode 100644 index 0000000..9403bce --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java @@ -0,0 +1,54 @@ +package com.youchain.modules.quartz.task; + +import com.youchain.businessdata.inputJson.MoInfo; +import com.youchain.businessdata.inputJson.MoParams; +import com.youchain.businessdata.rest.MlsController; +import com.youchain.businessdata.service.MlsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.Set; + +/** + * 获取mo定时任务 + */ + + +@Slf4j +@Service +public class moTask { + @Autowired + public MlsService mlsService; + + public void moTask() { + + try { + log.info("获取mo信息"); + MoInfo moInfo = getMoInfo(); + String moJson = mlsService.getMoJson(moInfo); + mlsService.getMoInfo(moJson); + } catch (Exception e) { + throw new RuntimeException("MLS异常信息:" + e); + } + + } + + public MoInfo getMoInfo() { + + MoParams params = new MoParams(); + params.setOrgId(808); + Set invCodes = new HashSet<>(); + invCodes.add("MA2111"); + params.setInvCodes(invCodes); + //DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd HH:mm:ss") + params.setStartTime("2024-04-11 00:00:00"); + params.setEndTime("2024-04-11 23:59:59"); + MoInfo moInfo = new MoInfo(); + moInfo.setIfaceCode("MLS-WQ-003"); + moInfo.setSourceSystem("WQ"); + moInfo.setParams(params); + return moInfo; + } +} diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/orderTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/orderTask.java index 76e973c..9fa3235 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/orderTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/orderTask.java @@ -1,17 +1,27 @@ package com.youchain.modules.quartz.task; import cn.hutool.core.date.DateUtil; +import com.youchain.annotation.Log; +import com.youchain.businessdata.domain.Task; import com.youchain.businessdata.inputJson.OrderInfo; import com.youchain.businessdata.inputJson.OrderParams; +import com.youchain.businessdata.inputJson.ReturnIssueInfo; +import com.youchain.businessdata.inputJson.ReturnIssueInfoParams; import com.youchain.businessdata.rest.MlsController; +import com.youchain.businessdata.service.MlsService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.util.Date; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * 获取送货单定时任务 @@ -21,37 +31,35 @@ import java.util.Set; @Service public class orderTask { - private final MlsController mlsController; - @Autowired - public orderTask(MlsController mlsController) { - this.mlsController = mlsController; - } + public MlsService mlsService; + public void orderTask() { + OrderInfo orderInfo = getOrderInfo(); + String orderJson = mlsService.getOrderJson(orderInfo); + mlsService.getOrderInfo(orderJson); + } - Date date = new Date(); + + public OrderInfo getOrderInfo() { + + OrderParams params = new OrderParams(); + params.setOrgId(808); + Set invCodes = new HashSet<>(); + invCodes.add("MA2111"); + params.setInvCodes(invCodes); + params.setIqcResult(""); + //DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd HH:mm:ss") + params.setStartTime("2024-04-10 00:00:00"); + params.setEndTime("2024-04-10 23:59:59"); + params.setPageNo(1); + params.setPageSize(100); OrderInfo orderInfo = new OrderInfo(); orderInfo.setIfaceCode("MLS-WQ-002"); orderInfo.setSourceSystem("WQ"); - - Set invCodes = new HashSet<>(); - invCodes.add("MA2111"); - - String startTime = DateUtil.format(DateUtil.beginOfDay(date), "yyyy-MM-dd HH:mm:ss"); - String endTime = DateUtil.format(DateUtil.endOfDay(date), "yyyy-MM-dd HH:mm:ss"); - OrderParams params = new OrderParams(100059, invCodes, "", startTime, endTime, 1, 100); - orderInfo.setParams(params); - - try { - log.info("获取送货单信息"); - mlsController.getOrderInfo(orderInfo); - } catch (Exception e) { - throw new RuntimeException("MLS异常信息:" + e); - } - - + return orderInfo; } } diff --git a/youchain-system/src/main/resources/config/application.yml b/youchain-system/src/main/resources/config/application.yml index 92c301f..22b12ad 100644 --- a/youchain-system/src/main/resources/config/application.yml +++ b/youchain-system/src/main/resources/config/application.yml @@ -1,5 +1,5 @@ server: - port: 8000 + port: 8010 spring: main: allow-circular-references: true @@ -29,7 +29,7 @@ spring: redis: #数据库索引 - database: ${REDIS_DB:0} + database: ${REDIS_DB:9} host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} password: ${REDIS_PWD:}