#
Junjie
2025-04-29 e7abcc58520098787f31952c7be24e6e30acf029
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -7,18 +7,30 @@
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.dto.NotifyCustomDataDto;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.NotifyUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.web.BaseController;
import com.zy.core.cache.MessageQueue;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -26,6 +38,13 @@
@RestController
@RequestMapping("/open")
public class OpenController extends BaseController {
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.inboundTaskApplyPath}")
    private String inboundTaskApplyPath;
    @Value("${wms.TaskExecCallback}")
    private String TaskExecCallback;
    @Autowired
    private OpenService openService;
@@ -36,8 +55,6 @@
    @Autowired
    private TaskWrkController taskWrkController;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private BasCrnpService basCrnpService;
@@ -47,15 +64,18 @@
    private LocMastService locMastService;
    @Autowired
    private BasCrnErrorService basCrnErrorService;
    @Value("${wms.url}")
    private String wmsUrl;
    @Autowired
    private CommonService commonService;
    @Autowired
    private NotifyUtils notifyUtils;
    private static final boolean auth = true;
    public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
        add("ea1f0459efc02a79f046f982767939ae");
    }};
    @Autowired
    private ReactiveRedisTemplate reactiveRedisTemplate;
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
@@ -153,12 +173,11 @@
                return R.error("条码[barcode]不能为空");
            }
            openService.taskCreateIn(param);
            return openService.taskCreateIn(param);
        }catch (Exception e){
            log.error("任务下发异常"+e);
            return R.error();
        }
        return R.ok();
        return R.error();
    }
    //查询任务详情
