自动化立体仓库 - WMS系统
#
Junjie
2025-06-18 a2ef24e5d60de082204a53e65bff6705e064c61e
#
4个文件已修改
3个文件已添加
314 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/ReportToThirdService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ReportToThirdServiceImpl.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/ReportInventoryCheckOrdersScheduler.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/vo/InvCountBodyVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/vo/InvCountHeaderVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ReportToThirdService.java
@@ -1,6 +1,7 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.InventoryCheckOrder;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
@@ -12,4 +13,6 @@
    boolean reportTkrk(String matnr, String batch, String orderNo, Double anfme);
    boolean reportCheckOrder(InventoryCheckOrder checkOrder);
}
src/main/java/com/zy/asrs/service/impl/ReportToThirdServiceImpl.java
@@ -6,14 +6,8 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.StoreType;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.ReportToThirdService;
import com.zy.asrs.service.StoreTypeService;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.nc.SendUtil;
import com.zy.nc.entity.*;
import com.zy.nc.service.NccSaleXsfhmxWmsService;
@@ -36,9 +30,14 @@
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private InventoryCheckOrderService inventoryCheckOrderService;
    @Autowired
    private InventoryCheckOrderDetlService inventoryCheckOrderDetlService;
    @Autowired
    private StoreTypeService storeTypeService;
@@ -60,6 +59,9 @@
    @Value("${NYNC.saveRefWhsTrans}")
    private String saveRefWhsTrans;
    @Value("${NYNC.invcountAdd}")
    private String invcountAdd;
    @Value("${NYNC.purchasein}")
    private String purchasein;
