自动化立体仓库 - WMS系统
pang.jiabao
昨天 312e24f10492fdf99534946df068ba5b1a8331bd
ERP单据对接
7个文件已删除
3个文件已添加
13个文件已修改
614 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/u8/ReportU8Vo.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/u8/U8ResultVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ApiLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoReportingScheduler.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/AspectConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/中扬WMS系统API接口.docx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/apiLog/apiLog.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/apiLog/apiLog.html 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/operateLog/operateLog.html 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/bak/jsjasrs_backup_2025_11_02_230001_4793338.bak 补丁 | 查看 | 原始文档 | blame | 历史
version/bak/lfdasrs 补丁 | 查看 | 原始文档 | blame | 历史
version/bak/lfdasrs_LogBackup_2023-02-02_17-03-48.bak 补丁 | 查看 | 原始文档 | blame | 历史
version/doc/WCS与PLC通讯接口协议V1.docx 补丁 | 查看 | 原始文档 | blame | 历史
version/doc/中扬WCS与堆垛机通讯协议20220114.docx 补丁 | 查看 | 原始文档 | blame | 历史
version/doc/商品档案Excel导入模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
version/doc/自动化立体仓库ASRS与ERP对接协议_20220625A.docx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -5,6 +5,8 @@
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.u8.ReportU8Vo;
import com.zy.asrs.entity.u8.U8ResultVo;
import com.zy.asrs.service.OpenService;
import com.zy.common.model.DetlDto;
import com.zy.common.web.BaseController;
@@ -33,6 +35,24 @@
    @Autowired
    private OpenService openService;
    @PostMapping("/purchasein_import")
    @AppAuth(memo = "订单上报测试接口")
    public synchronized List<U8ResultVo> ts(@RequestHeader(required = false) String appkey,
                                            @RequestBody(required = false) List<ReportU8Vo> param,
                                            HttpServletRequest request){
        List<U8ResultVo> u8ResultVos = new ArrayList<>();
        for(ReportU8Vo reportU8Vo: param) {
            U8ResultVo u8ResultVo = new U8ResultVo();
            u8ResultVo.setResult("T");
            u8ResultVo.setDescription("");
            u8ResultVo.setReceiptNo(reportU8Vo.getCvouchcode());
            u8ResultVo.setU8ReceiptNo("");
            u8ResultVos.add(u8ResultVo);
        }
        return u8ResultVos;
    }
    @PostMapping("/order/matSync/default/v1")
    @AppAuth(memo = "商品信息同步")
    public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey,
src/main/java/com/zy/asrs/entity/u8/ReportU8Vo.java
New file
@@ -0,0 +1,160 @@
package com.zy.asrs.entity.u8;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
 * @author pang.jiabao
 * @description ä¸ŠæŠ¥U8请求体
 * @createDate 2026/3/27 14:02
 */
