#
lsh
2024-03-22 84988579b77ec4578af30d5c836690beeff3562c
#
7个文件已修改
289 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevp.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasDevpMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -13,6 +13,7 @@
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -78,38 +79,64 @@
    //创建任务
    @PostMapping("/taskCreate")
    @Transactional
    public R taskCreate(@RequestHeader String appkey,
                          @RequestBody List<TaskCreateParam> param1,
                          HttpServletRequest request) {
        auth(appkey, param1, request);
        for (TaskCreateParam param : param1
             ) {
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getTaskNo())) {
            return R.error("任务号[taskNo]不能为空");
        }
        if (Cools.isEmpty(param.getIoType())) {
            return R.error("任务类型[ioType]不能为空");
        }
        if (Cools.isEmpty(param.getBarcode())) {
            return R.error("条码[barcode]不能为空");
        }
        String locNo=null;
        if(param.getIoType()==1){
            locNo=param.getTargetPoint();
        }else{
            locNo=param.getStartPoint();
        }
        LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
                .eq("loc_sts","F")
                .eq("loc_no",locNo)
                .eq("barcode",param.getBarcode()));
        if(Cools.isEmpty(locMast)){
            return R.error("该库位不满足出库条件"+param.getTargetPoint());
        }
        openService.taskCreate(param);
        try{
            List<TaskCreateParam> paramList = new ArrayList<>();
            List<String> locNoList = new ArrayList<>();
            for (TaskCreateParam param : param1) {
                if (Cools.isEmpty(param)) {
                    return R.parse(BaseRes.PARAM);
                }
                if (Cools.isEmpty(param.getTaskNo())) {
                    return R.error("任务号[taskNo]不能为空");
                }
                if (Cools.isEmpty(param.getIoType())) {
                    return R.error("任务类型[ioType]不能为空");
                }
                if (Cools.isEmpty(param.getBarcode())) {
                    return R.error("条码[barcode]不能为空");
                }
                String locNo=null;
                if(param.getIoType()==1){
                    locNo=param.getTargetPoint();
                }else{
                    locNo=param.getStartPoint();
                }
                try{
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                            .eq("loc_no", locNo).ne("loc_sts","X"));
                    if (Cools.isEmpty(locMast)){
                        log.error("库位号不存在"+locNo);
                        return R.error("库位号不存在"+locNo).add("库位号不存在"+locNo);
                    }
                }catch (Exception e){
                    log.error("库位号检测程序异常==》异常信息"+e);
                    return R.error("库位号检测程序异常").add("库位号检测程序异常==》异常信息"+e);
                }
                LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
                        .eq("loc_sts","F")
                        .eq("loc_no",locNo)
                        .eq("barcode",param.getBarcode()));
                if(Cools.isEmpty(locMast)){
                    return R.error("该库位不满足出库条件"+param.getTargetPoint());
                }
                if (!locNoList.contains(locMast.getLocNo())){
                    locNoList.add(locMast.getLocNo());
                    paramList.add(param);
                }else {
                    return R.error("该库位不能同时下发两笔任务"+locMast.getLocNo());
                }
            }
            for (TaskCreateParam param : paramList){
                openService.taskCreate(param);
            }
        }catch (Exception e){
            log.error("任务下发异常"+e);
            return R.error();
        }
        return R.ok();
    }
src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -230,6 +230,10 @@
    @TableField("agv_target_place")
    private Integer agvTargetPlace;
    @ApiModelProperty(value= "异常码")
    @TableField("sta_err")
    private Integer staErr;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -169,9 +169,9 @@
                        }
