pang.jiabao
2024-10-24 c7338c0fc1513507c05c1a7fd00bff8c11ad5d1e
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -12,6 +12,7 @@
import com.zy.asrs.utils.RouteUtils;
import com.zy.asrs.utils.Utils;
import com.zy.asrs.utils.VersionUtils;
import com.zy.common.constant.GhjtApiConstant;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.MatDto;
import com.zy.common.model.SearchLocParam;
@@ -37,6 +38,8 @@
import com.zy.core.thread.LedThread;
import com.zy.core.thread.RgvThread;
import com.zy.core.thread.SiemensDevpThread;
import com.zy.system.entity.Config;
import com.zy.system.mapper.ConfigMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -44,6 +47,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -99,6 +103,9 @@
    private BasRgvMapMapper basRgvMapMapper;
    @Autowired
    private RgvOneSignMapper rgvOneSignMapper;
    @Resource
    private ConfigMapper configMapper;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -1591,8 +1598,10 @@
                continue;
            }
            log.info("{}号堆垛机选定的出库口是{}",crnProtocol.getCrnNo(),crnStn.getPlatNo());
            // 工作档状态判断
            if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
            if ((wrkMast.getIoType() < 100 && wrkMast.getIoType()!=12) || wrkMast.getSourceStaNo() == null) {
                log.error("查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
                continue;
            }
@@ -1696,10 +1705,9 @@
                crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
                crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
                crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
                crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                crnCommand.setDestinationStaNo(crnStn.getPlatNo().shortValue());
//                crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
//                crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
//                crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                crnCommand.setDestinationStaNo(crnStn.getPlatNo().shortValue());
                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                    log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
@@ -1726,9 +1734,6 @@
     */
    private boolean crnEnabled(WrkMast wrkMast) {
        String url = "http://192.168.14.249:8008";
        String path = "/api/Task/DockStatus";
        // 获取请求头
        Map<String,Object> headers = new HashMap<>();
        headers.put("digi-type","sync ");
@@ -1745,8 +1750,8 @@
        String response;
        try {
            response = new HttpHandler.Builder()
                    .setUri(url)
                    .setPath(path)
                    .setUri(GhjtApiConstant.GWCS_IP_PORT)
                    .setPath(GhjtApiConstant.GWCS_CKMT_URL)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
@@ -1759,8 +1764,8 @@
                    success = false;
                }
            } else {
                log.error("请求接口失败!!!url:{};request:{};response:{}", url + path, body, response);
                throw new CoolException("下发出库任务给GWCS(从出库码头到出库口)失败");
                log.error("确认出库码头是否可用失败!!!url:{};request:{};response:{}", GhjtApiConstant.GWCS_IP_PORT + GhjtApiConstant.GWCS_CKMT_URL, body, response);
                throw new CoolException("确认出库码头是否可用失败");
            }
        } catch (Exception e) {
            success = false;
@@ -2021,6 +2026,9 @@
                    // 入库 + 库位转移  ==> 4.入库完成
                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
                        wrkMast.setWrkSts(4L);
                        if (wrkMast.getIoType() == 3) {
                            wrkMast.setWrkSts(13L);
                        }
                    } else {
                        continue;
                    }
@@ -2712,9 +2720,18 @@
        try {
            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
            LocMast loc = null;
            // 获取备货区配置
            Config config = configMapper.selectConfigByCode("auto_stock_up");
            if (config == null) {
                return;
            }
            // 备货取是前几列
            int bay1 = Integer.parseInt(config.getValue());
            for (Integer row : rows) {
                if (Utils.isDeepLoc(slaveProperties, row)) {
                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                    loc = locMastService.queryFreeLocMastNotBay(row, shallowLoc.getLocType1(),bay1);
                    if (loc != null) {
                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -2733,7 +2750,7 @@
            if (null == loc) {
                for (Integer row : rows) {
                    if (Utils.isShallowLoc(slaveProperties, row)) {
                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                        loc = locMastService.queryFreeLocMastNotBay(row, shallowLoc.getLocType1(),bay1);
                        if (null != loc) {//对应深库位非在库状态,不能移库
                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
@@ -4614,4 +4631,79 @@
        }
    }
    /**
     * 二楼空托回流到一楼,3.站到站任务
     */
    public synchronized void emptyTrayReflux() {
        for (CrnSlave crn : slaveProperties.getCrn()) {
            List<WrkMast> wrkMastList = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 2)
                    .eq("crn_no",crn.getId()).eq("io_type", 3));
            for (WrkMast wrkMast : wrkMastList) {
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    continue;
                }
                if (crnProtocol.getStatusType() == CrnStatusType.IDLE
                        && crnProtocol.getTaskNo() == 0
                        && crnProtocol.getModeType() == CrnModeType.AUTO
                        && crnProtocol.getLoaded() == 0
                        && crnProtocol.getForkPos() == 0) {
                    CrnSlave.CrnStn crnStn = null;
                    CrnSlave.CrnStn crnStn2 = null;
                    for (CrnSlave.CrnStn crnStn1 : crn.getCrnOutStn()){
                        if(crnStn1.getStaNo().equals(wrkMast.getStaNo())){
                            crnStn = crnStn1;
                            break;
                        }
                    }
                    for (CrnSlave.CrnStn crnStn1 : crn.getCrnInStn()){
                        if(crnStn1.getStaNo().equals(wrkMast.getSourceStaNo())){
                            crnStn2 = crnStn1;
                            break;
                        }
                    }
                    if(Cools.isEmpty(crnStn) || Cools.isEmpty(crnStn2)){
                        continue;
                    }
                    // 入库命令下发区 --------------------------------------------------------------------------
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX(crnStn2.getRow().shortValue());     // 源库位排
                    crnCommand.setSourcePosY(crnStn2.getBay().shortValue());     // 源库位列
                    crnCommand.setSourcePosZ(crnStn2.getLev().shortValue());     // 源库位层
                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
//                    crnCommand.setSourceStaNo(crnStn.getPlatNo().shortValue());     // 源库位排
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 2.设备上走 => 3.吊车入库中
                        Date now = new Date();
                        wrkMast.setWrkSts(3L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                    }
                    break;
                }
            }
        }
    }
    /**
     * 12.跨巷道移库
     */
    public synchronized void autoMoveLoc() {
    }
}