@Data
public class ReportU8Vo {
    /**
     * è´¦å¥—号
     */
    @JsonProperty("CACCID")
    @JSONField(name = "CACCID")
    private String caccid;
    /**
     * å•号
     */
    @JsonProperty("CVOUCHCODE")
    @JSONField(name = "CVOUCHCODE")
    private String cvouchcode;
    /**
     * æ—¥æœŸï¼ˆæ ¼å¼2015-01-01)
     */
    @JsonProperty("DDATE")
    @JSONField(name = "DDATE")
    private String ddate;
    /**
     * å…³è”单据类型
     */
    @JsonProperty("CGLTYPE")
    @JSONField(name = "CGLTYPE")
    private String cgltype;
    /**
     * ä»“库编码
     */
    @JsonProperty("CWHCODE")
    @JSONField(name = "CWHCODE")
    private String cwhcode;
    /**
     * å…¥åº“类别
     */
    @JsonProperty("CRDCODE")
    @JSONField(name = "CRDCODE")
    private String crdcode;
    /**
     * åˆ¶å•人
     */
    @JsonProperty("CMAKER")
    @JSONField(name = "CMAKER")
    private String cmaker;
    /**
     * å®¡æ ¸äºº
     */
    @JsonProperty("CHANDLER")
    @JSONField(name = "CHANDLER")
    private String chandler;
    /**
     * æ˜Žç»†åˆ—表
     */
    @JsonProperty("DETAILList")
    @JSONField(name = "DETAILList")
    private List<Item> detailList;
    @Data
    public static class Item {
        /**
         * å­˜è´§ç¼–码
         */
        @JsonProperty("CINVCODE")
        @JSONField(name = "CINVCODE")
        private String cinvcode;
        /**
         * ä¸»è®¡é‡å•位数量(精度取U8基础设置的数据精度)
         */
        @JsonProperty("IQUANTITY")
        @JSONField(name = "IQUANTITY")
        private Double iquantity;
        /**
         * æ‰¹å·
         */
        @JsonProperty("CBATCH")
        @JSONField(name = "CBATCH")
        private String cbatch;
        /**
         * é‡‡è´­å•关联明细ID
         */
        @JsonProperty("AUTOID_PO")
        @JSONField(name = "AUTOID_PO")
        private String autoidPo;
        /**
         * è®¢å•明细ID对应字段名
         */
        @JsonProperty("POAUTOIDCOL")
        @JSONField(name = "POAUTOIDCOL")
        private String poautoidcol;
        /**
         * å‘货单关联明细ID
         */
        @JsonProperty("AUTOID_SO")
        @JSONField(name = "AUTOID_SO")
        private String autoidSo;
        /**
         * è®¢å•明细ID对应字段名
         */
        @JsonProperty("SOAUTOIDCOL")
        @JSONField(name = "SOAUTOIDCOL")
        private String soautoidcol;
        /**
         * ç”Ÿäº§è®¢å•关联明细ID
         */
        @JsonProperty("AUTOID_MO")
        @JSONField(name = "AUTOID_MO")
        private String autoidMo;
        /**
         * è®¢å•明细ID对应字段名
         */
        @JsonProperty("MOAUTOIDCOL")
        @JSONField(name = "MOAUTOIDCOL")
        private String moautoidcol;
        /**
         * æ‰€æœ‰ç±»åž‹å…³è”明细ID
         */
        @JsonProperty("AUTOID_ALL")
        @JSONField(name = "AUTOID_ALL")
        private String autoidAll;
        /**
         * è®¢å•明细ID对应字段名
         */
        @JsonProperty("ALLCAUTOIDCOL")
        @JSONField(name = "ALLCAUTOIDCOL")
        private String allcautoidcol;
    }
}
src/main/java/com/zy/asrs/entity/u8/U8ResultVo.java
New file
@@ -0,0 +1,38 @@
package com.zy.asrs.entity.u8;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * @author pang.jiabao
 * @description U8响应体
 * @createDate 2026/3/27 13:59
 */
