自动化立体仓库 - WMS系统
skyouc
4 天以前 f3e116dd3bbdd132cd5cb49c99cbf9ba59f112d8
no message
14个文件已修改
324 ■■■■■ 已修改文件
pom.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/WcsApiController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/WcsApiService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CompleteParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PakinMatsByQRParams.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/MesConstant.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/StartupDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/lib/cool-framework-install.txt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -45,12 +45,17 @@
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!-- 使用本地 JAR 解决缺失的 cn.cool:framework:jar:3.2.0 -->
<!--        <dependency>-->
<!--            <groupId>cn.cool</groupId>-->
<!--            <artifactId>framework</artifactId>-->
<!--            <version>3.2.0</version>-->
<!--            <scope>system</scope>-->
<!--            <systemPath>${project.basedir}/version/lib/framework-3.2.0.jar</systemPath>-->
<!--        </dependency>-->
        <dependency>
            <groupId>cn.cool</groupId>
            <artifactId>framework</artifactId>
            <version>3.2.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/version/lib/framework-3.2.0.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
src/main/java/com/zy/api/controller/WcsApiController.java
@@ -82,13 +82,18 @@
        return wcsApiService.combInPub(combParam, 10031L);
    }
    @ManagerAuth(memo = "移库任务")
    @RequestMapping("/task/move")
    public R taskMove(@RequestBody CompleteParam combParam) {
    /**
     * WCS申请在库库位更换库位
     * @param combParam
     * @return
     */
    @ManagerAuth(memo = "WCS申请在库库位更换库位")
    @RequestMapping("/openapi/change/loc")
    public R changeLoc(@RequestBody CompleteParam combParam) {
        if (Objects.isNull(combParam)) {
            return R.error("参数不能为空!!");
        }
        return mobileService.taskMove(combParam, 10031L);
        return mobileService.changeLoc(combParam, 10031L);
    }
@@ -103,5 +108,18 @@
    }
    /**
     * 重新分配入库信息
     */
    @ManagerAuth
    @ApiOperation("WCS申请任务重新分配入库")
    @PostMapping("/openapi/reassign/loc")
    public R repeatLocs(@RequestBody CompleteParam params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        return wcsApiService.repeatLoc(params);
    }
}
src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
@@ -13,8 +13,6 @@
@ApiModel(value = "ReceviceTaskParams", description = "穿线墙参数")
public class ReceviceTaskParams implements Serializable {
    @ApiModelProperty("机台号")
    private String deviceNo;
    @ApiModelProperty("流水号")
    private Integer id;
src/main/java/com/zy/api/service/WcsApiService.java
@@ -77,4 +77,11 @@
     * @return
     */
    R combInPub(CompleteParam combParam, long l);
    /**
     * WCS申请任务重新分配入库
     * @param params
     * @return
     */
    R repeatLoc(CompleteParam params);
}
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -128,6 +128,7 @@
            if (!Objects.isNull(code) && code.equals(200)) {
                if (!Objects.isNull(order)) {
                    order.setReportOnce(5);
                    order.setSettle(6L);
                    orderService.updateById(order);
                }
                return XSR.ok("入库单上报完成!!");
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -13,10 +13,13 @@
import com.zy.api.service.WcsApiService;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CompleteParam;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.LocDetlServiceImpl;
import com.zy.asrs.service.impl.MatServiceImpl;
import com.zy.asrs.service.impl.RowLastnoServiceImpl;
import com.zy.asrs.service.impl.WrkDetlServiceImpl;
import com.zy.asrs.utils.Utils;
import com.zy.common.constant.MesConstant;
import com.zy.common.utils.HttpHandler;
import org.springframework.beans.BeanUtils;
@@ -43,6 +46,8 @@
    private MatService matService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private RowLastnoService rowLastnoService;
    /**
     * 通知WCS锁定库位,及禁止当前库位的一切操作
@@ -150,6 +155,7 @@
        }
        return R.ok();
    }
    /**
     * 堆垛机执行状态上报
     *
@@ -191,6 +197,7 @@
    /**
     * 獲取庫位信息
     *
     * @param params
     * @return
     */
@@ -234,6 +241,7 @@
    /**
     * 条码站入库申请
     *
     * @param combParam
     * @param l
     * @return
@@ -242,4 +250,108 @@
    public R combInPub(CompleteParam combParam, long l) {
        return null;
    }
    /**
     * WCS申请任务重新分配入库
     *
     * @param params
     * @return
     */
    @Override
    public R repeatLoc(CompleteParam params) {
        if (Objects.isNull(params.getTaskNo())) {
            return R.error("工作号不能为空!!");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getTaskNo()));
        if (Objects.isNull(wrkMast)) {
            return R.error("任务档不存在,或已加入历史档");
        }
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        if (Objects.isNull(locMast)) {
            return R.error("库位信息不存在!!");
        }
        Integer whsType = Utils.GetWhsType(Integer.parseInt(wrkMast.getSourceStaNo()));
        if (whsType.equals(1)) {
            RowLastno lastno = rowLastnoService.selectById(whsType);
            if (Objects.isNull(lastno)) {
                return R.error("堆垛要策略不存在!!");
            }
            if (locMast.getRow1().equals(141)) {
                LocMast selectOne = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .ne("row1", 141)
                        .ge("crn_no", lastno.getsCrnNo())
                        .le("crn_no", lastno.geteCrnNo())
                        .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                        .orderAsc(Arrays.asList("row1", "bay1", "lev1")));
                if (!Objects.isNull(selectOne)) {
                    Map<String, Object> response = new HashMap<>();
                    response.put("locNo", selectOne.getLocNo());
                    //原库位置空
                    locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                    locMastService.updateById(locMast);
                    //新库位预约入库
                    selectOne.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
                    locMastService.updateById(selectOne);
                    wrkMast.setLocNo(selectOne.getLocNo());
                    wrkMastService.updateById(wrkMast);
                    return R.ok().add(response);
                } else {
                    return R.error("暂无可用库位!!");
                }
            } else {
                LocMast selectOne = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .eq("crn_no", wrkMast.getCrnNo())
                        .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                        .orderAsc(Arrays.asList("row1", "bay1", "lev1")));
                if (!Objects.isNull(selectOne)) {
                    Map<String, Object> response = new HashMap<>();
                    response.put("locNo", selectOne.getLocNo());
                    //原库位置空
                    locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                    locMastService.updateById(locMast);
                    //新库位预约入库
                    selectOne.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
                    locMastService.updateById(selectOne);
                    wrkMast.setLocNo(selectOne.getLocNo());
                    wrkMastService.updateById(wrkMast);
                    return R.ok().add(response);
                } else {
                    return R.error("暂无可用库位!!");
                }
            }
        } else {
            LocMast selectOne = locMastService.selectOne(new EntityWrapper<LocMast>()
                    .eq("crn_no", wrkMast.getCrnNo())
                    .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                    .orderAsc(Arrays.asList("row1", "bay1", "lev1")));
            if (!Objects.isNull(selectOne)) {
                Map<String, Object> response = new HashMap<>();
                response.put("locNo", selectOne.getLocNo());
                //原库位置空
                locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                locMastService.updateById(locMast);
                //新库位预约入库
                selectOne.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
                locMastService.updateById(selectOne);
                wrkMast.setLocNo(selectOne.getLocNo());
                wrkMastService.updateById(wrkMast);
                return R.ok().add(response);
            } else {
                return R.error("暂无可用库位!!");
            }
        }
    }
}
src/main/java/com/zy/asrs/entity/param/CompleteParam.java
@@ -22,6 +22,8 @@
    //目标库位
    private String locNo;
    private String taskNo;
    //任务号
    private String workNo;
