pang.jiabao
2024-07-10 09f658d805f714fc2b90794e4b772aa802ca55a3
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -7,16 +7,11 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.entity.StaDesc;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.ToWmsDTO;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.entity.param.taskCreateParam;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OpenService;
import com.zy.asrs.service.StaDescService;
import com.zy.asrs.service.TaskWrkService;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.utils.HttpHandler;
import com.zy.core.DevpThread;
@@ -27,14 +22,15 @@
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;
@Slf4j
@Service
public class OpenServiceImpl implements OpenService {
@@ -47,6 +43,11 @@
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private LocMastService locMastService;
@@ -61,6 +62,22 @@
    @Override
    public R taskCreate(taskCreateParam param) {
        //禁用堆垛机后不可下发任务
//        BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", param.getCrn()));
//        if ((param.getIoType() == 3 || param.getIoType() == 1 ) && basCrnp.getInEnable().equals("N")){
//            throw new CoolException("生成任务失败,堆垛机不可用");
//        } else if (param.getIoType() == 2 && basCrnp.getOutEnable().equals("N")) {
//            throw new CoolException("生成任务失败,堆垛机不可用");
//        }
        //禁用库位后不可下发出库任务
        if (param.getIoType() == 2){
            String wcsLocNo = Utils.getWcsLocNo(param.getStartPoint());
            LocMast locMast = locMastService.selectByLocNo(wcsLocNo);
            if (locMast.getLocSts().equals("J")){
                throw new CoolException("生成出库任务失败,库位被禁用");
            }
        }
        TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
        if (taskWrk != null) {
            throw new CoolException(param.getTaskNo() + "任务已存在,请勿重复提交");
@@ -78,25 +95,33 @@
        taskWrk.setIoPri(param.getTaskPriority());//优先级
        taskWrk.setBarcode(param.getBarcode());//条码
        taskWrk.setCrnNo(param.getCrn());
        String stats = "";
        String wcsLocNo = "";
        if(param.getIoType() == 1){
            taskWrk.setWrkSts(1);
            if (!Cools.isEmpty(param.getTargetPoint())) {
                taskWrk.setTargetPoint(Utils.getWcsLocNo(param.getTargetPoint()));//终点
                wcsLocNo = taskWrk.getTargetPoint();
                taskWrk.setOriginTargetPoint(param.getTargetPoint());
                stats = "S";
            }
        } else if (param.getIoType() == 2) {
            taskWrk.setWrkSts(11);
            if (!Cools.isEmpty(param.getStartPoint())) {
                taskWrk.setStartPoint(Utils.getWcsLocNo(param.getStartPoint()));//起点
                wcsLocNo = taskWrk.getStartPoint();
                taskWrk.setOriginStartPoint(param.getStartPoint());
                stats = "R";
            }
            taskWrk.setTargetPoint(param.getTargetPoint());
        }else if (param.getIoType() == 3){
            taskWrk.setWrkSts(11);
            if (!Cools.isEmpty(param.getStartPoint())) {
                taskWrk.setStartPoint(Utils.getWcsLocNo(param.getStartPoint()));//起点
                wcsLocNo = taskWrk.getStartPoint();
                taskWrk.setOriginStartPoint(param.getStartPoint());
                stats = "R";
            }
        }
@@ -105,6 +130,11 @@
        if (!Cools.isEmpty(param.getMemo())) {
            taskWrk.setMemo(param.getMemo());//备注
        }
        // 更新库位状态
        LocMast locMast = locMastService.selectByLocNo(wcsLocNo);
        locMast.setLocSts(stats);
        locMastService.updateById(locMast);
        if (!taskWrkService.insert(taskWrk)) {
            return R.error("创建任务失败");
@@ -122,6 +152,11 @@
            list = getInEnableRoadway();
        }else {
            list = getInEnableRoadway2();
        }
        if (Cools.isEmpty(list)){
            log.warn("无可入巷道,请稍后再试");
            return R.error("无可入巷道");
        }
@@ -146,7 +181,7 @@
        JSONObject jsonObject = JSON.parseObject(response);
        apiLogService.save("wms请求入库码头接口"
        apiLogService.save("请求入库码头接口"
                ,wmsUrl+"wcsManager/wcsInterface/inboundTaskApply"
                ,null
                ,"127.0.0.1"
@@ -197,13 +232,13 @@
    }
    @Override
    public void getAgvTaskOver(TaskOverParam param) {
    public R getAgvTaskOver(TaskOverParam param) {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                    .eq("stn_desc", param.getWharfCode()));
            if (Cools.isEmpty(staDesc)){
                throw new RuntimeException("未查询到站点信息");
                throw new CoolException("未查询到站点信息");
            }
            // 获取入库站信息
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
@@ -221,10 +256,13 @@
                    staProtocol.setStaNo((short)0);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                    if (result) {
                        return R.ok("取货完成");
                    } else {
                        throw new RuntimeException("agv返回完成后,命令下发失败");
                        throw new CoolException("agv返回完成后,命令下发失败");
                    }
                }else {
                    return R.error("取货站点状态有误,有物信号:"+staProtocol.isLoading()
                            +",车辆信号:"+staProtocol.isCar()+",工作号:"+staProtocol.getWorkNo());
                }
            }else {
                for (DevpSlave.Sta inSta : devp.getInSta()) {
@@ -236,16 +274,20 @@
                            staProtocol.setStaNo(inSta.getStaNo().shortValue());
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                            if (result) {
                                return R.ok("放货完成");
                            } else {
                                throw new RuntimeException("agv返回完成后,命令下发失败");
                                throw new CoolException("agv返回完成后,命令下发失败");
                            }
                        }else {
                            return R.error("放货站点状态有误,有物信号:"+staProtocol.isLoading()
                                    +",车辆信号:"+staProtocol.isCar()+",工作号:"+staProtocol.getWorkNo());
                        }
                    }
                }
            }
        }
        return R.ok();
    }
@@ -273,8 +315,18 @@
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()){
                if (workNo == 0 && !staProtocol.isLoading() && staProtocol.isAutoing()){
                    if (Cools.isEmpty( map.get(inSta.getStaNo()))){
                        continue;
                    }
                    BasCrnp crnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", map.get(inSta.getStaNo())));
                    if (Cools.isEmpty(crnp)){
                        continue;
                    }
                    if (crnp.getInEnable().equals("N")){
                        continue;
                    }
                    if (crnp.getCrnSts()!=3){
                        continue;
                    }
                    list.add( map.get(inSta.getStaNo()));
@@ -309,10 +361,20 @@
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()){
                if (workNo == 0 && !staProtocol.isLoading() && staProtocol.isAutoing()){
                    if (Cools.isEmpty( map.get(inSta.getStaNo()))){
                        continue;
                    }
                    BasCrnp crnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", map.get(inSta.getStaNo())));
                    if (Cools.isEmpty(crnp)){
                        continue;
                    }
                    if (crnp.getInEnable().equals("N")){
                        continue;
                    }
                    if (crnp.getCrnSts()!=3){
                        continue;
                    }
                    list.add( map.get(inSta.getStaNo()));
                }
            }