From bc52d61307de880ce8ce0196c5c41de79d610d4a Mon Sep 17 00:00:00 2001 From: liang <594755172@qq.com> Date: Wed, 21 May 2025 16:21:19 +0800 Subject: [PATCH 1/6] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E7=BC=96=E8=BE=91=E5=8A=9F=E8=83=BD=202.=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=B4=A7=E6=80=A5=E5=87=BA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev_wms_client/src/api/taskOperation.js | 9 +++ dev_wms_client/src/layout/OutsMonitor.vue | 55 ++++++++++++++++++- dev_wms_client/src/layout/kitting.vue | 2 + .../wms/TaskOperationController.java | 11 ++++ .../serviceImpl/OutsExecutorServiceImpl.java | 38 +++++++++++++ 5 files changed, 113 insertions(+), 2 deletions(-) diff --git a/dev_wms_client/src/api/taskOperation.js b/dev_wms_client/src/api/taskOperation.js index 68a3610..e93ac84 100644 --- a/dev_wms_client/src/api/taskOperation.js +++ b/dev_wms_client/src/api/taskOperation.js @@ -16,4 +16,13 @@ export const updateWmsTask = (params) => { method: 'post', data: params }) +} + +// 更新出库单任务 +export const updateOutsTask = (params) => { + return request({ + url: '/taskOperation/updateOutsTask', + method: 'post', + data: params + }) } \ No newline at end of file diff --git a/dev_wms_client/src/layout/OutsMonitor.vue b/dev_wms_client/src/layout/OutsMonitor.vue index 1479b99..c4ce3b5 100644 --- a/dev_wms_client/src/layout/OutsMonitor.vue +++ b/dev_wms_client/src/layout/OutsMonitor.vue @@ -65,8 +65,10 @@ @@ -95,6 +97,7 @@ import {labelPosition} from '@/constant/form.js' import {outTypeOptions} from '@/constant/options.js' import {addAllOptionOfOptions} from '@/utils/generator.js' import {loading} from '@/utils/loading' +import {updateOutsTask} from "@/api/taskOperation"; /** * 常量定义 @@ -191,6 +194,54 @@ const timeFormat = (row, column, cellValue, index) => { const outsTypeFormat = (row, column, cellValue, index) => { return outTaskTypeFormatter(cellValue) } +// 取消出库单 +const cancelOuts = (row) => { + const request = { + taskId: row.taskId, + updateType: 1, + userName: USER_NAME, + standId: STAND_ID + } + loading.open('取消中...') + updateOutsTask(request).then(res => { + const response = res.data + if (response.code === 0) { + ElMessage.success(response.message) + } else { + ElMessage.error(response.message) + } + }).catch(err => { + console.log(err) + ElMessage.error('取消发生异常。') + }).finally(() => { + loading.close() + search() + }) +} +// 完成出库单 +const finishOuts = (row) => { + const request = { + taskId: row.taskId, + updateType: 2, + userName: USER_NAME, + standId: STAND_ID + } + loading.open('完成中...') + updateOutsTask(request).then(res => { + const response = res.data + if (response.code === 0) { + ElMessage.success(response.message) + } else { + ElMessage.error(response.message) + } + }).catch(err => { + console.log(err) + ElMessage.error('完成发生异常。') + }).finally(() => { + loading.close() + search() + }) +} \ No newline at end of file diff --git a/dev_wms_serve/src/main/java/com/wms_main/controller/wms/LogController.java b/dev_wms_serve/src/main/java/com/wms_main/controller/wms/LogController.java new file mode 100644 index 0000000..2fe5b0d --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/controller/wms/LogController.java @@ -0,0 +1,43 @@ +package com.wms_main.controller.wms; + +import com.wms_main.model.dto.query.SysApiQuery; +import com.wms_main.model.dto.query.SysLogQuery; +import com.wms_main.model.dto.response.wms.WmsApiResponse; +import com.wms_main.model.vo.wms.PageVo; +import com.wms_main.model.vo.wms.SysApiVo; +import com.wms_main.model.vo.wms.SysLogVo; +import com.wms_main.service.controller.ILogControllerService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * 日志控制类 + */ +@RestController +@ResponseBody +@CrossOrigin +@RequiredArgsConstructor +@RequestMapping("/wms/log") +public class LogController { + private final ILogControllerService logControllerService; + + /** + * 查询接口接收日志 + * @param logQuery 查询参数 + * @return 查询结果 + */ + @PostMapping("/queryLogsByPage") + public WmsApiResponse> queryLogsByPage(@RequestBody SysLogQuery logQuery) { + return logControllerService.queryLogsByPage(logQuery); + } + + /** + * 查询接口发送日志 + * @param apiQuery 查询参数 + * @return 查询结果 + */ + @PostMapping("/queryApisByPage") + public WmsApiResponse> queryApisByPage(@RequestBody SysApiQuery apiQuery) { + return logControllerService.queryApisByPage(apiQuery); + } +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/dao/ITSysApiService.java b/dev_wms_serve/src/main/java/com/wms_main/dao/ITSysApiService.java new file mode 100644 index 0000000..feef71f --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/dao/ITSysApiService.java @@ -0,0 +1,18 @@ +package com.wms_main.dao; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms_main.model.po.TSysApi; +import com.wms_main.repository.http.entity.HttpRequest; +import com.wms_main.repository.http.entity.HttpResponse; + +/** + * api表服务 + */ +public interface ITSysApiService extends IService { + /** + * 存储api接口请求日志 + * @param request 请求参数 + * @param response 响应参数 + */ + void insertApiLog(HttpRequest request, HttpResponse response); +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/dao/ITSysLogService.java b/dev_wms_serve/src/main/java/com/wms_main/dao/ITSysLogService.java new file mode 100644 index 0000000..a0993ae --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/dao/ITSysLogService.java @@ -0,0 +1,10 @@ +package com.wms_main.dao; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms_main.model.po.TSysLog; + +/** + * 日志服务接口 + */ +public interface ITSysLogService extends IService { +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/dao/impl/TSysApiServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/dao/impl/TSysApiServiceImpl.java new file mode 100644 index 0000000..7487b12 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/dao/impl/TSysApiServiceImpl.java @@ -0,0 +1,75 @@ +package com.wms_main.dao.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms_main.dao.ITSysApiService; +import com.wms_main.mapper.SysApiMapper; +import com.wms_main.model.po.TSysApi; +import com.wms_main.repository.http.entity.HttpRequest; +import com.wms_main.repository.http.entity.HttpResponse; +import com.wms_main.repository.utils.StringUtils; +import com.wms_main.repository.utils.UUIDUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + +/** + * api表服务实现 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class TSysApiServiceImpl extends ServiceImpl implements ITSysApiService { + /** + * + * @param request 请求参数 + * @param response 响应参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertApiLog(HttpRequest request, HttpResponse response) { + TSysApi apiLog = new TSysApi(); + apiLog.setLogId(UUIDUtils.getNewUUID()); + apiLog.setLogTime(LocalDateTime.now()); + // 设置请求相关信息 + if (request != null) { + apiLog.setUrl(request.getUrl()); + apiLog.setTimeout(request.getTimeout()); + apiLog.setMethod(request.getMethod().name()); + apiLog.setContentType(request.getContentType()); + apiLog.setData(StringUtils.formatStringWithMaxLength(request.getData(), 2048)); + apiLog.setToken(StringUtils.formatStringWithMaxLength(request.getToken(), 2048)); + } + // 设置响应相关信息 + if (response != null) { + apiLog.setSuccess(response.isSuccess() ? "成功" : "失败"); + apiLog.setResponseCode(response.getResponseCode()); + apiLog.setRequestMessage(StringUtils.formatStringWithMaxLength(response.getRequestMessage(), 2048)); + apiLog.setResponseMessage(StringUtils.formatStringWithMaxLength(response.getResponseMessage(), 2048)); + apiLog.setRequestTime(response.getRequestTime()); + apiLog.setResponseTime(response.getResponseTime()); + apiLog.setRequestUrl(response.getRequestUrl()); + apiLog.setUseTime(response.getUseTime()); + apiLog.setExceptionMessage(StringUtils.formatStringWithMaxLength(response.getException().getMessage(), 2048)); + } + // 保存api日志 + save(apiLog); + // 记录文本日志 + log.info(logText(apiLog)); + } + + /** + * 生成日志文本 + * @param apiLog 日志对象 + * @return 字符串 + */ + private String logText(TSysApi apiLog) { + return "\n请求方式:" + apiLog.getMethod() + + "\n请求地址:" + apiLog.getUrl() + + "\n请求数据:" + apiLog.getData() + + "\n响应状态:" + apiLog.getSuccess() + + "\n响应数据:" + apiLog.getRequestMessage(); + } +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/dao/impl/TSysLogServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/dao/impl/TSysLogServiceImpl.java new file mode 100644 index 0000000..1c92199 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/dao/impl/TSysLogServiceImpl.java @@ -0,0 +1,14 @@ +package com.wms_main.dao.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms_main.dao.ITSysLogService; +import com.wms_main.mapper.SysLogMapper; +import com.wms_main.model.po.TSysLog; +import org.springframework.stereotype.Service; + +/** + * 日志服务实现类 + */ +@Service +public class TSysLogServiceImpl extends ServiceImpl implements ITSysLogService { +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/filter/RequestLogFilter.java b/dev_wms_serve/src/main/java/com/wms_main/filter/RequestLogFilter.java index ff129aa..68110e0 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/filter/RequestLogFilter.java +++ b/dev_wms_serve/src/main/java/com/wms_main/filter/RequestLogFilter.java @@ -1,23 +1,36 @@ package com.wms_main.filter; +import com.wms_main.dao.ITSysLogService; +import com.wms_main.model.po.TSysLog; import com.wms_main.model.pojo.log.RequestLog; +import com.wms_main.repository.utils.UUIDUtils; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.util.ContentCachingRequestWrapper; import org.springframework.web.util.ContentCachingResponseWrapper; import java.io.IOException; +import java.time.LocalDateTime; + +import static com.wms_main.repository.utils.StringUtils.formatStringWithMaxLength; @Slf4j @Component @WebFilter(filterName = "requestLogFilter", urlPatterns = "/*") +@RequiredArgsConstructor public class RequestLogFilter extends HttpFilter { + /** + * 日志服务 + */ + private final ITSysLogService sysLogService; + @Override protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // Wrapper封装request和response @@ -40,26 +53,31 @@ public class RequestLogFilter extends HttpFilter { // 响应体 byte[] responseContent = responseWrapper.getContentAsByteArray(); // 记录日志信息 - String requestContentString = formatContentString(new String(requestContent)); - String responseContentString = formatContentString(new String(responseContent)); + String requestContentString = formatStringWithMaxLength(new String(requestContent), 2048); + String responseContentString = formatStringWithMaxLength(new String(responseContent), 2048); RequestLog logInfo = new RequestLog(method, uri, remoteHost, remoteAddr, requestContentString, String.valueOf(status), responseContentString); log.info(logInfo.toString()); - // TODO 增加存储数据库的操作 + // 增加存储数据库的操作 + new Thread(() -> { + try { + TSysLog logForDb = new TSysLog( + UUIDUtils.getNewUUID(), + logInfo.getMethod(), + logInfo.getUri(), + logInfo.getRemoteHost(), + logInfo.getRemoteAddr(), + logInfo.getRequestContent(), + logInfo.getStatus(), + logInfo.getResponseContent(), + LocalDateTime.now() + ); + sysLogService.save(logForDb); + } catch (Exception e) { + log.error("记录日志失败。", e); + } + }).start(); // 把缓存的响应数据,响应给客户端 responseWrapper.copyBodyToResponse(); } - - /** - * 格式化内容string - * @param contentString 原始字符串 - * @return 格式化之后的字符串 - */ - private String formatContentString (String contentString) { - String newContentString = contentString.replaceAll("\\s*", ""); - if (newContentString.length() > 1024) { - newContentString = newContentString.substring(0, 1024) + "..."; - } - return newContentString; - } } diff --git a/dev_wms_serve/src/main/java/com/wms_main/mapper/SysApiMapper.java b/dev_wms_serve/src/main/java/com/wms_main/mapper/SysApiMapper.java new file mode 100644 index 0000000..5521811 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/mapper/SysApiMapper.java @@ -0,0 +1,12 @@ +package com.wms_main.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms_main.model.po.TSysApi; +import org.apache.ibatis.annotations.Mapper; + +/** + * api表映射mapper + */ +@Mapper +public interface SysApiMapper extends BaseMapper { +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/mapper/SysLogMapper.java b/dev_wms_serve/src/main/java/com/wms_main/mapper/SysLogMapper.java new file mode 100644 index 0000000..c85f24b --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/mapper/SysLogMapper.java @@ -0,0 +1,12 @@ +package com.wms_main.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms_main.model.po.TSysLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * 日志mapper接口 + */ +@Mapper +public interface SysLogMapper extends BaseMapper { +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/dto/query/SysApiQuery.java b/dev_wms_serve/src/main/java/com/wms_main/model/dto/query/SysApiQuery.java new file mode 100644 index 0000000..8842e03 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/dto/query/SysApiQuery.java @@ -0,0 +1,22 @@ +package com.wms_main.model.dto.query; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 接口发送日志查询参数 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SysApiQuery extends PageQuery { + /** + * 查询字符串 + */ + @JsonProperty("queryStr") + private String queryStr; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/dto/query/SysLogQuery.java b/dev_wms_serve/src/main/java/com/wms_main/model/dto/query/SysLogQuery.java new file mode 100644 index 0000000..b22b157 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/dto/query/SysLogQuery.java @@ -0,0 +1,22 @@ +package com.wms_main.model.dto.query; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 接口接收日志查询参数 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SysLogQuery extends PageQuery { + /** + * 查询字符串 + */ + @JsonProperty("queryStr") + private String queryStr; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/po/TSysApi.java b/dev_wms_serve/src/main/java/com/wms_main/model/po/TSysApi.java new file mode 100644 index 0000000..ea26156 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/po/TSysApi.java @@ -0,0 +1,105 @@ +package com.wms_main.model.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 数据库Api表映射 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "t_sys_api", autoResultMap = true) +public class TSysApi { + /** + * id + */ + @TableId(value = "log_id") + private String logId; + /** + * url + */ + @TableField(value = "url") + private String url; + /** + * 超时时长 + */ + @TableField(value = "timeout") + private Integer timeout; + /** + * 请求方式 + */ + @TableField(value = "method") + private String method; + /** + * 请求头 + */ + @TableField(value = "content_type") + private String contentType; + /** + * 数据 + */ + @TableField(value = "data") + private String data; + /** + * token + */ + @TableField(value = "token") + private String token; + /** + * 请求是否成功 + */ + @TableField(value = "success") + private String success; + /** + * 响应码 + */ + @TableField(value = "response_code") + private int responseCode; + /** + * 请求信息 + */ + @TableField(value = "request_message") + private String requestMessage; + /** + * 响应信息 + */ + @TableField(value = "response_message") + private String responseMessage; + /** + * 请求时间 + */ + @TableField(value = "request_time") + private LocalDateTime requestTime; + /** + * 响应时间 + */ + @TableField(value = "response_time") + private LocalDateTime responseTime; + /** + * 请求地址 + */ + @TableField(value = "request_url") + private String requestUrl; + /** + * 请求耗时 + */ + @TableField(value = "use_time") + private long useTime; + /** + * 异常 + */ + @TableField(value = "exception_message") + private String exceptionMessage; + /** + * 记录时间 + */ + @TableField(value = "log_time") + private LocalDateTime logTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/po/TSysLog.java b/dev_wms_serve/src/main/java/com/wms_main/model/po/TSysLog.java new file mode 100644 index 0000000..5a6623a --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/po/TSysLog.java @@ -0,0 +1,65 @@ +package com.wms_main.model.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 数据库Log表映射 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "t_sys_log", autoResultMap = true) +public class TSysLog { + /** + * 日志Id + */ + @TableId(value = "log_id") + private String logId; + /** + * 请求方式 + */ + @TableField(value = "method") + private String method; + /** + * 请求地址 + */ + @TableField(value = "uri") + private String uri; + /** + * 客户端主机 + */ + @TableField(value = "remote_host") + private String remoteHost; + /** + * 客户端地址 + */ + @TableField(value = "remote_addr") + private String remoteAddr; + /** + * 请求数据 + */ + @TableField(value = "request_content") + private String requestContent; + /** + * 响应状态 + */ + @TableField(value = "status") + private String status; + /** + * 响应数据 + */ + @TableField(value = "response_content") + private String responseContent; + /** + * 日志记录时间 + */ + @TableField(value = "log_time") + private LocalDateTime logTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/SysApiVo.java b/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/SysApiVo.java new file mode 100644 index 0000000..c627360 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/SysApiVo.java @@ -0,0 +1,102 @@ +package com.wms_main.model.vo.wms; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 接口发送日志 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SysApiVo { + /** + * id + */ + @JsonProperty("logId") + private String logId; + /** + * url + */ + @JsonProperty("url") + private String url; + /** + * 超时时长 + */ + @JsonProperty("timeout") + private Integer timeout; + /** + * 请求方式 + */ + @JsonProperty("method") + private String method; + /** + * 请求头 + */ + @JsonProperty("contentType") + private String contentType; + /** + * 数据 + */ + @JsonProperty("data") + private String data; + /** + * token + */ + @JsonProperty("token") + private String token; + /** + * 请求是否成功 + */ + @JsonProperty("success") + private String success; + /** + * 响应码 + */ + @JsonProperty("responseCode") + private int responseCode; + /** + * 请求信息 + */ + @JsonProperty("requestMessage") + private String requestMessage; + /** + * 响应信息 + */ + @JsonProperty("responseMessage") + private String responseMessage; + /** + * 请求时间 + */ + @JsonProperty("requestTime") + private LocalDateTime requestTime; + /** + * 响应时间 + */ + @JsonProperty("responseTime") + private LocalDateTime responseTime; + /** + * 请求地址 + */ + @JsonProperty("requestUrl") + private String requestUrl; + /** + * 请求耗时 + */ + @JsonProperty("useTime") + private long useTime; + /** + * 异常 + */ + @JsonProperty("exceptionMessage") + private String exceptionMessage; + /** + * 记录时间 + */ + @JsonProperty("logTime") + private LocalDateTime logTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/SysLogVo.java b/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/SysLogVo.java new file mode 100644 index 0000000..d37a8c3 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/SysLogVo.java @@ -0,0 +1,62 @@ +package com.wms_main.model.vo.wms; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 接口接收日志 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SysLogVo { + /** + * 日志Id + */ + @JsonProperty("logId") + private String logId; + /** + * 请求方式 + */ + @JsonProperty("method") + private String method; + /** + * 请求地址 + */ + @JsonProperty("uri") + private String uri; + /** + * 客户端主机 + */ + @JsonProperty("remoteHost") + private String remoteHost; + /** + * 客户端地址 + */ + @JsonProperty("remoteAddr") + private String remoteAddr; + /** + * 请求数据 + */ + @JsonProperty("requestContent") + private String requestContent; + /** + * 响应状态 + */ + @JsonProperty("status") + private String status; + /** + * 响应数据 + */ + @JsonProperty("responseContent") + private String responseContent; + /** + * 日志记录时间 + */ + @JsonProperty("logTime") + private LocalDateTime logTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/repository/http/HttpClient.java b/dev_wms_serve/src/main/java/com/wms_main/repository/http/HttpClient.java index 7bfe2e3..2b6c6db 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/repository/http/HttpClient.java +++ b/dev_wms_serve/src/main/java/com/wms_main/repository/http/HttpClient.java @@ -1,8 +1,12 @@ package com.wms_main.repository.http; +import com.wms_main.dao.ITSysApiService; +import com.wms_main.model.po.TSysLog; import com.wms_main.repository.http.entity.HttpRequest; import com.wms_main.repository.http.entity.HttpResponse; import com.wms_main.repository.utils.StringUtils; +import com.wms_main.repository.utils.UUIDUtils; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -24,7 +28,9 @@ import java.time.LocalDateTime; */ @Component @Slf4j +@RequiredArgsConstructor public class HttpClient { + private final ITSysApiService sysApiService; /** * 发送一个 Get 请求 @@ -39,6 +45,8 @@ public class HttpClient { response.setSuccess(false); response.setResponseCode(999); response.setException(new Exception("请求地址为空")); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } if(StringUtils.isNotEmpty(request.getData())) { @@ -74,16 +82,19 @@ public class HttpClient { httpClient.close(); response.setSuccess(true); response.setResponseMessage(result.toString()); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } catch (Exception e) { response.setSuccess(false); response.setResponseCode(999); response.setException(e); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } } - /** * 发送一个 Post 请求 * @param request 请求数据 @@ -98,6 +109,8 @@ public class HttpClient { response.setSuccess(false); response.setResponseCode(999); response.setException(new Exception("请求地址为空")); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } if(StringUtils.isEmpty(request.getData())) { @@ -134,11 +147,15 @@ public class HttpClient { httpClient.close(); response.setSuccess(true); response.setResponseMessage(result.toString()); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } catch (Exception e) { response.setSuccess(false); response.setResponseCode(999); response.setException(e); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } } @@ -156,6 +173,8 @@ public class HttpClient { response.setSuccess(false); response.setResponseCode(999); response.setException(new Exception("请求地址为空")); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } if(!StringUtils.isEmpty(request.getData())) { @@ -191,12 +210,30 @@ public class HttpClient { httpClient.close(); response.setSuccess(true); response.setResponseMessage(result.toString()); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } catch (Exception e) { response.setSuccess(false); response.setResponseCode(999); response.setException(e); + // 增加存储数据库的操作 TODO 后续想办法增加多线程执行存储数据库 + insertApiLogToDb(request, response); return response; } } + + /** + * 存储api日志信息 + * @param request 请求信息 + * @param response 响应信息 + */ + void insertApiLogToDb(HttpRequest request, HttpResponse response) { + try { + sysApiService.insertApiLog(request, response); + } catch (Exception e) { + log.error("插入日志失败{}", StringUtils.objectToString(e)); + } + } + } diff --git a/dev_wms_serve/src/main/java/com/wms_main/repository/http/enums/HttpMethodEnum.java b/dev_wms_serve/src/main/java/com/wms_main/repository/http/enums/HttpMethodEnum.java index 158c8e7..1c98105 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/repository/http/enums/HttpMethodEnum.java +++ b/dev_wms_serve/src/main/java/com/wms_main/repository/http/enums/HttpMethodEnum.java @@ -1,11 +1,13 @@ package com.wms_main.repository.http.enums; +import lombok.AllArgsConstructor; import lombok.Getter; /** * http请求方式 */ @Getter +@AllArgsConstructor public enum HttpMethodEnum { GET("GET"), @@ -13,9 +15,5 @@ public enum HttpMethodEnum { PUT("PUT"), DELETE("DELETE"); - private String method; - - HttpMethodEnum(String method) { - this.method = method; - } + private final String method; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/repository/utils/StringUtils.java b/dev_wms_serve/src/main/java/com/wms_main/repository/utils/StringUtils.java index a8e9725..cd97c4d 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/repository/utils/StringUtils.java +++ b/dev_wms_serve/src/main/java/com/wms_main/repository/utils/StringUtils.java @@ -72,6 +72,11 @@ public class StringUtils { return str.matches("^\\d+$"); } + /** + * 判断一个字符串是否为小数 + * @param str 要判断的字符串 + * @return 结果 + */ public static boolean isDecimal(String str) { if (isEmpty(str)) return false; return str.matches("^\\d+\\.?\\d*$"); @@ -245,4 +250,22 @@ public class StringUtils { } return ip; } + + /** + * 截取字符串---依据最大程度,并去除空白与换行符 + * @param originStr 原始字符串 + * @param maxLength 最大长度 + * @return 格式化之后的字符串 + */ + public static String formatStringWithMaxLength(String originStr, int maxLength) { + if (StringUtils.isEmpty(originStr)) { + // 防止NULL异常 + return ""; + } + String newContentString = originStr.replaceAll("\\s*", ""); + if (newContentString.length() > maxLength) { + newContentString = newContentString.substring(0, maxLength) + "..."; + } + return newContentString; + } } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/controller/ILogControllerService.java b/dev_wms_serve/src/main/java/com/wms_main/service/controller/ILogControllerService.java new file mode 100644 index 0000000..1288ca8 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/service/controller/ILogControllerService.java @@ -0,0 +1,27 @@ +package com.wms_main.service.controller; + +import com.wms_main.model.dto.query.SysApiQuery; +import com.wms_main.model.dto.query.SysLogQuery; +import com.wms_main.model.dto.response.wms.WmsApiResponse; +import com.wms_main.model.vo.wms.PageVo; +import com.wms_main.model.vo.wms.SysApiVo; +import com.wms_main.model.vo.wms.SysLogVo; + +/** + * 日志控制类服务 + */ +public interface ILogControllerService { + /** + * 查询接口接收日志数据---分页 + * @param logQuery 查询参数 + * @return 查询结果 + */ + WmsApiResponse> queryLogsByPage(SysLogQuery logQuery); + + /** + * 查询接口发送日志数据---分页 + * @param apiQuery 查询参数 + * @return 查询结果 + */ + WmsApiResponse> queryApisByPage(SysApiQuery apiQuery); +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/LogControllerServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/LogControllerServiceImpl.java new file mode 100644 index 0000000..d90f8a1 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/LogControllerServiceImpl.java @@ -0,0 +1,91 @@ +package com.wms_main.service.controller.serviceImpl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wms_main.dao.ITSysApiService; +import com.wms_main.dao.ITSysLogService; +import com.wms_main.model.dto.query.SysApiQuery; +import com.wms_main.model.dto.query.SysLogQuery; +import com.wms_main.model.dto.response.wms.WmsApiResponse; +import com.wms_main.model.po.TSysApi; +import com.wms_main.model.po.TSysLog; +import com.wms_main.model.vo.wms.PageVo; +import com.wms_main.model.vo.wms.SysApiVo; +import com.wms_main.model.vo.wms.SysLogVo; +import com.wms_main.repository.utils.StringUtils; +import com.wms_main.service.controller.ILogControllerService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 日志服务类接口实现 + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class LogControllerServiceImpl implements ILogControllerService { + private final ITSysLogService sysLogService;// 接口接收日志服务 + private final ITSysApiService sysApiService;// 接口发送日志服务 + + + /** + * 查询接口接收日志---实现 + * @param logQuery 查询参数 + * @return 查询结果 + */ + @Override + public WmsApiResponse> queryLogsByPage(SysLogQuery logQuery) { + if (logQuery == null) { + return WmsApiResponse.error("查询参数不能为NULL", null); + } + Page page = logQuery.toMpPage(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getMethod, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getUri, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getRemoteHost, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getRemoteAddr, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getRequestContent, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getStatus, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getResponseContent, logQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getLogTime, logQuery.getQueryStr()); + Page logsPage = sysLogService.page(page, lambdaQueryWrapper); + + PageVo pageVo = PageVo.of(logsPage, logPo -> BeanUtil.toBean(logPo, SysLogVo.class)); + return WmsApiResponse.success("查询接口接收日志成功。", pageVo); + } + + /** + * 查询接口发送日志---实现 + * @param apiQuery 查询参数 + * @return 查询结果 + */ + @Override + public WmsApiResponse> queryApisByPage(SysApiQuery apiQuery) { + if (apiQuery == null) { + return WmsApiResponse.error("查询参数不能为NULL", null); + } + Page page = apiQuery.toMpPage(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getUrl, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getTimeout, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getMethod, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getContentType, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getData, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getToken, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getSuccess, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getResponseCode, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getRequestMessage, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getResponseMessage, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getRequestTime, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getResponseTime, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getRequestUrl, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getUseTime, apiQuery.getQueryStr()).or() + .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getExceptionMessage, apiQuery.getQueryStr()); + Page logsPage = sysApiService.page(page, lambdaQueryWrapper); + + PageVo pageVo = PageVo.of(logsPage, logPo -> BeanUtil.toBean(logPo, SysApiVo.class)); + return WmsApiResponse.success("查询接口发送日志成功。", pageVo); + } +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java new file mode 100644 index 0000000..94f4011 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java @@ -0,0 +1,4 @@ +package com.wms_main.service.quartz_job; + +public interface IDataSolverService { +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java index d13dc71..015e64c 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java @@ -19,8 +19,7 @@ public class DataSolver implements Job { */ @Override public void execute(JobExecutionContext jobExecutionContext) { - // 获取定时配置信息 - + // 获取 // 获取各种需要处理的数据 } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/OutsRepair.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/OutsRepair.java index 00faf8c..bd3e77a 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/OutsRepair.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/OutsRepair.java @@ -17,7 +17,8 @@ import org.quartz.PersistJobDataAfterExecution; // 以下注解用于实现fixed_delay @DisallowConcurrentExecution @RequiredArgsConstructor -public class OutsRepair implements Job { +public class +OutsRepair implements Job { private final IOutsExecutorService outsExecutorService;// 出库单解析服务 /** diff --git a/dev_wms_serve/src/main/resources/mapper/SysApiMapper.xml b/dev_wms_serve/src/main/resources/mapper/SysApiMapper.xml new file mode 100644 index 0000000..15035ba --- /dev/null +++ b/dev_wms_serve/src/main/resources/mapper/SysApiMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/dev_wms_serve/src/main/resources/mapper/SysLogMapper.xml b/dev_wms_serve/src/main/resources/mapper/SysLogMapper.xml new file mode 100644 index 0000000..e5d8ca5 --- /dev/null +++ b/dev_wms_serve/src/main/resources/mapper/SysLogMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 4ee8d8a187b0961d63f177bf8171902293c4a0ac Mon Sep 17 00:00:00 2001 From: liang <594755172@qq.com> Date: Wed, 28 May 2025 17:02:14 +0800 Subject: [PATCH 4/6] =?UTF-8?q?1.=20=E5=AE=9A=E6=9C=9F=E6=B8=85=E7=90=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=B9=B6=E5=A4=87=E4=BB=BD=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/enums/wms/AppConfigKeyEnums.java | 5 +- .../ApiReceiveLogExcelTemplate.java | 62 +++++ .../ApiSendLogExcelTemplate.java | 102 +++++++ .../PickTaskBakExcelTemplate.java | 57 ++++ .../WcsTaskBakExcelTemplate.java | 72 +++++ .../WmsTaskBakExcelTemplate.java | 102 +++++++ .../easypoi/service/ISaveExcelEasyPoi.java | 16 ++ .../service/serviceImpl/SaveExcelEasyPoi.java | 252 ++++++++++++++++++ .../quartz_job/IDataSolverService.java | 17 ++ .../quartz_job/job_executor/DataSolver.java | 22 +- .../serviceImpl/DataSolverServiceImpl.java | 151 +++++++++++ 11 files changed, 854 insertions(+), 4 deletions(-) create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiReceiveLogExcelTemplate.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiSendLogExcelTemplate.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/PickTaskBakExcelTemplate.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WcsTaskBakExcelTemplate.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WmsTaskBakExcelTemplate.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/ISaveExcelEasyPoi.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/serviceImpl/SaveExcelEasyPoi.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/DataSolverServiceImpl.java diff --git a/dev_wms_serve/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java b/dev_wms_serve/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java index 2d3be9c..dc60065 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java +++ b/dev_wms_serve/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java @@ -16,7 +16,10 @@ public enum AppConfigKeyEnums { STAND_CAPACITY("StandCapacity", "站台容量"), IMAGE_IP("ImageIp", "图片存放ip"), EMPTY_BACK("EmptyBack", "空载具是否回库"), - STOCK_WARNING_QTY("StockWarningQty", "库存预警数量"); + STOCK_WARNING_QTY("StockWarningQty", "库存预警数量"), + LOG_CLEAR_INTERVAL("LogClearInterval", "日志清理间隔"), + NORMAL_DATA_CLEAR_INTERVAL("NormalDataClearInterval", "正常数据清理间隔"), + IMPORTANT_DATA_CLEAR_INTERVAL("ImportantDataClearInterval", "重要数据清理间隔"); private final String key; private final String desc; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiReceiveLogExcelTemplate.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiReceiveLogExcelTemplate.java new file mode 100644 index 0000000..4094474 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiReceiveLogExcelTemplate.java @@ -0,0 +1,62 @@ +package com.wms_main.excel.easypoi.excelTemplate; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 接收日志模版 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ApiReceiveLogExcelTemplate { + /** + * 日志Id + */ + @Excel(name = "log_id") + private String logId; + /** + * 请求方式 + */ + @Excel(name = "method") + private String method; + /** + * 请求地址 + */ + @Excel(name = "uri") + private String uri; + /** + * 客户端主机 + */ + @Excel(name = "remote_host") + private String remoteHost; + /** + * 客户端地址 + */ + @Excel(name = "remote_addr") + private String remoteAddr; + /** + * 请求数据 + */ + @Excel(name = "request_content") + private String requestContent; + /** + * 响应状态 + */ + @Excel(name = "status") + private String status; + /** + * 响应数据 + */ + @Excel(name = "response_content") + private String responseContent; + /** + * 日志记录时间 + */ + @Excel(name = "log_time") + private LocalDateTime logTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiSendLogExcelTemplate.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiSendLogExcelTemplate.java new file mode 100644 index 0000000..dc635e8 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/ApiSendLogExcelTemplate.java @@ -0,0 +1,102 @@ +package com.wms_main.excel.easypoi.excelTemplate; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 发送日志模版 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ApiSendLogExcelTemplate { + /** + * id + */ + @Excel(name = "log_id") + private String logId; + /** + * url + */ + @Excel(name = "url") + private String url; + /** + * 超时时长 + */ + @Excel(name = "timeout") + private Integer timeout; + /** + * 请求方式 + */ + @Excel(name = "method") + private String method; + /** + * 请求头 + */ + @Excel(name = "content_type") + private String contentType; + /** + * 数据 + */ + @Excel(name = "data") + private String data; + /** + * token + */ + @Excel(name = "token") + private String token; + /** + * 请求是否成功 + */ + @Excel(name = "success") + private String success; + /** + * 响应码 + */ + @Excel(name = "response_code") + private int responseCode; + /** + * 请求信息 + */ + @Excel(name = "request_message") + private String requestMessage; + /** + * 响应信息 + */ + @Excel(name = "response_message") + private String responseMessage; + /** + * 请求时间 + */ + @Excel(name = "request_time") + private LocalDateTime requestTime; + /** + * 响应时间 + */ + @Excel(name = "response_time") + private LocalDateTime responseTime; + /** + * 请求地址 + */ + @Excel(name = "request_url") + private String requestUrl; + /** + * 请求耗时 + */ + @Excel(name = "use_time") + private long useTime; + /** + * 异常 + */ + @Excel(name = "exception_message") + private String exceptionMessage; + /** + * 记录时间 + */ + @Excel(name = "log_time") + private LocalDateTime logTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/PickTaskBakExcelTemplate.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/PickTaskBakExcelTemplate.java new file mode 100644 index 0000000..e1640d9 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/PickTaskBakExcelTemplate.java @@ -0,0 +1,57 @@ +package com.wms_main.excel.easypoi.excelTemplate; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 拣选任务记录模版 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PickTaskBakExcelTemplate { + /** + * 任务id + */ + @Excel(name = "pick_id") + private String pickId; + /** + * 拣选站台 + */ + @Excel(name = "pick_stand") + private String pickStand; + /** + * 载具号 + */ + @Excel(name = "vehicle_id") + private String vehicleId; + /** + * 任务状态 + */ + @Excel(name = "pick_status") + private Integer pickStatus; + /** + * 创建时间 + */ + @Excel(name = "create_time") + private LocalDateTime createTime; + /** + * 发送时间 + */ + @Excel(name = "send_time") + private LocalDateTime sendTime; + /** + * 到达时间 + */ + @Excel(name = "arrive_time") + private LocalDateTime arriveTime; + /** + * 离开时间 + */ + @Excel(name = "leave_time") + private LocalDateTime leaveTime; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WcsTaskBakExcelTemplate.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WcsTaskBakExcelTemplate.java new file mode 100644 index 0000000..5ece774 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WcsTaskBakExcelTemplate.java @@ -0,0 +1,72 @@ +package com.wms_main.excel.easypoi.excelTemplate; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * Wcs任务记录模板 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class WcsTaskBakExcelTemplate { + /** + * wcs任务id + */ + @Excel(name = "wcs_task_id") + private String wcsTaskId; + /** + * wcs任务状态 + */ + @Excel(name = "wcs_task_status") + private Integer wcsTaskStatus; + /** + * wcs任务类型 + */ + @Excel(name = "wcs_task_type") + private Integer wcsTaskType; + /** + * wcs任务优先级 + */ + @Excel(name = "task_priority") + private Integer taskPriority; + /** + * 载具号 + */ + @Excel(name = "vehicle_id") + private String vehicleId; + /** + * 起点 + */ + @Excel(name = "origin") + private String origin; + /** + * 终点 + */ + @Excel(name = "destination") + private String destination; + /** + * 创建时间 + */ + @Excel(name = "create_time") + private LocalDateTime createTime; + /** + * 发送时间 + */ + @Excel(name = "send_time") + private LocalDateTime sendTime; + /** + * 完成时间 + */ + @Excel(name = "finish_time") + private LocalDateTime finishTime; + /** + * 备注 + */ + @Excel(name = "remark") + private String remark; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WmsTaskBakExcelTemplate.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WmsTaskBakExcelTemplate.java new file mode 100644 index 0000000..11b1636 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WmsTaskBakExcelTemplate.java @@ -0,0 +1,102 @@ +package com.wms_main.excel.easypoi.excelTemplate; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * Wms任务记录模版 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class WmsTaskBakExcelTemplate { + /** + * 任务ID + */ + @Excel(name = "task_id") + private String taskId; + /** + * 任务类型 + */ + @Excel(name = "task_type") + private Integer taskType; + /** + * 任务状态 + */ + @Excel(name = "task_status") + private Integer taskStatus; + /** + * 任务优先级 + */ + @Excel(name = "task_priority") + private Integer taskPriority; + /** + * 载具号 + */ + @Excel(name = "vehicle_id") + private String vehicleId; + /** + * 起点 + */ + @Excel(name = "origin") + private String origin; + /** + * 终点 + */ + @Excel(name = "destination") + private String destination; + /** + * wcs任务id + */ + @Excel(name = "wcs_task_id") + private String wcsTaskId; + /** + * 创建时间 + */ + @Excel(name = "create_time") + private LocalDateTime createTime; + /** + * 完成时间 + */ + @Excel(name = "finish_time") + private LocalDateTime finishTime; + /** + * 料号 + */ + @Excel(name = "goods_id") + private String goodsId; + /** + * 操作数量 + */ + @Excel(name = "op_num") + private Integer opNum; + /** + * 库存数量 + */ + @Excel(name = "stock_num") + private Integer stockNum; + /** + * 操纵用户 + */ + @Excel(name = "op_user") + private String opUser; + /** + * 备注 + */ + @Excel(name = "remark") + private String remark; + /** + * 申请出库的站台 + */ + @Excel(name = "call_stand") + private String callStand; + /** + * 物料描述 + */ + @Excel(name = "goods_desc") + private String goodsDesc; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/ISaveExcelEasyPoi.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/ISaveExcelEasyPoi.java new file mode 100644 index 0000000..4eb5360 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/ISaveExcelEasyPoi.java @@ -0,0 +1,16 @@ +package com.wms_main.excel.easypoi.service; + +import com.wms_main.model.po.*; + +import java.util.List; + +/** + * 保存数据服务接口 + */ +public interface ISaveExcelEasyPoi { + void saveApiReceiveLogs(String fileSuffix, List logList); + void saveApiSendLogs(String fileSuffix, List apiLogList); + void saveWmsTaskBak(String fileSuffix, List wmsTaskBakList); + void saveWcsTaskBak(String fileSuffix, List wcsTaskBakList); + void savePickTaskBak(String fileSuffix, List pickTaskBakList); +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/serviceImpl/SaveExcelEasyPoi.java b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/serviceImpl/SaveExcelEasyPoi.java new file mode 100644 index 0000000..baf26d7 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/service/serviceImpl/SaveExcelEasyPoi.java @@ -0,0 +1,252 @@ +package com.wms_main.excel.easypoi.service.serviceImpl; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import com.wms_main.excel.easypoi.excelTemplate.*; +import com.wms_main.excel.easypoi.service.ISaveExcelEasyPoi; +import com.wms_main.model.po.*; +import com.wms_main.repository.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 保存数据服务实现 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SaveExcelEasyPoi implements ISaveExcelEasyPoi { + private final String ROOT_PATH = "./file"; + + /** + * 写入excel + * @param fileDesc 文件描述,不需要文件类型的后缀 + * @param filePath 文件路径,最后一位不需要添加文件分割符 + * @param sheetName 页名 + * @param list 数据列表 + * @param clazz 泛型类 + * @param 泛型 + * @throws IOException 异常 + */ + public void doWriteExcel(String fileDesc, String filePath, String sheetName, List list, Class clazz) throws IOException { + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName(sheetName); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, list); + File file = new File(filePath + File.separator + fileDesc + ".xlsx"); + createFile(file);// 新建文件 + FileOutputStream fos = new FileOutputStream(file); + workbook.write(fos); + fos.close(); + workbook.close(); + log.info("保存文件成功:{}。", fileDesc); + } + + /** + * 创建文件 + * @param file 目标文件 + */ + public void createFile(File file) { + if (!file.exists()) { + // 文件不存在 + if (!file.getParentFile().exists()) { + // 目录不存在,创建上级目录 + boolean createDirectSuccessFlag = file.getParentFile().mkdirs(); + if (!createDirectSuccessFlag) { + log.error("创建目录失败。"); + return; + } + } + try { + // 在上级目录里创建文件 + boolean createFileSuccessFlag = file.createNewFile(); + if (!createFileSuccessFlag) { + log.error("创建文件失败。"); + } + } catch (IOException e) { + log.error("创建文件异常。{}", StringUtils.objectToString(e)); + } + } + } + + /** + * 保存api接收日志 + * @param fileSuffix 文件后缀 + * @param logList 数据列表 + */ + @Override + public void saveApiReceiveLogs(String fileSuffix, List logList) { + if (logList == null || logList.isEmpty()) { + // 空数据体,不做处理 + return; + } + // 将数据转化为excel Template + List logExcelTemplateList = new ArrayList<>(logList.stream().map(log -> new ApiReceiveLogExcelTemplate( + log.getLogId(), + log.getMethod(), + log.getUri(), + log.getRemoteHost(), + log.getRemoteAddr(), + log.getRequestContent(), + log.getStatus(), + log.getResponseContent(), + log.getLogTime() + )).toList()); + try { + // 写入excel + doWriteExcel("t_sys_log_" + fileSuffix, ROOT_PATH + "/t_sys_log", "t_sys_log", logExcelTemplateList, ApiReceiveLogExcelTemplate.class); + } catch (IOException e) { + log.error("缓存过期接口接收日志异常。"); + } + } + + /** + * 保存api发送日志 + * @param fileSuffix 文件后缀 + * @param apiLogList 数据列表 + */ + @Override + public void saveApiSendLogs(String fileSuffix, List apiLogList) { + if (apiLogList == null || apiLogList.isEmpty()) { + // 空数据体,不做处理 + return; + } + // 将数据转化为excel Template + List logExcelTemplateList = new ArrayList<>(apiLogList.stream().map(log -> new ApiSendLogExcelTemplate( + log.getLogId(), + log.getUrl(), + log.getTimeout(), + log.getMethod(), + log.getContentType(), + log.getData(), + log.getToken(), + log.getSuccess(), + log.getResponseCode(), + log.getRequestMessage(), + log.getResponseMessage(), + log.getRequestTime(), + log.getResponseTime(), + log.getRequestUrl(), + log.getUseTime(), + log.getExceptionMessage(), + log.getLogTime() + )).toList()); + try { + // 写入excel + doWriteExcel("t_sys_api_" + fileSuffix, ROOT_PATH + "/t_sys_api", "t_sys_api", logExcelTemplateList, ApiSendLogExcelTemplate.class); + } catch (IOException e) { + log.error("缓存过期接口发送日志异常。"); + } + } + + /** + * 保存Wms任务记录 + * @param fileSuffix 文件后缀 + * @param wmsTaskBakList 数据列表 + */ + @Override + public void saveWmsTaskBak(String fileSuffix, List wmsTaskBakList) { + if (wmsTaskBakList == null || wmsTaskBakList.isEmpty()) { + // 空数据体,不做处理 + return; + } + // 将数据转化为excel Template + List wmsTaskBakExcelTemplateList = new ArrayList<>(wmsTaskBakList.stream().map(wmsTaskBak -> new WmsTaskBakExcelTemplate( + wmsTaskBak.getTaskId(), + wmsTaskBak.getTaskType(), + wmsTaskBak.getTaskStatus(), + wmsTaskBak.getTaskPriority(), + wmsTaskBak.getVehicleId(), + wmsTaskBak.getOrigin(), + wmsTaskBak.getDestination(), + wmsTaskBak.getWcsTaskId(), + wmsTaskBak.getCreateTime(), + wmsTaskBak.getFinishTime(), + wmsTaskBak.getGoodsId(), + wmsTaskBak.getOpNum(), + wmsTaskBak.getStockNum(), + wmsTaskBak.getOpUser(), + wmsTaskBak.getRemark(), + wmsTaskBak.getCallStand(), + wmsTaskBak.getGoodsDesc() + )).toList()); + try { + // 写入excel + doWriteExcel("t_app_task_bak_" + fileSuffix, ROOT_PATH + "/t_app_task_bak", "t_app_task_bak", wmsTaskBakExcelTemplateList, WmsTaskBakExcelTemplate.class); + } catch (IOException e) { + log.error("缓存过期Wms任务记录异常。"); + } + } + + /** + * 保存wcs任务记录 + * @param fileSuffix 文件后缀 + * @param wcsTaskBakList 数据记录 + */ + @Override + public void saveWcsTaskBak(String fileSuffix, List wcsTaskBakList) { + if (wcsTaskBakList == null || wcsTaskBakList.isEmpty()) { + // 空数据体,不做处理 + return; + } + // 将数据转化为excel Template + List wcsTaskBakExcelTemplateList = new ArrayList<>(wcsTaskBakList.stream().map(wcsTaskBak -> new WcsTaskBakExcelTemplate( + wcsTaskBak.getWcsTaskId(), + wcsTaskBak.getWcsTaskStatus(), + wcsTaskBak.getWcsTaskType(), + wcsTaskBak.getTaskPriority(), + wcsTaskBak.getVehicleId(), + wcsTaskBak.getOrigin(), + wcsTaskBak.getDestination(), + wcsTaskBak.getCreateTime(), + wcsTaskBak.getSendTime(), + wcsTaskBak.getFinishTime(), + wcsTaskBak.getRemark() + )).toList()); + try { + // 写入excel + doWriteExcel("t_app_wcs_task_bak_" + fileSuffix, ROOT_PATH + "/t_app_wcs_task_bak", "t_app_wcs_task_bak", wcsTaskBakExcelTemplateList, WcsTaskBakExcelTemplate.class); + } catch (IOException e) { + log.error("缓存过期Wcs任务记录异常。"); + } + } + + /** + * 保存拣选任务记录 + * @param fileSuffix 文件后缀 + * @param pickTaskBakList 数据记录 + */ + @Override + public void savePickTaskBak(String fileSuffix, List pickTaskBakList) { + if (pickTaskBakList == null || pickTaskBakList.isEmpty()) { + // 空数据体,不做处理 + return; + } + // 将数据转化为excel Template + List pickTaskExcelTemplateList = new ArrayList<>(pickTaskBakList.stream().map(log -> new PickTaskBakExcelTemplate( + log.getPickId(), + log.getPickStand(), + log.getVehicleId(), + log.getPickStatus(), + log.getCreateTime(), + log.getSendTime(), + log.getArriveTime(), + log.getLeaveTime() + )).toList()); + try { + // 写入excel + doWriteExcel("t_app_pick_task_bak_" + fileSuffix, ROOT_PATH + "/t_app_pick_task_bak", "t_app_pick_task_bak", pickTaskExcelTemplateList, PickTaskBakExcelTemplate.class); + } catch (IOException e) { + log.error("缓存过期拣选任务记录异常。"); + } + } +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java index 94f4011..d1c1cd2 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/IDataSolverService.java @@ -1,4 +1,21 @@ package com.wms_main.service.quartz_job; +/** + * 数据处理类 服务接口 + */ public interface IDataSolverService { + /** + * 清理日志数据 + */ + void clearLogData(); + + /** + * 清理普通记录 + */ + void clearNormalRecord(); + + /** + * 清理重要记录 + */ + void clearImportantRecord(); } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java index 015e64c..1cb2e26 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/job_executor/DataSolver.java @@ -1,5 +1,7 @@ package com.wms_main.service.quartz_job.job_executor; +import com.wms_main.repository.utils.StringUtils; +import com.wms_main.service.quartz_job.IDataSolverService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.quartz.*; @@ -12,6 +14,8 @@ import org.quartz.*; @DisallowConcurrentExecution @RequiredArgsConstructor public class DataSolver implements Job { + private final IDataSolverService dataSolverService;// 数据处理服务 + /** * 运行定时任务 * @@ -19,8 +23,20 @@ public class DataSolver implements Job { */ @Override public void execute(JobExecutionContext jobExecutionContext) { - // 获取 - // 获取各种需要处理的数据 - + try { + dataSolverService.clearLogData(); + } catch (Exception e) { + log.error("清除日志数据失败{}", StringUtils.objectToString(e)); + } + try { + dataSolverService.clearNormalRecord(); + } catch (Exception e) { + log.error("清除普通记录失败{}", StringUtils.objectToString(e)); + } + try { + dataSolverService.clearImportantRecord(); + } catch (Exception e) { + log.error("清除重要记录失败{}", StringUtils.objectToString(e)); + } } } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/DataSolverServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/DataSolverServiceImpl.java new file mode 100644 index 0000000..1b561b4 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/DataSolverServiceImpl.java @@ -0,0 +1,151 @@ +package com.wms_main.service.quartz_job.serviceImpl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wms_main.app.AppCommon; +import com.wms_main.constant.enums.wms.AppConfigKeyEnums; +import com.wms_main.dao.*; +import com.wms_main.excel.easypoi.service.ISaveExcelEasyPoi; +import com.wms_main.model.po.*; +import com.wms_main.service.quartz_job.IDataSolverService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +/** + * 数据处理类 服务实现 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class DataSolverServiceImpl implements IDataSolverService { + private final AppCommon appCommon;// 应用共同数据 + private final ITSysApiService sysApiService;// 接口发送日志服务 + private final ITSysLogService sysLogService;// 接口接收日志服务 + private final ITAppTaskBakService appTaskBakService;// Wms任务记录服务 + private final ITAppWcsTaskBakService appWcsTaskBakService;// Wcs任务记录服务 + private final ITAppPickTaskBakService appPickTaskBakService;// 拣选任务记录服务 + private final ISaveExcelEasyPoi saveExcelEasyPoi;// 记录保存excel服务 + + /** + * 清理日志文件 实现 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void clearLogData() { + // 日志清理间隔,默认7天 + int logClearInterval = 7; + // 获取日志清理间隔 + String logClearIntervalStr = appCommon.getConfigByKey(AppConfigKeyEnums.LOG_CLEAR_INTERVAL.getKey()); + try { + logClearInterval = Integer.parseInt(logClearIntervalStr); + } catch (Exception e) { + log.warn("获取日志清理间隔失败,使用默认值7天。"); + } + // 获取删除时间 + LocalDateTime deleteTime = LocalDateTime.now().minusDays(logClearInterval); + + // 获取过期接口接收日志 + List logList = sysLogService.list(new LambdaQueryWrapper().lt(TSysLog::getLogTime, deleteTime)); + if (logList != null && !logList.isEmpty()) { + // 缓存接收记录 + saveExcelEasyPoi.saveApiReceiveLogs(getSuffixFromDate(deleteTime, logClearInterval), logList); + // 删除接收记录 + sysLogService.removeBatchByIds(logList); + log.info("清理日志文件成功,清理了{}条接口接收日志。", logList.size()); + } + + // 获取过期接口发送日志 + List apiList = sysApiService.list(new LambdaQueryWrapper().lt(TSysApi::getLogTime, deleteTime)); + if (apiList != null && !apiList.isEmpty()) { + // 缓存发送记录 + saveExcelEasyPoi.saveApiSendLogs(getSuffixFromDate(deleteTime, logClearInterval), apiList); + // 删除发送记录 + sysApiService.removeBatchByIds(apiList); + log.info("清理日志文件成功,清理了{}条接口发送日志。", apiList.size()); + } + } + + /** + * 清理普通记录文件 实现 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void clearNormalRecord() { + // 普通记录清理间隔,默认180天 + int normalRecordClearInterval = 180; + // 获取普通记录清理间隔 + String normalRecordClearIntervalStr = appCommon.getConfigByKey(AppConfigKeyEnums.NORMAL_DATA_CLEAR_INTERVAL.getKey()); + try { + normalRecordClearInterval = Integer.parseInt(normalRecordClearIntervalStr); + } catch (Exception e) { + log.warn("获取普通记录清理间隔失败,使用默认值180天。"); + } + // 获取删除时间 + LocalDateTime deleteTime = LocalDateTime.now().minusDays(normalRecordClearInterval); + + // 查询Wms任务记录 + List wmsTaskBakList = appTaskBakService.list(new LambdaQueryWrapper().lt(TAppTaskBak::getCreateTime, deleteTime)); + if (wmsTaskBakList != null && !wmsTaskBakList.isEmpty()) { + // 备份数据 + saveExcelEasyPoi.saveWmsTaskBak(getSuffixFromDate(deleteTime, normalRecordClearInterval), wmsTaskBakList); + // 删除记录 + appTaskBakService.removeBatchByIds(wmsTaskBakList); + log.info("清理普通记录文件成功,清理了{}条Wms任务记录。", wmsTaskBakList.size()); + } + // 查询Wcs任务记录 + List wcsTaskBakList = appWcsTaskBakService.list(new LambdaQueryWrapper().lt(TAppWcsTaskBak::getCreateTime, deleteTime)); + if (wcsTaskBakList != null && !wcsTaskBakList.isEmpty()) { + // 备份数据 + saveExcelEasyPoi.saveWcsTaskBak(getSuffixFromDate(deleteTime, normalRecordClearInterval), wcsTaskBakList); + // 删除记录 + appWcsTaskBakService.removeBatchByIds(wcsTaskBakList); + log.info("清理普通记录文件成功,清理了{}条Wcs任务记录。", wcsTaskBakList.size()); + } + // 查询拣选任务记录 + List pickTaskBakList = appPickTaskBakService.list(new LambdaQueryWrapper().lt(TAppPickTaskBak::getCreateTime, deleteTime)); + if (pickTaskBakList != null && !pickTaskBakList.isEmpty()) { + // 备份数据 + saveExcelEasyPoi.savePickTaskBak(getSuffixFromDate(deleteTime, normalRecordClearInterval), pickTaskBakList); + // 删除记录 + appPickTaskBakService.removeBatchByIds(pickTaskBakList); + log.info("清理普通记录文件成功,清理了{}条拣选任务记录。", pickTaskBakList.size()); + } + } + + /** + * 清理重要记录文件 实现 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void clearImportantRecord() { + // 重要记录清理间隔,默认365天 + int importantRecordClearInterval = 365; + // 获取重要记录清理间隔 + String importantRecordClearIntervalStr = appCommon.getConfigByKey(AppConfigKeyEnums.IMPORTANT_DATA_CLEAR_INTERVAL.getKey()); + try { + importantRecordClearInterval = Integer.parseInt(importantRecordClearIntervalStr); + } catch (Exception e) { + log.warn("获取重要记录清理间隔失败,使用默认值365天。"); + } + // 获取删除时间 + LocalDateTime deleteTime = LocalDateTime.now().minusDays(importantRecordClearInterval); + + } + + /** + * 获取到文件的时间后缀 + * @param deleteTime 删除临界时间 + * @return 后缀字符串 + */ + private String getSuffixFromDate(LocalDateTime deleteTime, int clearInterval) { + DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd"); + String fromDateStr = dateFormat.format(deleteTime.minusDays(clearInterval)); + String toDateStr = dateFormat.format(deleteTime); + return fromDateStr + "~" + toDateStr; + } +} From b0e85f49c050b577259392ace3771f1724768620 Mon Sep 17 00:00:00 2001 From: liang <594755172@qq.com> Date: Thu, 29 May 2025 16:58:04 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0=201.?= =?UTF-8?q?=20=E8=A1=A5=E5=85=A8=E8=87=AA=E5=8A=A8=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B8=85=E7=90=86=E9=83=A8=E5=88=86=E3=80=82?= =?UTF-8?q?=202.=20=E5=A2=9E=E5=8A=A0=E7=BC=BA=E6=96=99=E5=86=8D=E9=85=8D?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev_wms_client/src/http/request.js | 1 - dev_wms_client/src/layout/OutsMonitor.vue | 23 +- dev_wms_client/src/layout/goodsOut.vue | 13 +- .../DbsRecordExcelTemplateForSave.java | 113 ++++++++++ .../InventoryRecordExcelTemplateForSave.java | 90 ++++++++ .../OutsRecordExcelTemplateForSave.java | 73 ++++++ ...StockUpdateRecordExcelTemplateForSave.java | 62 ++++++ .../WorkRecordExcelTemplateForSave.java | 111 ++++++++++ .../easypoi/service/ISaveExcelEasyPoi.java | 64 ++++++ .../service/serviceImpl/SaveExcelEasyPoi.java | 207 +++++++++++++++++- .../wms_main/model/dto/query/OutsQuery.java | 7 + .../com/wms_main/model/vo/wms/OutsVo.java | 25 +++ .../KateWorkControllerServiceImpl.java | 14 +- .../TaskQueryControllerServiceImpl.java | 35 ++- .../serviceImpl/DataSolverServiceImpl.java | 46 ++++ 15 files changed, 854 insertions(+), 30 deletions(-) create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/DbsRecordExcelTemplateForSave.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/InventoryRecordExcelTemplateForSave.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/OutsRecordExcelTemplateForSave.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/StockUpdateRecordExcelTemplateForSave.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/WorkRecordExcelTemplateForSave.java diff --git a/dev_wms_client/src/http/request.js b/dev_wms_client/src/http/request.js index 6211cff..483b2c0 100644 --- a/dev_wms_client/src/http/request.js +++ b/dev_wms_client/src/http/request.js @@ -5,7 +5,6 @@ const request = axios.create({ timeout: 5000 }) -// axios.defaults.baseURL = 'http://10.90.83.39:443/wmsServer/wms' // axios.defaults.baseURL = 'http://localhost:12315/wms' // axios.defaults.baseURL = 'https://s4wwjasrsp01.ap.cat.com/wmsServer/wms' diff --git a/dev_wms_client/src/layout/OutsMonitor.vue b/dev_wms_client/src/layout/OutsMonitor.vue index c4ce3b5..e710cb0 100644 --- a/dev_wms_client/src/layout/OutsMonitor.vue +++ b/dev_wms_client/src/layout/OutsMonitor.vue @@ -7,6 +7,11 @@ label-width="158px" style="max-width: 100%" status-icon>
+ + + - +