自动化立体仓库 - WMS系统
2e82ef6fd6dfbcb1eb88a8d4b705eae7fb99065b..247896d55a78e71c2c7b7c7a525d355d84aa07b8
2025-06-07 lsh
#
247896 对比 | 目录
2025-06-07 lsh
#
60cdda 对比 | 目录
2025-06-07 Junjie
Merge remote-tracking branch 'origin/ytflWms' into ytflWms
be35fc 对比 | 目录
2025-06-07 Junjie
#
d22260 对比 | 目录
2025-06-07 zhang
盘点
e98497 对比 | 目录
8个文件已修改
181 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MatController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/InventoryCheckOrder.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LocMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java
@@ -69,7 +69,7 @@
        EntityWrapper<Mat> wrapper = new EntityWrapper<>();
        if (!Cools.isEmpty(condition)) {
//            wrapper.like("matnr", condition).or().like("maktx", condition);
            wrapper.like("matnr", condition).or().like("specs", condition);
            wrapper.like("matnr", condition).or().like("specs", condition).or().like("maktx", condition);
        }
        wrapper.orderBy("create_time", false);
        List<Mat> mats = matService.selectList(wrapper);
src/main/java/com/zy/asrs/entity/InventoryCheckOrder.java
@@ -87,9 +87,11 @@
        }
        switch (this.status){
            case "1":
                return "未提交";
                return "盘点中";
            case "2":
                return "已提交";
                return "盘点完";
            case "3":
                return "已上报";
            default:
                return "";
        }
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -17,6 +17,7 @@
import com.zy.common.model.DetlDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.utils.Synchro;
import com.zy.nc.service.NccJcQilibcBarcodeflowWmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -794,8 +795,6 @@
                        }
                    }
                    //如果已经拣料回库,就需要取locNo字段
//                    String locNo =Cools.isEmpty(wrkMast.getLocNo())?  wrkMast.getSourceLocNo():wrkMast.getLocNo();
//                    inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("loc_no",locNo))
                    iterator.remove();
                    iterator1.remove();
                }
@@ -827,7 +826,21 @@
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("添加" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "批号任务明细失败");
            }
            String locNo = Cools.isEmpty(wrkMast.getLocNo()) ? wrkMast.getSourceLocNo() : wrkMast.getLocNo();
            List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("loc_no", locNo));
            for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) {
                if (wrkDetl.getMatnr().equals(checkOrderDetl.getMatnr()) && Cools.eq(wrkDetl.getBatch(), checkOrderDetl.getBatch())) {
                    checkOrderDetl.setCheckAnfme(wrkDetl.getAnfme());
                    checkOrderDetl.setStatus("2");
                } else {
                    InventoryCheckOrderDetl newDetl = new InventoryCheckOrderDetl();
                    Synchro.Copy(wrkDetl, newDetl);
                    newDetl.setAnfme(0D);
                    newDetl.setCheckAnfme(wrkDetl.getAnfme());
                    newDetl.setOrderNo(checkOrderDetl.getOrderNo());
                    newDetl.setStatus("2");
                }
            }
        }
        List<WrkDetl> wrkDetls1 = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls1) {
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -389,6 +389,10 @@
                    throw new CoolException("保存工作档明细失败");
                }
                if (ioType == 107) {
                    List<InventoryCheckOrderDetl> checkOrderDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrderNo).eq("loc_no", dto.getLocNo()));
                    if (checkOrderDetls != null && !checkOrderDetls.isEmpty()) {
                        throw new CoolException("该库位的盘点任务已经添加到了该库位中");
                    }
                    InventoryCheckOrderDetl checkOrderDetl = new InventoryCheckOrderDetl();
                    checkOrderDetl.setOrderNo(checkOrderNo);
                    checkOrderDetl.setMatnr(detlDto.getLocDetl().getMatnr());
