自动化立体仓库 - WMS系统
zhang
2025-07-15 641f7bb8b2d2e23f1f5192fecf030a567151c7b5
Merge remote-tracking branch 'origin/ghjtasrs' into ghjtasrs
3个文件已修改
137 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/stoMan/stoQue.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java
@@ -77,7 +77,11 @@
        // 按包装组号分组处理
        Map<String, List<OrderDetl>> brandGroup = orderDetls.stream()
                .collect(Collectors.groupingBy(OrderDetl::getBrand));
                .collect(Collectors.groupingBy(o -> {
                    String brand = o.getBrand();
                    return brand != null ? brand : "跨巷道";
                }));
        List<LocDto> locDtos = new ArrayList<>();
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -30,7 +30,6 @@
import com.zy.system.mapper.ConfigMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -1137,88 +1136,64 @@
        return "入库成功";
    }
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Override
    @Transactional
    public R kthl(KthlParam param) {
        String barcode = param.getBarcode();
        String lockKey = "kthl:lock:" + barcode;
        String lockVal = UUID.randomUUID().toString(); // 防止误删他人锁
        // 分布式锁,5秒过期
        Boolean locked = redisTemplate.opsForValue().setIfAbsent(lockKey, lockVal, 5, TimeUnit.SECONDS);
        if (locked == null || !locked) {
            return R.error("重复提交:该托盘已在处理,请勿重复操作");
        // 获取模式为电脑模式,无任务的堆垛机列表:防止分配到堆垛机不可用
        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts",3)
                .eq("wrk_no",0).eq("in_enable","Y").eq("out_enable","Y"));
        if (basCrnps.isEmpty()) {
            // 都有任务则获取电脑模式的堆垛机列表
            basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts",3).eq("in_enable","Y")
                    .eq("out_enable","Y"));
        }
        try {
            // 获取空闲堆垛机(电脑模式、无任务)
            List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>()
                    .eq("crn_sts", 3).eq("wrk_no", 0)
                    .eq("in_enable", "Y").eq("out_enable", "Y"));
            // 如果没有空闲堆垛机,尝试所有可用堆垛机
            if (basCrnps.isEmpty()) {
                basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>()
                        .eq("crn_sts", 3)
                        .eq("in_enable", "Y").eq("out_enable", "Y"));
            }
            if (basCrnps.isEmpty()) {
                throw new CoolException("没有可用堆垛机,堆垛机停止或异常或禁用");
            }
            // 获取第一个可用堆垛机
            List<Integer> crnNoList = basCrnps.stream()
                    .map(BasCrnp::getCrnNo)
                    .collect(Collectors.toList());
            Integer crnNo = crnNoList.get(0);
            int workNo = commonService.getWorkNo(5);
            Date now = new Date();
            // 生成工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(1L);
            wrkMast.setIoType(3); // 站到站
            wrkMast.setIoPri(14D);
            wrkMast.setCrnNo(crnNo);
            wrkMast.setSourceStaNo(secondFloorIn[crnNo]);
            wrkMast.setStaNo(secondFloorOut[crnNo]);
            wrkMast.setLocNo("");
            wrkMast.setBarcode(barcode);
            wrkMast.setFullPlt("N");
            wrkMast.setPicking("N");
            wrkMast.setExitMk("N");
            wrkMast.setEmptyMk("Y");
            wrkMast.setLinkMis("Y");
            wrkMast.setCtnType(1);
            wrkMast.setAppeTime(now);
            wrkMast.setModiTime(now);
            boolean res = wrkMastService.insert(wrkMast);
            if (!res) {
                throw new CoolException("保存工作档失败");
            }
            // 推送站点到GWCS
            pushStaNoToGwcs(param.getPalletizingNo(), wrkMast.getSourceStaNo(), workNo, barcode, "二楼空托回流推送gwcs");
            return R.ok("空托回流请求成功");
        } finally {
            // 解锁,确保只释放自己加的锁
            String val = redisTemplate.opsForValue().get(lockKey);
            if (lockVal.equals(val)) {
                redisTemplate.delete(lockKey);
            }
        WrkMast exist = wrkMastService.selectOne(
                new EntityWrapper<WrkMast>()
                        .eq("barcode", param.getBarcode())
                        .eq("io_type", 3));
        if (exist != null) {
            return R.error("任务已存在,不可重复提交");
        }
        if (basCrnps.isEmpty()) {
            throw new CoolException("没有可用堆垛机,堆垛机停止或异常或禁用");
        }
        // 可用堆垛机列表
        List<Integer> crnNoList = basCrnps.stream().map(BasCrnp::getCrnNo).collect(Collectors.toList());
        Integer crnNo = crnNoList.get(0);
        int workNo = commonService.getWorkNo(5);
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(1L); //
        wrkMast.setIoType(3); // 站到站
        wrkMast.setIoPri(14D); // 优先级
        wrkMast.setCrnNo(crnNo);
        wrkMast.setSourceStaNo(secondFloorIn[crnNo]);
        wrkMast.setStaNo(secondFloorOut[crnNo]);
        wrkMast.setLocNo("");
        wrkMast.setBarcode(param.getBarcode()); // 托盘码
        wrkMast.setFullPlt("N"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(1); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 返回GWCS目标信息
        pushStaNoToGwcs(param.getPalletizingNo(),wrkMast.getSourceStaNo(),workNo,param.getBarcode(),"二楼空托回流推送gwcs");
        return R.ok("空托回流请求成功");
    }
    @Override
    public R tb(TbParam param) {
src/main/webapp/static/js/stoMan/stoQue.js
@@ -125,11 +125,11 @@
                        exportData[this.name] = this.value;
                    });
                    var param = {
                        'wrkLastno': exportData,
                        'locMast': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/wrkLastno/export/auth",
                        url: baseUrl+"/locMast/export/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify(param),
                        dataType:'json',