From f39de8e134f8c69321812fa9b5677ca9b78fb7c2 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" Date: Tue, 13 Jan 2026 20:23:48 +0800 Subject: [PATCH] no message --- .../cpte/modules/agvTask/entity/AgvTask.java | 17 +++ .../modules/agvTask/mapper/AgvTaskMapper.java | 3 + .../agvTask/mapper/xml/AgvTaskMapper.xml | 10 ++ .../agvTask/service/IAgvTaskService.java | 4 +- .../service/impl/AgvTaskServiceImpl.java | 10 +- .../org/cpte/modules/agvTask/vo/ConNoAgv.java | 11 ++ .../service/impl/IHikAgvServiceImpl.java | 2 +- .../controller/InventoryController.java | 24 ++-- .../inventory/mapper/InventoryMapper.java | 19 +++ .../inventory/mapper/xml/InventoryMapper.xml | 10 ++ .../inventory/service/IInventoryService.java | 8 ++ .../service/impl/InventoryServiceImpl.java | 24 ++++ .../quartz/job/AllocatePickDetailJob.java | 104 +++++++++++----- .../service/impl/AsnDetailServiceImpl.java | 2 +- .../service/processor/CallAgvProcessor.java | 2 +- .../cpte/modules/shipping/entity/Pick.java | 7 ++ .../modules/shipping/mapper/PickMapper.java | 5 +- .../shipping/mapper/xml/PickMapper.xml | 4 +- .../service/impl/PickDetailServiceImpl.java | 1 + .../service/impl/TaskServiceImpl.java | 10 +- .../service/processor/AllocateProcessor.java | 115 ++++++++++++------ .../service/processor/PickBackProcessor.java | 26 +++- .../cpte/modules/shipping/vo/PickPage.java | 7 ++ .../service/impl/ITesAgvServiceImpl.java | 41 ++++--- .../org/cpte/modules/utils/BatchUtil.java | 36 +++--- .../src/main/resources/application-dev.yml | 2 +- 26 files changed, 379 insertions(+), 125 deletions(-) create mode 100644 cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/vo/ConNoAgv.java diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/entity/AgvTask.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/entity/AgvTask.java index 8edbc85..a1146eb 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/entity/AgvTask.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/entity/AgvTask.java @@ -57,6 +57,22 @@ public class AgvTask implements Serializable { @JsonSerialize(using = ToStringSerializer.class) private java.lang.Long businessDetailId; + /** + * 物料 + */ + @Excel(name = "物料", width = 15) + @Schema(description = "物料") + @Dict(dictTable = "base_item", dicCode = "id", dicText = "item_code") + @JsonSerialize(using = ToStringSerializer.class) + private java.lang.Long itemId; + + /** + * 柜号 + */ + @Excel(name = "柜号", width = 15) + @Schema(description = "柜号") + private java.lang.String conNo; + /** * 载具编号 */ @@ -69,6 +85,7 @@ public class AgvTask implements Serializable { @Excel(name = "载具类型", width = 15) @Schema(description = "载具类型") private java.lang.String carrierType; + /** * 任务类型 */ diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java index c2b9d7f..d547b6d 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java @@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.cpte.modules.agvTask.entity.AgvTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.cpte.modules.agvTask.vo.ConNoAgv; import java.util.List; import java.util.Map; @@ -72,4 +73,6 @@ public interface AgvTaskMapper extends BaseMapper { */ @Select(value = "select end_code,count(end_code) from data_agv_task where type='OUTBOUND' and status in (1,2) and agv_vendor='TES' group by end_code") List> pointTaskCountMap(); + + List queryIsExecuteAgvTask(); } diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml index ebc7764..3493537 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml @@ -18,4 +18,14 @@ ORDER BY create_time DESC LIMIT 1 + + \ No newline at end of file diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/IAgvTaskService.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/IAgvTaskService.java index f9c3fd3..911e21a 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/IAgvTaskService.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/IAgvTaskService.java @@ -28,7 +28,7 @@ public interface IAgvTaskService extends IService { * @param izAll 整托/拆托 * @param agvVendor 供应商 */ - AgvTask createAgvTask(Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor); + AgvTask createAgvTask(String conNo,Long itemId,Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor); /** * 创建agvTask任务 @@ -42,7 +42,7 @@ public interface IAgvTaskService extends IService { * @param izAll 整托/拆托 * @param agvVendor 供应商 */ - AgvTask bulidAgvTask(Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor); + AgvTask bulidAgvTask(String conNo,Long itemId,Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor); /** * 处理AGV任务 diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/impl/AgvTaskServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/impl/AgvTaskServiceImpl.java index 6e89ca4..0b0787f 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/impl/AgvTaskServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/service/impl/AgvTaskServiceImpl.java @@ -48,7 +48,7 @@ public class AgvTaskServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) - public AgvTask createAgvTask(Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor) { + public AgvTask createAgvTask(String conNo,Long itemId,Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor) { LoginUser sysUser = null; try { sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -60,6 +60,8 @@ public class AgvTaskServiceImpl extends ServiceImpl impl priority = 3; } AgvTask agvTask = AgvTask.builder() + .conNo(conNo) + .itemId(itemId) .businessDetailId(businessDetailId) .carrierCode(carrierCode) .type(type) @@ -80,7 +82,7 @@ public class AgvTaskServiceImpl extends ServiceImpl impl } @Override - public AgvTask bulidAgvTask(Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor) { + public AgvTask bulidAgvTask(String conNo,Long itemId,Long businessDetailId, String carrierCode, String startCode, String endCode, String taskType, String type, Integer izAll, String agvVendor) { LoginUser sysUser = null; try { sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -93,6 +95,8 @@ public class AgvTaskServiceImpl extends ServiceImpl impl } return AgvTask.builder() .id(IdWorker.getId()) + .conNo(conNo) + .itemId(itemId) .businessDetailId(businessDetailId) .carrierCode(carrierCode) .type(type) @@ -133,7 +137,7 @@ public class AgvTaskServiceImpl extends ServiceImpl impl //验证通过,生成Tes任务 Stock stock = data.getStock(); - createAgvTask(asn.getId(), stock.getStockCode(), station.getPointCode(), dstPoint.getPointCode(), null, BusinessTypeEnum.INBOUND.getValue(), 0, AgvVendorEnum.TES.getValue()); + createAgvTask(null, asnDetails.get(0).getItemId(),asn.getId(), stock.getStockCode(), station.getPointCode(), dstPoint.getPointCode(), null, BusinessTypeEnum.INBOUND.getValue(), 0, AgvVendorEnum.TES.getValue()); } } diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/vo/ConNoAgv.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/vo/ConNoAgv.java new file mode 100644 index 0000000..ab14caf --- /dev/null +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/vo/ConNoAgv.java @@ -0,0 +1,11 @@ +package org.cpte.modules.agvTask.vo; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class ConNoAgv { + private String conNo; + private Long itemId; +} diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/hikAgv/service/impl/IHikAgvServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/hikAgv/service/impl/IHikAgvServiceImpl.java index d07215c..23fc7e8 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/hikAgv/service/impl/IHikAgvServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/hikAgv/service/impl/IHikAgvServiceImpl.java @@ -233,7 +233,7 @@ public class IHikAgvServiceImpl implements IHikAgvService { if (agvTaskMapper.existsByStockCode(agvTask.getCarrierCode(), AgvVendorEnum.HIK.getValue()) !=null) { throw new RuntimeException("任务已重新生成,请勿重复操作! "); } - AgvTask newAgvTask = iAgvTaskService.createAgvTask(agvTask.getBusinessDetailId(), agvTask.getCarrierCode(), agvTask.getStartCode(), agvTask.getEndCode(), null, agvTask.getType(),agvTask.getIzAll(), AgvVendorEnum.HIK.getValue()); + AgvTask newAgvTask = iAgvTaskService.createAgvTask(agvTask.getConNo(),agvTask.getItemId(),agvTask.getBusinessDetailId(), agvTask.getCarrierCode(), agvTask.getStartCode(), agvTask.getEndCode(), null, agvTask.getType(),agvTask.getIzAll(), AgvVendorEnum.HIK.getValue()); switch (agvTask.getType()) { case "INBOUND": case "OUTBOUND": diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/controller/InventoryController.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/controller/InventoryController.java index 72e5165..58fd69c 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/controller/InventoryController.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/controller/InventoryController.java @@ -18,6 +18,7 @@ import org.cpte.modules.base.mapper.PointMapper; import org.cpte.modules.base.mapper.StockMapper; import org.cpte.modules.base.service.IItemKeyService; import org.cpte.modules.constant.enums.CommonStatusEnum; +import org.cpte.modules.inventory.mapper.InventoryMapper; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; @@ -64,6 +65,9 @@ public class InventoryController extends JeecgController queryWrapper = QueryGenerator.initQueryWrapper(inventory, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = inventoryService.page(page, queryWrapper); - //物料属性 + Page page = new Page<>(pageNo, pageSize); + + IPage pageList = inventoryService.selectInventoryWithItemKey(page, inventory); + + return Result.OK(pageList); + + /* //物料属性 List itemKeyIds = pageList.getRecords().stream().map(Inventory::getItemKeyId).toList(); Map itemKeyMap=itemKeyService.queryByIdsToMap(itemKeyIds); for(Inventory inv:pageList.getRecords()){ @@ -104,8 +111,7 @@ public class InventoryController extends JeecgController add(@RequestBody Inventory inventory) { ItemKey itemKey = itemKeyService.createItemKey(inventory.getItemId(), inventory.getWhCode(), inventory.getProject(), inventory.getTaskNo(), inventory.getPropC1(), inventory.getPropC3()); inventory.setItemKeyId(itemKey.getId()); + inventory.setItemId(itemKey.getItemId()); inventoryService.save(inventory); return Result.OK("添加成功!"); @@ -147,8 +154,9 @@ public class InventoryController extends JeecgController { @Select("select * from data_inventory where stock_id = #{stockId}") List queryInventoryByStockId(@Param("stockId") Long stockId); + List queryByStockIds(@Param("stockIds") List stockIds); + /** * 根据容器ID集合删除库存数据 * @@ -83,4 +89,17 @@ public interface InventoryMapper extends BaseMapper { */ List queryByAreaIdAndCountTypeAndCodes(@Param("areaId") Long areaId, @Param("countType") Integer countType, @Param("codes") Set codes); + + @Select("SELECT " + + "inventory.*, " + + "item_key.wh_code as whCode, " + + "item_key.project as project, " + + "item_key.task_no as taskNo, " + + "item_key.prop_c1 as propC1, " + + "item_key.prop_c3 as propC3 " + + "FROM data_inventory inventory " + + "LEFT JOIN base_item_key item_key ON item_key.id = inventory.item_key_id " + + "${ew.customSqlSegment}") + IPage selectInventoryWithItemKey(Page page, @Param("inventory") Inventory inventory, @Param("ew") Wrapper wrapper); + } diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/mapper/xml/InventoryMapper.xml b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/mapper/xml/InventoryMapper.xml index 2de333d..c308ebd 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/mapper/xml/InventoryMapper.xml +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/mapper/xml/InventoryMapper.xml @@ -53,4 +53,14 @@ + + \ No newline at end of file diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/IInventoryService.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/IInventoryService.java index 2267dae..f2058be 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/IInventoryService.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/IInventoryService.java @@ -1,5 +1,7 @@ package org.cpte.modules.inventory.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.cpte.modules.inventory.entity.Inventory; import com.baomidou.mybatisplus.extension.service.IService; import org.cpte.modules.receive.entity.Asn; @@ -18,6 +20,12 @@ import java.util.Map; * @Version: V1.0 */ public interface IInventoryService extends IService { + + /** + * 自定义分页查询,包含与 item_key 表的关联数据 + */ + IPage selectInventoryWithItemKey(Page page, Inventory inventory); + /** * 构建库存 * diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/impl/InventoryServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/impl/InventoryServiceImpl.java index df88e15..95c8805 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/impl/InventoryServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/inventory/service/impl/InventoryServiceImpl.java @@ -1,6 +1,9 @@ package org.cpte.modules.inventory.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections4.CollectionUtils; import org.cpte.modules.base.entity.Point; import org.cpte.modules.base.mapper.PointMapper; @@ -12,6 +15,7 @@ import org.cpte.modules.inventory.service.IInventoryService; import org.cpte.modules.receive.entity.Asn; import org.cpte.modules.receive.entity.ReceiveRecord; import org.cpte.modules.shipping.entity.Task; +import org.jeecg.common.util.oConvertUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -31,6 +35,26 @@ public class InventoryServiceImpl extends ServiceImpl selectInventoryWithItemKey(Page page, Inventory inventory) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + // 添加查询条件 + if (oConvertUtils.isNotEmpty(inventory.getItemId())) { + queryWrapper.eq("inventory.item_id", inventory.getItemId()); + } + if (oConvertUtils.isNotEmpty(inventory.getPointId())) { + queryWrapper.eq("inventory.point_id", inventory.getPointId()); + } + if (oConvertUtils.isNotEmpty(inventory.getStockId())) { + queryWrapper.eq("inventory.stock_id", inventory.getStockId()); + } + if (oConvertUtils.isNotEmpty(inventory.getStatus())){ + queryWrapper.eq("inventory.status", inventory.getStatus()); + } + + return baseMapper.selectInventoryWithItemKey(page, inventory, queryWrapper); + } + @Override public Inventory buildInventory(Long stockId, BigDecimal receivedQty, Asn asn, ReceiveRecord receiveRecord) { return Inventory.builder() diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/quartz/job/AllocatePickDetailJob.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/quartz/job/AllocatePickDetailJob.java index a9664a6..067055a 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/quartz/job/AllocatePickDetailJob.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/quartz/job/AllocatePickDetailJob.java @@ -2,12 +2,13 @@ package org.cpte.modules.quartz.job; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.cpte.modules.agvTask.mapper.AgvTaskMapper; +import org.cpte.modules.agvTask.vo.ConNoAgv; import org.cpte.modules.constant.enums.PickStatusEnum; import org.cpte.modules.constant.enums.PickTypeEnum; import org.cpte.modules.shipping.entity.Pick; import org.cpte.modules.shipping.entity.PickDetail; import org.cpte.modules.shipping.mapper.PickDetailMapper; -import org.cpte.modules.shipping.mapper.PickMapper; import org.cpte.modules.shipping.service.IPickDetailService; import org.cpte.modules.shipping.service.IPickService; import org.cpte.modules.shipping.vo.AllocationPickDetailData; @@ -28,7 +29,7 @@ import java.util.stream.Collectors; @Slf4j public class AllocatePickDetailJob implements Job { @Autowired - private PickMapper pickMapper; + private AgvTaskMapper agvTaskMapper; @Autowired private PickDetailMapper pickDetailMapper; @@ -103,52 +104,98 @@ public class AllocatePickDetailJob implements Job { return; } - // 全局状态:是否有成品/配件类型的任务正在执行 - boolean hasExecutingCpPjTask = false; + // 1. 获取当前系统中所有正在执行的AGV任务 + List executeAgv= agvTaskMapper.queryIsExecuteAgvTask(); + Set executeAgvKeys = buildExecuteAgvKey(executeAgv); + //2.处理明细 + processPickDetails(cpPjPickIds, pickDetailMap, pickMap, executeAgvKeys); + } + + /** + * 构建正在执行任务的键集合 + */ + private Set buildExecuteAgvKey(List executeAgv) { + if (CollectionUtils.isEmpty(executeAgv)) { + return Collections.emptySet(); + } + + Set taskKeys = new HashSet<>(executeAgv.size()); + for (ConNoAgv agv : executeAgv) { + String key = buildAgvKey(agv.getConNo(), agv.getItemId()); + taskKeys.add(key); + } + return taskKeys; + } + + /** + * 构建AGV唯一键 + */ + private String buildAgvKey(String conNo, Long itemId) { + return conNo + "_" + itemId; + } + + /** + * 处理拣货明细 + */ + private void processPickDetails(List cpPjPickIds, + Map> pickDetailMap, + Map pickMap, + Set executingTaskKeys) { for (Long pickId : cpPjPickIds) { Pick pick = pickMap.get(pickId); - if (hasExecutingCpPjTask) { - log.info("有成品/配件类型任务正在执行,跳过出库单【{}】的分配", pick.getThirdOrderNo()); + if (pick == null) { continue; } - List details = pickDetailMap.get(pickId); if (CollectionUtils.isEmpty(details)) { continue; } - // 处理单个成品/配件出库单 - hasExecutingCpPjTask = allocateCpPjPick(pick, details); + boolean allocated = processSinglePickDetails(pick, details, executingTaskKeys); + if (allocated) { + return; + } } } /** - * 分配单个成品/配件出库单 - * - * @return 是否分配了任务且任务正在执行 + * 处理单个pick的明细 + * @return 是否成功分配 */ - private boolean allocateCpPjPick(Pick pick, List pickDetails) { - for (PickDetail detail : pickDetails) { - // 检查已分配的任务是否正在执行 + private boolean processSinglePickDetails(Pick pick, + List details, + Set executingTaskKeys) { + for (PickDetail detail : details) { + // 跳过已分配的任务 if (isAlreadyAssigned(detail.getStatus())) { - if (isPickDetailExecuting(detail.getId())) { - log.info("出库单【{}】的明细【{}】任务正在执行", pick.getThirdOrderNo(), detail.getId()); - return true; // 有任务正在执行 - } continue; } - allocatePickDetail(detail); + // 构建当前任务的唯一键 + String currentKey = buildAgvKey(pick.getConNo(), detail.getItemId()); - // 检查分配后任务状态 - if (isPickDetailExecuting(detail.getId())) { - log.info("出库单【{}】的明细【{}】任务已生成", pick.getThirdOrderNo(), detail.getId()); - return true; + // 检查是否需要分配 + if (shouldAllocatePickDetail(executingTaskKeys, currentKey)) { + allocatePickDetail(detail); } } - return false; // 没有正在执行的任务 + return false; // 未分配任何明细 } + /** + * 判断是否需要分配拣货明细 + */ + private boolean shouldAllocatePickDetail(Set executingTaskKeys, String currentKey) { + // 如果没有正在执行的任务,直接分配 + if (CollectionUtils.isEmpty(executingTaskKeys)) { + return true; + } + + // 如果有正在执行的任务,且当前任务已存在,则分配 + return executingTaskKeys.contains(currentKey); + } + + /** * 处理其他类型的出库单 */ @@ -157,13 +204,10 @@ public class AllocatePickDetailJob implements Job { return; } for (Long pickId : otherPickIds) { - Pick pick = pickMap.get(pickId); List details = pickDetailMap.get(pickId); if (CollectionUtils.isEmpty(details)) { continue; } - // 分配单个其他类型出库单的所有明细 - log.info("分配其他类型出库单的明细【{}】", pick.getThirdOrderNo()); allocateOtherPick(details); } } @@ -191,10 +235,6 @@ public class AllocatePickDetailJob implements Job { return PickStatusEnum.ASSIGNED.getValue().equals(status); } - private boolean isPickDetailExecuting(Long pickDetailId) { - return pickMapper.queryPickDetailIsExecuting(pickDetailId) > 0; - } - private void allocatePickDetail(PickDetail pickDetail) { // 分配单个出库明细 List resultMsg; diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/receive/service/impl/AsnDetailServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/receive/service/impl/AsnDetailServiceImpl.java index c6c9959..a920c1c 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/receive/service/impl/AsnDetailServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/receive/service/impl/AsnDetailServiceImpl.java @@ -109,7 +109,7 @@ public class AsnDetailServiceImpl extends ServiceImpl { /** * 查询出库单任务是否正在执行 * - * @param pickDetailId 出库单明细 * @return Long */ - Long queryPickDetailIsExecuting(@Param("pickDetailId") Long pickDetailId); + Long queryPickDetailIsExecuting(); + } diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/mapper/xml/PickMapper.xml b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/mapper/xml/PickMapper.xml index bb4c1e7..ce175a9 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/mapper/xml/PickMapper.xml +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/mapper/xml/PickMapper.xml @@ -9,9 +9,9 @@ \ No newline at end of file diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/PickDetailServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/PickDetailServiceImpl.java index d011755..1d5042d 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/PickDetailServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/PickDetailServiceImpl.java @@ -46,6 +46,7 @@ public class PickDetailServiceImpl extends ServiceImpl implements IT if (CollectionUtils.isEmpty(taskList)) { return; } - //1.获取库存 + //1.获取出库单 + List pickIds = taskList.stream().map(Task::getPickId).distinct().toList(); + Map pickMap = pickDetailService.queryByPickIdsToMap(pickIds); + + //2.获取库存 List inventoryIds = taskList.stream().map(Task::getInventoryId).distinct().toList(); Map inventoryMap = inventoryService.queryByInventoryIdsToMap(inventoryIds); @@ -167,7 +171,9 @@ public class TaskServiceImpl extends ServiceImpl implements IT String businessType = tasks.get(0).getTaskType() == 1 ? BusinessTypeEnum.OUTBOUND.getValue() : BusinessTypeEnum.MOVE.getValue(); if (!groupToAgvTaskMap.containsKey(key)) { - AgvTask agvTask = agvTaskService.bulidAgvTask(null, key.getStockCode(), key.getFromPointCode(), key.getToPointCode(), null, businessType, izAll, AgvVendorEnum.TES.getValue()); + Pick pick = pickMap.get(tasks.get(0).getPickId()); + Long itemId = tasks.get(0).getItemId(); + AgvTask agvTask = agvTaskService.bulidAgvTask(pick==null?null:pick.getConNo(),itemId,null, key.getStockCode(), key.getFromPointCode(), key.getToPointCode(), null, businessType, izAll, AgvVendorEnum.TES.getValue()); createToAgvTaskList.add(agvTask); groupToAgvTaskMap.put(key, agvTask); // 建立映射 log.info("创建AGV任务:{}", agvTask); diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java index a2903b8..91fa0cd 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java @@ -190,6 +190,9 @@ public class AllocateProcessor { List pickDetails = pickDetailMapper.queryByPickIds(pickIds); data.setPickDetails(pickDetails); + //容器 + List containerIds = pickDetails.stream().map(PickDetail::getStockId).distinct().toList(); + //查询物料 List itemIds = pickDetails.stream().map(PickDetail::getItemId).distinct().toList(); Map itemMap = itemService.queryByItemIdsToMap(itemIds); @@ -202,21 +205,40 @@ public class AllocateProcessor { List propC1List = pickDetails.stream().map(PickDetail::getPropC1).distinct().toList(); List propC3List = pickDetails.stream().map(PickDetail::getPropC3).distinct().toList(); List itemKeys = itemKeyMapper.queryItemKeys(itemIds, whCodeList, projectList, taskNoList, propC1List, propC3List); + //出库明细指定了容器 + if (CollectionUtils.isNotEmpty(containerIds)) { + List list = inventoryMapper.queryByStockIds(containerIds); + if (CollectionUtils.isNotEmpty(list)) { + List itemKeyIds = list.stream().map(Inventory::getItemKeyId).distinct().toList(); + List iks = itemKeyMapper.selectByIds(itemKeyIds); + if (CollectionUtils.isNotEmpty(itemKeys)) { + for (ItemKey ik : iks){ + if(!itemKeys.contains(ik)){ + itemKeys.add(ik); + } + } - //根据物料属性分组 - Map itemGroupKey = itemKeys.stream() - .collect(Collectors.toMap( - itemKey -> ItemGroupKey.of( - itemKey.getItemId(), - itemKey.getWhCode(), - itemKey.getProject(), - itemKey.getTaskNo(), - itemKey.getPropC1(), - itemKey.getPropC3() - ), - itemKey -> itemKey - )); - data.setItemGroupMap(itemGroupKey); + } else { + itemKeys = iks; + } + } + } + if(CollectionUtils.isNotEmpty(itemKeys)){ + //根据物料属性分组 + Map itemGroupKey = itemKeys.stream() + .collect(Collectors.toMap( + itemKey -> ItemGroupKey.of( + itemKey.getItemId(), + itemKey.getWhCode(), + itemKey.getProject(), + itemKey.getTaskNo(), + itemKey.getPropC1(), + itemKey.getPropC3() + ), + itemKey -> itemKey + )); + data.setItemGroupMap(itemGroupKey); + } //查询库存 List inventories = null; @@ -225,8 +247,6 @@ public class AllocateProcessor { inventories = inventoryMapper.queryInventoryByItemKeyId(itemKeyIds); data.setInventories(inventories); } - - if (CollectionUtils.isNotEmpty(inventories)) { //根据itemKeyId分组 Map> inventoryMap = inventories.stream().collect(Collectors.groupingBy(Inventory::getItemKeyId)); @@ -264,6 +284,9 @@ public class AllocateProcessor { pickDetails.add(pickDetail); data.setPickDetails(pickDetails); + //容器 + List containerIds = pickDetails.stream().map(PickDetail::getStockId).distinct().toList(); + //查询物料 List itemIds = pickDetails.stream().map(PickDetail::getItemId).distinct().toList(); Map itemMap = itemService.queryByItemIdsToMap(itemIds); @@ -276,21 +299,40 @@ public class AllocateProcessor { List propC1List = pickDetails.stream().map(PickDetail::getPropC1).distinct().toList(); List propC3List = pickDetails.stream().map(PickDetail::getPropC3).distinct().toList(); List itemKeys = itemKeyMapper.queryItemKeys(itemIds, whCodeList, projectList, taskNoList, propC1List, propC3List); + //出库明细指定了容器 + if (CollectionUtils.isNotEmpty(containerIds)) { + List list = inventoryMapper.queryByStockIds(containerIds); + if (CollectionUtils.isNotEmpty(list)) { + List itemKeyIds = list.stream().map(Inventory::getItemKeyId).distinct().toList(); + List iks = itemKeyMapper.selectByIds(itemKeyIds); + if (CollectionUtils.isNotEmpty(itemKeys)) { + for (ItemKey ik : iks){ + if(!itemKeys.contains(ik)){ + itemKeys.add(ik); + } + } + } else { + itemKeys = iks; + } + } + } + if(CollectionUtils.isNotEmpty(itemKeys)){ + //根据物料属性分组 + Map itemGroupKey = itemKeys.stream() + .collect(Collectors.toMap( + itemKey -> ItemGroupKey.of( + itemKey.getItemId(), + itemKey.getWhCode(), + itemKey.getProject(), + itemKey.getTaskNo(), + itemKey.getPropC1(), + itemKey.getPropC3() + ), + itemKey -> itemKey + )); + data.setItemGroupMap(itemGroupKey); + } - //根据物料属性分组 - Map itemGroupKey = itemKeys.stream() - .collect(Collectors.toMap( - itemKey -> ItemGroupKey.of( - itemKey.getItemId(), - itemKey.getWhCode(), - itemKey.getProject(), - itemKey.getTaskNo(), - itemKey.getPropC1(), - itemKey.getPropC3() - ), - itemKey -> itemKey - )); - data.setItemGroupMap(itemGroupKey); //查询库存 List inventories = null; @@ -409,7 +451,10 @@ public class AllocateProcessor { */ private List findMatchedInventories(PickDetail pickDetail, Pick pick, AllocationData data) { - + if (pickDetail.getStockId() != null) { + //筛选容器的库存 + return data.getInventories().stream().filter(inventory -> inventory.getStockId().equals(pickDetail.getStockId())).toList(); + } ItemGroupKey groupKey = ItemGroupKey.of( pickDetail.getItemId(), pick.getWhCode(), @@ -527,7 +572,7 @@ public class AllocateProcessor { Map pointMap = pointService.queryByPointIdsToMap(pointIds); //获取出库口的库位 - // List outPoints = pointService.queryPoints(null, null, AreaTypeEnum.CK_DOCK.getValue()); + // List outPoints = pointService.queryPoints(null, null, AreaTypeEnum.CK_DOCK.getValue()); //获取优化后的库存 return matchedInventories.stream() @@ -559,7 +604,7 @@ public class AllocateProcessor { //Point bestPoint = getBestOutboundPoint(currPoint, outPoints); //double distanceScore = calculateClusterDistanceCost(currPoint, bestPoint) * 0.3; - double distanceScore =0; + double distanceScore = 0; //当前巷道的库位数 List points = pointMapper.findByColAndLayer(currPoint.getColNum(), currPoint.getLayerNum()); @@ -660,7 +705,7 @@ public class AllocateProcessor { } // 重载方法,用于计算Point和Station之间的曼哈顿距离 - private double calculateManhattanDistance(Point point,Station station) { + private double calculateManhattanDistance(Point point, Station station) { // 假设Station也有getX()和getY()方法 int dx = Math.abs(station.getPositionX() - point.getPositionX()); int dy = Math.abs(station.getPositionY() - point.getPositionY()); @@ -788,7 +833,7 @@ public class AllocateProcessor { Point fromPoint = data.getPointMap().get(inventory.getPointId()); // 判断是否整托分配 - BigDecimal originalAvailableQty = BigDecimalUtil.subtract(inventory.getQuantity(), inventory.getQueuedQty(),0); + BigDecimal originalAvailableQty = BigDecimalUtil.subtract(inventory.getQuantity(), inventory.getQueuedQty(), 0); Integer izAll = originalAvailableQty.compareTo(BigDecimal.ZERO) <= 0 ? 0 : 1; // 目标库位 diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/PickBackProcessor.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/PickBackProcessor.java index f0ae122..69e2548 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/PickBackProcessor.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/PickBackProcessor.java @@ -147,10 +147,13 @@ public class PickBackProcessor { if (authInfo == null || authInfo.isEmpty()) { throw new RuntimeException("登录认证信息为空"); } - String ticket = authInfo.get("Ticket"); String authorization = authInfo.get("authorization"); - reqMessage = pickTaskCallbackJson(pick, pickDetail, task, state, ticket); + if(task.getReqMessage()== null){ + reqMessage = pickTaskCallbackJson(pick, pickDetail, task, state, ticket); + }else{ + reqMessage=replaceTicketWithJson(task.getReqMessage(), ticket); + } String url = openApiMapper.getRequestUrl(GeneralConstant.OUTBOUND_CALLBACK).getOriginUrl(); JSONObject jsonObject = swmsLoginUtil.sendSMOMResponse(reqMessage, url, authorization); String code = validateResponse(jsonObject); @@ -160,6 +163,25 @@ public class PickBackProcessor { } } + /** + * 替换Ticket + * + * @param jsonStr 原始JSON字符串 + * @param newTicket 新的Ticket值 + * @return 替换后的JSON字符串 + */ + public static String replaceTicketWithJson(String jsonStr, String newTicket) { + JSONObject jsonObject = JSON.parseObject(jsonStr); + + // 获取Context对象并修改Ticket + JSONObject context = jsonObject.getJSONObject("Context"); + if (context != null) { + context.put("Ticket", newTicket); + } + + return jsonObject.toJSONString(); + } + /** * 验证响应数据 * diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/vo/PickPage.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/vo/PickPage.java index 9b53f2b..db29317 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/vo/PickPage.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/vo/PickPage.java @@ -47,6 +47,13 @@ public class PickPage { @Excel(name = "任务号", width = 15) @Schema(description = "任务号") private java.lang.String no; + + /** + * 任务号 + */ + @Excel(name = "任务号", width = 15) + @Schema(description = "任务号") + private java.lang.String conNo; /** * 外部仓库 */ diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/tesAgv/service/impl/ITesAgvServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/tesAgv/service/impl/ITesAgvServiceImpl.java index 8194e00..24ae152 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/tesAgv/service/impl/ITesAgvServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/tesAgv/service/impl/ITesAgvServiceImpl.java @@ -95,7 +95,7 @@ public class ITesAgvServiceImpl implements ITesAgvService { log.info("请求报文:{}", json); // 检查接口开关, 未开启则返回 if (sysDictMapper.queryByDictCode(GeneralConstant.OPEN_FLAG) == null) { - updateAgvTaskResponse(agvTask, null, "接口未开启", GeneralConstant.TES_FAIL_CODE); + updateAgvTaskResponse(agvTask, null, "接口未开启", GeneralConstant.TES_SUCCESS_CODE); return; } String url = openApiMapper.getRequestUrl(openApi).getOriginUrl(); @@ -237,7 +237,7 @@ public class ITesAgvServiceImpl implements ITesAgvService { String endCode = pointService.getElevatorPoint(agvTask.getEndCode(), GeneralConstant.CK_ELEVATOR_TASK_INDEX); agvTaskService.createAgvTask(null, agvTask.getCarrierCode(), agvTask.getEndCode(), endCode, null, BusinessTypeEnum.OUTBOUND.getValue(), 0, AgvVendorEnum.HIK.getValue()); }*/ - }else if(BusinessTypeEnum.MOVE.getValue().equals(agvTask.getType())){ + } else if (BusinessTypeEnum.MOVE.getValue().equals(agvTask.getType())) { List tasks = taskMapper.queryByAgvTask(agvTask.getId()); inventoryService.moveInventory(tasks); } @@ -253,9 +253,9 @@ public class ITesAgvServiceImpl implements ITesAgvService { * @param agvTask 任务 */ private void handleCelled(AgvTask agvTask) { - if(BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType()) || BusinessTypeEnum.MOVE.getValue().equals(agvTask.getType())){ + if (BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType()) || BusinessTypeEnum.MOVE.getValue().equals(agvTask.getType())) { Point point = pointMapper.queryByPointCode(agvTask.getEndCode()); - if(point!=null){ + if (point != null) { point.setStatus(CommonStatusEnum.FREE.getValue()); pointMapper.updateById(point); } @@ -275,17 +275,14 @@ public class ITesAgvServiceImpl implements ITesAgvService { throw new RuntimeException("任务已重新生成,请勿重复操作! "); } - AgvTask newAgvTask = agvTaskService.createAgvTask(agvTask.getBusinessDetailId(), agvTask.getCarrierCode(), agvTask.getStartCode(), agvTask.getEndCode(), null, agvTask.getType(), agvTask.getIzAll(), AgvVendorEnum.TES.getValue()); - if(BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType()) || BusinessTypeEnum.MOVE.getValue().equals(agvTask.getType())){ - Point point = pointMapper.queryByPointCode(agvTask.getEndCode()); - point.setStatus(CommonStatusEnum.USED.getValue()); - pointMapper.updateById(point); - }else if(BusinessTypeEnum.OUTBOUND.getValue().equals(agvTask.getType())){ - List tasks=taskMapper.queryByAgvTask(agvTask.getId()); - for (Task task:tasks){ - task.setAgvTaskId(newAgvTask.getId()); - } - taskMapper.updateById(tasks); + AgvTask newAgvTask = agvTaskService.createAgvTask(agvTask.getConNo(), agvTask.getItemId(), agvTask.getBusinessDetailId(), agvTask.getCarrierCode(), agvTask.getStartCode(), agvTask.getEndCode(), null, agvTask.getType(), agvTask.getIzAll(), AgvVendorEnum.TES.getValue()); + if (BusinessTypeEnum.INBOUND.getValue().equals(agvTask.getType())) { + inBoundAgvTask(agvTask); + } else if (BusinessTypeEnum.OUTBOUND.getValue().equals(agvTask.getType())) { + outBoundAgvTask(newAgvTask, agvTask); + } else if (BusinessTypeEnum.MOVE.getValue().equals(agvTask.getType())) { + inBoundAgvTask(agvTask); + outBoundAgvTask(newAgvTask, agvTask); } switch (agvTask.getType()) { case "INBOUND": @@ -299,6 +296,20 @@ public class ITesAgvServiceImpl implements ITesAgvService { } } + private void inBoundAgvTask(AgvTask agvTask) { + Point point = pointMapper.queryByPointCode(agvTask.getEndCode()); + point.setStatus(CommonStatusEnum.USED.getValue()); + pointMapper.updateById(point); + } + + private void outBoundAgvTask(AgvTask newAgvTask, AgvTask agvTask) { + List tasks = taskMapper.queryByAgvTask(agvTask.getId()); + for (Task task : tasks) { + task.setAgvTaskId(newAgvTask.getId()); + } + taskMapper.updateById(tasks); + } + /** * 更新任务状态 diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/utils/BatchUtil.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/utils/BatchUtil.java index 8efe6ac..ebd0c77 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/utils/BatchUtil.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/utils/BatchUtil.java @@ -342,26 +342,28 @@ public class BatchUtil { */ @Transactional public void saveBatchAgvTask(List agvTasks) { - String sql = "INSERT INTO data_agv_task (id,business_detail_id,carrier_code,carrier_type,task_type,type,status,priority,start_code,end_code,iz_all,agv_vendor,sys_org_code,tenant_id,create_by,create_time) " + - "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + String sql = "INSERT INTO data_agv_task (id,con_no,item_id,business_detail_id,carrier_code,carrier_type,task_type,type,status,priority,start_code,end_code,iz_all,agv_vendor,sys_org_code,tenant_id,create_by,create_time) " + + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; batchInsert(sql, agvTasks, (ps, agvTask) -> { try { ps.setLong(1, agvTask.getId()); - ps.setObject(2, agvTask.getBusinessDetailId()); - ps.setString(3, agvTask.getCarrierCode()); - ps.setString(4, agvTask.getCarrierType()); - ps.setString(5, agvTask.getTaskType()); - ps.setString(6, agvTask.getType()); - ps.setInt(7, agvTask.getStatus()); - ps.setInt(8, agvTask.getPriority()); - ps.setString(9, agvTask.getStartCode()); - ps.setString(10, agvTask.getEndCode()); - ps.setInt(11, agvTask.getIzAll()); - ps.setString(12, agvTask.getAgvVendor()); - ps.setString(13, agvTask.getSysOrgCode()); - ps.setLong(14, agvTask.getTenantId()); - ps.setString(15, agvTask.getCreateBy()); - ps.setTimestamp(16, new Timestamp(agvTask.getCreateTime().getTime())); + ps.setString(2, agvTask.getConNo()); + ps.setLong(3, agvTask.getItemId()); + ps.setObject(4, agvTask.getBusinessDetailId()); + ps.setString(5, agvTask.getCarrierCode()); + ps.setString(6, agvTask.getCarrierType()); + ps.setString(7, agvTask.getTaskType()); + ps.setString(8, agvTask.getType()); + ps.setInt(9, agvTask.getStatus()); + ps.setInt(10, agvTask.getPriority()); + ps.setString(11, agvTask.getStartCode()); + ps.setString(12, agvTask.getEndCode()); + ps.setInt(13, agvTask.getIzAll()); + ps.setString(14, agvTask.getAgvVendor()); + ps.setString(15, agvTask.getSysOrgCode()); + ps.setLong(16, agvTask.getTenantId()); + ps.setString(17, agvTask.getCreateBy()); + ps.setTimestamp(18, new Timestamp(agvTask.getCreateTime().getTime())); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/cpte-module-system/cpte-system-start/src/main/resources/application-dev.yml b/cpte-module-system/cpte-system-start/src/main/resources/application-dev.yml index 47a0adc..b741bf9 100644 --- a/cpte-module-system/cpte-system-start/src/main/resources/application-dev.yml +++ b/cpte-module-system/cpte-system-start/src/main/resources/application-dev.yml @@ -51,7 +51,7 @@ spring: jdbc: initialize-schema: embedded #定时任务启动开关,true-开 false-关 - auto-startup: false + auto-startup: true #延迟1秒启动定时任务 startup-delay: 1s #启动时更新己存在的Job