src/main/java/com/zy/asrs/entity/param/PakinMatsByQRParams.java
@@ -14,4 +14,7 @@
    @ApiModelProperty("物料编码")
    private String matnr;
    @ApiModelProperty("BS Code")
    private String threeCode;
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -176,4 +176,13 @@
     * @return
     */
    R taskMove(CompleteParam combParam, long l);
    /**
     * WCS申请在库库位更换库位
     * @param combParam
     * @param l
     * @return
     */
    R changeLoc(CompleteParam combParam, long l);
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -17,6 +17,7 @@
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.asrs.utils.Utils;
import com.zy.common.constant.HIKApiConstant;
import com.zy.common.constant.MesConstant;
import com.zy.common.entity.Parameter;
@@ -25,6 +26,7 @@
import com.zy.common.model.MesCombParam;
import com.zy.common.model.StartupDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
@@ -86,6 +88,9 @@
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private AdjDetlService adjDetlService;
@@ -1316,6 +1321,7 @@
            throw new CoolException("数据错误:单据不存在!!");
        }
        List<OrderDetlPakin> detlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                .eq(!Cools.isEmpty(params.getThreeCode()), "three_code", params.getThreeCode())
                .eq(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr())
                .eq("order_id", orderPakin.getId()));
        if (Objects.isNull(detlPakins) || detlPakins.isEmpty()) {
@@ -1768,7 +1774,7 @@
            throw new CoolException("站点不能为空!!");
        }
        if (Objects.isNull(param.getLocType1())) {
            param.setLocType1((short)1);
            param.setLocType1((short) 1);
        }
