自动化立体仓库 - WMS系统
zhangc
2025-02-21 65cc55a45a7235ee3736dcc8f4bdee30fdbfb9a7
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -16,6 +16,8 @@
import com.zy.asrs.service.*;
import com.zy.common.service.AgvCommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -28,6 +30,9 @@
@Service
@Slf4j
public class AgvWrkMastServiceImp extends ServiceImpl<AgvWrkMastMapper, AgvWrkMast> implements AgvWrkMastService {
    @Value("${agv.flag}")
    private boolean flag;
    @Value("${agv.url}")
    private String url;
@@ -61,15 +66,17 @@
    private AgvCommonService agvCommonService;
    @Autowired
    private AgvWrkMastService agvWrkMastService;
    @Autowired
    private ConfigService configService;
    public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) {
    public Boolean updateWrkStsByWrkNo(int wrkNo, long wrkSts) {
        AgvWrkMast agvWrkMast = this.selectById(wrkNo);
        //判断要修改的工作档状态是否合理,如果不合理则抛出异常
        checkWrkSts(agvWrkMast, wrkSts);
        agvWrkMast.setWrkSts(wrkSts);
        agvWrkMast.setModiTime(new Date());
        this.updateById(agvWrkMast);
        return this.updateById(agvWrkMast);
    }
    public void updateWrkStsByWrkNo(int wrkNo, long wrkSts, String manuType, long userId) {
@@ -224,55 +231,93 @@
            agvWrkMast.setWrkNo(-agvWrkMast.getWrkNo());
        }
        agvTaskCreateParam.setTaskCode(agvWrkMast.getWrkNo().toString());
        switch (agvWrkMast.getIoType()) {
            case 114:
            case 108:
            case 12:
                agvTaskCreateParam.setTaskTyp("F06");
                break;
            case 109:
                if (agvWrkMast.getWrkSts() == 201) {
        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "FOUR"));
        if (config != null && config.getStatus() == 1 && config.getValue().equals("1") && processUseTiShengJi(agvWrkMast.getSourceLocNo(), agvWrkMast.getLocNo())) {
                // TODO 四期
        } else {
            switch (agvWrkMast.getIoType()) {
                case 114:
                case 108:
                case 12:
                    agvTaskCreateParam.setTaskTyp("F06");
                } else {
                    break;
                case 109:
                    if (agvWrkMast.getWrkSts() == 201) {
                        agvTaskCreateParam.setTaskTyp("F06");
                    } else {
                        agvTaskCreateParam.setTaskTyp("F01");
                    }
                    break;
                case 1:
                case 57:
                    // 入库任务是只有 接驳位 -- > 库位
                    AgvLocMast loc = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvWrkMast.getLocNo()));
                    String locSub = loc.getLocNo().substring(loc.getLocNo().length() - 4).substring(0, 2).substring(0, 2);
                    AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo());
                    if ("02".equals(locSub)) {
                        if (agvBasDevp.getFloor() == 4) {
                            agvTaskCreateParam.setTaskTyp("F01");
                        } else {
                            agvTaskCreateParam.setTaskTyp("F06");
                        }
                    } else {
                        // 目标楼层位1楼 但源库位(接驳位)在吸塑二楼
                        if (agvBasDevp.getFloor() == 4) {
                            agvTaskCreateParam.setTaskTyp("F06");
                        } else {
                            agvTaskCreateParam.setTaskTyp("F01");
                        }
                    }
                    break;
                default:
                    agvTaskCreateParam.setTaskTyp("F01");
                }
                break;
            case 1:
            case 57:
                // 入库任务是只有 接驳位 -- > 库位
                AgvLocMast loc = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvWrkMast.getLocNo()));
                String locSub = loc.getLocNo().substring(loc.getLocNo().length() - 4).substring(0, 2).substring(0, 2);
                AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo());
                if ("02".equals(locSub)) {
                    if (agvBasDevp.getFloor() == 4) {
                        agvTaskCreateParam.setTaskTyp("F01");
                    } else {
                        agvTaskCreateParam.setTaskTyp("F06");
                    }
                } else {
                    // 目标楼层位1楼 但源库位(接驳位)在吸塑二楼
                    if (agvBasDevp.getFloor() == 4) {
                        agvTaskCreateParam.setTaskTyp("F06");
                    } else {
                        agvTaskCreateParam.setTaskTyp("F01");
                    }
                }
                break;
            default:
                agvTaskCreateParam.setTaskTyp("F01");
                break;
                    break;
            }
        }
        agvTaskCreateParam.setPositionCodePath(agvTaskParamList);
    }
    // TODO 四期
    private boolean processUseTiShengJi(String sourceLocNo, String locNo) {
        // 判断是否是提升机
        if (sourceLocNo.startsWith("YZ")) {
            if (sourceLocNo.endsWith("01F2") && !locNo.startsWith("YZ") && locNo.endsWith("F4") ) {
                // 从生产二厂的库位到吸塑二厂的点位上
                return true;
            } else if (sourceLocNo.endsWith("01F2") && locNo.startsWith("YZ") && locNo.endsWith("02F1")) {
                // 从生产二厂的库位到吸塑二厂的库位
                return true;
            } else if (sourceLocNo.endsWith("02F1") && locNo.startsWith("YZ") && locNo.endsWith("01F2")) {
                // 吸塑二楼的库位到生产二厂的库位
                return true;
            } else if (sourceLocNo.endsWith("02F1") && !locNo.startsWith("YZ") && locNo.endsWith("F2")) {
                // 吸塑二楼的库位到生产二厂的点位
                return true;
            }
        } else {
            if (sourceLocNo.endsWith("F4") && locNo.startsWith("YZ") && locNo.endsWith("01F2")) {
                // 从吸塑二楼的点位到生产二厂的库位
                return true;
            } else if (sourceLocNo.endsWith("F2") && locNo.startsWith("YZ") && locNo.endsWith("02F1")) {
                // 从生产二厂的点位到吸塑二楼的库位
                return true;
            }
        }
        return false;
    }
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip) {
        if (!flag) {
            return 1;
        }
        String response = "";
        boolean success = false;
        int code = 0;
        try {
            response = new HttpHandler.Builder()
                    .setUri(url)
@@ -283,7 +328,7 @@
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            int code = Integer.parseInt(jsonObject.get("code").toString());
            code = Integer.parseInt(jsonObject.get("code").toString());
            if (code != 0) {
                if (code == 6) {
                    log.info("AGV任务单号已上报:{}", response);
@@ -300,19 +345,20 @@
            return code;
        } catch (Exception e) {
            log.error(e.getMessage());
            //TODO 张超
            throw new CoolException("调用AGV响应错误");
            //return 1;
        } finally {
            apiLogService.save(
                    namespace,
                    url + path,
                    appkey,
                    ip,
                    JSON.toJSONString(JSONObject.toJSONString(requestParam)),
                    response,
                    success
            );
            if (code != 6) {
                apiLogService.save(
                        namespace,
                        url + path,
                        appkey,
                        ip,
                        JSON.toJSONString(JSONObject.toJSONString(requestParam)),
                        response,
                        success
                );
            }
        }
    }