自动化立体仓库 - WMS系统
#
pang.jiabao
2024-09-05 fa5632638d1f6f7e28234ca4b0982b03f58b98f3
src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
@@ -4,9 +4,9 @@
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.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.ApiLogService;
@@ -19,6 +19,7 @@
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;
@@ -45,6 +46,9 @@
    @Resource
    private WrkDetlService wrkDetlService;
    @Resource
    private OrderDetlMapper orderDetlMapper;
    @Transactional
    public void startCkrwPushGwcs(WrkMast wrkMast) {
@@ -58,9 +62,9 @@
        // 构造请求体
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("workNo", wrkMast.getWrkNo());
        jsonObject.put("staNo", wrkMast.getStaNo());
        jsonObject.put("staNo", wrkMast.getIoType() == 3 ? 3013 :wrkMast.getStaNo());
        jsonObject.put("barcode", wrkMast.getBarcode());
        jsonObject.put("sourceStaNo", wrkMast.getSourceStaNo());
        jsonObject.put("sourceStaNo", wrkMast.getIoType() == 3 ? wrkMast.getStaNo() : wrkMast.getSourceStaNo());
        jsonObject.put("descFlag", descFlag); // 101出库时用,0只有一条路径,1理货贴标路径,2贴标打带路径
        String body = jsonObject.toJSONString();
@@ -76,6 +80,13 @@
                    .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 {
@@ -105,75 +116,46 @@
    /**
     * 全板出库到3077或3106的任务,判断出库要走的路径
     * @param wrkMast 工作主档
     * @return 0.只有一条路径,1.理货贴标出库路径,2.贴标打带出库路径
     * @return 1.直接出库,只有一条路径 2.理货贴标出库 3.贴标打带出库 4.贴标出库
     */
    private int getDescToGwcs(WrkMast wrkMast) {
        int flag = 0;
        // todo 两条路线怎么选
        int flag = 1;
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        List<String> collect = wrkDetls.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList());
        if (wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 3077 || wrkMast.getStaNo() == 3106)) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
            // 出的物料有几个位置
            List<String> collect = wrkDetls.stream().map(WrkDetl::getOrigin).distinct().collect(Collectors.toList());
            // 有几个木箱
            if (collect.size() == 1) { // 一箱
                if (wrkDetls.size() == 1) { // 一卷去贴标
                     flag = 1;
                     flag = 4;
                } else { // 多卷直接出
                }
            } else if(collect.size() == 2) { // 两箱去贴标打带
                    flag = 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<String, Object> 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);
            }
        }
    }
}