#
Junjie
1 天以前 a2a5f1b9b70be48687ac7f84ebf6aa132c3721e9
#
1个文件已添加
6个文件已修改
170 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/WrkMastController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/AdminInterceptor.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/RequestBodyCacheFilter.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkBatchOut/wrkBatchOut.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkBatchOut/wrkBatchOut.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -35,7 +35,6 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -112,42 +111,11 @@
        if (param == null) {
            return R.error("参数不能为空");
        }
        List<CreateOutTaskParam> taskList = param.getTaskList();
        if (taskList == null || taskList.size() == 0) {
            return R.error("任务列表不能为空");
        boolean result = commonService.createOutTaskBatch(param);
        if (result) {
            return R.ok();
        }
        List<CreateOutTaskParam> sortedTaskList = new ArrayList<>(taskList);
        sortedTaskList.sort(Comparator.nullsLast(Comparator
                .comparing(this::getSortableBatch, Comparator.nullsLast(String::compareTo))
                .thenComparing(this::getSortableBatchSeq, Comparator.nullsLast(Integer::compareTo))));
        for (CreateOutTaskParam createOutTaskParam : sortedTaskList) {
            if (createOutTaskParam == null) {
                throw new CoolException("任务参数不能为空");
            }
            commonService.createOutTask(createOutTaskParam);
        }
        return R.ok();
    }
    private String getSortableBatch(CreateOutTaskParam param) {
        if (param == null) {
            return null;
        }
        String batch = param.getBatch();
        if (batch == null || batch.trim().isEmpty()) {
            return null;
        }
        return batch;
    }
    private Integer getSortableBatchSeq(CreateOutTaskParam param) {
        if (param == null) {
            return null;
        }
        return param.getBatchSeq();
        return R.error("生成批量出库任务失败");
    }
    @PostMapping("/completeTask")
src/main/java/com/zy/asrs/controller/WrkMastController.java
@@ -6,11 +6,16 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.domain.param.CreateOutTaskBatchParam;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.service.CommonService;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@@ -23,6 +28,8 @@
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private CommonService commonService;
    @RequestMapping(value = "/wrkMast/list/auth")
    @ManagerAuth
