自动化立体仓库 - WMS系统
zyh
14 小时以前 701542ac0a90cf0e3a0a81ec2bb8066b5de68e75
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -1,20 +1,23 @@
package com.zy.asrs.task.handler;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.mes.MesReturn;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.CanFinMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.BasStationServiceImpl;
import com.zy.asrs.service.impl.LocCacheServiceImpl;
import com.zy.asrs.service.impl.OrderPakinServiceImpl;
import com.zy.asrs.service.impl.TaskDetlServiceImpl;
import com.zy.asrs.service.impl.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -56,6 +59,13 @@
    private TaskDetlService taskDetlService;
    @Autowired
    private BasStationServiceImpl basStationService;
    @Autowired
    private CanFinMapper canFinMapper;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Value("${mes.url}")
    private String url;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -90,6 +100,7 @@
                        locMast.setLocSts("D");
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        locMast.setPic(wrkMast.getPic());
                        if (!locMastService.updateById(locMast)) {
//                            exceptionHandle("空板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -131,6 +142,11 @@
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            locDetl.setMatnr(wrkDetl.getMatnr());
                            locDetl.setMaktx(wrkDetl.getMaktx());
                            locDetl.setSpecs(wrkDetl.getSpecs());
                            locDetl.setUnit(wrkDetl.getUnit());
                            locDetl.setZpallet(wrkDetl.getZpallet());
                            if (!locDetlService.insert(locDetl)) {
//                                exceptionHandle("全板入库 ===>> 添加库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -169,6 +185,7 @@
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        locMast.setPic(wrkMast.getPic());
                        if (!locMastService.updateById(locMast)) {
//                            exceptionHandle("全板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -202,6 +219,11 @@
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            locDetl.setMatnr(wrkDetl.getMatnr());
                            locDetl.setMaktx(wrkDetl.getMaktx());
                            locDetl.setSpecs(wrkDetl.getSpecs());
                            locDetl.setUnit(wrkDetl.getUnit());
                            locDetl.setZpallet(wrkDetl.getZpallet());
                            if (!locDetlService.insert(locDetl)) {
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                return FAIL.setMsg("拣料途中并板 ===>> 添加库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
@@ -231,9 +253,9 @@
                    for (WrkDetl wrkDetl : wrkDetls53) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                                , null, wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3()
                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),null, wrkDetl.getStandby2(), wrkDetl.getStandby3()
                                    , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
//                                exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -244,17 +266,17 @@
                        // 更新订单完成数量
                        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem
                                (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
                                        wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        null, wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        if (orderDetlPakin == null) {
                            orderDetlPakin = orderDetlPakinService.selectItem
                                    (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                    (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), null, wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        }
                        try {
                            if (!Cools.isEmpty(orderDetlPakin)) {
                                if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), null, wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
@@ -272,6 +294,7 @@
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        locMast.setPic(wrkMast.getPic());
                        if (!locMastService.updateById(locMast)) {
//                            exceptionHandle("拣料入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -308,6 +331,11 @@
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            locDetl.setMatnr(wrkDetl.getMatnr());
                            locDetl.setMaktx(wrkDetl.getMaktx());
                            locDetl.setSpecs(wrkDetl.getSpecs());
                            locDetl.setUnit(wrkDetl.getUnit());
                            locDetl.setZpallet(wrkDetl.getZpallet());
                            if (!locDetlService.insert(locDetl)) {
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                return FAIL.setMsg("并板入库 ===>> 新增库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
@@ -336,6 +364,7 @@
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        locMast.setPic(wrkMast.getPic());
                        if (!locMastService.updateById(locMast)) {
//                            exceptionHandle("并板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -373,6 +402,7 @@
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        locMast.setPic(wrkMast.getPic());
                        if (!locMastService.updateById(locMast)) {
//                            exceptionHandle("盘点入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -395,8 +425,10 @@
                        }
                    }
                    // 修改源库位状态 ==> O
                    String picUrl = "";
                    LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                    if (null != sourceLoc) {
                        picUrl = sourceLoc.getPic();
                        sourceLoc.setBarcode("");
                        sourceLoc.setLocSts("O");
                        sourceLoc.setModiTime(now);
@@ -412,6 +444,7 @@
                    locMast.setBarcode(wrkMast.getBarcode());
                    locMast.setIoTime(now);
                    locMast.setModiTime(now);
                    locMast.setPic(picUrl);
                    if (!locMastService.updateById(locMast)) {
//                        exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -429,11 +462,51 @@
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("更新入库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            }
            // 将waitPakin表中的数据标记为已处理
            if (wrkMast.getIoType() == 1) { // 全板入库
                Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode());
                WaitPakin setParam = new WaitPakin();
                setParam.setStatus("N");
                setParam.setModiTime(new Date());
                waitPakinService.update(setParam, wrapper);
                log.info("更新库存成功!托盘码:{}", wrkMast.getBarcode());
            }
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        try{
            CanFin canFin = new CanFin();
            List<CanFin> canFinList = canFinMapper.selectList(
                    new EntityWrapper<CanFin>()
                            .orderBy("apply_time", true)
            );
            if (canFinList != null){
                CanFin firstCanFin = canFinList.get(0);
                if (firstCanFin.getAgvType().equals("agv-in")){
//                    if (firstCanFin.getAgvType().equals("agv-in-out")){
                    canFinMapper.deleteById(firstCanFin.getId());
                    if (canFinList.size() > 1){
                        CanFin firstCanFin1 = canFinList.get(1);
                        firstCanFin1.setTaskStatus("canout");
                        log.info("can_fin表已更新,入库单状态{}", firstCanFin1.getOutType());
                        canFinMapper.updateById(firstCanFin1);
                    }
                }
//                    else if(firstCanFin.getAgvType().equals("agv-in")){
//                        canFinMapper.deleteById(firstCanFin.getId());
//                    }
            }
        } catch (Exception e) {
            log.error("本次入库没有任务单");
        }
        return SUCCESS;
@@ -553,8 +626,13 @@
                default:
                    break;
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(15L);
            if(!Cools.isEmpty(wrkMast.getMemo())){
                // 修改工作主档状态
                wrkMast.setWrkSts(30L);//30.等待创建AGV搬运任务
            }else {
                // 修改工作主档状态
                wrkMast.setWrkSts(15L);
            }
            wrkMast.setModiTime(now);
            if (!wrkMastService.updateById(wrkMast)) {
//                exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
@@ -567,6 +645,69 @@
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        try{
            List<CanFin> firstCanFinList = canFinMapper.selectList(
                    new EntityWrapper<CanFin>()
                            .orderBy("apply_time", true)
            );
            CanFin firstCanfin = firstCanFinList.get(0);
            if (firstCanfin.getOutNo() != null && firstCanfin.getAgvType().equals("agv-out")){
                log.info("can_fin表已更新,出库单{}已删除",firstCanfin.getOutNo());
                canFinMapper.deleteById(firstCanfin.getId());
            }
            if (firstCanfin.getOutNo() == null && firstCanfin.getAgvType().equals("agv-out")){
                log.info("can_fin表已更新,出库任务已删除,当前出库无任务单");
                canFinMapper.deleteById(firstCanfin.getId());
            }
            if (firstCanFinList.size() > 1){
                CanFin secondCanFin = firstCanFinList.get(1);
                secondCanFin.setTaskStatus("canout");
                canFinMapper.updateById(secondCanFin);
            }
//                else {
//                OrderPakout isOut = orderPakoutService.selectOne(
//                                        new EntityWrapper<OrderPakout>()
//                                                .eq("settle", 2L)
//                                                .eq("doc_type", 12L));
//                String outOrderNo = isOut.getOrderNo();
//                    List<CanFin> canFinList = canFinMapper.selectList(
//                            new EntityWrapper<CanFin>()
//                                    .eq("agv_type", "agv-in-out")
//                                    .orderBy("apply_time", true)
//                    );
//                    if (canFinList != null){
//                        CanFin firstCanFin = canFinList.get(0);
//
//                        OrderPakout isOut = orderPakoutService.selectOne(
//                                new EntityWrapper<OrderPakout>()
//                                        .eq("orderNo", firstCanFin.getOutNo()));
//
//                        String outOrderNo = isOut.getOrderNo();
//                        if (outOrderNo.equals(firstCanFin.getOutNo())){
//                            log.info("can_fin表已更新,转序出库单{}已删除", firstCanFin.getOutNo());
//                            canFinMapper.deleteById(firstCanFin.getId());
//                        }else {
//                            log.info("未找到该出库单,can_fin表未更新");
//                        }
//                        List<CanFin> canFinList1 = canFinMapper.selectList(
//                                new EntityWrapper<CanFin>()
//                                        .eq("agv_type", "agv-in-out")
//                                        .orderBy("apply_time", true));
//                        if (!canFinList1.isEmpty()){
//                            CanFin firstCanFin2 = canFinList.get(0);
//                            firstCanFin2.setTaskType("Y");
//                            log.info("can_fin表已更新,转序出库单可以转序", firstCanFin2.getOutNo());
//                            canFinMapper.updateById(firstCanFin2);
//                        }
//                    }
//                }
        } catch (Exception e) {
            log.error("本次出库没有任务单");
            return null;
        }
        return SUCCESS;
    }
@@ -578,12 +719,44 @@
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> AgvStart(Task task) {
        // 4.入库完成
        if (task.getWrkSts() == 4) {
            return agvDoIn(task);
            // 14.出库完成
        } else if (task.getWrkSts() == 14) {
            return agvDoOut(task);
        //查询是否有关联的WrkMast任务
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", task.getWrkNo()));
        if (wrkMast != null) {
            if (wrkMast.getIoType()==110&& wrkMast.getWrkSts()>12){
                wrkMast.setWrkSts(15L);//32.等待组托
            }else if (wrkMast.getIoType()==101 && wrkMast.getWrkSts()>12){
                wrkMast.setWrkSts(15L);//15.出库更新完成
            }else if (wrkMast.getIoType()==103 && wrkMast.getWrkSts()>12){
                wrkMast.setWrkSts(20L);//20.等待回库
            }
            wrkMast.setModiTime(new Date());
            wrkMast.setOveMk("Y");
            wrkMastService.updateById(wrkMast);
            task.setWrkSts(305L);//任务状态从304--》305
            task.setModiTime(new Date());
            taskService.updateById(task);
            //对转序搬运完成的任务结果反馈给mes
        }else if(task.getTaskType().equals("ZX-AGV")){
            HashMap<String,Object> map = new HashMap<>();
            map.put("taskno", task.getTaskNo());
            map.put("agvFactory", "2");
            String mesUrl = url+"AGVArrivalCompletedFit";
            String response = RcsServiceImpl.sendPost(mesUrl, JSONObject.toJSONString(map));
            if (!StringUtils.isEmpty(response) && response.contains("Success")){
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if("1".equals(mesReturn.getSuccess())) {
                    task.setWrkSts(305L);//任务状态从304--》305
                    task.setModiTime(new Date());
                    taskService.updateById(task);
                }else {
                    return new ReturnT<>(500, mesReturn.getMessage());
                }
            }
        }else {
            task.setWrkSts(305L);//任务状态从304--》305
            task.setModiTime(new Date());
            taskService.updateById(task);
        }
        return SUCCESS;
    }