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.core.constant.RedisConveyorConstant;
|
import com.zy.acs.conveyor.core.enums.ConveyorStateType;
|
import com.zy.acs.conveyor.core.model.SafeSignal;
|
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.enums.WorkNoTypeType;
|
import com.zy.acs.conveyor.service.CtuMainService;
|
import com.zy.acs.conveyor.service.JobService;
|
import com.zy.acs.conveyor.service.WrkLastnoService;
|
import com.zy.acs.framework.exception.CoolException;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
import java.util.Date;
|
import java.util.Map;
|
|
@Slf4j
|
@Component
|
public class OutOperationHandler implements OperationHandler {
|
|
@Autowired
|
private SlaveProperties slaveProperties;
|
|
|
@Autowired
|
private WrkLastnoService wrkLastnoService;
|
|
@Autowired
|
private CtuMainService ctuMainService;
|
|
@Autowired
|
private JobService jobService;
|
|
@Autowired
|
private StationService stationService;
|
|
private final RedisSupport redis = RedisSupport.defaultRedisSupport;
|
|
|
@Override
|
public ConveyorStateType getType() {
|
return ConveyorStateType.OUTBOUND;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public synchronized void execute(CtuOperationConfig config) {
|
try {
|
// 根据输送线plc遍历
|
for (DevpSlave devp : slaveProperties.getDevp()) {
|
// 遍历出库口
|
for (DevpSlave.Sta putSta : devp.getPutSta()) {
|
// 获取入库站信息
|
Map<Integer, StaProtocol> stationMap = stationService.getStationMap(devp.getId());
|
StaProtocol staProtocol = stationMap.get(putSta.getStaNo());
|
if (staProtocol == null) {
|
continue;
|
} else {
|
staProtocol = staProtocol.clone();
|
}
|
// 判断是否满足条件
|
if (!staProtocol.isAutoing()) {
|
//News.error("{},输送线未自动,需要开启:{}", config.getMark(), staProtocol.getSiteId());
|
continue;
|
}
|
|
if (staProtocol.getWorkNo() == 0 && staProtocol.isLoading()) {
|
String seqNum = ctuMainService.checkStationStatus(putSta.getStaNo());
|
if (seqNum != null) {
|
staProtocol.setSafeSignal(new SafeSignal(devp.getPutSta().indexOf(putSta), (short) 1, true));
|
redis.push(RedisConveyorConstant.CONVEYOR_SAFE_FLAG, staProtocol);
|
|
Job job = jobService.getJobByTaskNo(seqNum);
|
if (job != null) {
|
News.error("{}:站点:{},存在任务,{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(job));
|
continue;
|
}
|
int workNo = wrkLastnoService.nextWorkNo(WorkNoTypeType.WORK_NO_TYPE.type);
|
staProtocol.setWorkNo(workNo);
|
staProtocol.setStaNo(putSta.getTargetSta());
|
job = new Job();
|
job.setTaskNo(seqNum);
|
job.setJobNo(workNo);
|
job.setCreateTime(new Date());
|
job.setJobSts(ConveyorStateType.OUTBOUND.getStatus());
|
if (!jobService.insert(job)) {
|
throw new CoolException("插入输送线任务失败," + seqNum + " - " + workNo);
|
}
|
redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
|
News.info("{},输送线下发:{},{}", config.getMark(), staProtocol.getWorkNo(), putSta.getTargetSta());
|
} else {
|
News.error("{},站点信息不符合入库条件!!!" + " 调用RCS检验未通过,站点:{}", config.getMark(), staProtocol.getSiteId());
|
}
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
}
|
}
|
}
|