@Data
public class U8ResultVo {
    /**
     * æˆåŠŸT,失败F
     */
    @JsonProperty("Result")
    private String result;
    /**
     * å¤±è´¥åŽŸå› 
     */
    @JsonProperty("Description")
    private String description;
    /**
     * ä¼ å…¥çš„单号
     */
    @JsonProperty("ReceiptNo")
    private String receiptNo;
    /**
     * ç”ŸæˆåŽU8的单号
     */
    @JsonProperty("U8ReceiptNo")
    private String u8ReceiptNo;
}
src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -23,4 +23,9 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    /**
     * æ ¹æ®è®¢å•号批量更新订单状态
     */
    void batchUpdateSettleByOrderNos(List<String> successReceiptNos);
}
src/main/java/com/zy/asrs/service/ApiLogService.java
@@ -7,6 +7,8 @@
    void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success);
    void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success, String error);
    boolean clearWeekBefore();
}
src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java
@@ -45,6 +45,30 @@
    }
    @Override
    public void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success, String error) {
        Date now = new Date();
        ApiLog apiLog = new ApiLog(
                String.valueOf(snowflakeIdWorker.nextId()),    // æ—¥å¿—编号
                namespace,    // åç§°ç©ºé—´
                url,    // æŽ¥å£åœ°å€
                appkey,    // å¹³å°å¯†é’¥
                String.valueOf(now.getTime()),    // æ—¶é—´æˆ³
                ip,    // å®¢æˆ·ç«¯IP
                request,    // è¯·æ±‚内容
                response,
                error,    // å¼‚常内容
                success ? 1 : 0,    // ç»“æžœ
                1,    // çŠ¶æ€
                now,    // æ·»åŠ æ—¶é—´
                null,    // ä¿®æ”¹æ—¶é—´
                null    // å¤‡æ³¨
        );
        if (!this.insert(apiLog)) {
            log.error("接口调用日志保存失败!");
        }
    }
    @Override
    public boolean clearWeekBefore() {
        return this.baseMapper.clearWeekBefore() > 0;
    }
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -20,7 +20,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service("orderService")
@@ -98,15 +97,15 @@
            }
        }
        //当该订单明细数量==完成数量且>上报数量,上报状态为 å¦ æˆ–者 æ˜¯ æ—¶éƒ½æ”¹æˆç­‰å¾…上报,定时器轮询等待上报进行上报
        for (OrderDetl orderDetl : orderDetls) {
            if (Objects.equals(orderDetl.getAnfme(), orderDetl.getQty())&&
                    orderDetl.getQty()>(orderDetl.getUnits() == null ? 0 : orderDetl.getUnits())
                    &&orderDetl.getInspect()<2) {
                    orderDetl.setInspect(2);//等待上报
                    orderDetlService.updateById(orderDetl);
            }
        }
