package com.mes.job;
|
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.json.JSONObject;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.mes.common.S7object;
|
import com.mes.common.WebSocketServer;
|
import com.mes.edgstoragecage.entity.EdgStorageCage;
|
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
|
import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
|
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
|
import com.mes.edgstoragecage.service.EdgStorageCageService;
|
import com.mes.glassinfo.entity.GlassInfo;
|
import com.mes.glassinfo.service.GlassInfoService;
|
import com.mes.taskcache.entity.TaskCache;
|
import com.mes.taskcache.service.TaskCacheService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @Author : zhoush
|
* @Date: 2024/5/8 8:17
|
* @Description:
|
*/
|
@Component
|
@Slf4j
|
public class CacheGlassTask {
|
|
@Autowired
|
TaskCacheService taskCacheService;
|
@Autowired
|
GlassInfoService glassInfoService;
|
@Autowired
|
EdgStorageCageService edgStorageCageService;
|
@Autowired
|
EdgStorageCageDetailsService edgStorageCageDetailsService;
|
@Resource
|
private EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
|
|
private Map<String, String> mapParameter = new HashMap<>();
|
private Map<String, String> mapValue = new HashMap<>();
|
private Map<String, String> mapType = new HashMap<>();
|
private Map<String, Object> mapSettings = new HashMap<>();
|
|
@Scheduled(fixedDelay = 1000)
|
public void plcHomeEdgTask() {
|
initialize();
|
log.info("当前参数值:{}", mapValue);
|
JSONObject jsonObject = new JSONObject();
|
// for (String key : mapParameter.keySet()) {
|
// String value = "";
|
// if ("String".equals(mapType.get(key))) {
|
// value = S7object.getinstance().plccontrol.readString(mapParameter.get(key));
|
// } else {
|
// value = S7object.getinstance().plccontrol.readWord(mapParameter.get(key)) + "";
|
// }
|
// mapValue.put(key, value);
|
// }
|
|
if ("0".equals(mapValue.get("A06_request_word"))) {
|
log.info("获取到的请求字为0,将确认字改为0");
|
//清除
|
S7object.getinstance().plccontrol.WriteWord(mapParameter.get("MES_confirmation_word"), (short) 0);
|
} else if ("1".equals(mapValue.get("A06_request_word")) &&
|
"0".equals(mapValue.get("MES_confirmation_word"))) {
|
log.info("进片请求,且确认字为0,执行进片任务");
|
inTo();
|
} else if ("2".equals(mapValue.get("A06_request_word")) &&
|
"0".equals(mapValue.get("MES_confirmation_word")) && !"0".equals(mapValue.get("A09_glass_status"))) {
|
//09空闲 :1 10空闲 :2 都空闲:3 其他0
|
log.info("出片请求,且确认字为0,执行进片任务");
|
outTo(Integer.parseInt(mapValue.get("A09_glass_status")));
|
} else if ("3".equals(mapValue.get("A06_request_word")) &&
|
"0".equals(mapValue.get("MES_confirmation_word"))) {
|
|
if ("0".equals(mapValue.get("A09_glass_status")) || "0".equals(mapValue.get("A10_glass_status"))) {
|
outTo(Integer.parseInt(mapValue.get("A09_glass_status")));
|
} else {
|
inTo();
|
}
|
}
|
// log.info("推数据");
|
// jsonObject.append("params", new short[] { 30, 40, });
|
ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
|
if (sendwServer != null) {
|
for (WebSocketServer webserver : sendwServer) {
|
webserver.sendMessage(jsonObject.toString());
|
if (webserver != null) {
|
|
List<String> messages = webserver.getMessages();
|
|
if (!messages.isEmpty()) {
|
// // 将最后一个消息转换为整数类型的列表
|
webserver.clearMessages();
|
}
|
}
|
}
|
}
|
}
|
|
/**
|
* 初始化plc数据
|
*/
|
private void initialize() {
|
// mapParameter.put("A06_request_word", "DB11.0"); //work
|
// mapParameter.put("A05_scanning_ID", "DB11.2");
|
// mapParameter.put("MES_confirmation_word", "DB11.40");
|
// mapParameter.put("A09_glass_status", "DB11.70");
|
// //mapParameter.put("A10_glass_status", "DB11.72");
|
// mapParameter.put("A09_prohibit_film_production", "DB11.74");
|
// mapParameter.put("A10_prohibit_film_production", "DB11.76");
|
// mapSettings.put("territoryPoor", 3);
|
// mapType.put("A06_request_word", "Word");
|
// mapType.put("A05_scanning_ID", "String");
|
// mapType.put("MES_confirmation_word", "Word");
|
// mapType.put("A09_glass_status", "Word");
|
// //mapType.put("A10_glass_status", "Word");
|
// mapType.put("A09_prohibit_film_production", "Word");
|
// mapType.put("A10_prohibit_film_production", "Word");
|
mapValue.put("A06_request_word", "2");//请求字
|
mapValue.put("A05_scanning_ID", "11111111111");//请求ID
|
mapValue.put("MES_confirmation_word", "0");//MES发送字
|
mapValue.put("A09_glass_status", "1");//A09玻璃状态
|
mapValue.put("A10_glass_status", "0");//A09玻璃状态
|
mapValue.put("A09_prohibit_film_production", "0");//A9禁止出片
|
mapValue.put("A10_prohibit_film_production", "0");//A10禁止出片
|
|
}
|
|
private void inTo() {
|
List<GlassInfo> glassInfos = glassInfoService.selectId(mapValue.get("A05_scanning_ID"));
|
if (glassInfos.size() < 1) {
|
log.info("此玻璃编号不存在");
|
} else if (glassInfos.size() == 1) {
|
//添加进片任务 查找空格
|
log.info("正常");
|
List<EdgStorageCage> list = edgStorageCageService.selectCacheEmpty();
|
|
if (list.size() > 1) {
|
EdgStorageCageDetails edgStorageCageDetails = edgStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper<EdgStorageCageDetails>()
|
.eq(EdgStorageCageDetails::getGlassId, glassInfos.get(0).getGlassId()));
|
edgStorageCageDetails.setState(200);
|
|
TaskCache taskCache = new TaskCache();
|
EdgStorageCage edgStorageCage = list.get(0);
|
taskCache.setGlassId(glassInfos.get(0).getGlassId());
|
taskCache.setTaskStatus(0);
|
taskCache.setStartCell(0);
|
taskCache.setEndCell(edgStorageCage.getSlot());
|
taskCache.setTaskType(1);
|
taskCache.setCreateTime(new DateTime());
|
edgStorageCageDetailsMapper.updateById(edgStorageCageDetails);
|
taskCacheService.insertTaskCache(taskCache);
|
// S7object.getinstance().plccontrol.WriteWord("DB11.40", (short) 1);
|
} else {
|
log.info("不存在空格");
|
}
|
} else {
|
log.info("此玻璃编号存在多个");
|
}
|
}
|
|
private void outTo(int line) {
|
int endcell = 0;
|
EdgStorageCageDetails outEdgStorageCageDetails = new EdgStorageCageDetails();
|
TaskCache taskCacheA09 = taskCacheService.selectLastOutCacheInfo("");
|
TaskCache taskCacheA10 = taskCacheService.selectLastOutCacheInfo("");
|
//两线各自要出的玻璃
|
EdgStorageCageDetails glassInfo09 = edgStorageCageDetailsService.selectConformGlass(taskCacheA09.getGlassId(), (int) mapSettings.get("territoryPoor"));
|
EdgStorageCageDetails glassInfo10 = edgStorageCageDetailsService.selectConformGlass(taskCacheA10.getGlassId(), (int) mapSettings.get("territoryPoor"));
|
//决定线路
|
if (line == 1) {
|
endcell = 9000;
|
outEdgStorageCageDetails = glassInfo09;
|
} else if (line == 2) {
|
endcell = 1000;
|
outEdgStorageCageDetails = glassInfo10;
|
} else if (line == 3) {
|
endcell = 9000;//默认走一号线 优化方向可根据 对比两线速度/两线当前任务情况做
|
outEdgStorageCageDetails = glassInfo09;
|
}
|
if (outEdgStorageCageDetails != null && endcell > 0) {
|
TaskCache taskCache = new TaskCache();
|
taskCache.setGlassId(outEdgStorageCageDetails.getGlassId());
|
taskCache.setTaskStatus(0);
|
taskCache.setStartCell(outEdgStorageCageDetails.getSlot());
|
taskCache.setEndCell(endcell);
|
taskCache.setTaskType(2);
|
taskCache.setCreateTime(new DateTime());
|
taskCacheService.insertTaskCache(taskCache);
|
// S7object.getinstance().plccontrol.WriteWord(mapParameter.get("MES_confirmation_word"), (short) 1);
|
}
|
|
|
}
|
|
|
}
|