@@ -1783,7 +1789,7 @@
        List<WaitPakin> waitPakins = waitPakinService
                .selectList(new EntityWrapper<WaitPakin>()
                        .eq("io_status" , "N")
                        .eq("io_status", "N")
                        .eq("zpallet", param.getBarcode()));
        if (Objects.isNull(waitPakins) || waitPakins.isEmpty()) {
            throw new CoolException("数据错误,组拖档已不存在!!");
@@ -2003,7 +2009,7 @@
            wrkMast.setIoType(1); // 入出库状态:1.入库
            wrkMast.setCrnNo(dto.getCrnNo());
            wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
            wrkMast.setStaNo(dto.getStaNo() + "");
            wrkMast.setStaNo(!Objects.isNull(dto.getStaNo()) ? dto.getStaNo() + "" : null);
            wrkMast.setLocNo(dto.getLocNo());
            wrkMast.setIoPri(13D); // 优先级
            wrkMast.setBarcode(pakin.getZpallet()); // 托盘码
@@ -2580,6 +2586,7 @@
    /**
     * 移库任务申请
     *
     * @param combParam
     * @param userId
     * @return
@@ -2642,6 +2649,97 @@
    }
    /**
     * 6.15WCS申请在库库位更换库位
     * @param combParam
     * @param l
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R changeLoc(CompleteParam combParam, long l) {
        if (Objects.isNull(combParam)) {
            return R.error("参数不能为空!");
        }
        if (Objects.isNull(combParam.getLocNo())) {
            return R.error("库位号不能为空!!");
        }
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", combParam.getLocNo()));
        if (Objects.isNull(locMast)) {
            return R.error("库位信息不存在或库位状态非 F.在库 状态");
        }
        List<Integer> doubleLocs = slaveProperties.getDoubleLocs();
        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                .in("row1", doubleLocs)
                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type));
        Map<String, Object> result = new HashMap<>();
        LocMast selected = new LocMast();
        for (LocMast loc : locMasts) {
            LocMast temLoc = locMastService.selectById(loc.getLocNo());
            if (Objects.isNull(temLoc)) {
                throw new CoolException("数据错误, 原库位信息不存在!!");
            }
            String shallowLoc = Utils.getShallowLoc(slaveProperties, temLoc.getLocNo());
            LocMast locMast1 = locMastService.selectById(shallowLoc);
            if (Objects.isNull(locMast1)) {
                throw new CoolException("数据错误, 新库位信息不存在!!");
            }
            if (!locMast1.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
                continue;
            }
            selected = loc;
            break;
        }
        WrkMast moveTask = generateMoveTask(selected, locMast);
        result.put("locNo", selected.getLocNo());
        result.put("taskNo", moveTask.getWrkNo());
        return R.ok().add(result);
    }
    /**
     * 生成移库任务
     *
     * @param result
     * @param sourceLoc
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public WrkMast generateMoveTask(LocMast result, LocMast sourceLoc) {
        WrkMast wrkMast = new WrkMast();
        int workNo = commonService.getWorkNo(0);
        wrkMast.setWrkNo(workNo);
        wrkMast.setLocNo(result.getLocNo());
        wrkMast.setSourceLocNo(sourceLoc.getLocNo());
        wrkMast.setWrkSts(11L);
        wrkMast.setIoType(11);
        wrkMast.setCrnNo(sourceLoc.getCrnNo());
        wrkMast.setAppeTime(new Date());
        wrkMast.setModiTime(new Date());
        wrkMast.setIoPri(13D);
        wrkMast.setWrkDate(new Date());
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("任务保存失败!!");
        }
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLoc.getLocNo()));
        locDetls.forEach(detl -> {
            detl.setLocNo(result.getLocNo());
            if (!locDetlService.updateById(detl)) {
                throw new CoolException("明细更新失败!!");
            }
        });
        return wrkMast;
    }
    /**
     * 按优先级查找可用库位
     * 顺序:入库缓存区 -> SO区 -> EO区
     */
src/main/java/com/zy/common/constant/MesConstant.java
@@ -6,7 +6,8 @@
public class MesConstant {
    //小系统接口地址
    public static final String URL = "http://webservice.kopen.com.cn:1482/kc-api/api/wms/ ";
//    public static final String URL = "http://webservice.kopen.com.cn:1482/kc-api/api/wms/ ";
    public static final String URL = "http://10.143.23.26:1482/kc-api/api/wms/ ";
    //WCS系统接口地址
    public static final String WCS_URL = "http://192.168.238.244:9090/wcs";
@@ -21,6 +22,9 @@
    /**移库申请链接任务**/
    public static final String MOVE_LOC_TASK = "/openapi/createLocMoveTask";
    /****/
    public static final String LOC_F_MOV = "/openapi/change/loc";
    /***申请入库任务*/
    public static final String PUB_TASK_IN = "/openapi/createInTask";
src/main/java/com/zy/common/model/StartupDto.java
@@ -18,4 +18,6 @@
    private Integer workNo;
}
src/main/java/com/zy/common/service/CommonService.java
@@ -133,23 +133,25 @@
            /**
             * 库型 1: 标准堆垛机库  2: 平库  3: 穿梭板  4: 四向车  5: AGV  0: 未知
             */
            switch (rowLastnoType.getType()) {
                case 1:
                    return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
                case 2:
                    log.error("站点={} 未查询到对应的规则", sourceStaNo);
                    break;
                case 3:
                    log.error("站点={} 未查询到对应的规则", sourceStaNo);
                    break;
                case 4:
                    return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0);
                case 5:
                    return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
                default:
                    log.error("站点={} 未查询到对应的规则", sourceStaNo);
                    break;
            }
            return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