//                        News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
                        staProtocol.setWorkNo(workNo);
                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                        staProtocol.setStaNo(inSta.getStaNo().shortValue());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
                        if (taskWrk != null) {
                            taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示
@@ -213,13 +213,40 @@
                            HashMap<String, Object> headParam = new HashMap<>();
                            headParam.put("Content-Type","application/json");
                            String response;
                            response = new HttpHandler.Builder()
                                   // .setHeaders(headParam)
                                    .setUri(wmsUrl)
                                    .setPath(inboundTaskApplyPath)
                                    .setJson(JSON.toJSONString(toWmsDTO))
                                    .build()
                                    .doPost();
                            try{
                                response = new HttpHandler.Builder()
                                        // .setHeaders(headParam)
                                        .setUri(wmsUrl)
                                        .setPath(inboundTaskApplyPath)
                                        .setJson(JSON.toJSONString(toWmsDTO))
                                        .build()
                                        .doPost();
                            }catch (Exception e){
                                log.error("请求入库调用接口失败");
                                log.error("异常信息打印:"+e);
                                try{
                                    BasDevp basDevp = basDevpService.selectById(inSta.getStaNo());
                                    if (Cools.isEmpty(basDevp)){
                                        log.error("站点号异常"+inSta.getStaNo());
                                    } else if (basDevp.getStaErr()!=0){
                                        basDevp.setStaErr(2);
                                        basDevpService.updateById(basDevp);
                                    }
                                }catch (Exception e1){
                                    // 退回
                                    log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e1);
                                }
                                staProtocol.setWorkNo((short)9999);
                                staProtocol.setStaNo(inSta.getStaNo().shortValue());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                                    TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
//                                    if (taskWrk != null) {
//                                        taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示
//                                        taskWrkMapper.updateById(taskWrk);
//                                    }
                                continue;
                            }
                            JSONObject jsonObject = JSON.parseObject(response);
                            apiLogService.save("wms请求入库货位接口"
@@ -233,7 +260,43 @@
                            log.info("入库请求参数{}" + JSON.toJSONString(toWmsDTO));
                            if (jsonObject.getInteger("code").equals(200) && !Cools.isEmpty(jsonObject.get("data").toString())) {
                                GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class);
                                try{
                                    BasDevp basDevp = basDevpService.selectById(inSta.getStaNo());
                                    if (Cools.isEmpty(basDevp)){
                                        log.error("站点号异常"+inSta.getStaNo());
                                        throw new CoolException("站点号异常"+inSta.getStaNo());
                                    }
                                    Integer staNoCrnNo = Utils.StaNoCrnNo(inSta.getStaNo());
                                    if (staNoCrnNo==0){
                                        basDevp.setStaErr(1);
                                        basDevpService.updateById(basDevp);
                                        throw new CoolException("站点号异常"+inSta.getStaNo());
                                    }else {
                                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                                                .eq("crn_no", staNoCrnNo.longValue())
                                                .eq("loc_no", getWmsDto.getLocNo()));
                                        if (Cools.isEmpty(locMast)){
                                            basDevp.setStaErr(1);
                                            basDevpService.updateById(basDevp);
                                            throw new CoolException("站点号异常"+inSta.getStaNo());
                                        }
                                    }
                                } catch (Exception e){
//                                    log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e);
                                    // 退回
                                    log.error("扫码检测程序异常"+inSta.getStaNo()+errMsg);
                                    staProtocol.setWorkNo((short)9999);
                                    staProtocol.setStaNo(inSta.getStaNo().shortValue());
                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                                    TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
//                                    if (taskWrk != null) {
//                                        taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示
//                                        taskWrkMapper.updateById(taskWrk);
//                                    }
                                    continue;
                                }
                                //查看该库位是否为空库位
                                LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
                                        .eq("loc_sts","O")
@@ -288,87 +351,9 @@
                                continue;
                            }
