package com.zy.asrs.task.handler; 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.Order; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.OrderMapper; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.WrkDetlService; import com.zy.common.constant.MesConstant; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author pang.jiabao * @description 冠鸿江铜定时任务实现 * @createDate 2024/7/3 9:09 */ @Slf4j @Service public class GhjtHandler { @Resource private OrderMapper orderMapper; @Autowired private ApiLogService apiLogService; @Resource private WrkMastMapper wrkMastMapper; @Resource private WrkDetlService wrkDetlService; @Transactional public void startCkrwPushGwcs(WrkMast wrkMast) { // 获取请求头 Map headers = new HashMap<>(); headers.put("Content-Type", "application/json;charset=UTF-8"); // 下发给gwcs要走的路径标识 int descFlag = getDescToGwcs(wrkMast); // 构造请求体 JSONObject jsonObject = new JSONObject(); jsonObject.put("workNo", wrkMast.getWrkNo()); jsonObject.put("staNo", wrkMast.getIoType() == 3 ? 3013 :wrkMast.getStaNo()); jsonObject.put("barcode", wrkMast.getBarcode()); jsonObject.put("sourceStaNo", wrkMast.getIoType() == 3 ? wrkMast.getStaNo() : wrkMast.getSourceStaNo()); jsonObject.put("descFlag", descFlag); // 101出库时用,0只有一条路径,1理货贴标路径,2贴标打带路径 String body = jsonObject.toJSONString(); boolean success = false; String response = ""; try { response = new HttpHandler.Builder() .setUri(MesConstant.GWCS_IP_PORT) .setPath(MesConstant.GWCS_DCKK_URL) .setHeaders(headers) .setJson(body) .build() .doPost(); if (!Cools.isEmpty(response)) { wrkMast.setWrkSts(2L); // 更新为设备上走 if (wrkMast.getIoType() == 110) { // 空托盘出库直接完成任务 wrkMast.setWrkSts(14L); } else if (wrkMast.getIoType() == 3) { // 修改工作主档状态 wrkMast.setWrkSts(15L); wrkMast.setModiTime(new Date()); } wrkMastMapper.updateById(wrkMast); success = true; } else { log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); throw new CoolException("下发出库任务给GWCS(从出库码头到出库口)失败"); } } catch (Exception e) { log.error("下发出库任务给GWCS(从出库码头到出库口)异常,工作号:{},{}", wrkMast.getWrkNo(), e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "从出库码头到出库口", MesConstant.URL + MesConstant.PAKIN_URL, null, "127.0.0.1", jsonObject.toJSONString(), response, success ); } catch (Exception e) { log.error("接口日志保存异常", e); } } } /** * 全板出库到3077或3106的任务,判断出库要走的路径 * @param wrkMast 工作主档 * @return 1.直接出库,只有一条路径 2.理货贴标出库 3.贴标打带出库 4.贴标出库 */ private int getDescToGwcs(WrkMast wrkMast) { // todo 两条路线怎么选 int flag = 1; List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); List collect = wrkDetls.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList()); if (wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 3077 || wrkMast.getStaNo() == 3106)) { // 有几个木箱 if (collect.size() == 1) { // 一箱 if (wrkDetls.size() == 1) { // 一卷去贴标 flag = 4; } else { // 多卷直接出 } } else if(collect.size() == 2) { // 两箱去贴标打带 // 两箱肯定都是单卷情况 同型号(木箱型号-管芯类型-实测宽幅-生箔厚度-分切下料时间)去贴标,打带,不同型号贴标出库 WrkDetl wrkDetl1 = wrkDetls.get(0); WrkDetl wrkDetl2 = wrkDetls.get(1); if (wrkDetl1.getColor().equals(wrkDetl2.getColor())&& wrkDetl1.getSku().equals(wrkDetl2.getSku())&& wrkDetl1.getManu().equals(wrkDetl2.getManu())&& wrkDetl1.getItemNum().equals(wrkDetl2.getItemNum())) { flag = 3; } else { flag = 4; } } } else if (wrkMast.getIoType() == 103 && (wrkMast.getStaNo() == 3077 || wrkMast.getStaNo() == 3106)) { // 两箱出一箱,需桁架理货 // 都要先去理货 flag = 2; // if (wrkDetls.size() == 1) { // 一卷贴标出库 // flag = 4; // } else { // 多卷直接出库 // // } } return flag; } @Transactional public void OutBoundCompleteReport(Order order) { // 获取请求头 Map headers = new HashMap<>(); headers.put("Content-Type", "application/json;charset=UTF-8"); // 构造请求体 JSONObject jsonObject = new JSONObject(); jsonObject.put("orderNo", order.getOrderNo()); jsonObject.put("complete", 1); // 订单完成为1,其他... String body = jsonObject.toJSONString(); boolean success = false; String response = ""; try { response = new HttpHandler.Builder() .setUri(MesConstant.URL) .setPath(MesConstant.PAKIN_URL) .setHeaders(headers) .setJson(body) .build() .doPost(); if (!Cools.isEmpty(response)) { order.setSettle(6L); orderMapper.updateById(order); success = true; } else { log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); throw new CoolException("下发出库任务给GWCS(从出库码头到出库口)失败"); } } catch (Exception e) { log.error("出库订单完成上报MES异常,工作号:{},{}", order.getOrderNo(), e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "出库订单完成上报MES", MesConstant.URL + MesConstant.PAKIN_URL, null, "127.0.0.1", jsonObject.toJSONString(), response, success ); } catch (Exception e) { log.error("接口日志保存异常", e); } } } }