//            switch (rowLastnoType.getType()) {
//                case 1:
//                    return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
////                case 2:
////                    log.error("站点={} 未查询到对应的规则", sourceStaNo);
////                    break;
////                case 3:
////                    log.error("站点={} 未查询到对应的规则", sourceStaNo);
////                    break;
////                case 4:
////                    return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0);
////                case 5:
////                    return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
////                default:
////                    log.error("站点={} 未查询到对应的规则", sourceStaNo);
////                    break;
//            }
        } catch (Exception e) {
            log.error("站点={} 未查询到对应的规则", sourceStaNo);
@@ -182,8 +184,9 @@
            throw new CoolException("数据异常,请联系管理员===>库位规则未知");
        }
        StartupDto startupDto = new StartupDto();
        //TODO 需要区分207,217, 239站点,滤芯和中件需要区分开
         locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                .ne("row1", rowLastno.getsRow())
                .ge("row1", rowLastno.getsRow())
                .le("row1", rowLastno.geteRow())
                .eq("loc_sts", "O")
                .orderAsc(Arrays.asList("row1", "bay1", "lev1")));
version/lib/cool-framework-install.txt
@@ -1 +1 @@
mvn install:install-file -Dfile=framework-3.2.0.jar -DgroupId=cn.cool -DartifactId=framework -Dversion=3.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file '-Dfile=version/lib/framework-3.2.0.jar' '-DgroupId=cn.cool' '-DartifactId=framework' '-Dversion=3.2.0' '-Dpackaging=jar' '-DgeneratePom=true'