//        for (OrderDetl orderDetl : orderDetls) {
//            if (Objects.equals(orderDetl.getAnfme(), orderDetl.getQty())&&
//                    orderDetl.getQty()>(orderDetl.getUnits() == null ? 0 : orderDetl.getUnits())
//                    &&orderDetl.getInspect()<2) {
//
//                    orderDetl.setInspect(2);//等待上报
//                    orderDetlService.updateById(orderDetl);
//            }
//        }
        if (complete) {
            if (!this.updateSettle(order.getId(), 4L, null)) {
                throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
src/main/java/com/zy/asrs/task/AutoReportingScheduler.java
@@ -8,8 +8,6 @@
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -34,8 +32,8 @@
    private ConfigService configService;
    //    @Scheduled(cron = "0 0/10 * * * ? ")
    @Scheduled(cron = "0/10 * * * * ? ")
    @Async("orderThreadPool")
//    @Scheduled(cron = "0/10 * * * * ? ")
//    @Async("orderThreadPool")
    void execute() {
        Config config = configService.selectConfigByCode("AutoReportU8");
        if (config != null && config.getStatus() == 1) {
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -4,16 +4,18 @@
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.OrderSyncHandler;
import com.zy.common.entity.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2020/7/7
@@ -38,17 +40,46 @@
        }
    }
    @Resource
    private ThreadPoolTaskExecutor orderThreadPool;
//    @Scheduled(cron = "0/5 * * * * ? ")
    @Async("orderThreadPool")
    // 10分钟执行一次
    @Scheduled(cron = "0 0/10 * * * ?")
    public void completeAndReport(){
        String erpReport = Parameter.get().getErpReport();
        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
            List<Order> orders = orderService.selectComplete();
            for (Order order : orders) {
                ReturnT<String> result = orderSyncHandler.start(order);
                if (!result.isSuccess()) {
                    log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
            if (orders.isEmpty()) {
                return;
                }
            // æŒ‰å•据类型分组
            Map<String, List<Order>> groupedOrders = orders.stream()
                    .collect(Collectors.groupingBy(order -> {
                        String type = order.getDocType$();
                        switch (type) {
                            case "采购订单":
                            case "采购到货单":
                            case "委外订单":
                            case "委外到货单":
                            case "到货单":
                            case "来料检验单":
                                return "采购入库";
                            case "销售发货单":
                                return "销售出库";
                            case "生产订单":
                            case "检验单":
                                return "产成品入库单";
                            case "领料申请单":
                                return "材料出库单";
                            default:
                                return type;
                        }
                    }));
            for (Map.Entry<String, List<Order>> map : groupedOrders.entrySet()) {
                orderThreadPool.submit(() -> {
                    orderSyncHandler.startNew(map);
                });
            }
        }
    }
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -8,6 +8,9 @@
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.u8.ReportU8Vo;
import com.zy.asrs.entity.u8.U8ResultVo;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderDetlService;
@@ -24,7 +27,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2020/7/7
@@ -43,6 +49,18 @@
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    private static final String baseUrl = "127.0.0.1:8081/jsjwms/open/asrs";
    private static final Map<String, String> pathMap = new HashMap<String, String>() {{
        put("采购入库", "/purchasein_import");
        put("销售出库", "/saleout_import");
        put("产成品入库单", "/productin_import");
        put("材料出库单", "/materialout_import");
        put("其他入库单", "/otherin_import");
        put("其他出库单", "/otherout_import");
    }};
    @Resource
    private OrderMapper orderMapper;
    @Transactional
    public ReturnT<String> start(Order order) {
@@ -157,4 +175,226 @@
        return SUCCESS;
    }
    public void startNew(Map.Entry<String, List<Order>> orderMap) {
        String docName = orderMap.getKey();
        List<Order> value = orderMap.getValue();
        String path = pathMap.get(docName);
        if (path == null) {
            log.info("单据类型不存在:{}", docName);
            return;
        }
        // æž„造请求体
        List<ReportU8Vo> requestBody = getRequestBody(docName, value);
        String requestJson = JSONObject.toJSONString(requestBody);
        String response = "";
        boolean success = false;
        String errorMsg = null;
        String url = baseUrl + path;
        String nameSpaces = "单据上报";
        try {
            response = new HttpHandler.Builder()
                    .setUri(baseUrl)
                    .setPath(path)
                    .setJson(requestJson)
                    .build()
                    .doPost();
            List<U8ResultVo> list = JSON.parseArray(response, U8ResultVo.class);
            if (list != null && list.size() != 0) {
                List<String> successReceiptNos = list.stream().filter(u8ResultVo -> "T".equals(u8ResultVo.getResult())).map(U8ResultVo::getReceiptNo).collect(Collectors.toList());
                if (!successReceiptNos.isEmpty()) {
                    orderMapper.batchUpdateSettleByOrderNos(successReceiptNos);
                }
                log.info("单据上报成功,单据编号:{}", successReceiptNos);
                success = true;
            } else {
                errorMsg = response;
                log.error(nameSpaces + "调用外部接口失败,url:{},request:{},response:{}", url, requestJson, response);
            }
        } catch (Exception e) {
            errorMsg = e.getMessage();
            log.error(nameSpaces + "调用外部接口异常,url:{},request:{},response:{}", url, requestJson, response, e);
        } finally {
            try {
                apiLogService.save(
                        nameSpaces,
                        url,
                        null,
                        "127.0.0.1",
                        requestJson,
                        response,
                        success,
                        errorMsg
                );
            } catch (Exception e) {
                log.error(nameSpaces + "保存接口日志失败", e);
            }
        }
    }
    private List<ReportU8Vo> getRequestBody(String docName, List<Order> value) {
        List<ReportU8Vo> list = new ArrayList<>();
        String now = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        switch (docName) {
            case "采购入库":
                for (Order order : value) {
                    ReportU8Vo reportU8Vo = new ReportU8Vo();
                    reportU8Vo.setCaccid("001");
                    reportU8Vo.setCvouchcode(order.getOrderNo());
                    reportU8Vo.setDdate(now);
                    reportU8Vo.setCgltype(order.getDocType$());
                    reportU8Vo.setCwhcode("103");
                    reportU8Vo.setCrdcode("101");
                    reportU8Vo.setCmaker(order.getCreateBy$());
                    reportU8Vo.setChandler(order.getUpdateBy$());
                    List<ReportU8Vo.Item> itemList = new ArrayList<>();
                    List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
                    String docType$ = order.getDocType$();
                    for (OrderDetl orderDetl : orderDetlList) {
                        ReportU8Vo.Item item = new ReportU8Vo.Item();
                        item.setCinvcode(orderDetl.getMatnr());
                        item.setIquantity(orderDetl.getQty());
                        item.setAutoidPo(orderDetl.getSku());
                        item.setPoautoidcol(docType$.equals("采购订单") ? "ID" : docType$.equals("采购到货单") || docType$.equals("委外到货单") ? "Autoid" :
                                docType$.equals("委外订单") ? "MODetailsID" : "");
                        item.setCbatch(orderDetl.getBatch());
                        itemList.add(item);
                    }
                    reportU8Vo.setDetailList(itemList);
                    list.add(reportU8Vo);
                }
                break;
            case "销售出库":
                for (Order order : value) {
                    ReportU8Vo reportU8Vo = new ReportU8Vo();
                    reportU8Vo.setCaccid("001");
                    reportU8Vo.setCvouchcode(order.getOrderNo());
                    reportU8Vo.setDdate(now);
                    reportU8Vo.setCgltype(order.getDocType$());
                    reportU8Vo.setCwhcode("101");
                    reportU8Vo.setCrdcode("201");
                    reportU8Vo.setCmaker(order.getCreateBy$());
                    reportU8Vo.setChandler(order.getUpdateBy$());
                    List<ReportU8Vo.Item> itemList = new ArrayList<>();
                    List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
                    String docType$ = order.getDocType$();
                    for (OrderDetl orderDetl : orderDetlList) {
                        ReportU8Vo.Item item = new ReportU8Vo.Item();
                        item.setCinvcode(orderDetl.getMatnr());
                        item.setIquantity(orderDetl.getQty());
                        item.setAutoidSo(orderDetl.getSku());
                        item.setSoautoidcol(docType$.equals("发货单") ? "IDLSID" : "");
                        item.setCbatch(orderDetl.getBatch());
                        itemList.add(item);
                    }
                    reportU8Vo.setDetailList(itemList);
                    list.add(reportU8Vo);
                }
                break;
            case "产成品入库单":
                for (Order order : value) {
                    ReportU8Vo reportU8Vo = new ReportU8Vo();
                    reportU8Vo.setCaccid("001");
                    reportU8Vo.setCvouchcode(order.getOrderNo());
                    reportU8Vo.setDdate(now);
                    reportU8Vo.setCgltype(order.getDocType$());
                    reportU8Vo.setCwhcode("101");
                    reportU8Vo.setCrdcode("201");
                    reportU8Vo.setCmaker(order.getCreateBy$());
                    reportU8Vo.setChandler(order.getUpdateBy$());
                    List<ReportU8Vo.Item> itemList = new ArrayList<>();
                    List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
                    for (OrderDetl orderDetl : orderDetlList) {
                        ReportU8Vo.Item item = new ReportU8Vo.Item();
                        item.setCinvcode(orderDetl.getMatnr());
                        item.setIquantity(orderDetl.getQty());
                        item.setAutoidMo(orderDetl.getSku());
                        item.setMoautoidcol("MODID");
                        item.setCbatch(orderDetl.getBatch());
                        itemList.add(item);
                    }
                    reportU8Vo.setDetailList(itemList);
                    list.add(reportU8Vo);
                }
                break;
            case "材料出库单":
                for (Order order : value) {
                    ReportU8Vo reportU8Vo = new ReportU8Vo();
                    reportU8Vo.setCaccid("001");
                    reportU8Vo.setCvouchcode(order.getOrderNo());
                    reportU8Vo.setDdate(now);
                    reportU8Vo.setCgltype(order.getDocType$());
                    reportU8Vo.setCwhcode("5");
                    reportU8Vo.setCrdcode("202");
                    reportU8Vo.setCmaker(order.getCreateBy$());
                    reportU8Vo.setChandler(order.getUpdateBy$());
                    List<ReportU8Vo.Item> itemList = new ArrayList<>();
                    List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
                    String docType$ = order.getDocType$();
                    for (OrderDetl orderDetl : orderDetlList) {
                        ReportU8Vo.Item item = new ReportU8Vo.Item();
                        item.setCinvcode(orderDetl.getMatnr());
                        item.setIquantity(orderDetl.getQty());
                        item.setAutoidAll(orderDetl.getSku());
                        item.setAllcautoidcol(docType$.equals("生产订单") ? "AllocateId" : docType$.equals("委外订单") ? "MOMaterialsID" :
                                docType$.equals("领料申请单") ? "AutoID" : "");
                        item.setCbatch(orderDetl.getBatch());
                        itemList.add(item);
                    }
                    reportU8Vo.setDetailList(itemList);
                    list.add(reportU8Vo);
                }
                break;
            case "其他入库单":
                for (Order order : value) {
                    ReportU8Vo reportU8Vo = new ReportU8Vo();
                    reportU8Vo.setCaccid("001");
                    reportU8Vo.setCvouchcode(order.getOrderNo());
                    reportU8Vo.setDdate(now);
                    reportU8Vo.setCgltype(order.getDocType$());
                    reportU8Vo.setCwhcode("109");
                    reportU8Vo.setCrdcode("199");
                    reportU8Vo.setCmaker(order.getCreateBy$());
                    reportU8Vo.setChandler(order.getUpdateBy$());
                    List<ReportU8Vo.Item> itemList = new ArrayList<>();
                    List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
                    for (OrderDetl orderDetl : orderDetlList) {
                        ReportU8Vo.Item item = new ReportU8Vo.Item();
                        item.setCinvcode(orderDetl.getMatnr());
                        item.setIquantity(orderDetl.getQty());
                        item.setCbatch(orderDetl.getBatch());
                        itemList.add(item);
                    }
                    reportU8Vo.setDetailList(itemList);
                    list.add(reportU8Vo);
                }
                break;
            case "其他出库单":
                for (Order order : value) {
                    ReportU8Vo reportU8Vo = new ReportU8Vo();
                    reportU8Vo.setCaccid("001");
                    reportU8Vo.setCvouchcode(order.getOrderNo());
                    reportU8Vo.setDdate(now);
                    reportU8Vo.setCgltype(order.getDocType$());
                    reportU8Vo.setCwhcode("109");
                    reportU8Vo.setCrdcode("299");
                    reportU8Vo.setCmaker(order.getCreateBy$());
                    reportU8Vo.setChandler(order.getUpdateBy$());
                    List<ReportU8Vo.Item> itemList = new ArrayList<>();
                    List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
                    for (OrderDetl orderDetl : orderDetlList) {
                        ReportU8Vo.Item item = new ReportU8Vo.Item();
                        item.setCinvcode(orderDetl.getMatnr());
                        item.setIquantity(orderDetl.getQty());
                        item.setCbatch(orderDetl.getBatch());
                        itemList.add(item);
                    }
                    reportU8Vo.setDetailList(itemList);
                    list.add(reportU8Vo);
                }
                break;
            default:
        }
        return list;
    }
}
src/main/java/com/zy/common/config/AspectConfig.java
@@ -89,7 +89,7 @@
    private void saveLog(ProceedingJoinPoint joinPoint, HttpServletRequest request, Object result,String memo) {
        Long userId = 9527L;
        String token = request.getHeader("token");
        UserLogin userLogin = userLoginService.selectOne(new EntityWrapper<UserLogin>().eq("token", token).eq("system", "WMS"));
        UserLogin userLogin = userLoginService.selectOne(new EntityWrapper<UserLogin>().eq("token", token));
        if (userLogin != null) {
            User user = userService.selectById(userLogin.getUserId());
            if (user != null) {
src/main/resources/mapper/OrderMapper.xml
@@ -53,9 +53,17 @@
        where 1=1
        and id = #{orderId}
    </update>
    <update id="batchUpdateSettleByOrderNos">
        update man_order
        set settle = 6
        where order_no in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </update>
    <select id="selectComplete" resultMap="BaseResultMap">
        select top 5 *
        select top 100 *
        from man_order
        where 1=1
        and settle = 4
src/main/resources/ÖÐÑïWMSϵͳAPI½Ó¿Ú.docx
Binary files differ
src/main/webapp/static/js/apiLog/apiLog.js
@@ -21,8 +21,9 @@
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            // ,{field: 'id', align: 'center',title: 'ID'}
            // {type: 'checkbox'}
            {field: 'id', align: 'center',title: 'ID', width: 100}
            ,{field: 'createTime$', align: 'center',title: '添加时间', width: 160}
            // ,{field: 'uuid', align: 'center',title: '日志编号'}
            ,{field: 'namespace', align: 'center',title: '名称空间'}
            ,{field: 'url', align: 'center',title: '表单ID'}
@@ -31,14 +32,13 @@
            ,{field: 'clientIp', align: 'center',title: 'URL',hide: true}
            ,{field: 'request', align: 'center',title: '请求内容'}
            ,{field: 'response', align: 'center',title: '操作内容'}
            // ,{field: 'err', align: 'center',title: '异常内容'}
            ,{field: 'err', align: 'center',title: '异常内容'}
            ,{field: 'result$', align: 'center',title: '结果', templet: '#resTpl', width: 80}
            // ,{field: 'status$', align: 'center',title: '状态'}
            ,{field: 'createTime$', align: 'center',title: '添加时间'}
            // ,{field: 'updateTime$', align: 'center',title: '修改时间'}
            ,{field: 'memo', align: 'center',title: '备注', hide: true}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 80}
            // ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 80}
        ]],
        request: {
            pageName: 'curr',
@@ -244,6 +244,16 @@
        }, 300);
    }
    layDateRender();
    // æ—¶é—´é€‰æ‹©å™¨
    layDate.render({
        elem: '#createTime\\$',
        type: 'datetime'
    });
    layDate.render({
        elem: '.layui-laydate-range'
        ,type: 'datetime'
        ,range: true
    });
});
src/main/webapp/views/apiLog/apiLog.html
@@ -29,6 +29,12 @@
                            <input class="layui-input" type="text" name="request" placeholder="请输入(订单号或品号)" autocomplete="off">
                        </div>
                    </div>
                    <!-- æ—¥æœŸèŒƒå›´ -->
                    <div class="layui-inline" style="width: 300px">
                        <div class="layui-input-inline">
                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - ç»ˆæ­¢æ—¶é—´" autocomplete="off" style="width: 300px">
                        </div>
                    </div>
                    <div class="layui-inline">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
