From 3c4e3dc5bb7199d9d199249e5d51fc091e2f4629 Mon Sep 17 00:00:00 2001 From: youjie <272855983@qq.com> Date: Tue, 26 Sep 2023 17:02:36 +0800 Subject: [PATCH] 增加定时任务,超过限定移库限定次数 生成出库查看 --- ant-design-vue-jeecg/src/views/system/config/ContainerList.vue | 10 ++++++++++ huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java | 21 ++++++++++----------- huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java | 3 +++ huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java | 22 +++++++++++++++------- huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java | 10 ++++++++++ huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java | 2 +- huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java | 13 +++++++++++++ huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java | 6 +++++- huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java | 1 + 10 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java diff --git a/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue b/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue index 1cbf45c..1e07123 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue @@ -254,6 +254,16 @@ export default { scopedSlots: {customRender: 'fillStatus_dictText'} }, { + title: '任务总数', + align: "center", + dataIndex: 'taskTimes', + }, + { + title: '移库任务数', + align: "center", + dataIndex: 'moveTaskTimes', + }, + { title: '库区', align: "center", dataIndex: 'zoneCode', diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java index b2c3e40..4a94378 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java @@ -1,20 +1,18 @@ package org.jeecg.modules.wms.config.container.entity; import java.io.Serializable; -import java.io.UnsupportedEncodingException; import java.util.Date; -import java.math.BigDecimal; + +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -69,16 +67,17 @@ public class Container implements Serializable { @Dict(dicCode = "fill_status") @ApiModelProperty(value = "填充状态") private String fillStatus; + @ApiModelProperty(value = "任务总数") + private Integer taskTimes; + @ApiModelProperty(value = "移库任务数") + private Integer moveTaskTimes; /** 备用字段1 */ - @Excel(name = "备用字段1", width = 15) @ApiModelProperty(value = "备用字段1") private String userdef1; /** 备用字段2 */ - @Excel(name = "备用字段2", width = 15) @ApiModelProperty(value = "备用字段2") private String userdef2; /** 备用字段3 */ - @Excel(name = "备用字段3", width = 15) @ApiModelProperty(value = "备用字段3") private String userdef3; /** 创建人 */ diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java index 0bd6629..22dee38 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java @@ -77,6 +77,9 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container @Override public Container getContainerByCode(String containCode, String warehouseCode) { + if (StringUtils.isEmpty(containCode)) { + throw new JeecgBootException("容器编码为空"); + } if (StringUtils.havaLowerCase(containCode)) { throw new JeecgBootException("容器不能有小字母" + containCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java index 9e08049..de58ceb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java @@ -1,19 +1,19 @@ package org.jeecg.modules.wms.config.material.entity; import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; import java.math.BigDecimal; +import java.util.Date; + +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -63,6 +63,14 @@ public class Material implements Serializable { @Excel(name = "类别", width = 15) @ApiModelProperty(value = "类别") private String type; + /** 入库数 */ + @Excel(name = "入库数", width = 15) + @ApiModelProperty(value = "入库数") + private BigDecimal receiptQty; + /** 任务数 */ + @Excel(name = "任务数", width = 15) + @ApiModelProperty(value = "任务数") + private BigDecimal taskQty; /** ABC分类 */ @Excel(name = "ABC分类", width = 15) @ApiModelProperty(value = "ABC分类") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java new file mode 100644 index 0000000..114aff8 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java @@ -0,0 +1,80 @@ +package org.jeecg.modules.wms.monitor.job; + +import java.util.List; + +import javax.annotation.Resource; + +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.wms.config.container.entity.Container; +import org.jeecg.modules.wms.config.container.service.IContainerService; +import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; +import org.jeecg.modules.wms.monitor.job.dto.AutoCheckOutDto; +import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; +import org.jeecg.utils.StringUtils; +import org.jeecg.utils.constant.QuantityConstant; +import org.quartz.*; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + +import lombok.extern.slf4j.Slf4j; + +/** + * 定时任务 + * @author 游杰 + */ + +@Slf4j +@PersistJobDataAfterExecution +@DisallowConcurrentExecution +public class AutoCheckoutTask implements Job { + + @Resource + private ITaskHeaderService taskHeaderService; + + @Resource + private IHuahengMultiHandlerService huahengMultiHandlerService; + + @Resource + private IContainerService containerService; + @Resource + private IParameterConfigurationService parameterConfigurationService; + + private String parameter; + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + + log.info(String.format(" AutoCheckoutTask 执行任务! 时间:" + DateUtils.getTimestamp())); + List<AutoCheckOutDto> autoCheckOutDtoList = JSON.parseArray(this.parameter, AutoCheckOutDto.class); + String value = parameterConfigurationService.getValueByCode(QuantityConstant.CONTAINER_MOVE_QTY); + int containerMoveQty = 5; + if (StringUtils.isNotEmpty(value)) { + containerMoveQty = Integer.parseInt(value); + } + LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); + containerLambdaQueryWrapper.ge(Container::getMoveTaskTimes, containerMoveQty); + List<Container> containerList = containerService.list(containerLambdaQueryWrapper); + for (Container container : containerList) { + String zoneCode = container.getZoneCode(); + String warehouseCode = container.getWarehouseCode(); + String toPort = null; + if (StringUtils.isEmpty(zoneCode)) { + toPort = autoCheckOutDtoList.get(0).getToPort(); + } else { + for (AutoCheckOutDto autoCheckOutDto : autoCheckOutDtoList) { + if (zoneCode.equals(autoCheckOutDto.getZoneCode())) { + toPort = autoCheckOutDto.getToPort(); + } + } + } + taskHeaderService.createCheckOutTask(container.getCode(), toPort, warehouseCode); + } + } +} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java new file mode 100644 index 0000000..21bf916 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java @@ -0,0 +1,10 @@ +package org.jeecg.modules.wms.monitor.job.dto; + +import lombok.Data; + +@Data +public class AutoCheckOutDto { + + private String zoneCode; + private String toPort; +} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java index 470028d..9339429 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java @@ -217,7 +217,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont } int status = shipmentContainerHeader.getStatus(); if (status >= QuantityConstant.SHIPMENT_CONTAINER_TASK) { - return Result.error("取消出库配盘失败,已经生成出库任务"); + return Result.error("取消出库配盘失败,出库配盘状态是生成出库任务"); } List<ShipmentContainerDetail> shipmentContainerDetailList = shipmentContainerDetailService.getShipmentContainerDetailListByHeaderId(id); for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetailList) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index 47f1423..69dc06f 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -62,6 +62,7 @@ import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper; import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService; import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService; +import org.jeecg.utils.HuahengJwtUtil; import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.factory.annotation.Autowired; @@ -69,6 +70,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; +import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -1804,6 +1806,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("任务类型" + taskType + "完成任务时,更新库存信息失败"); } + LambdaUpdateWrapper<Container> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(Container::getCode, containerCode); + HuahengJwtUtil.calculateQuantity(lambdaUpdateWrapper, "task_times", BigDecimal.ONE); + if (taskType == QuantityConstant.TASK_TYPE_TRANSFER) { + HuahengJwtUtil.calculateQuantity(lambdaUpdateWrapper, "move_task_times", BigDecimal.ONE); + } else { + lambdaUpdateWrapper.setSql(true, "move_task_times = 0"); + } + if (!containerService.update(lambdaUpdateWrapper)) { + throw new ServiceException("任务类型" + taskType + "更新容器失败"); + } return Result.OK("任务类型" + taskType + "完成任务成功"); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java index b7c4214..3d91398 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java @@ -302,7 +302,11 @@ public class HuahengJwtUtil { public static <T> void calculateQuantity(LambdaUpdateWrapper<T> lambdaUpdateWrapper, T t, String fieldName, BigDecimal quantity, Boolean geZero) { String sqlFieldName = StrUtil.toUnderlineCase(fieldName); - lambdaUpdateWrapper.setSql(quantity != null, sqlFieldName + " = " + sqlFieldName + " + " + quantity); + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + lambdaUpdateWrapper.setSql(quantity != null, sqlFieldName + " = " + sqlFieldName + quantity); + } else { + lambdaUpdateWrapper.setSql(quantity != null, sqlFieldName + " = " + sqlFieldName + " + " + quantity); + } if (t != null) { // Object fieldValue = ReflectUtil.getFieldValue(t, fieldName); // lambdaUpdateWrapper.apply(fieldValue != null, sqlFieldName + " = {0}", fieldValue); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java index 8b7c4b4..3efca14 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java @@ -485,6 +485,7 @@ public class QuantityConstant { public static final String DOUBLE_FORK_RESERVE_LOCATION = "doubleForkReserveLocation"; public static final String DOUBLE_FORK_SEARCH_LOCATION = "doubleForkSearchLocation"; public static final String MAX_ROADWAY_RECEIPT = "maxRoadWayReceipt"; + public static final String CONTAINER_MOVE_QTY = "containerMoveQty"; public static final String WAREHOUSING_WEIGHING = "warehousingWeighing"; public static final String EXCEPTION_TO_CACHE = "exceptionToCache"; public static final String CONTAINER_SPEC = "containerSpec"; -- libgit2 0.22.2