*
L
3 天以前 7e68f81b38116bba40e70620c563168fcde66a37
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,13 +4,16 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.controller.CrnController;
import com.zy.asrs.controller.TaskWrkController;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.domain.param.CrnOperatorParam;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CarryParam;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
@@ -70,6 +73,8 @@
    private TaskWrkMapper taskWrkMapper;
    @Autowired
    private TaskWrkService taskWrkService;
    @Autowired
    private TaskWrkController taskWrkController;
    @Autowired
    private StaDescMapper staDescMapper;
    @Autowired
@@ -2805,41 +2810,49 @@
                continue;
            }
//            CrnSlave crn = new CrnSlave(crnSlave);
//            if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
//                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机巷道号异常!");
//                continue;
//            }
//
//            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
//                for (CrnSlave crnOther : slaveProperties.getCrn()) {
//                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
//                        crn.updateCrnInStn(crnOther);
//                    }
//                }
//            }
            // 只有当堆垛机空闲 并且 无任务时才继续执行
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
                // 如果最近一次是入库模式
                if (crnProtocol.getLastIo().equals("I")) {
                    if (basCrnp.getInEnable().equals("Y")) {
                        this.crnStnToLocDemo(crnSlave, crnProtocol); //  入库
                        crnProtocol.setLastIo("O");
                        boolean crnStnToLocDemo = this.crnStnToLocDemo(crnSlave, crnProtocol);//  入库
                        if (crnStnToLocDemo){
                            crnProtocol.setLastIo("O");
                        } else if (!crnProtocol.isSignIntOut()){
                            crnProtocol.setLastIo("O");
                        }
                    } else if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStnDemo(crnSlave, crnProtocol); //  出库
                        crnProtocol.setLastIo("I");
                        boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);//  出库
                        if (locToCrnStnDemo && crnProtocol.isSignIntOut()){
                            crnProtocol.setLastIo("I");
                        } else if (locToCrnStnDemo){
                            crnProtocol.setLastIo("I");
                            crnProtocol.setSignIntOut(true);
                        } else if (!crnProtocol.isSignIntOut()){
                            crnProtocol.setLastIo("I");
                        }
                    }
                }
                // 如果最近一次是出库模式
                else if (crnProtocol.getLastIo().equals("O")) {
                    if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStnDemo(crnSlave, crnProtocol); //  出库
                        crnProtocol.setLastIo("I");
                        boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);//  出库
                        if (locToCrnStnDemo && crnProtocol.isSignIntOut()){
                            crnProtocol.setLastIo("I");
                        } else if (locToCrnStnDemo){
                            crnProtocol.setLastIo("I");
                            crnProtocol.setSignIntOut(true);
                        } else if (!crnProtocol.isSignIntOut()){
                            crnProtocol.setLastIo("I");
                        }
                    } else if (basCrnp.getInEnable().equals("Y")) {
                        this.crnStnToLocDemo(crnSlave, crnProtocol); //  入库
                        crnProtocol.setLastIo("O");
                        boolean crnStnToLocDemo = this.crnStnToLocDemo(crnSlave, crnProtocol);//  入库
                        if (crnStnToLocDemo){
                            crnProtocol.setLastIo("O");
                        } else if (!crnProtocol.isSignIntOut()){
                            crnProtocol.setLastIo("O");
                        }
                    }
                }
            }  else {
@@ -2861,7 +2874,8 @@
    /**
     * 入库  ===>>  堆垛机站到库位
     */
    public void crnStnToLocDemo(CrnSlave slave, CrnProtocol crnProtocol) throws IOException {
    public boolean crnStnToLocDemo(CrnSlave slave, CrnProtocol crnProtocol) throws IOException {
        boolean result = false;
        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
@@ -2897,7 +2911,7 @@
                    if (Cools.isEmpty(taskWrk1)){
                        continue;
                    }
                    if (taskWrk1.getWrkSts() == 2){
                    if (taskWrk1.getIoType() == 1 && taskWrk1.getWrkSts()<3){
                        taskWrk = taskWrk1;
                        break;
                    }
@@ -2953,6 +2967,7 @@
                    throw new CoolException("堆垛机命令生成失败");
                } else {
                    result = true;
                    try {
                        devpThread.setErrorDev(staProtocol.getSiteId(), "-");
                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "-");
@@ -2965,16 +2980,18 @@
                }
            }
        }
        return result;
    }
    /**
     * 出库  ===>>  库位到堆垛机站
     * 2022-06-09 TQS修改,查询工作档LIST,遍历下发,防止第一个任务堵塞出库
     */
    public void locToCrnStnDemo(CrnSlave slave, CrnProtocol crnProtocol) {
    public boolean locToCrnStnDemo(CrnSlave slave, CrnProtocol crnProtocol) {
        boolean result = false;
        List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(crnProtocol.getLaneNo(), null);
        if (taskWrksInitial.size() == 0) {
            return;
            return result;
        }
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
@@ -3007,7 +3024,7 @@
                    }
                    // 判断堆垛机出库站状态
                    if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
                    if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
                        // 堆垛机控制过滤
                        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE)) {
                            devpThread.setErrorDev(staProtocol.getSiteId(), "堆垛机非空闲");
@@ -3047,6 +3064,7 @@
                            CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "运行命令下发失败");
                            throw new CoolException("堆垛机命令生成失败");
                        } else {
                            result = true;
                            try {
                                // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                                Date now = new Date();
@@ -3060,39 +3078,11 @@
                                if (taskWrkMapper.updateById(taskWrk) == 0) {
                                    log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                                }
                            } catch (Exception e) {
                                log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                                log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,异常:" + e);
                            }
                            try {
                                HashMap<String, Object> headParam = new HashMap<>();
                                headParam.put("taskNo",taskWrk.getTaskNo());
                                headParam.put("taskStatus",taskWrk.getStatusWms());
                                headParam.put("ioType",taskWrk.getIoTypeWms());
                                headParam.put("barCode",taskWrk.getBarcode());
                                headParam.put("reportTime", LocalDateTime.now());
                                headParam.put("weight",taskWrk.getScWeight().doubleValue());
                                String response;
                                response = new HttpHandler.Builder()
                                        // .setHeaders(headParam)
                                        .setUri(wmsUrl)
                                        .setPath(taskStatusFeedbackPath)
                                        .setJson(JSON.toJSONString(headParam))
                                        .build()
                                        .doPost();
                                JSONObject jsonObject = JSON.parseObject(response);
                                apiLogService.save("wcs派发出库任务上报wms"
                                        , wmsUrl + taskStatusFeedbackPath
                                        , null
                                        , "127.0.0.1"
                                        , JSON.toJSONString(headParam)
                                        , response
                                        , true
                                );
                            } catch (Exception e) {
                                log.error("wcs派发出库任务上报wms失败", JSON.toJSONString(taskWrk));
//                                throw new CoolException("wcs派发入库任务上报wms失败");
                            }
                        }
                    } else {
@@ -3117,6 +3107,7 @@
                }
            }
        }
        return result;
    }
    /**
@@ -3185,10 +3176,23 @@
                            if (offer) {
                                log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk));
                                Date now = new Date();
                                taskWrk.setStatus(TaskStatusType.OVER3.id);
//                                taskWrk.setStatus(TaskStatusType.OVER3.id);
                                taskWrk.setStatus(TaskStatusType.OVER.id);//手动完成任务
                                taskWrk.setWrkSts(14);
                                taskWrk.setModiTime(now);
                                taskWrk.setCompleteTime(now);
                                LocMast locMast=locMastService.selectByLocNo(taskWrk.getStartPoint());
                                if(Cools.isEmpty(locMast)){
                                    R.error("没有找到该库位") ;
                                }
                                locMast.setLocSts("O");
                                locMast.setModiTime(now);
                                locMast.setModiTime(now);
                                locMastService.updateById(locMast);
                                taskWrkService.updateById(taskWrk);
                            } else {
                                log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk));
@@ -3218,19 +3222,7 @@
                    continue;
                }
                CrnSlave crn = new CrnSlave(crnSlave);
                if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机巷道号异常!");
                    continue;
                }
                if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
                    for (CrnSlave crnOther : slaveProperties.getCrn()) {
                        if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
                            crn.updateCrnInStn(crnOther);
                        }
                    }
                }
                CrnSlave crn = crnSlave;
                //  状态:等待确认 并且  任务完成位 = 1
                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
@@ -3240,14 +3232,7 @@
                        log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},巷道号={},工作号={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
                        continue;
                    }
//                Thread.sleep(300);
                    //确认完成信号
//                    CrnOperatorParam crnOperatorParam = new CrnOperatorParam();
//                    crnOperatorParam.setCrnNo(crn.getId());
                    Date now = new Date();
//                    crnController.crnTaskComplete(crnOperatorParam);
//                    MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))
                    crnThread.setResetFlag(true);
                    if (!Cools.isEmpty(taskWrk)) {
@@ -3293,44 +3278,6 @@
                        taskWrk.setCompleteTime(now);
                        taskWrkService.updateById(taskWrk);
//                    try {
//                        HashMap<String, Object> headParam = new HashMap<>();
//                        headParam.put("taskNo",taskWrk.getTaskNo());
//                        headParam.put("taskStatus",taskWrk.getStatusWms());
//                        headParam.put("ioType",taskWrk.getIoTypeWms());
//                        headParam.put("barCode",taskWrk.getBarcode());
//                        headParam.put("reportTime", LocalDateTime.now());
//                        headParam.put("weight",taskWrk.getScWeight().doubleValue());
//
//                        String response;
//                        log.error("wcs完结任务上报wms==》", headParam);
//
//                        response = new HttpHandler.Builder()
//                                // .setHeaders(headParam)
//                                .setUri(wmsUrl)
//                                .setPath(taskStatusFeedbackPath)
//                                .setJson(JSON.toJSONString(headParam))
//                                .build()
//                                .doPost();
//                        log.error("wcs完结任务上报wms==》", response);
//
////                        JSONObject jsonObject = JSON.parseObject(response);
////                        log.error("wcs完结任务上报wms==》", jsonObject);
//
//                        apiLogService.save("wcs派发入库任务上报wms"
//                                , wmsUrl + taskStatusFeedbackPath
//                                , null
//                                , "127.0.0.1"
//                                , JSON.toJSONString(headParam)
//                                , response
//                                , true
//                        );
//                    } catch (Exception e) {
//                        log.error("wcs完结任务上报wms失败", taskWrk);
//                        log.error("wcs完结任务上报wms失败,报错信息:", e);
////                        throw new CoolException("wcs派发入库任务上报wms失败");
//                    }
                    }
                }
@@ -3339,5 +3286,64 @@
            }
        }
    }
    public void locMastTaskDemo(){
        try{
            for (CrnSlave crnSlave : slaveProperties.getCrn()) {
                try{
                    // 获取堆垛机信息
                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                    if (crnProtocol == null) {
                        continue;
                    }
                    if (Cools.isEmpty(crnProtocol.getLocMastDemoList())) {
                        continue;
                    }
                    BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId());
                    if (basCrnp == null) {
                        log.error("{}号堆垛机尚未在数据库进行维护!", crnSlave.getId());
                        continue;
                    }
                    if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){
                        continue;
                    }
                    for (String[] locS : crnProtocol.getLocMastDemoListSign()){
                        if (locS[3].equals("1")){
                            String locNo = locS[0];
                            LocMast locMast = locMastService.selectByLocNo(locNo);
                            if (locMast.getLocSts().equals("F")){
                                CarryParam carryParam = new CarryParam();
                                carryParam.setTaskNo(locNo);
                                carryParam.setBarcode(locNo);
                                carryParam.setIoType(1);//任务类型=》1:出库、2:移库、3:入库   ====转换为====>  1:入库,2:出库,3:移库
                                carryParam.setTaskPriority(1);
                                carryParam.setTargetPoint("1012");
                                carryParam.setStartPoint(BarcodeUtils.formatCode(locNo));
                                carryParam.setMeno("Demo");
                                taskWrkController.addTaskPoint(carryParam);
                                Thread.sleep(50);
                            } else if (locMast.getLocSts().equals("O")){
                                CarryParam carryParam = new CarryParam();
                                carryParam.setTaskNo(locNo);
                                carryParam.setBarcode(locNo);
                                carryParam.setIoType(3);//任务类型=》1:出库、2:移库、3:入库   ====转换为====>  1:入库,2:出库,3:移库
                                carryParam.setTaskPriority(1);
                                carryParam.setStartPoint("1012");
                                carryParam.setTargetPoint(BarcodeUtils.formatCode(locNo));
                                carryParam.setMeno("Demo");
                                taskWrkController.addTaskPoint(carryParam);
                                Thread.sleep(50);
                                LocFCSUtils.updateLocSInPlace(crnProtocol.getLocMastDemoListSign());
                            }
                        }
                    }
                } catch (Exception e){
                }
            }
        } catch (Exception e){
        }
    }
}