1
Administrator
12 小时以前 14717fd672bc62442175d2ce2ddd3a113f0069b8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package com.zy.acs.conveyor.core.operation.handler;
 
 
import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.conveyor.controller.vo.OpenBusSubmitParam;
import com.zy.acs.conveyor.controller.vo.TaskDto;
import com.zy.acs.conveyor.core.constant.RedisConveyorConstant;
import com.zy.acs.conveyor.core.enums.ConveyorStateType;
import com.zy.acs.conveyor.core.model.StaProtocol;
import com.zy.acs.conveyor.core.operation.OperationHandler;
import com.zy.acs.conveyor.core.properties.CtuOperationConfig;
import com.zy.acs.conveyor.core.properties.DevpSlave;
import com.zy.acs.conveyor.core.properties.SlaveProperties;
import com.zy.acs.conveyor.core.service.StationService;
import com.zy.acs.conveyor.entity.Job;
import com.zy.acs.conveyor.service.CtuMainService;
import com.zy.acs.conveyor.service.JobService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
/**
 * 发送任务给RCS
 */
@Slf4j
@Component
public class SendTaskOperationHandler implements OperationHandler {
 
    @Autowired
    private SlaveProperties slaveProperties;
 
 
    @Autowired
    private JobService jobService;
 
 
    @Autowired
    private CtuMainService ctuMainService;
 
 
    @Autowired
    private StationService stationService;
 
 
    private final RedisSupport redis = RedisSupport.defaultRedisSupport;
 
 
    @Override
    public ConveyorStateType getType() {
        return ConveyorStateType.SENDTASK;
    }
 
    @Override
    public synchronized void execute(CtuOperationConfig config) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历入库口
                for (DevpSlave.Sta sta : devp.getTakeSta()) {
                    // 根据输送线plc遍历
                    Map<Integer, StaProtocol> stationMap = stationService.getStationMap(devp.getId());
                    StaProtocol staProtocol = stationMap.get(sta.getSourceStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    // 判断是否满足条件
                    if (!staProtocol.isAutoing() ||staProtocol.getWorkNo() ==0) {
                        //News.error("{}:站点:{},非自动", config.getMark(), staProtocol.getSiteId());
                        continue;
                    }
                    if (staProtocol.getWorkNo() == 0 && staProtocol.isLoading()) {
                        News.error("{},输送线上有货无任务号,需要人工处理站点:{}", config.getMark(), staProtocol.getSiteId());
                        continue;
                    }
                    if (staProtocol.getWorkNo() > 0 && !staProtocol.isLoading()) {
                        News.error("{},输送线上无货有任务号,需要人工处理站点:{}", config.getMark(), staProtocol.getSiteId());
                        continue;
                    }
 
                    Job jobByJobNo = jobService.getJobByJobNo(staProtocol.getWorkNo());
                    if (jobByJobNo == null) {
                        News.error("{}:站点:{},找不到任务", config.getMark(), staProtocol.getSiteId());
                        continue;
                    }
                    if (jobByJobNo.getJobSts() != ConveyorStateType.INBOUND.getStatus()) {
                        if (jobByJobNo.getJobSts() == ConveyorStateType.SENDTASK.getStatus()) {
                            continue;
                        }
                        News.error("{}:站点:{},任务状态不对,{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(jobByJobNo));
                        continue;
                    }
 
                    if (ctuMainService.sendTask(process(jobByJobNo))) {
                        jobByJobNo.setJobSts(ConveyorStateType.SENDTASK.getStatus());
                        jobByJobNo.setRcsTime(new Date());
                        jobService.updateById(jobByJobNo);
                        staProtocol.setWorkNo(staProtocol.getWorkNo());
                        staProtocol.setStaNo(sta.getTargetSta());
                        redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
                        News.error("{},任务发送给RCS成功,WMS任务号:{},输送线工作号:{}", config.getMark(), jobByJobNo.getTaskNo(), jobByJobNo.getJobNo());
                    } else {
                        News.error("{},任务发送给RCS失败,WMS任务号:{},输送线工作号:{}", config.getMark(), jobByJobNo.getTaskNo(), jobByJobNo.getJobNo());
                    }
 
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
 
    /**
     * 处理任务
     *
     * @param job
     * @return
     */
    private OpenBusSubmitParam process(Job job) {
        OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
        openBusSubmitParam.setBatchNo(job.getBatchNo());
        List<TaskDto> taskList = new ArrayList<>();
        TaskDto taskDto = new TaskDto();
        taskDto.setTaskNo(job.getTaskNo());
        taskDto.setBatchNo(job.getBatchNo());
        taskDto.setOriSta(job.getStaNo());
        taskDto.setDestLoc(job.getLoc());
        taskDto.setPriority(1);
        taskList.add(taskDto);
        openBusSubmitParam.setTasks(taskList);
        return openBusSubmitParam;
    }
}