@@ -396,6 +400,7 @@
                    checkOrderDetl.setBatch(detlDto.getLocDetl().getBatch());
                    checkOrderDetl.setLocNo(detlDto.getLocDetl().getLocNo());
                    checkOrderDetl.setAnfme(detlDto.getLocDetl().getAnfme());
                    checkOrderDetl.setIoTime(new Date());
                    checkOrderDetl.setStatus("0");
                    checkOrderDetlService.insert(checkOrderDetl);
                }
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,9 +1,17 @@
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;
@@ -26,8 +34,20 @@
    @Autowired
    private WorkMastHandler workMastHandler;
    @Autowired
    private InventoryCheckOrderService inventoryCheckOrderService;
    @Autowired
    private InventoryCheckOrderDetlService inventoryCheckOrderDetlService;
    @Autowired
    private ConfigService configService;
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute(){
    public void execute() {
        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
        if (wrkMasts.isEmpty()) {
            return;
@@ -45,4 +65,64 @@
        }
    }
    /**
     * 自动删除超过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("AutoLocMove");
            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/utils/Utils.java
@@ -123,17 +123,9 @@
     */
    public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
        int row = getRow(deepLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, row);//判断是否为左深库位
        int shallowRow = deepLocLeft? (row + 1) : (row - 1);
        return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
    }
    /**
     * 获取 深库位排对应的浅库位排
     */
    public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) {
        int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount());
        return remainder == 1 ? (deepRow + 1) : (deepRow - 1);
    }
    /**
@@ -141,32 +133,26 @@
     */
    public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) {
        int row = getRow(shallowLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int targetRow;
        if (remainder == 2) {
            targetRow = row - 1;
        } else if (remainder == 3) {
            targetRow = row + 1;
        } else {
            throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
        }
        return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, row-1);//判断是否为左浅库位
        int shallowRow = deepLocLeft? (row - 1) : (row + 1);
        return zerofill(String.valueOf(shallowRow), 2) + shallowLoc.substring(2);
    }
    /**
     * 获取 深库位排对应的浅库位排
     */
    public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) {
//        int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount());
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, deepRow);//判断是否为左深库位
        return deepLocLeft ? (deepRow + 1) : (deepRow - 1);
    }
    /**
     * 获取 浅库位排对应的深库位排
     */
    public static Integer getDeepRow(SlaveProperties slaveProperties, Integer shallowRow) {
        int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount());
        int targetRow;
        if (remainder == 2) {
            targetRow = shallowRow - 1;
        } else if (remainder == 3) {
            targetRow = shallowRow + 1;
        } else {
            throw new RuntimeException(shallowRow + "不是浅库位排,系统繁忙");
        }
        return targetRow;
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, shallowRow-1);//判断是否为左浅库位
        return deepLocLeft? (shallowRow - 1) : (shallowRow + 1);
    }
    /**
@@ -216,17 +202,6 @@
        String targetLoc = zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
    }
//    public static void main(String[] args) {
//        SlaveProperties slaveProperties = new SlaveProperties();
//        slaveProperties.setDoubleDeep(true);
//        List<Integer> list = new ArrayList<>();
//        list.add(1);list.add(4);list.add(5);list.add(8);list.add(9);list.add(12);
//        slaveProperties.setDoubleLocs(list);
//        slaveProperties.setGroupCount(4);
//        Integer deepRow = getDeepRow(slaveProperties, 6);
//        System.out.println(deepRow);
//    }
    public static Integer GetWhsType(Integer sourceStaNo) {
        RowLastnoService rowLastnoService = SpringUtils.getBean(RowLastnoService.class);
@@ -317,11 +292,11 @@
            }
            if ((curRow - sRow) % 4 == 0) {
                necessaryParameters[1] = curRow;    //curRow   最深库位排
                necessaryParameters[2] = (curRow - sRow + 2) / 4 + sCrnNo - 1;     //crnNo     堆垛机号
                necessaryParameters[2] = (curRow - sRow) / 4 + sCrnNo;     //crnNo     堆垛机号
                necessaryParameters[3] = curRow + 1;    //nearRow  最浅库位排
            } else if ((curRow - sRow + 1) % 4 == 0) {
                necessaryParameters[1] = curRow;    //curRow   最深库位排
                necessaryParameters[2] = (curRow - sRow + 1) / 4 + sCrnNo - 1;     //crnNo     堆垛机号
                necessaryParameters[2] = (curRow - sRow - 3) / 4 + sCrnNo;     //crnNo     堆垛机号
                necessaryParameters[3] = curRow - 1;    //nearRow  最浅库位排
            } else {
                throw new CoolException("库位排号异常:排号:" + curRow);
src/main/java/com/zy/common/service/CommonService.java
@@ -375,7 +375,7 @@
                    continue;
                }
                if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
                    String shallowLoc = Utils.getShallowLoc(slaveProperties, locMast1.getLocNo());
                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                            .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
                    if (!Cools.isEmpty(locMast2)) {
src/main/resources/mapper/asrs/LocMastMapper.xml
@@ -127,7 +127,6 @@
        and crn_no=#{crnNo}
        and bay1 = #{bay}
        and lev1 = #{lev}
        and gro1 = #{gro}
        AND loc_sts not in ('O') order by row1
    </select>
@@ -150,7 +149,6 @@
        and crn_no=#{crnNo}
        and bay1 = #{bay}
        and lev1 = #{lev}
        and gro1 = #{gro}
        AND loc_sts not in ('O') order by row1 desc
    </select>
<!--    <select id="selectLocByLocStsPakInO1" resultMap="BaseResultMap">-->
@@ -172,7 +170,6 @@
        and crn_no=#{crnNo}
        and bay1 = #{bay}
        and lev1 = #{lev}
        and gro1 = #{gro}
        AND loc_sts in ('O') order by row1 desc
    </select>
<!--    <select id="selectLocByLocStsPakInO2" resultMap="BaseResultMap">-->
@@ -194,7 +191,6 @@
        and crn_no=#{crnNo}
        and bay1 = #{bay}
        and lev1 = #{lev}
        and gro1 = #{gro}
        AND loc_sts in ('O') order by row1
    </select>
    <select id="findFirstFrozenLocNo" resultType="java.lang.String">