pang.jiabao
2025-02-26 4e70a88e1ed6704ec6fca7baac8d0dbe95d0feb1
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -14,6 +14,7 @@
import com.zy.asrs.utils.RouteUtils;
import com.zy.asrs.utils.Utils;
import com.zy.asrs.utils.VersionUtils;
import com.zy.common.constant.AgvSiteConstant;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.MatDto;
import com.zy.common.model.SearchLocParam;
@@ -40,7 +41,6 @@
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
@@ -50,6 +50,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -91,15 +92,14 @@
    @Autowired
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private WrkMastStaMapper wrkMastStaMapper;
    @Autowired
    private BasRgvService basRgvService;
    @Autowired
    private BasRgvMapMapper basRgvMapMapper;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private BasRgvMapService basRgvMapService;
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Resource
    private ApiLogService apiLogService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -366,10 +366,10 @@
                    }
                    try {
                        // 保存工作明细档历史档
                        if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
                            throw new CoolException("保存工作明细档历史档失败");
                        }
                        // 保存工作明细档历史档 //因为兼容u8工作模式 不能生成历史工作明细
//                        if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
//                            throw new CoolException("保存工作明细档历史档失败");
//                        }
                        // 保存工作主档历史档
                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
                            throw new CoolException("保存工作主档历史档失败");
@@ -601,6 +601,9 @@
                        // 更新工作档状态为14失败
                        wrkMast.setWrkSts(13L);
                        if (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1028) {
                            wrkMast.setWrkSts(14L);
                        }
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
@@ -1449,7 +1452,7 @@
                        SearchLocParam param = new SearchLocParam();
                        param.setIoType(10);
                        param.setSourceStaNo(emptyInSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        param.setLocType1((short) 0);
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/loc/v1")
@@ -1588,15 +1591,31 @@
                        } else {
                            total = locDetl.getAnfme();
                        }
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                        if (!Cools.isEmpty(wrkDetl.getOrderNo())){
                            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", wrkDetl.getOrderNo())
                                    .eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getSuppCode(),orderDetl.getSku()));
                            }
                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getSuppCode(),orderDetl.getSku()));
                            }
                            if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getSuppCode(),orderDetl.getSku()));
                            }
                        }else {
                            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            }
                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            }
                            if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            }
                        }
                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                        }
                        if (wrkMast.getIoType() == 107) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                        }
                    });
                }
                commands.add(ledCommand);
@@ -2075,7 +2094,7 @@
                }
                ForwardAGVTaskParam forwardAGVTaskParam = new ForwardAGVTaskParam();
                getAgvTaskParam(forwardAGVTaskParam,wrkMast,staProtocol.getSiteId());
                String request = forwardAGVHttpRequest(forwardAGVTaskParam, "10.0.100.110:8182", "/rcms/services/rest/hikRpcService/genAgvSchedulingTask");
                String request = forwardAGVHttpRequest(wrkMast.getStaNo(),forwardAGVTaskParam, "10.0.100.110:8182", "/rcms/services/rest/hikRpcService/genAgvSchedulingTask");
                if ("SUCCESS".equals(request)) {
                    wrkMast.setWrkSts(14L);
                    boolean update = wrkMastService.updateById(wrkMast);
@@ -2115,7 +2134,7 @@
        agvTaskCreateParam.setReqCode(wrkNo);
        agvTaskCreateParam.setReqTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        agvTaskCreateParam.setTaskTyp("GT4");
        agvTaskCreateParam.setCtnrCode(param.getBarcode());
//        agvTaskCreateParam.setCtnrCode(param.getBarcode());
        agvTaskCreateParam.setPositionCodePath(agvTaskParamList);
        agvTaskCreateParam.setCtnrTyp("2");
        agvTaskCreateParam.setPriority("1");
@@ -2123,7 +2142,12 @@
    }
    private String forwardAGVHttpRequest(Object requestParam, String url, String path){
    private String forwardAGVHttpRequest(int sta, Object requestParam, String url, String path){
        // 先绑定
        boolean flag = bindPodAndBerth(String.valueOf(sta));
        if (!flag) {
            return "error";
        }
        String response = "";
        String success = "error";
        try {
@@ -2145,6 +2169,71 @@
//            log.info("转发agv任务:请求体:"+JSONObject.toJSONString(requestParam)+",返回值:"+jsonObject);
        }catch (Exception e){
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "出库呼叫agv",
                        url + path,
                        null,
                        "127.0.0.1",
                        JSONObject.toJSONString(requestParam),
                        response,
                        success.equals("SUCCESS")
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
        return success;
    }
    private boolean bindPodAndBerth(String sta) {
        String staMap = AgvSiteConstant.SiteMap.get(sta);
        if (staMap == null) {
            log.error("没有找到该站点的入库映射:{}",sta);
            return false;
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("reqCode",UUID.randomUUID().toString().replace("-", "")); // 请求唯一值
        jsonObject.put("ctnrTyp","2"); // 容器类型2
        jsonObject.put("stgBinCode",staMap); // 仓位编号,根据客仓编号转换
        jsonObject.put("indBind","1"); // 1绑定,0解绑
        String body = jsonObject.toJSONString();
        String response = "";
        boolean success = false;
        String url = "10.0.100.110:8182";
        String path = "/rcms/services/rest/hikRpcService/bindCtnrAndBin";
        try {
            response = new HttpHandler.Builder()
                    .setUri(url)
                    .setPath(path)
                    .setJson(body)
                    .build()
                    .doPost();
            JSONObject res = JSON.parseObject(response);
            if (res.getInteger("code").equals(0)) {
                success = true;
            } else {
                log.error("出库调用agv绑定仓位失败!!!url:{};request:{};response:{}", url + path, body, response);
            }
        } catch (Exception e) {
            log.error("出库调用agv绑定仓位异常", e);
        } finally {
//            try {
                // 保存接口日志
//                apiLogService.save(
//                        "调用agv绑定仓位",
//                        ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_BIND_PATH,
//                        null,
//                        "127.0.0.1",
//                        body,
//                        response,
//                        success
//                );
//            } catch (Exception e) {
//                log.error("", e);
//            }
        }
        return success;
    }