#
Junjie
2025-04-15 d56b8093dc9e3e75f8efe1a0f1aa6d821c9c3dfb
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java
@@ -1,24 +1,24 @@
package com.zy.asrs.wcs.core.timer;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.entity.Task;
import com.zy.asrs.wcs.core.entity.TaskLog;
import com.zy.asrs.common.utils.HttpHandler;
import com.zy.asrs.wcs.core.entity.*;
import com.zy.asrs.wcs.core.model.enums.LocStsType;
import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
import com.zy.asrs.wcs.core.model.enums.TaskStsType;
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.service.TaskLogService;
import com.zy.asrs.wcs.core.service.TaskService;
import com.zy.asrs.wcs.core.service.*;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
@Slf4j
@Component
@@ -29,14 +29,22 @@
    @Autowired
    private TaskLogService taskLogService;
    @Autowired
    private MotionService motionService;
    @Autowired
    private MotionLogService motionLogService;
    @Autowired
    private LocService locService;
    @Autowired
    private DictService dictService;
    @Autowired
    private BasConveyorStaService basConveyorStaService;
    @Scheduled(cron = "0/1 * * * * ? ")
    @Transactional
    public synchronized void clearCompletedTask() {
    public synchronized void clearCompletedTask2() {
        ArrayList<Long> taskSts = new ArrayList<>();
        taskSts.add(TaskStsType.COMPLETE_INBOUND.sts);
        taskSts.add(TaskStsType.COMPLETE_OUTBOUND.sts);
//        taskSts.add(TaskStsType.COMPLETE_INBOUND.sts);
//        taskSts.add(TaskStsType.COMPLETE_OUTBOUND.sts);
        taskSts.add(TaskStsType.COMPLETE_CHARGE.sts);
        taskSts.add(TaskStsType.COMPLETE_MOVE.sts);
        taskSts.add(TaskStsType.COMPLETE_MANUAL.sts);
@@ -45,6 +53,12 @@
                .eq(Task::getStatus, 1)
                .in(Task::getTaskSts, taskSts));
        for (Task task : tasks) {
//            boolean httpRequest = doHttpRequest(task, "127.0.0.1:8080", "/wms/open/asrs//wrkMast/finish/v1");
//            if (!httpRequest) {
//                return;
//            }
            //记录库存信息
            updateRecordLoc(task);
            //任务转历史档
@@ -52,9 +66,93 @@
        }
    }
    @Scheduled(cron = "0/1 * * * * ? ")
    @Transactional
    public synchronized void clearCompletedTask() {
        ArrayList<Long> taskSts = new ArrayList<>();
        taskSts.add(TaskStsType.COMPLETE_INBOUND.sts);
        taskSts.add(TaskStsType.COMPLETE_OUTBOUND.sts);
//        taskSts.add(TaskStsType.COMPLETE_CHARGE.sts);
//        taskSts.add(TaskStsType.COMPLETE_MOVE.sts);
//        taskSts.add(TaskStsType.COMPLETE_MANUAL.sts);
        taskSts.add(TaskStsType.COMPLETE_LADEN_MOVE.sts);
        Dict reportWms = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "reportWms"));
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .eq(Task::getStatus, 1)
                .in(Task::getTaskSts, taskSts));
        for (Task task : tasks) {
            Motion motion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getMotionCtg, MotionCtgType.LIFT_WITH_GOODS.val()).eq(Motion::getTaskNo, task.getTaskNo()));
            if (motion != null) {
                List<BasConveyorSta> conveyorStas = basConveyorStaService.list(new LambdaQueryWrapper<BasConveyorSta>().in(BasConveyorSta::getTaskNo, motion.getTemp()));
                if (!conveyorStas.isEmpty()) {
                    continue;
                }
            }
            if (reportWms != null && reportWms.getValue().equals("true")) {
                //获取WMS地址
                Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "WMS_URL").eq(Dict::getStatus, 1));
                if (dict == null) {
                    News.error("WMS地址未配置");
                    return;
                }
                String wmsUrl = dict.getValue();
                if(task.getTaskSts().equals(TaskStsType.COMPLETE_INBOUND.sts)
                        || task.getTaskSts().equals(TaskStsType.COMPLETE_OUTBOUND.sts)
                        || task.getTaskSts().equals(TaskStsType.COMPLETE_LADEN_MOVE.sts)){
//                    boolean httpRequest = doHttpRequest(task, wmsUrl, "/open/asrs/wrkMast/finish/v1");
//                    if (!httpRequest) {
//                        continue;
//                    }
                }
            }
            //记录库存信息
            updateRecordLoc(task);
            //任务转历史档
            saveTaskLog(task);
        }
    }
    private boolean doHttpRequest(Task requestParam, String url, String path){
        String response = "";
        boolean success = false;
        try {
        Map<String, Object> map = new HashMap<>();
        map.put("appkey", "ea1f0459efc02a79f046f982767939ae");
        Map<String, Object> map2 = new HashMap<>();
        map2.put("taskNo", requestParam.getWmsTaskNo());
        log.info("请求报文:"+ JSONObject.toJSONString(requestParam));
            response = new HttpHandler.Builder()
                    .setHeaders(map)
                    .setUri(url)
                    .setPath(path)
                    .setJson(JSONObject.toJSONString(map2))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            log.info("请求返回:"+response);
            String code = jsonObject.get("code").toString();
            if(code.equals("200")){
                success = true;
            }
        }catch (Exception e){
            log.info("请求报错"+e.getMessage());
        }
        return success;
    }
    //更新库存信息
    @Transactional
    public void updateRecordLoc(Task task) {
        if (task.getRecordLoc() == null) {
            return;
        }
        if (task.getRecordLoc().equals("Y")) {//记录库存信息
            //源库位 => 空库
            //目标库位 => 在库
@@ -83,16 +181,24 @@
    @Transactional
    public void saveTaskLog(Task task) {
        //创建历史档
        Date date = new Date();
        TaskLog taskLog = new TaskLog();
        taskLog.setTaskNo(task.getTaskNo());
        taskLog.setTaskData(JSON.toJSONString(task));
        taskLog.setCreateTime(date);
        taskLog.setUpdateTime(date);
        taskLog.sync(task);
        taskLog.setUpdateTime(new Date());
        taskLogService.save(taskLog);
        List<Motion> motions = motionService.list(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId()));
        for (Motion motion : motions) {
            //创建动作历史档
            MotionLog motionLog = new MotionLog();
            motionLog.sync(motion);
            motionLog.setUpdateTime(new Date());
            motionLogService.save(motionLog);
        }
        //删除源任务
        taskService.removeById(task.getId());
        //删除动作
        motionService.remove(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId()));
    }
}