自动化立体仓库 - WMS系统
pang.jiabao
2024-07-20 1dee71cb131b52cd6e9ed8995de4d07c3a879d68
pda组托立即入库
1个文件已添加
5个文件已修改
304 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PdaWarehousingNowParam.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/MesConstant.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -563,4 +563,17 @@
        }
        return mobileService.pdckqr(param);
    }
    @PostMapping("/pdaWarehousingNow")
    @ManagerAuth(memo = "pda组托立即入库")
    public synchronized R pdaWarehousingNow(@RequestBody PdaWarehousingNowParam param) {
        // 根据工作号确认复核
        if(Cools.isEmpty(param) || Cools.isEmpty(param.getBarcode()) ||  Cools.isEmpty(param.getSourceStaNo())){
            return R.parse(BaseRes.PARAM);
        }
        return mobileService.pdaWarehousingNow(param, getUserId());
    }
}
src/main/java/com/zy/asrs/entity/param/PdaWarehousingNowParam.java
New file
@@ -0,0 +1,31 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author pang.jiabao
 * @description pda组托立即入库入参
 * @createDate 2024/7/19 18:25
 */
@Data
public class PdaWarehousingNowParam {
    private String barcode;//    托盘码
    private Integer sourceStaNo;// 入库站点
    Map<String,List<Roll>> boxGroup = new HashMap<>(); // get("左") 左边的卷集合 map固定左中右三个键
    @Data
    public static class Roll {
        private String rollNo; // 卷号
        private String boxNo; // 箱号
        private String specs; //规格
        private Double length; //长度
        private Integer splices; //接头 个
        private Double netWeight; // 净重
        private Double grossWeight; // 毛重
    }
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -56,4 +56,9 @@
     * @return 200成功,其他失败
     */
    R pdckqr(PdckqrParam param);
    /**
     * 使用pda组托立即入库
     */
    R pdaWarehousingNow(PdaWarehousingNowParam param, Long userId);
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -26,6 +26,7 @@
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 移动端服务核心类
@@ -1249,7 +1250,223 @@
        return R.error("盘点确认异常");
    }
        /**
    @Override
    @Transactional
    public R pdaWarehousingNow(PdaWarehousingNowParam param, Long userId) {
        String barcode = param.getBarcode();
        Integer sourceStaNo = param.getSourceStaNo();
        int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", barcode));
        if (zpalletCount > 0) {
            throw new CoolException("库存托盘码已存在:" + barcode);
        }
        int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        if (barcodeCount > 0) {
            throw new CoolException("工作档已存在该托盘码:" + barcode);
        }
        Map<String, List<PdaWarehousingNowParam.Roll>> boxGroup = param.getBoxGroup();
        List<PdaWarehousingNowParam.Roll> leftPosList = boxGroup.get("左");
        List<PdaWarehousingNowParam.Roll> centrePosList = boxGroup.get("中");
        List<PdaWarehousingNowParam.Roll> rightPosList = boxGroup.get("右");
        // 根据箱号获取包装组号
        List<String> boxNoList = leftPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList());
        boxNoList.addAll(centrePosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList()));
        boxNoList.addAll(rightPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList()));
        Map<String, String> map = new HashMap<>();
//        if (boxNoList.size() > 0) {
//             map = getPackageGroupNoByGwms(boxNoList);
//        }
        LocTypeDto locTypeDto = new LocTypeDto();
        locTypeDto.setLocType1((short)1);
        // 根据源站点寻找库位
        StartupDto dto = commonService.getLocNo(1, sourceStaNo, locTypeDto);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(1L); // 工作状态:1.生成入库id
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(barcode); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(1); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        wrkMast.setAppeUser(userId);
        wrkMast.setModiUser(userId);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        for (PdaWarehousingNowParam.Roll roll: leftPosList) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setMatnr(roll.getSpecs()); // 规格
            wrkDetl.setMaktx(roll.getSpecs()); //规格
            wrkDetl.setBatch(roll.getBoxNo()); // 箱号
            wrkDetl.setModel(roll.getRollNo()); // 卷号
            wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号
            wrkDetl.setZpallet(barcode); // 托盘吗
            wrkDetl.setOrigin("左"); // 木箱在托盘位置
            wrkDetl.setWeight(roll.getNetWeight()); // 净重
            wrkDetl.setVolume(roll.getGrossWeight()); // 毛重
            wrkDetl.setPrice(roll.getLength());
            wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
            wrkDetl.setAnfme(1.0);
            wrkDetl.setIoTime(now);
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        }
        for (PdaWarehousingNowParam.Roll roll: centrePosList) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setMatnr(roll.getSpecs()); // 规格
            wrkDetl.setMaktx(roll.getSpecs()); //规格
            wrkDetl.setBatch(roll.getBoxNo()); // 箱号
            wrkDetl.setModel(roll.getRollNo()); // 卷号
            wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号
            wrkDetl.setZpallet(barcode); // 托盘吗
            wrkDetl.setOrigin("中"); // 木箱在托盘位置
            wrkDetl.setWeight(roll.getNetWeight()); // 净重
            wrkDetl.setVolume(roll.getGrossWeight()); // 毛重
            wrkDetl.setPrice(roll.getLength());
            wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
            wrkDetl.setAnfme(1.0);
            wrkDetl.setIoTime(now);
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        }
        for (PdaWarehousingNowParam.Roll roll: rightPosList) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setMatnr(roll.getSpecs()); // 规格
            wrkDetl.setMaktx(roll.getSpecs()); //规格
            wrkDetl.setBatch(roll.getBoxNo()); // 箱号
            wrkDetl.setModel(roll.getRollNo()); // 卷号
            wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号
            wrkDetl.setZpallet(barcode); // 托盘吗
            wrkDetl.setOrigin("右"); // 木箱在托盘位置
            wrkDetl.setWeight(roll.getNetWeight()); // 净重
            wrkDetl.setVolume(roll.getGrossWeight()); // 毛重
            wrkDetl.setPrice(roll.getLength());
            wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
            wrkDetl.setAnfme(1.0);
            wrkDetl.setIoTime(now);
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")){
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)){
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(dto.getLocNo()+"目标库位已被占用");
        }
        // 推送GWCS目标消息
        openServiceImpl.pushStaNoToGwcs(sourceStaNo,dto.getStaNo(),dto.getWorkNo());
        return R.ok("入库启动成功");
    }
    private Map<String, String> getPackageGroupNoByGwms(List<String> boxNoList) {
        Map<String, String> map = null;
        Map<String, Object> headers = new HashMap<>();
        headers.put("Content-Type", "application/json;charset=UTF-8");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("boxNoList", JSONObject.toJSONString(boxNoList));
        String body = jsonObject.toJSONString();
        boolean success = false;
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(MesConstant.GWMS_IP_PORT)
                    .setPath(MesConstant.GWMS_GET_GROUP_NO_URL)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
                    .doPost();
            if (!Cools.isEmpty(response)) {
                JSONObject jsonObject1 = JSONObject.parseObject(response);
                int code = (int) jsonObject1.get("code");
                String msg = (String) jsonObject1.get("msg");
                 if (code != 200) {
                     throw new CoolException(msg);
                 }
                map = (Map<String, String>) jsonObject1.get("data");
                success = true;
            } else {
                log.error("pda组托入库请求gwms接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
            }
        } catch (Exception e) {
            log.error("pda组托入库请求gwms接口异常,工作号:{},{}", boxNoList.toString(), e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "pda组托入库请求gwms接口",
                        MesConstant.URL + MesConstant.PAKIN_URL,
                        null,
                        "127.0.0.1",
                        body,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("接口日志保存异常", e);
            }
        }
        if (map == null) {
            throw new CoolException("请求gwcs查询包装组号异常");
        }
        return map;
    }
    /**
         * 比较两个集合的类的属性,相同则抵消,最后判断两个集合是否完全抵消
         */
        public  boolean compareAndCheckCancellation(List<WrkDetl> list1, List<PdckqrParam.Material> list2) {
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1045,26 +1045,26 @@
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            obj.getRolls().forEach(roll -> {
                Mat mat = matService.selectByMatnr(roll.getSpecs());
                if (mat == null) {
                    mat = new Mat();
                    mat.setTagId(6L);
                    mat.setMatnr(roll.getSpecs());
                    mat.setMaktx(roll.getSpecs());
                    mat.setSpecs(roll.getSpecs());
                    mat.setStatus(1);
                    mat.setCreateTime(now);
                    mat.setUpdateTime(now);
                    if (!matService.insert(mat)) {
                        throw new CoolException("物料导入失败!");
                    }
                }
//                Mat mat = matService.selectByMatnr(roll.getSpecs());
//                if (mat == null) {
//                    mat = new Mat();
//                    mat.setTagId(6L);
//                    mat.setMatnr(roll.getSpecs());
//                    mat.setMaktx(roll.getSpecs());
//                    mat.setSpecs(roll.getSpecs());
//                    mat.setStatus(1);
//                    mat.setCreateTime(now);
//                    mat.setUpdateTime(now);
//                    if (!matService.insert(mat)) {
//                        throw new CoolException("物料导入失败!");
//                    }
//                }
                wrkDetl.setWrkNo(wrkMast.getWrkNo());
                wrkDetl.setMatnr(roll.getSpecs()); // 规格
                wrkDetl.setMaktx(roll.getSpecs()); //规格
                wrkDetl.setBatch(roll.getBoxNo()); // 箱号
                wrkDetl.setModel(roll.getRollNo()); // 卷号
                wrkDetl.setBrand(""); // 木箱类型
                wrkDetl.setBrand(obj.getPackageGroupNo()); // 包装组号
                wrkDetl.setZpallet(param.getBarcode()); // 托盘吗
                wrkDetl.setOrigin(obj.getBoxPos()); // 木箱在托盘位置
                wrkDetl.setWeight(roll.getNetWeight()); // 净重
src/main/java/com/zy/common/constant/MesConstant.java
@@ -16,10 +16,16 @@
    // GWCS接口IP地址
    public static final String GWCS_IP_PORT = "http://192.168.14.249:8008";
    // GWMS接口IP地址
    public static final String GWMS_IP_PORT = "http://192.168.14.249:8008";
    // ZWMS下发入库(分配库位)
    public static final String GWCS_FPKW_URL = "/api/Task/InventoryTask";
    // 下发出库码头到出库口命令
    public static final String GWCS_DCKK_URL = "/api/Task/InventoryTask";
    // 获取箱号对应包装组号
    public static final String GWMS_GET_GROUP_NO_URL = "/api/Task/InventoryTask";
}