Administrator
3 天以前 aa33e56e37cd19b88ae8eea69c5ebc7c6da8b1d2
src/main/java/com/zy/asrs/task/TaskReportScheduler.java
@@ -13,15 +13,19 @@
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.TaskWrkReport;
import com.zy.asrs.entity.TaskWrkReportLog;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.wms.WmsFeedback;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.TaskWrkReportLogService;
import com.zy.asrs.service.TaskWrkReportService;
import com.zy.asrs.service.*;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.Synchro;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -30,7 +34,9 @@
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 定时将任务(完成、取消)转成日志
@@ -55,6 +61,9 @@
    @Value("${wms.taskExecCallback}")
    private String TaskExecCallback;
    @Value("${wms.completeDevpTask}")
    private String completeDevpTask;
    @Resource
    private TaskWrkMapper taskWrkMapper;
@@ -64,6 +73,63 @@
    @Resource
    private CommonService commonService;
    @Resource
    private OpenService openService;
    // 监听外置输送线
    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
        add(301);add(302);add(303);add(304);add(305);add(306);add(307);add(308);
    }};
    // WMS分配入库库位异常上报
    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void locationAssignmentExceptionEscalation() {
        List<TaskWrk> taskWrkList = taskWrkMapper.selectList(new EntityWrapper<TaskWrk>().eq("wrk_sts", 5));
        for(TaskWrk taskWrk : taskWrkList) {
            Date now = new Date();
            WmsFeedback wmsFeedback = new WmsFeedback();
            wmsFeedback.setTaskNo(taskWrk.getTaskNo());
            wmsFeedback.setIoType(taskWrk.getIoType());
            wmsFeedback.setBarcode(taskWrk.getBarcode());
            wmsFeedback.setStatus(-1); // 入库库位分配异常
            wmsFeedback.setReportTime(DateUtils.convert(now));
            String response = "";
            boolean bool = false;
            try {
                log.info("入库wms分配库位有误上报wms={}", taskWrk);
                response = new HttpHandler.Builder()
                        // .setHeaders(headParam)
                        .setUri(wmsUrl)
                        .setPath(TaskExecCallback)
                        .setJson(JSON.toJSONString(wmsFeedback))
                        .build()
                        .doPost();
                if (!Cools.isEmpty(response)) {
                    JSONObject jsonObject = JSON.parseObject(response);
                    if (Integer.parseInt(String.valueOf(jsonObject.get("code"))) == 200) {
                        bool = true;
                        taskWrk.setWrkSts(6);
                        taskWrk.setModiTime(now);
                        taskWrkMapper.updateById(taskWrk);
                    }
                }
            } catch (Exception e) {
                log.error("入库wms分配库位有误上报wms失败{},返回值={}", taskWrk, response);
            } finally {
                apiLogService.save("wms分配库位有误上报"
                        , wmsUrl + TaskExecCallback
                        , null
                        , "127.0.0.1"
                        , JSON.toJSONString(wmsFeedback)
                        , response
                        , bool
                );
            }
        }
    }
    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void execute() throws IOException {
@@ -116,6 +182,7 @@
    }
    // 立体库跑库程序,生产勿用
//    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void autoMoveLoc() {
        int flag = 1; // 1.跑23号堆垛机前7列,1号堆垛机1,9层 2.跑23号堆垛机后8-12列,1号堆垛机2-8层
@@ -126,15 +193,31 @@
                // 获取堆垛机巷道在库库位
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("crn_no", i));
                if (locMast != null) {
                    // 50次出一次库
                    int count1 = locMastService.selectCount(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", 1));
                    if (count1 % 25 == 0) {
                        TaskCreateParam taskCreateParam = new TaskCreateParam();
                        taskCreateParam.setTaskNo(locMast.getLocNo()+"0");
                        taskCreateParam.setStartPoint(locMast.getLocNo());
                        taskCreateParam.setIoType(2);
                        taskCreateParam.setTaskPriority(11);
                        taskCreateParam.setBarcode(locMast.getBarcode());
                        taskCreateParam.setTargetPoint(i == 1 ? "114" : i == 2 ? "111" : "105");
                        openService.taskCreate(taskCreateParam);
                        return;
                    }
                    // 获取一个移动的目标库位
                    LocMast locMast1;
                    if (flag == 1) {
                        if (i == 1) {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").in("lev1",1,9));
                        } else {
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1"));
                        } else if(i==2) {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").le("bay1",7));
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").gt("bay1",7));
                        }else {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").gt("bay1",7));
                        }
                    } else {
@@ -156,6 +239,7 @@
                        taskWrk.setWrkNo(commonService.getWorkNo(WorkNoType.PAKIN.type));
                        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
                        taskWrk.setCreateTime(now);
                        taskWrk.setAssignTime(now);
                        taskWrk.setIoType(3);//任务类型
                        taskWrk.setIoPri(11);//优先级
                        taskWrk.setBarcode(locMast.getBarcode());//条码
@@ -172,6 +256,62 @@
        }
    }
    // 监听外置输送线,有任务号和可出信号,上报成功清除任务号目标站
    @Scheduled(cron = "0/3 * * * * ? ")
    public synchronized void completeDevpTask() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        if (devpThread != null) {
            for(Integer site : staNos) {
                StaProtocol staProtocol = devpThread.getStation().get(site);
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isOutEnable() && staProtocol.getWorkNo() != 0 && staProtocol.isAutoing() && staProtocol.isLoading()) {
                    String response = "";
                    boolean bool = false;
                    JSONObject request = new JSONObject();
                    request.put("site",site);
                    try {
                        log.info("外置输送线流动到位上报wms={}", site);
                        response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath(completeDevpTask)
                                .setJson(request.toJSONString())
                                .build()
                                .doPost();
                        if (!Cools.isEmpty(response)) {
                            JSONObject jsonObject = JSON.parseObject(response);
                            if (Integer.parseInt(String.valueOf(jsonObject.get("code"))) == 200) {
                                bool = true;
                                staProtocol.setWorkNo((short) 0);
                                staProtocol.setStaNo((short) 0);
                                boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol));
                                if (result) {
                                    log.info("外置输送线流动到位上报wms,清除输送线站点{}命令下发成功!",site);
                                } else {
                                    log.error("外置输送线流动到位上报wms,清除输送线站点{}命令下发失败!" ,site);
                                }
                            }
                        }
                    } catch (Exception e) {
                        log.error("外置输送线流动到位上报wms异常{},返回值={}", request, response);
                    } finally {
                        apiLogService.save("外置输送线流动到位上报wms"
                                , wmsUrl + completeDevpTask
                                , null
                                , "127.0.0.1"
                                , request.toJSONString()
                                , response
                                , bool
                        );
                    }
                }
            }
        }
    }
    private WmsFeedback getWmsFeedback(TaskWrkReport taskWrk) {
        WmsFeedback feedback = new WmsFeedback();
        feedback.setBarcode(taskWrk.getBarcode());