zzgtfwq
1 天以前 50141a5865b8ca6a549ec97dd8cef0878c0bdd95
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -3,14 +3,15 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkLastno;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskStatusFeedbackParam;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OpenService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.*;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.core.cache.MessageQueue;
@@ -44,7 +45,10 @@
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private WrkLastnoService wrkLastnoService;
    @Autowired
    private RowLastnoService rowLastnoService;
    @Autowired
    private CommonService commonService;
    
@@ -53,7 +57,8 @@
    
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private SlaveProperties slaveProperties;
@@ -112,7 +117,45 @@
        }
        return false;
    }
    /**
     * 生成工作号
     *
     * @param wrkMk
     * @return workNo(工作号)
     */
    public int getWorkNo(Integer wrkMk) {
        WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk);
        if (Cools.isEmpty(wrkLastno)) {
            throw new CoolException("数据异常,请联系管理员");
        }
        int workNo = wrkLastno.getWrkNo();
        int sNo = wrkLastno.getSNo();
        int eNo = wrkLastno.getENo();
        workNo = workNo >= eNo ? sNo : workNo + 1;
        while (true) {
            WrkMast wrkMast = wrkMastService.selectById(workNo);
            if (null != wrkMast) {
                workNo = workNo >= eNo ? sNo : workNo + 1;
            } else {
                break;
            }
        }
        // 修改序号记录
        if (workNo > 0) {
            wrkLastno.setWrkNo(workNo);
            wrkLastnoService.updateById(wrkLastno);
        }
        // 检验
        if (workNo == 0) {
            throw new CoolException("生成工作号失败,请联系管理员");
        } else {
            if (wrkMastService.selectById(workNo) != null) {
                throw new CoolException("生成工作号" + workNo + "在工作档中已存在");
            }
        }
        return workNo;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean taskCreate(TaskCreateParam param) {
@@ -124,21 +167,22 @@
            //21:拣选出库 22:拣选入库
            //31:盘点出库 32:盘点入库
            switch (param.getIoType()){
                case 1:  Inbound = false;break;
                case 2 : Inbound = true;break;
                case 3:  Inbound = false;break;
                case 1:  Inbound = false;ioType = 101;break;
                case 2 : Inbound = true;ioType = 1;break;
                case 3:  Inbound = false;ioType = 11;break;
                case 11: Inbound = false;ioType = 110;break;
                case 12: Inbound = true;break;
                case 12: Inbound = true;ioType = 10;break;
                case 21: Inbound = false;ioType = 103;break;
                case 22: Inbound = true;break;
                case 22: Inbound = true;ioType = 53;break;
                case 31: Inbound = false;ioType = 107;break;
                case 32: Inbound = true;break;
                case 32: Inbound = true;ioType = 57;break;
            }
            // 2. 保存WrkMast
            WrkMast wrkMast = new WrkMast();
            int workNo = getWorkNo(0);
            if(param.getIoType() == 2 || param.getIoType() == 12){
                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
                wrkMast.setWrkNo(workNo);
                wrkMast.setUserNo(param.getTaskNo());
                wrkMast.setIoType(param.getIoType() != 2?10:1);
                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
                wrkMast.setBarcode(param.getBarcode());
@@ -150,7 +194,8 @@
            }else if(param.getIoType() == 22 || param.getIoType() == 32){
                wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode()));
                wrkMast.setWrkSts(param.getIoType() != 32 ? 53L: 57L);
                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
                wrkMast.setWrkNo(workNo);
                wrkMast.setUserNo(param.getTaskNo());
                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
                wrkMast.setBarcode(param.getBarcode());
                wrkMast.setMemo(param.getMemo());
@@ -159,7 +204,8 @@
                wrkMast.setLocNo(param.getTargetLocNo());
                wrkMast.setSourceLocNo(param.getSourceLocNo());
            }else if(param.getIoType() == 3){
                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
                wrkMast.setWrkNo(workNo);
                wrkMast.setUserNo(param.getTaskNo());
                wrkMast.setIoType(11);
                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 12.0);
                wrkMast.setBarcode(param.getBarcode());
