diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue index 26324a3..ede4922 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue @@ -4,6 +4,13 @@ <div class="table-page-search-wrapper"> <a-form layout="inline" @keyup.enter.native="searchQuery"> <a-row :gutter="24"> + + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="单据ID"> + <a-input placeholder="请输入单据ID" v-model="queryParam.id"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="入库单编码"> <a-input placeholder="请输入入库单编码" v-model="queryParam.code"></a-input> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java index 77e1453..4ff19f8 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java @@ -139,7 +139,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService } } roadWays.removeAll(removeRoadWays); - if (roadWays == null || roadWays.size() == 0) { + if (CollectionUtils.isEmpty(roadWays)) { throw new JeecgBootException("分配库位时, 可用巷道为空"); } Integer roadWay = locationAllocationService.getRoadWay(roadWays, materialCode, zoneCode, warehouseCode); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/ApiLogMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/ApiLogMapper.java index 3b415ae..d05e54f 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/ApiLogMapper.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/ApiLogMapper.java @@ -1,10 +1,8 @@ package org.jeecg.modules.wms.monitor.apiLog.mapper; -import java.util.List; +import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; -import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; /** * @Description: 接口日志 @@ -14,4 +12,6 @@ import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; */ public interface ApiLogMapper extends BaseMapper<ApiLog> { + Integer deleteByCreateTime(String createTime); + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/xml/ApiLogMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/xml/ApiLogMapper.xml index 7466217..321ca00 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/xml/ApiLogMapper.xml +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/mapper/xml/ApiLogMapper.xml @@ -2,4 +2,11 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.wms.monitor.apiLog.mapper.ApiLogMapper"> + <delete id="deleteByCreateTime" parameterType="java.lang.String"> + DELETE + FROM api_log + WHERE create_time <![CDATA[<=]]> #{createTime}) + order by id asc limit 1000 + </delete> + </mapper> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/IApiLogService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/IApiLogService.java index d0e3856..e5cf3c2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/IApiLogService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/IApiLogService.java @@ -16,4 +16,5 @@ public interface IApiLogService extends IService<ApiLog> { public List<String> getApiNameList(); + public Integer deleteByCreateTime(String createTime); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/impl/ApiLogServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/impl/ApiLogServiceImpl.java index d4c5760..ad26388 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/impl/ApiLogServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apiLog/service/impl/ApiLogServiceImpl.java @@ -4,6 +4,8 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.Resource; + import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; import org.jeecg.modules.wms.monitor.apiLog.mapper.ApiLogMapper; import org.jeecg.modules.wms.monitor.apiLog.service.IApiLogService; @@ -26,6 +28,9 @@ import cn.hutool.core.date.DateUtil; @Service public class ApiLogServiceImpl extends ServiceImpl<ApiLogMapper, ApiLog> implements IApiLogService { + @Resource + private ApiLogMapper apiLogMapper; + @Override @Scheduled(fixedDelay = 1800 * 1000) // 计划任务:每次方法执行后1800秒执行 // @SchedulerLock(name = "getApiNameList", lockAtLeastFor = "PT900S", lockAtMostFor = "PT3600S") // 计划任务锁:最短等待时间1800秒,最长等待时间3600秒 @@ -37,4 +42,10 @@ public class ApiLogServiceImpl extends ServiceImpl<ApiLogMapper, ApiLog> impleme return apiLogList.stream().map(t -> t.getApiName()).collect(Collectors.toList()); } + @Override + public Integer deleteByCreateTime(String createTime) { + LambdaQueryWrapper<ApiLog> apiLogLambdaQueryWrapper = Wrappers.lambdaQuery(); + apiLogLambdaQueryWrapper.lt(ApiLog::getCreateTime, createTime).orderByAsc(true, ApiLog::getId).last(" limit 1000"); + return apiLogMapper.delete(apiLogLambdaQueryWrapper); + } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/TableCleanTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/TableCleanTask.java index d6e5d98..b1a72e1 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/TableCleanTask.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/TableCleanTask.java @@ -1,32 +1,23 @@ package org.jeecg.modules.wms.monitor.job; -import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; -import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.jeecg.common.util.DateUtils; -import org.jeecg.modules.system.mapper.SysLogMapper; +import org.jeecg.modules.wms.monitor.apiLog.service.IApiLogService; import org.jeecg.modules.wms.monitor.job.dto.TableCleanDto; -import org.jeecg.modules.wms.monitor.operation.mapper.OperationLogMapper; import org.jeecg.utils.LocalDateUtils; -import org.quartz.DisallowConcurrentExecution; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.quartz.PersistJobDataAfterExecution; +import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.google.common.base.CaseFormat; import cn.hutool.core.util.StrUtil; -import dm.jdbc.util.ReflectUtil; import lombok.extern.slf4j.Slf4j; /** @@ -44,56 +35,46 @@ public class TableCleanTask implements Job { @Autowired private SqlSession sqlSession; + @Autowired + private IApiLogService apiLogService; + public void setParameter(String parameter) { this.parameter = parameter; } @Override + @SuppressWarnings({"rawtypes", "unchecked"}) public void execute(JobExecutionContext context) throws JobExecutionException { log.info(StrUtil.format("定时任务 TableCleanTask 参数:{},执行时间:{}", this.parameter, DateUtils.getTimestamp())); List<TableCleanDto> tableCleanList = JSON.parseArray(this.parameter, TableCleanDto.class); if (tableCleanList != null && tableCleanList.size() > 0) { for (TableCleanDto tableCleanDto : tableCleanList) { try { - Class mapperClass = Class.forName(tableCleanDto.getMapperName()); - ParameterizedType parameterizedType = (ParameterizedType)mapperClass.getGenericInterfaces()[0]; - String className = parameterizedType.getActualTypeArguments()[0].getTypeName(); - String javaTimefieldName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, tableCleanDto.getTimeFieldName()); - Field timeField = ReflectUtil.getField(Class.forName(className), javaTimefieldName); - if (timeField != null) { - QueryWrapper<?> queryWrapper = new QueryWrapper<>(); + if (tableCleanDto.getMapperName().equals("org.jeecg.modules.wms.monitor.apiLog.mapper.ApiLogMapper")) { LocalDateTime localDateTimeValue = LocalDateUtils.minus(LocalDateTime.now(), tableCleanDto.getRetentionDays(), ChronoUnit.DAYS); -// queryWrapper.apply("{0} < {1}", tableCleanDto.getTimeFieldName(), LocalDateUtils.getStartTimeOfDayStr(localDateTimeValue)); - queryWrapper.lt(tableCleanDto.getTimeFieldName(), LocalDateUtils.getStartTimeOfDayStr(localDateTimeValue)); - BaseMapper baseMapper = (BaseMapper)this.sqlSession.getMapper(mapperClass); - Integer deleteCount = baseMapper.delete(queryWrapper); - log.info("定时任务 TableCleanTask 删除 {} {} 天前数据 {} 行", className, tableCleanDto.getRetentionDays(), deleteCount); + Boolean isContinue = true; + while (isContinue) { + Integer deleteCount = apiLogService.deleteByCreateTime(LocalDateUtils.getStartTimeOfDayStr(localDateTimeValue)); + if (deleteCount.equals(0)) { + isContinue = false; + } + Thread.sleep(1000); + } + continue; } - } catch (ClassNotFoundException e) { + Class<?> mapperClass = Class.forName(tableCleanDto.getMapperName()); + ParameterizedType parameterizedType = (ParameterizedType)mapperClass.getGenericInterfaces()[0]; + String className = parameterizedType.getActualTypeArguments()[0].getTypeName(); + QueryWrapper<?> queryWrapper = new QueryWrapper<>(); + LocalDateTime localDateTimeValue = LocalDateUtils.minus(LocalDateTime.now(), tableCleanDto.getRetentionDays(), ChronoUnit.DAYS); + queryWrapper.lt(tableCleanDto.getTimeFieldName(), LocalDateUtils.getStartTimeOfDayStr(localDateTimeValue)); + BaseMapper baseMapper = (BaseMapper<Object>)this.sqlSession.getMapper(mapperClass); + Integer deleteCount = baseMapper.delete(queryWrapper); + log.info("定时任务 TableCleanTask 删除 {} {} 天前数据 {} 行", className, tableCleanDto.getRetentionDays(), deleteCount); + } catch (ClassNotFoundException | InterruptedException e) { e.printStackTrace(); } } } } - - /** - * 参数范例 - * @author TanYibin - * @createDate 2023年3月16日 - * @param args - */ - public static void main(String[] args) { - List<TableCleanDto> tableCleanList = new ArrayList<TableCleanDto>(); - TableCleanDto tableCleanDto1 = new TableCleanDto(); - tableCleanDto1.setMapperName(SysLogMapper.class.getName()); - tableCleanDto1.setTimeFieldName("create_time"); - tableCleanDto1.setRetentionDays(90); - TableCleanDto tableCleanDto2 = new TableCleanDto(); - tableCleanDto2.setMapperName(OperationLogMapper.class.getName()); - tableCleanDto2.setTimeFieldName("operation_time"); - tableCleanDto2.setRetentionDays(90); - tableCleanList.add(tableCleanDto1); - tableCleanList.add(tableCleanDto2); - System.out.println(JSON.toJSONString(tableCleanList)); - } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java index dc8aa0e..1ac5620 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java @@ -435,6 +435,9 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper, if (shipmentContainerHeader == null) { throw new JeecgBootException("自动出库, 没有找到出库表头:" + shipmentContainerId); } + if (shipmentContainerHeader.getStatus().intValue() == QuantityConstant.SHIPMENT_CONTAINER_FINISHED) { + continue; + } int taskType = shipmentContainerHeader.getTaskType(); int type = QuantityConstant.PORT_TYPE_PICK; if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT) {