自动化立体仓库 - WMS系统
*
lsh
9 小时以前 72149078ff14f391cdd3c312b74455e441630343
src/main/java/com/zy/asrs/task/handler/GroupOrderFormHandler.java
@@ -1,48 +1,249 @@
package com.zy.asrs.task.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetlPakout;
import com.zy.asrs.entity.OrderPakout;
import com.zy.asrs.service.OrderDetlPakoutService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderPakoutService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.entity.param.OrderInspectionRollParam;
import com.zy.asrs.entity.param.OrderOutLocBoxCsUtilParam;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.CodeDetectionUtil;
import com.zy.asrs.utils.OrderOutBatchUtil;
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 java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by Monkey D. Luffy on 2025.11.10
 * 徐工汉云..............以下.............上饶江铜.............拆垛完成信息处理
 * 徐工汉云..............以下.............上饶江铜.............组货单相关
 */
@Slf4j
@Service
public class GroupOrderFormHandler extends AbstractHandler<String> {
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Autowired
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private LocDetlService locDetlService;
    @Transactional
    public ReturnT<String> abandoned(OrderPakout orderPakout) {
        List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
        moveBoth(orderPakout,orderDetls);
        return SUCCESS;
    }
    private void moveBoth(OrderPakout order, List<OrderDetlPakout> orderDetls){
        Date now = new Date();
        if (!Cools.isEmpty(orderDetls)) {
            for (OrderDetlPakout orderDetl : orderDetls) {
                orderDetl.setUpdateBy(0L);
                orderDetl.setUpdateTime(now);
//                orderDetlPakoutService.addToLogTable(orderDetl);
                orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>()
                        .eq("id",orderDetl.getId()));
            }
        }
        if (!Cools.isEmpty(order)){
            order.setUpdateBy(0L);
            order.setUpdateTime(now);
//            orderPakoutService.addToLogTable(order);
            orderPakoutService.delete(new EntityWrapper<OrderPakout>()
                    .eq("id",order.getId()));
        }
    }
    @Transactional
    public ReturnT<String> inspection(OrderPakout orderPakout) {
        List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
        String memo = "";
        for (OrderDetlPakout orderDetl : orderDetls) {
            boolean signD = true;
            if (!CodeDetectionUtil.barcodeDetection(orderDetl.getManu(),7)){
                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("model", orderDetl.getModel()));
                if (!Cools.isEmpty(locDetl)){
                    signD = false;
                    orderDetl.sync(locDetl);
                    orderDetl.setManu(locDetl.getLocNo());
                    orderDetl.setBarcode(locDetl.getBarcode());
                    orderDetl.setDanger(locDetl.getDanger());
                    orderDetl.setMemo(locDetl.getMemo());
                    if (!Cools.isEmpty(locDetl.getDanger$()) && locDetl.getDanger()==1){
                        orderDetl.setDanger(1);
                        orderDetlPakoutService.updateById(orderDetl);
                        continue;
                    }
                } else {
                    if (Cools.isEmpty(memo)){
                        memo = "无库存";
                    }else {
                        memo = memo+";无库存";
                    }
                    continue;
                }
            }
            if (signD){
                if (!Cools.isEmpty(orderDetl.getDanger$()) && orderDetl.getDanger()==1){//合格不需要检验
                    continue;
                } else {
                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("model", orderDetl.getModel()));
                    if (!Cools.isEmpty(locDetl.getDanger$()) && locDetl.getDanger()==1){
                        orderDetl.setDanger(1);
                        orderDetlPakoutService.updateById(orderDetl);
                        continue;
                    }
                }
            }
            OrderInspectionRollParam orderInspectionRollParam = new OrderInspectionRollParam(orderDetl.getModel());
            String response = "";
            boolean success = false;
            try {
                response = new HttpHandler.Builder()
                        .setUri(MesConstant.URL)
                        .setPath(MesConstant.PAKIN_URL)
                        .setJson(JSON.toJSONString(orderInspectionRollParam))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    if (jsonObject.getBoolean("state")) {
                        String value = jsonObject.getString("value");
                        if (value.equals("合格")){
                            orderDetl.setDanger(1);
                            orderDetlPakoutService.updateById(orderDetl);
                        } else if (!Cools.isEmpty(orderDetl.getDanger$()) && value.equals(orderDetl.getDanger$())){
                            if (Cools.isEmpty(memo)){
                                memo = "查询卷号结果:"+jsonObject.getString("message");
                            }else {
                                memo = memo+";查询卷号结果:"+jsonObject.getString("message");
                            }
                            continue;
                        } else {
                            if (Cools.isEmpty(memo)){
                                memo = "查询卷号结果:"+jsonObject.getString("message");
                            }else {
                                memo = memo+";查询卷号结果:"+jsonObject.getString("message");
                            }
                            if (value.equals("不合格")){
                                orderDetl.setDanger(2);
                                orderDetlPakoutService.updateById(orderDetl);
                            }
                            continue;
                        }
                    } else {
                        if (Cools.isEmpty(memo)){
                            memo = "查询卷号结果:"+jsonObject.getString("message");
                        }else {
                            memo = memo+";查询卷号结果:"+jsonObject.getString("message");
                        }
                    }
                    success = true;
                } else {
                    if (Cools.isEmpty(memo)){
                        memo = "查询卷号结果:"+jsonObject.getString("message");
                    }else {
                        memo = memo+";查询卷号结果:"+jsonObject.getString("message");
                    }
                    log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(orderInspectionRollParam), response);