@@ -47,7 +53,8 @@
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>-->
        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>
<!--        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>-->
        <button></button>
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button>
    </div>
</script>
src/main/webapp/views/operateLog/operateLog.html
@@ -16,18 +16,12 @@
<div id="search-box" class="layui-form layui-card-header">
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off">
            <input class="layui-input" type="text" name="action" placeholder="名称空间" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline cool-auto-complete">
            <input id="userId" class="layui-input" name="user_id" type="text" placeholder="请输入" autocomplete="off" style="display: none">
            <input id="userUsername" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="用户" onfocus=this.blur()>
            <div class="cool-auto-complete-window">
                <input class="cool-auto-complete-window-input" data-key="userQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
                <select class="cool-auto-complete-window-select" data-key="userQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                </select>
            </div>
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="request" placeholder="操作内容" autocomplete="off">
        </div>
    </div>
    <!-- æ—¥æœŸèŒƒå›´ -->
version/bak/jsjasrs_backup_2025_11_02_230001_4793338.bak
Binary files differ
version/bak/lfdasrs
Binary files differ
version/bak/lfdasrs_LogBackup_2023-02-02_17-03-48.bak
Binary files differ
version/doc/WCSÓëPLCͨѶ½Ó¿ÚЭÒéV1.docx
Binary files differ
version/doc/ÖÐÑïWCSÓë¶Ñ¶â»úͨѶЭÒé20220114.docx
Binary files differ
version/doc/ÉÌÆ·µµ°¸Excelµ¼ÈëÄ£°å.xlsx
Binary files differ
version/doc/×Ô¶¯»¯Á¢Ìå²Ö¿âASRSÓëERP¶Ô½ÓЭÒé_20220625A.docx
Binary files differ