@@ -169,7 +215,8 @@
                wrkMast.setLocNo(param.getTargetLocNo());
                wrkMast.setSourceLocNo(param.getSourceLocNo());
            }else{
                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
                wrkMast.setWrkNo(workNo);
                wrkMast.setUserNo(param.getTaskNo());
                wrkMast.setIoType(ioType);
                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
                wrkMast.setBarcode(param.getBarcode());
@@ -185,10 +232,40 @@
            }else{
                wrkMast.setWrkSts(11L);
            }
            String locNo = null;
            if (param.getSourceLocNo() != null && !param.getSourceLocNo().isEmpty()) {
                locNo = param.getSourceLocNo();
            }
            if (param.getTargetLocNo() != null && !param.getTargetLocNo().isEmpty()) {
                locNo = param.getTargetLocNo();
            }
// 取前两位
            int rowNo = Integer.parseInt(locNo.substring(0, 2));
            int crnNo;
            if (rowNo >= 1 && rowNo <= 4) {
                crnNo = 1;
            } else if (rowNo >= 5 && rowNo <= 8) {
                crnNo = 2;
            } else if (rowNo >= 9 && rowNo <= 10) {
                crnNo = 3;
            } else if (rowNo >= 11 && rowNo <= 14) {
                crnNo = 4;
            } else {
                throw new IllegalArgumentException("排号超出范围: " + rowNo);
            }
            wrkMast.setCrnNo(crnNo);
            wrkMast.setIoTime(new Date());
            wrkMast.setModiTime(new Date());
            wrkMast.setAppeTime(new Date());
            wrkMast.setWrkDate(new Date());
            wrkMastService.insert(wrkMast);
            if(param.getIoType() == 22 || param.getIoType() == 32){
                wrkMastService.updateById(wrkMast);
            }else{
                wrkMastService.insert(wrkMast);
            }
            // 3. 保存WrkDetl
            if (param.getDetlList() != null && !param.getDetlList().isEmpty()) {
@@ -204,7 +281,19 @@
                    wrkDetlService.insert(wrkDetl);
                }
            }
            if(param.getIoType() == 2 || param.getIoType() == 12){
                locMastService.updateLocMast(param.getTargetLocNo(),"S");
            }else if(param.getIoType() == 3){
                locMastService.updateLocMast(param.getSourceLocNo(),"R");
                locMastService.updateLocMast(param.getTargetLocNo(),"S");
            }else if(param.getIoType() == 22 || param.getIoType() == 32){
                locMastService.updateLocMast(param.getTargetLocNo(),"Q");
            }else if(param.getIoType() == 1 || param.getIoType() == 11){
                locMastService.updateLocMast(param.getSourceLocNo(),"R" );
            }else{
                locMastService.updateLocMast(param.getSourceLocNo(),"P" );
            }
            // 4. 下发给PLC
            if(Inbound){
                writeToPlc(wrkMast);
@@ -224,8 +313,7 @@
            }
            
            return true;
        } catch (Exception e) {
            log.error("任务下发异常", e);
        } catch (Exception e) { log.error("任务下发异常", e);
             try {
                apiLogService.save("任务下发",
                        "/taskCreate",
@@ -254,9 +342,14 @@
             if (devpThread == null) continue;
             
             // 检查该PLC是否管理该站点
             if (devpThread.getStation().containsKey(sourceStaNo.shortValue())) {
                 StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo.shortValue());
                 if (staProtocol != null && staProtocol.getWorkNo() == 9998) {
             if (devpThread.getStation().containsKey(sourceStaNo)) {
                 StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo);
                 if (staProtocol == null) {
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
                 if (staProtocol != null && staProtocol.getWorkNo() == 9999) {
                     staProtocol.setWorkNo(wrkMast.getWrkNo());
                     if (wrkMast.getStaNo() != null) {
@@ -264,7 +357,7 @@
                     }
                     
                     // 下发PLC指令
                     devpThread.setPakMk(staProtocol.getSiteId(), false, 283);
                     devpThread.setPakMk(staProtocol.getSiteId(), false, 9999);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     
                     if (result) {