//                    throw new CoolException("查询卷号是否合格失败");
                }
            } catch (Exception e) {
                if (Cools.isEmpty(memo)){
                    memo = "查询卷号结果:"+"异常"+e.getMessage();
                }else {
                    memo = memo+";查询卷号结果:"+"异常"+e.getMessage();
                }
                log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "查询卷号是否合格",
                            MesConstant.URL + MesConstant.PAKIN_URL,
                            null,
                            "127.0.0.1",
                            JSON.toJSONString(orderInspectionRollParam),
                            response,
                            success
                    );
                } catch (Exception e) { log.error("查询卷号是否合格保存接口日志异常", e); }
            }
        }
        if (Cools.isEmpty(memo)){
            return SUCCESS;
        }
        orderPakout.setSettle(13L);//检验存在不合格
        orderPakout.setMemo(memo);
        orderPakoutService.updateById(orderPakout);
        return FAIL;
    }
    @Transactional
    public ReturnT<String> start(OrderPakout orderPakout) {
        List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
        List<OrderDetlPakout> orderDetlPakoutList = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
        if (orderDetlPakoutList.isEmpty()){
            orderPakout.setSettle(98L);
            orderPakout.setMemo("不存在明细!!!");
            orderPakoutService.updateById(orderPakout);
            return FAIL;
        }
        List<OrderOutLocBoxCsUtilParam> outLocBoxCs = new ArrayList<>();
        String orderNo = "ZH" + snowflakeIdWorker.nextId();
        for (OrderDetlPakout orderDetl : orderDetlPakoutList) {
            if (!CodeDetectionUtil.barcodeDetection(orderDetl.getManu(),7)){//无库存
                continue;
            }
            if (Cools.isEmpty(orderDetl.getDanger$()) || orderDetl.getDanger()!=1){//不合格不出库
                continue;
            }
            OrderOutLocBoxCsUtilParam outLocBox = new OrderOutLocBoxCsUtilParam();
            outLocBox.setBoxNo(orderDetl.getBatch());
            outLocBox.setRoll(orderDetl.getModel());
            outLocBox.setMemo(orderDetl.getMemo());
            outLocBox.setOrderOneNo(orderNo);
            outLocBox.setCstmrName(orderPakout.getCstmrName());
            outLocBox.setDanger(orderDetl.getDanger$());
            outLocBoxCs.add(outLocBox);
        }
        if (outLocBoxCs.isEmpty()){
            orderPakout.setSettle(98L);
            orderPakout.setMemo("不存在合格的物料明细!!!");
            orderPakoutService.updateById(orderPakout);
            return FAIL;
        }
        return SUCCESS;
        OrderOutBatchUtil orderOutBatchUtil = new OrderOutBatchUtil(orderNo,orderPakout.getCstmrName(),"","MES下发组货单","组货单",true,orderPakout.getItemName());
        R r = orderOutBatchUtil.outGroupOrderForm(outLocBoxCs);
        int code = Integer.parseInt(String.valueOf(r.get("code")));
        if (code==200){
            return SUCCESS;
        }
        String meg = String.valueOf(r.get("msg"));
        orderPakout.setSettle(98L);
        orderPakout.setMemo(meg);
        orderPakoutService.updateById(orderPakout);
        return FAIL;
    }
}