package com.zy.asrs.wcs.rcs.thread; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.wcs.asrs.entity.param.FlowLogicCodeParam; import com.zy.asrs.wcs.core.entity.Task; import com.zy.asrs.wcs.core.service.TaskService; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.core.utils.ShuttleDispatcher; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.Md5Crypt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @Component public class FlowExecute { @Autowired private RedisUtil redisUtil; @Autowired private TaskService taskService; @Autowired private ShuttleDispatcher shuttleDispatcher; //执行流程图 public boolean execute(List list) { String currentId = list.get(0).getString("id"); JSONObject devpType = list.get(0).getJSONObject("data").getJSONObject("devpType"); String staNo = devpType.getString("staNo"); //搜索工作档 List tasks = taskService.list(new LambdaQueryWrapper() .eq(Task::getOriginSite, staNo) .eq(Task::getStatus, 1)); for (Task task : tasks) { String redisKey = DigestUtils.md5Hex(JSON.toJSONString(list)); while (currentId != null) { //获取流程图 JSONObject flow = findFLow(list, currentId); if (flow == null) { break; } //执行 boolean result = executeFlow(task, flow, redisKey); //执行后续流程 if (Cools.isEmpty(flow.get("nextTrue")) && Cools.isEmpty(flow.get("nextFalse"))) { break;//无后续流程 } //更新id currentId = result ? flow.getString("nextTrue") : flow.getString("nextFalse"); } System.out.println("执行完成"); redisUtil.del(redisKey);//释放缓存 } return true; } private boolean executeFlow(Task task, JSONObject flow, String redisKey) { System.out.println(flow.getString("id") + "被执行"); JSONObject data = flow.getJSONObject("data"); String type = data.getString("type"); boolean result = false; if (type.equals("devp")) { result = executeDevpFlow(task, data, redisKey); } else if (type.equals("shuttle")) { result = executeShuttleFlow(task, data, redisKey); } return result; } private JSONObject findFLow(List list, String id) { for (JSONObject flow : list) { if (flow.getString("id").equals(id)) { return flow; } } return null; } private boolean executeDevpFlow(Task task, JSONObject data, String redisKey) { JSONObject devpType = data.getJSONObject("devpType"); String staNo = devpType.getString("staNo"); //搜索工作 return true; } private boolean executeShuttleFlow(Task task, JSONObject data, String redisKey) { JSONObject shuttleType = data.getJSONObject("shuttleType"); JSONArray shuttleOper = shuttleType.getJSONArray("shuttleOper"); for (Object object : shuttleOper) { String oper = String.valueOf(object); if (oper.equals("searchIdleShuttle")) { //搜索空闲车 ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task); if (shuttleThread == null) { return false; } //存入缓存 redisSet(redisKey, "shuttleDevice", shuttleThread.getDevice()); return true; } } return true; } private boolean redisSet(String redisKey, String key, Object data) { if (redisUtil.hasKey(redisKey)) { Object obj = redisUtil.get(redisKey); JSONObject object = JSON.parseObject(String.valueOf(obj)); object.put(key, data); redisUtil.set(redisKey, JSON.toJSONString(object)); } else { JSONObject object = new JSONObject(); object.put(key, data); redisUtil.set(redisKey, JSON.toJSONString(object)); } return true; } // private boolean executeFlow(List> list) { // for (Map map : list) { // JSONObject data = (JSONObject) map.get("data"); // if (data.getString("type").equals("devp")) { // JSONObject devp = data.getJSONObject("devpType"); // String devpNo = devp.getString("devpNo");//输送线PLC // String staNo = devp.getString("staNo");//站号 // Boolean enableStaStatus = devp.getBoolean("enableStaStatus");//判断站点状态 // JSONArray staStatus = devp.getJSONArray("staStatus");//站点状态列表 // String staJudgementFailExecute = devp.getString("staJudgementFailExecute");//判断失败后是否继续执行流程 // Boolean writeWorkNoStatus = devp.getBoolean("writeWorkNoStatus");//是否写入工作号 // Boolean writeStaNoStatus = devp.getBoolean("writeStaNoStatus");//是否写入目标站 // String writeWorkNo = devp.getString("writeWorkNo");//写入工作号数据 // String writeStaNo = devp.getString("writeStaNo");//写入目标站数据 // if (enableStaStatus) { // //判断站点状态 // boolean statusFlag = true;//默认判断通过 // for (Object status : staStatus) { // System.out.println(status); // } // // if (!statusFlag) { // //判断不通过 // if (staJudgementFailExecute.equals("stop")) { // //判断失败后不继续执行 // return false; // } // } // // } // // if (writeWorkNoStatus) { // //写入工作号 // } // // if (writeStaNoStatus) { // //写入目标站 // } // System.out.println(devp); // } // System.out.println(data); // } // // System.out.println(list); // return false; // } }