//                        StaDescService staDescService = SpringUtils.getBean(StaDescService.class);
//
//                        ToWmsDTO toWmsDTO = new ToWmsDTO();
//                        Map<String, Object> map = new HashMap<>();
//                        map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2");
//                        List<Integer> list = openServiceImpl.getInEnableRoadway();
//                        TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
//
//                        if (Cools.isEmpty(taskWrk)){
//                            continue;
//                        }
//                        //StaDesc staDesc1 = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("stn_no",inSta.getBackSta()));
//                        if (taskWrk.getTargetPoint() != null && taskWrk.getStartPoint() != null){
//                            if ( taskWrk.getWrkNo() != null && taskWrk.getWrkNo().shortValue() == workNo ){
//                                continue;
//                            }
//                            //获取堆垛机站点
//                            StaDesc staDesc = new StaDesc();
//                            if (devp.getId() <= 1){
//                                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
//                                        .eq("crn_no", taskWrk.getCrnNo()).eq("type_no",1).lt("stn_no", 200));
//                            }else {
//                                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
//                                        .eq("crn_no", taskWrk.getCrnNo()).eq("type_no",1).lt("stn_no", 400).ge("stn_no", 250));
//                            }
//                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
//                            staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
//                            Thread.sleep(500);
//                        }else {
//                            //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
//                            toWmsDTO.setWarehouseId("1688469798893297665");
//                            toWmsDTO.setContainerCode(barcode);
//                            toWmsDTO.setApplyType("TUNNEL_LOCATION");
//                            toWmsDTO.setTaskTunnel(taskWrk.getCrnNo());
//                            toWmsDTO.setCanInboundTunnels(list);
//                            String response = null;
//                            try {
//                                response = new HttpHandler.Builder()
//                                        .setHeaders(map)
//                                        .setUri(wmsUrl)
//                                        .setPath(inboundTaskApplyPath)
//                                        .setJson(JSON.toJSONString(toWmsDTO))
//                                        .build()
//                                        .doPost();
//                            }catch (Exception e){
//                                log.error("wms通讯失败,"+e.getMessage());
//                                continue;
//                            }
//                            apiLogService.save("wms请求入库货位接口"
//                                    ,wmsUrl+"wcsManager/wcsInterface/inboundTaskApply"
//                                    ,null
//                                    ,"127.0.0.1"
//                                    ,JSON.toJSONString(toWmsDTO)
//                                    ,response
//                                    ,true
//                            );
//                            JSONObject jsonObject = JSON.parseObject(response);
//                            if (jsonObject.getInteger("code").equals(200)) {
//                                GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class);
//                                taskWrk.setOriginTargetPoint(getWmsDto.getTargetLocationCode());
//                                taskWrk.setTargetPoint(Utils.getWcsLocNo(getWmsDto.getTargetLocationCode()));
//                                taskWrk.setStartPoint(String.valueOf(inSta.getBackSta()));
//                                if (!taskWrkService.updateById(taskWrk)){
//                                    log.error("保存wms库位号失败");
//                                }
//
//                            }else {
//                                log.error("wms通讯失败,"+jsonObject.get("msg"));
//
//                            }
//                        }
                        } else {
                            // 退回
                            log.error("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
//                            staProtocol.setWorkNo((short)0);
//                            staProtocol.setStaNo(inSta.getStaNo().shortValue());
//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//
//                            Thread.sleep(500);
                            staProtocol.setWorkNo((short)9999);
                            staProtocol.setStaNo(inSta.getStaNo().shortValue());
src/main/java/com/zy/asrs/utils/Utils.java
@@ -3,6 +3,7 @@
import com.core.common.Arith;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.LocMast;
import com.zy.core.model.CrnSlave;
import com.zy.core.properties.SlaveProperties;
@@ -384,4 +385,24 @@
        String wcsLocNo = getWcsLocNo("01-01-01-01-01");
        System.out.println(wcsLocNo);
    }
    public static Integer StaNoCrnNo(Integer staNo) {
        switch (staNo){
            case 100:
            case 101:
                return 1;
            case 102:
            case 103:
                return 2;
            case 104:
            case 105:
                return 3;
            case 106:
            case 107:
                return 4;
            default:
                return 0;
        }
    }
}
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -155,6 +155,9 @@
        basDevp.setWrkNo(workNo.intValue());
        basDevp.setAutoing(autoing?"Y":"N");
        basDevp.setLoading(loading?"Y":"N");
        if (!loading){
            basDevp.setStaErr(0);
        }
        basDevp.setInEnable(inEnable?"Y":"N");
        basDevp.setOutEnable(outEnable?"Y":"N");
        basDevp.setLocType1((short) 0);  // 高低类型{0:未知,1:低库位,2:高库位}
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -262,7 +262,7 @@
            }
        }
        OperateResultExOne<byte[]> resultAgvAndPlcOk = siemensS7Net.Read("DB102.0", (short) 30);
        OperateResultExOne<byte[]> resultAgvAndPlcOk = siemensS7Net.Read("DB132.0", (short) 30);
        if (resultAgvAndPlcOk.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                int sign =(i+2)/2-1;
@@ -274,7 +274,7 @@
                        staProtocol.setSiteId(siteId);
                        station.put(siteId, staProtocol);
                    }
                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4));     // 允许取货
                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4));     // 允许取货
                    staProtocol.setAgvTargetPlace((short)0);   // 允许放货
                    continue;
                }
@@ -285,8 +285,18 @@
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6));     // 允许取货
                staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2));   // 允许放货
                try{
                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6));     // 取货完成
                    if (staProtocol.getAgvTargetPick()!=0){
                        System.out.println(staProtocol.getAgvTargetPick());
                    }
                    staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2));   // 放货完成
                    if (staProtocol.getAgvTargetPlace()!=0){
                        System.out.println(staProtocol.getAgvTargetPlace());
                    }
                }catch (Exception e){
                    log.error(""+e);
                }
            }
        }
src/main/resources/mapper/BasDevpMapper.xml
@@ -45,6 +45,7 @@
        <result column="agv_target_pick" property="agvTargetPick" />
        <result column="agv_start_place" property="agvStartPlace" />
        <result column="agv_target_place" property="agvTargetPlace" />
        <result column="sta_err" property="staErr" />
    </resultMap>