@@ -219,6 +221,21 @@
        }
    }
    @Override
    public boolean reportCheckOrder(InventoryCheckOrder checkOrder) {
        Object process1 = processInvcount(checkOrder);
        //发送请求
        NcResultMessage response = SendUtil.sendDataToNc(SendUtil.token, nyncIp + ":" + port, invcountAdd, JSONObject.toJSONString(process1));
        log.info("盘点单response:{}", response);
        if (!Cools.isEmpty(response) && response.isSuccess()) {
            log.info("盘点单response:{}", response);
            return true;
        } else {
//            remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
            return false;
        }
    }
    private Object processXSFH(List<OrderDetl> orderDetls, Boolean flag) {
        //组装对象数据
        Map<String, Object> data = new HashMap<String, Object>();
@@ -296,6 +313,47 @@
        return data;
    }
    private Object processInvcount(InventoryCheckOrder checkOrder) {
        List<InventoryCheckOrderDetl> inventoryCheckOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>()
                .eq("order_no", checkOrder.getOrderNo()));
        if (inventoryCheckOrderDetls.isEmpty()) {
            throw new CoolException("盘点明细不存在");
        }
        //组装对象数据
        Map<String, Object> data = new HashMap<String, Object>();
        //仓库id
        String cwarehouseid = null;
        List<InvCountBodyVO> invCountBodyVOList = new ArrayList<>();
        for (InventoryCheckOrderDetl inventoryCheckOrderDetl : inventoryCheckOrderDetls) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>()
                    .eq("matnr", inventoryCheckOrderDetl.getMatnr())
                    .eq("batch", inventoryCheckOrderDetl.getBatch())
            );
            if (wrkDetls.isEmpty()) {
                throw new CoolException("工作档明细不存在");
            }
            cwarehouseid = wrkDetls.get(0).getStandby1();
            InvCountBodyVO invCountBodyVO = new InvCountBodyVO();
            invCountBodyVO.setCmaterialoid(inventoryCheckOrderDetl.getMatnr());
            invCountBodyVO.setVbatchcode(inventoryCheckOrderDetl.getBatch());
            invCountBodyVO.setNcountastnum(inventoryCheckOrderDetl.getCheckAnfme());
            invCountBodyVOList.add(invCountBodyVO);
        }
        InvCountHeaderVO invCountHeaderVO = new InvCountHeaderVO();
        invCountHeaderVO.setPk_org("FYT");
        invCountHeaderVO.setCtrantypeid("4R-01");
        invCountHeaderVO.setCwarehouseid(cwarehouseid);
        data.put("InvCountHeaderVO", invCountHeaderVO);
        data.put("InvCountBodyVO", invCountBodyVOList);
        return data;
    }
    private Object processZKRK(List<OrderDetl> orderDetls) {
        //组装对象数据
        Map<String, Object> data = new HashMap<String, Object>();
src/main/java/com/zy/asrs/task/ReportInventoryCheckOrdersScheduler.java
New file
@@ -0,0 +1,127 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.InventoryCheckOrder;
import com.zy.asrs.entity.InventoryCheckOrderDetl;
import com.zy.asrs.service.InventoryCheckOrderDetlService;
import com.zy.asrs.service.InventoryCheckOrderService;
import com.zy.asrs.service.ReportToThirdService;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class ReportInventoryCheckOrdersScheduler {
    @Autowired
    private InventoryCheckOrderService inventoryCheckOrderService;
    @Autowired
    private InventoryCheckOrderDetlService inventoryCheckOrderDetlService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private ReportToThirdService reportToThirdService;
    /**
     * 上报盘点结果
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute() {
        List<InventoryCheckOrder> inventoryCheckOrders = inventoryCheckOrderService.selectList(new EntityWrapper<InventoryCheckOrder>()
                .eq("status", 1));
        if (inventoryCheckOrders.isEmpty()) {
            return;
        }
        for (InventoryCheckOrder checkOrder : inventoryCheckOrders) {
            List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrder.getOrderNo()));
            boolean complete = true;
            for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) {
                if (!checkOrderDetl.getStatus().equals("2")) {
                    complete = false;
                }
            }
            if (complete) {
                boolean result = reportToThirdService.reportCheckOrder(checkOrder);
                if (!result) {
                    continue;
                }
                checkOrder.setStatus("2");
                if (!inventoryCheckOrderService.updateById(checkOrder)) {
                    log.error("盘点单[orderNo={}]更新状态成功", checkOrder.getOrderNo());
                } else {
                    log.info("盘点单[orderNo={}]更新状态失败", checkOrder.getOrderNo());
                }
            }
        }
    }
    /**
     * 自动删除超过1天,无明细的盘点单
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute2() {
        List<InventoryCheckOrder> inventoryCheckOrders = inventoryCheckOrderService.selectList(new EntityWrapper<InventoryCheckOrder>());
        if (inventoryCheckOrders.isEmpty()) {
            return;
        }
        for (InventoryCheckOrder checkOrder : inventoryCheckOrders) {
            List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrder.getOrderNo()));
            if (checkOrderDetls.isEmpty() && System.currentTimeMillis() - checkOrder.getCreateTime().getTime() >= 1000 * 60 * 60 * 24) {
                if (!inventoryCheckOrderService.deleteById(checkOrder)) {
                    log.error("盘点单[orderNo={}]删除失败", checkOrder.getOrderNo());
                } else {
                    log.info("盘点单[orderNo={}]删除成功", checkOrder.getOrderNo());
                }
            }
        }
    }
//    /**
//     * 自动完结达到一定数量的盘点单
//     */
//    @Scheduled(cron = "0/30 * * * * ? ")
//    public void execute3() {
//        List<InventoryCheckOrder> inventoryCheckOrders = inventoryCheckOrderService.selectList(new EntityWrapper<InventoryCheckOrder>());
//        if (inventoryCheckOrders.isEmpty()) {
//            return;
//        }
//        int num = 20;
//        try {
//            Config config = configService.selectConfigByCode("CheckOrderNum");
//            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
//
//            } else {
//                num = Integer.parseInt(config.getValue());
//            }
//        } catch (Exception e) {
//
//        }
//        for (InventoryCheckOrder checkOrder : inventoryCheckOrders) {
//            List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrder.getOrderNo()));
//            boolean complete = true;
//            for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) {
//                if (!checkOrderDetl.getStatus().equals("2")) {
//                    complete = false;
//                }
//            }
//            if (complete && checkOrderDetls.size() >= num) {
//                checkOrder.setStatus("2");
//                if (!inventoryCheckOrderService.updateById(checkOrder)) {
//                    log.error("盘点单[orderNo={}]更新状态成功", checkOrder.getOrderNo());
//                } else {
//                    log.info("盘点单[orderNo={}]更新状态失败", checkOrder.getOrderNo());
//                }
//            }
//        }
//    }
}
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,17 +1,9 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.InventoryCheckOrder;
import com.zy.asrs.entity.InventoryCheckOrderDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.InventoryCheckOrderDetlService;
import com.zy.asrs.service.InventoryCheckOrderService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkMastHandler;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,17 +26,6 @@
    @Autowired
    private WorkMastHandler workMastHandler;
    @Autowired
    private InventoryCheckOrderService inventoryCheckOrderService;
    @Autowired
    private InventoryCheckOrderDetlService inventoryCheckOrderDetlService;
    @Autowired
    private ConfigService configService;
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute() {
@@ -60,66 +41,6 @@
                wrkMast.setErrorTime(new Date());
                if (!wrkMastService.updateById(wrkMast)) {
                    log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo());
                }
            }
        }
    }
    /**
     * 自动删除超过1天,无明细的盘点单
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute2() {
        List<InventoryCheckOrder> inventoryCheckOrders = inventoryCheckOrderService.selectList(new EntityWrapper<InventoryCheckOrder>());
        if (inventoryCheckOrders.isEmpty()) {
            return;
        }
        for (InventoryCheckOrder checkOrder : inventoryCheckOrders) {
            List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrder.getOrderNo()));
            if (checkOrderDetls.isEmpty() && System.currentTimeMillis() - checkOrder.getCreateTime().getTime() >= 1000 * 60 * 60 * 24) {
                if (!inventoryCheckOrderService.deleteById(checkOrder)) {
                    log.error("盘点单[orderNo={}]删除失败", checkOrder.getOrderNo());
                } else {
                    log.info("盘点单[orderNo={}]删除成功", checkOrder.getOrderNo());
                }
            }
        }
    }
    /**
     * 自动完结达到一定数量的盘点单
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void execute3() {
        List<InventoryCheckOrder> inventoryCheckOrders = inventoryCheckOrderService.selectList(new EntityWrapper<InventoryCheckOrder>());
        if (inventoryCheckOrders.isEmpty()) {
            return;
        }
        int num = 20;
        try {
            Config config = configService.selectConfigByCode("CheckOrderNum");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
            } else {
                num = Integer.parseInt(config.getValue());
            }
        } catch (Exception e) {
        }
        for (InventoryCheckOrder checkOrder : inventoryCheckOrders) {
            List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrder.getOrderNo()));
            boolean complete = true;
            for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) {
                if (!checkOrderDetl.getStatus().equals("2")) {
                    complete = false;
                }
            }
            if (complete && checkOrderDetls.size() >= num) {
                checkOrder.setStatus("2");
                if (!inventoryCheckOrderService.updateById(checkOrder)) {
                    log.error("盘点单[orderNo={}]更新状态成功", checkOrder.getOrderNo());
                } else {
                    log.info("盘点单[orderNo={}]更新状态失败", checkOrder.getOrderNo());
                }
            }
        }
src/main/java/com/zy/nc/vo/InvCountBodyVO.java
New file
@@ -0,0 +1,14 @@
package com.zy.nc.vo;
import lombok.Data;
@Data
public class InvCountBodyVO {
    private String cmaterialoid;//物料
    private String vbatchcode;//批次
    private Double ncountastnum;//盘点数量
}
src/main/java/com/zy/nc/vo/InvCountHeaderVO.java
New file
@@ -0,0 +1,13 @@
package com.zy.nc.vo;
import lombok.Data;
@Data
public class InvCountHeaderVO {
    // 必填字段
    private String pk_org; // 库存组织最新版本
    private String cwarehouseid; // 仓库
    private String ctrantypeid; // 盘点类型
}
src/main/resources/application.yml
@@ -99,6 +99,8 @@
  whstrans: /nccloud/api/ic/whstrans/save
  #4.2其他出库单新增
  generalout: /nccloud/api/ic/generalout/save
  #盘点单新增
  invcountAdd: /nccloud/api/ic/invcount/save
  #4.3.其他入库单参照转库新增
  #saveRefWhsTrans: http://ip:port/nccloud/api/ic/generalin/saveRefWhsTrans
  #5.1新增转库单