@@ -47,6 +54,20 @@
        return R.ok(wrkMastService.page(new Page<>(curr, limit), wrapper));
    }
    @PostMapping(value = "/wrkBatchOut/create/auth")
    @ManagerAuth(memo = "生成出库任务")
    @Transactional
    public R createBatchOutTask(@RequestBody CreateOutTaskBatchParam param) {
        if (param == null) {
            return R.error("参数不能为空");
        }
        boolean result = commonService.createOutTaskBatch(param);
        if (result) {
            return R.ok();
        }
        return R.error("生成批量出库任务失败");
    }
    private <T> void convert(Map<String, Object> map, QueryWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
src/main/java/com/zy/common/config/AdminInterceptor.java
@@ -16,9 +16,12 @@
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.ContentCachingRequestWrapper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.LinkedHashMap;
@@ -99,6 +102,7 @@
            return;
        }
        OperateLog operateLog = (OperateLog) obj;
        operateLog.setRequest(buildRequestContent(request));
        operateLog.setResponse(buildResponseContent(response, ex));
        try {
            operateLogService.save(operateLog);
@@ -188,11 +192,38 @@
        operateLog.setAction(Cools.isEmpty(memo) ? request.getRequestURI() : memo);
        operateLog.setIp(request.getRemoteAddr());
        operateLog.setUserId(userId);
        operateLog.setRequest(JSON.toJSONString(request.getParameterMap()));
        operateLog.setCreateTime(new Date());
        request.setAttribute(ATTR_OPERATE_LOG, operateLog);
    }
    private String buildRequestContent(HttpServletRequest request) {
        String body = readCachedBody(request);
        if (!Cools.isEmpty(body)) {
            return body;
        }
        return JSON.toJSONString(request.getParameterMap());
    }
    private String readCachedBody(HttpServletRequest request) {
        if (!(request instanceof ContentCachingRequestWrapper)) {
            return null;
        }
        ContentCachingRequestWrapper wrapper = (ContentCachingRequestWrapper) request;
        byte[] content = wrapper.getContentAsByteArray();
        if (content == null || content.length == 0) {
            return null;
        }
        Charset charset = StandardCharsets.UTF_8;
        if (!Cools.isEmpty(wrapper.getCharacterEncoding())) {
            try {
                charset = Charset.forName(wrapper.getCharacterEncoding());
            } catch (Exception ignored) {
            }
        }
        String body = new String(content, charset).trim();
        return body.isEmpty() ? null : body;
    }
    private String buildResponseContent(HttpServletResponse response, Exception ex) {
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("status", response.getStatus());
src/main/java/com/zy/common/config/RequestBodyCacheFilter.java
New file
@@ -0,0 +1,29 @@
package com.zy.common.config;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
import java.io.IOException;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RequestBodyCacheFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        if (request instanceof ContentCachingRequestWrapper) {
            filterChain.doFilter(request, response);
            return;
        }
        ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
        filterChain.doFilter(requestWrapper, response);
    }
}
src/main/java/com/zy/common/service/CommonService.java
@@ -21,6 +21,7 @@
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Random;
@@ -481,6 +482,48 @@
        return true;
    }
    public boolean createOutTaskBatch(CreateOutTaskBatchParam param) {
        if (param == null) {
            throw new CoolException("参数不能为空");
        }
        List<CreateOutTaskParam> taskList = param.getTaskList();
        if (taskList == null || taskList.isEmpty()) {
            throw new CoolException("任务列表不能为空");
        }
        List<CreateOutTaskParam> sortedTaskList = new ArrayList<>(taskList);
        sortedTaskList.sort(Comparator.nullsLast(Comparator
                .comparing(this::getSortableBatch, Comparator.nullsLast(String::compareTo))
                .thenComparing(this::getSortableBatchSeq, Comparator.nullsLast(Integer::compareTo))));
        for (CreateOutTaskParam createOutTaskParam : sortedTaskList) {
            if (createOutTaskParam == null) {
                throw new CoolException("任务参数不能为空");
            }
            createOutTask(createOutTaskParam);
        }
        return true;
    }
    private String getSortableBatch(CreateOutTaskParam param) {
        if (param == null) {
            return null;
        }
        String batch = param.getBatch();
        if (batch == null || batch.trim().isEmpty()) {
            return null;
        }
        return batch;
    }
    private Integer getSortableBatchSeq(CreateOutTaskParam param) {
        if (param == null) {
            return null;
        }
        return param.getBatchSeq();
    }
    public FindCrnNoResult findCrnNoByLocNo(String locNo) {
        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
        for (BasCrnp basCrnp : basCrnps) {
src/main/webapp/static/js/wrkBatchOut/wrkBatchOut.js
@@ -336,7 +336,7 @@
                vm.submitting = true;
                $.ajax({
                    url: baseUrl + "/openapi/createOutTaskBatch",
                    url: baseUrl + "/wrkBatchOut/create/auth",
                    contentType: "application/json",
                    headers: { token: localStorage.getItem("token") },
                    data: JSON.stringify({ taskList: taskList }),
src/main/webapp/views/wrkBatchOut/wrkBatchOut.html
@@ -484,5 +484,5 @@
<script type="text/javascript" src="../../static/js/common.js?v=20260309_i18n_fix1"></script>
<script type="text/javascript" src="../../static/vue/js/vue.min.js"></script>
<script type="text/javascript" src="../../static/vue/element/element.js"></script>
<script type="text/javascript" src="../../static/js/wrkBatchOut/wrkBatchOut.js?v=20260321_batch_outbound_table_v5"></script>
<script type="text/javascript" src="../../static/js/wrkBatchOut/wrkBatchOut.js?v=20260321_batch_outbound_table_v6"></script>
</html>