@@ -192,114 +211,95 @@
    //任务下发接口
    @PostMapping("/outboundTaskSend")
    @Transactional
    public HashMap<String, Object> outboundTaskSend(@RequestBody HashMap<String,Object> hashMap) {
        String jsonString = JSON.toJSONString(hashMap.get("TaskList"));
        List<CarryParam> params= JSONObject.parseArray(jsonString,CarryParam.class);
        HashMap<String, Object> map = new HashMap<>();
        List<WMSAndAGVInterfaceParam> params1 =new ArrayList<>();
        for (CarryParam param:params){
            if (Cools.isEmpty(param)){
                map.put("Code","0");
                map.put("Msg","参数为空!");
                return map;
            } else if (Cools.isEmpty(param.getTaskNo())){
                map.put("Code","0");
                map.put("Msg","任务号为空!");
                return map;
            } else if (Cools.isEmpty(param.getStereoscopicTaskType())){
                map.put("Code","0");
                map.put("Msg","任务类型为空!");
                return map;
            }
            String fusion = Utils.getLocNo(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo());
            param.setStartPoint(fusion);
            LocMast locMast = locMastService.selectByLocNo(param.getStartPoint());
            if(Cools.isEmpty(locMast)){
                map.put("Code","0");
                map.put("Msg","初始库位无法找到!");
                return map;
            }
            HashMap<String,Object> r = new HashMap<>();
            if(param.getStereoscopicTaskType() == 2){
                //出库任务创建
                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("type_no",2)
                        .eq("crn_no",locMast.getCrnNo())
                        .eq("stn_no",param.getTerminalNo()));
                if(Cools.isEmpty(staDesc)){
                    map.put("Code","0");
                    map.put("Msg","出库路劲不存在!");
                    return map;
                }
                r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo()));
                if(r.get("Code").equals("0")){
                    return r;
                }
            }else if (param.getStereoscopicTaskType() == 3){
                String fusion1 = Utils.getLocNo(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo());
                param.setTerminalNo(fusion1);
                //移库任务创建
                r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo()));
                if(r.get("Code").equals("0")){
                    return r;
                }
            }
            apiLogService.save("Wms任务下发接口"
                    ,request.getRemoteAddr()+request.getRequestURI()
                    ,""
                    ,request.getRemoteAddr()
                    ,JSON.toJSONString(param)
                    ,r.toString()
                    ,true
            );
    public HashMap<String, Object> outboundTaskSend(@RequestBody TaskCreateParam param) {
        if (Cools.isEmpty(param)){
            return R.error("参数为空");
        }
        map.put("Code","1");
        map.put("Msg","ok");
        return map;
        if (param.getTaskNo() == null){
            return R.error("任务号为空");
        }
        if (param.getIoType() == null){
            return R.error("任务类型为空");
        }
        LocMast locMast = locMastService.selectByLocNo(param.getStartPoint());
        if(locMast == null){
            return R.error("初始库位无法找到");
        }
        if (!locMast.getLocSts().equals("F")) {
            return R.error("库位不处于在库状态");
        }
        R result = null;
        if(param.getIoType() == 1){
            //出库任务创建
            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                    .eq("type_no", 2)
                    .eq("crn_no", locMast.getCrnNo())
                    .eq("stn_no", param.getTargetPoint()));
            if(Cools.isEmpty(staDesc)){
                return R.error("出库路径不存在");
            }
            param.setIoType(2);
            result = openService.taskCreate(param);
        }
        apiLogService.save("wms任务下发接口"
                ,request.getRemoteAddr()+request.getRequestURI()
                ,""
                ,request.getRemoteAddr()
                ,JSON.toJSONString(param)
                ,JSON.toJSONString(result)
                ,true
        );
        return result;
    }
    //任务取消接口
    @PostMapping("/taskCancel")
    public R taskCancel(@RequestHeader String appkey,
                               @RequestBody WMSAndAGVInterfaceParam param,
                               @RequestBody TaskCancelParam param,
                               HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)){
        if (Cools.isEmpty(param)) {
            return R.error("参数为空!");
        } else if (Cools.isEmpty(param.getTaskNo())){
        } else if (Cools.isEmpty(param.getTaskNo())) {
            return R.error("工作号为空!");
        } else if (Cools.isEmpty(param.getIoType())){
        } else if (Cools.isEmpty(param.getIoType())) {
            return R.error("操作类型为空!");
        } else if (Cools.isEmpty(param.getBarcode())){
        } else if (Cools.isEmpty(param.getBarcode())) {
            return R.error("托盘码不能为空!");
        }
        TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>()
                .eq("task_no", param.getTaskNo())
                .eq("io_type",param.getIoType())
                .eq("barcode",param.getBarcode()));
                .eq("io_type", param.getIoType())
                .eq("barcode", param.getBarcode()));
        if (Cools.isEmpty(taskWrk)){
            return R.error("未查到当前任务---"+param);
            return R.error("未查到当前任务---" + param);
        }
        boolean sign =false;
        switch (param.getTaskStatus()){
        switch (param.getTaskStatus()) {
            case 1://正常取消
                if (taskWrk.getStatus()>1){
                if (taskWrk.getStatus() > 1) {
                    return R.error("任务已开始执行");
                }
                break;
            case 2://正常完成
                if (taskWrk.getStatus()>1){
                if (taskWrk.getStatus() > 1) {
                    return R.error("任务已开始执行");
                }
                sign=true;
                sign = true;
                break;
            default:
                return R.error("未知操作");
        }
        return taskWrkOperate(taskWrk,sign);
        return taskWrkOperate(taskWrk, sign);
    }
    //任务操作
@@ -337,4 +337,128 @@
        return R.ok(crnStatusParams);
    }
    //模拟输送线入库
    @PostMapping("/simulationDevpIn")
    @Transactional
    public R simulationDevpIn(@RequestBody SimulationDevpInParam param) {
        String barcode = param.getBarcode();
        Integer staNo = param.getStaNo();
        Boolean back = param.getBack();
        String errMsg = param.getErrMsg();
        TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
        if (taskWrk1 != null) {
            log.info("托盘码:" + barcode + "任务档存在");
            return R.error();
        }
        HashMap<String, Object> requestParam = new HashMap<>();
        requestParam.put("barcode", barcode);//托盘码
        requestParam.put("stationCode", staNo);//入库口
        if (back) {
            requestParam.put("wcsStatus", 1);//失败
            requestParam.put("wcsErrorMessage", errMsg);//失败原因
        }else {
            requestParam.put("wcsStatus", 0);//成功
        }
        String response = "";
        Boolean success = false;
        try {
            response = new HttpHandler.Builder()
                    .setUri(wmsUrl)
                    .setPath(inboundTaskApplyPath)
                    .setJson(JSON.toJSONString(requestParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code") != 200) {
                log.info("条码:" + barcode + "申请WMS失败,response=" + JSON.toJSONString(jsonObject));
                return R.error();
            }
            JSONObject result = jsonObject.getJSONObject("data");
            Integer resultWrkNo = result.getInteger("wrkNo");
            Integer resultStaNo = result.getInteger("stnNo");
            String resultLocNo = result.getString("locNo");
            // 创新一个入库工作档
            TaskWrk taskWrk = taskWrkService.selectByTaskNo(String.valueOf(resultWrkNo));
            if(taskWrk != null) {
                log.info("任务:" + resultWrkNo + "已经存在");
                return R.error();
            }
            LocMast locMast = locMastService.selectByLocNo(resultLocNo);
            if (locMast == null) {
                log.info(resultLocNo + "库位不存在");
                return R.error();
            }
            if (!locMast.getLocSts().equals("O")) {
                log.info(resultLocNo + "库位不处于空库位");
                return R.error();
            }
            Date now = new Date();
            taskWrk = new TaskWrk();
            taskWrk.setTaskNo(String.valueOf(resultWrkNo));//任务号
            taskWrk.setWrkNo(commonService.getWorkNo(WorkNoType.PAKIN.type));//获取入库工作号
            taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
            taskWrk.setWrkSts(2);//2.设备上走
            taskWrk.setCreateTime(now);
            taskWrk.setIoType(1);//任务类型
            taskWrk.setIoPri(13);//优先级
            taskWrk.setBarcode(barcode);//条码
            taskWrk.setCrnNo(locMast.getCrnNo());
            taskWrk.setTargetPoint(resultLocNo);
            taskWrk.setStartPoint(String.valueOf(staNo));
            if (!Cools.isEmpty(taskWrk.getTargetPoint())) {
                taskWrk.setOriginTargetPoint(taskWrk.getTargetPoint());
            }
            if (!taskWrkService.insert(taskWrk)) {
                log.info("任务:" + resultWrkNo + "任务创建失败");
                return R.error();
            }
            locMast.setLocSts("S");
            locMast.setModiTime(new Date());
            locMastService.updateById(locMast);
            //上报
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("taskNo", taskWrk.getTaskNo());
            hashMap.put("status", TaskStatusType.DISTRIBUTE.id);
            hashMap.put("ioType", 2);
            hashMap.put("barcode", taskWrk.getBarcode());
            hashMap.put("reportTime", format.format(new Date()));
            NotifyCustomDataDto customDataDto = new NotifyCustomDataDto();
            customDataDto.setUri(wmsUrl);
            customDataDto.setPath(TaskExecCallback);
            customDataDto.setData(JSON.toJSONString(hashMap));
            boolean notifyResult = notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), NotifyMsgType.TASK_START, JSON.toJSONString(taskWrk), true, customDataDto);
            if(notifyResult) {
                taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//任务派发
                taskWrkService.updateById(taskWrk);
            }
        } catch (Exception e) {
            log.error("请求入库调用接口失败");
            log.error("异常信息打印:" + e);
        } finally {
            apiLogService.save("wms请求入库货位接口"
                    , wmsUrl + inboundTaskApplyPath
                    , null
                    , "127.0.0.1"
                    , JSON.toJSONString(requestParam)
                    , response
                    , success
            );
        }
        log.info("入库请求参数=" + JSON.toJSONString(barcode));
        log.info("入库请求返回参数=" + JSON.toJSONString(response));
        return R.ok();
    }
}