diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java index 0ad11a12..b5a36aae 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java @@ -117,12 +117,8 @@ public class DcWarningServiceImpl implements IDcWarningService String key=dcWarning.getStakeMark()+dcWarning.getDirection()+dcWarning.getWarningSource(). toString()+dcWarning.getWarningType().toString()+dcWarning.getWarningSubclass();//key,redis存储事件的key(桩号+方向+事件源+类型) String dataId = redisCache.getCacheObject(WARNINGDATA + key);//查看redis是否存在数据(id的值) - HashMap redisValueOne = redisWarningStrategy.get(redisKye+"1");//查看传入的事件类型是否配置策略1(优先级策略) - if(redisValueOne!=null){//执行策略1(暂时未定义,定义后开发) - return dcWarningMapper.insertDcWarning(dcWarning);//未定义直接走新增; - } HashMap redisValueTwo = redisWarningStrategy.get(redisKye+"2");//查看传入的事件类型是否配置策略2(延迟策略) - if (redisValueOne==null&&redisValueTwo!=null){ //执行策略2,执行到这里说明1不存在或者1未满足过滤条件 + if (redisValueTwo!=null){ //执行策略2, String strategyTime = redisValueTwo.get("strategyTime").toString();//策略时长 if (dataId==null){//如果不存在直接加入数据库,加入缓存,配置对应的过期时间 int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 @@ -147,85 +143,27 @@ public class DcWarningServiceImpl implements IDcWarningService otherConfig = map.get("otherConfig").toString(); //取出原id的配置信息 } String otherConfigString = dcWarning.getOtherConfig();//新增的配置信息 - JSONObject jsonObjectOne = new JSONObject(otherConfig); - JSONObject jsonObjectTwo = new JSONObject(otherConfigString); - DcWarningServiceImpl dcWarningService = new DcWarningServiceImpl();//合成新的json - JSONObject jsonObject = dcWarningService.mergeJsonObjects(jsonObjectOne, jsonObjectTwo); - Integer integer = dcWarningMapper.updateOtherConfig(dataId, jsonObject.toString());//修改数据库配置 - redisCache.setCacheObject(WARNINGDATA+key,dataId,Integer.parseInt(strategyTime),TimeUnit.MINUTES);//重新设置延迟时间 - if (integer==0){ - return 0; - } - return 1; - } - HashMap redisValueThree = redisWarningStrategy.get(redisKye+"3");//查看传入的事件类型是否配置策略3(时间窗口策略) - if (redisValueOne==null&&redisValueTwo==null&&redisValueThree!=null){ //执行策略3,执行到这里说明1不存在或者2不存在或者1未满足过滤条件 - String strategyTime = redisValueThree.get("strategyTime").toString();//策略时长 - if (dataId==null){//如果不存在直接加入数据库,加入缓存,配置对应的过期时间 - int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 - if (insertDcWarning==0){ - return 0; - } - String id = dcWarning.getId();//取出加入后的id作为value - redisCache.setCacheObject(WARNINGDATA+key,id,Integer.parseInt(strategyTime),TimeUnit.MINUTES);//加入缓存并设置延迟时间(单位分钟) - return 1;//结束 - } - //redis存在数据,取出redis的id找对对应事件的配置,合成事件配置 - HashMap map = dcWarningMapper.selectDcWarningById(dataId); - if (map==null){//redis中有id但是数据库中没有这条数据,那就删除这条redis数据,新数据加入到数据库,并加入到redis - redisCache.deleteObject(WARNINGDATA+key); - dcWarningMapper.insertDcWarning(dcWarning); - String id = dcWarning.getId(); - redisCache.setCacheObject(WARNINGDATA+key,id,Integer.parseInt(strategyTime),TimeUnit.MINUTES); - return 1; - } - String otherConfig=""; - otherConfig = map.get("otherConfig").toString();//取出原id的配置信息 - String otherConfigString = dcWarning.getOtherConfig();//新增的配置信息 - JSONObject jsonObjectOne = new JSONObject(otherConfig); + JSONObject jsonObjectOne = new JSONObject(otherConfig);//原始数据库数据 JSONObject jsonObjectTwo = new JSONObject(otherConfigString); - JSONObject jsonObject = new DcWarningServiceImpl().mergeJsonObjects(jsonObjectOne, jsonObjectTwo);//合成新的json - Integer integer = dcWarningMapper.updateOtherConfig(dataId, jsonObject.toString());//修改数据库配置 - if (integer==0){ - return 0; - } - return 1; - } - HashMap redisValueFour = redisWarningStrategy.get(redisKye+"4");//查看传入的事件类型是否配置策略3(自动结束策略) - if (redisValueOne==null&&redisValueTwo==null&&redisValueThree==null&&redisValueFour!=null){ //执行策略4,执行到这里说明1不存在或者2、3不存在或者1未满足过滤条件 - if (dataId==null){//如果不存在直接加入数据库,加入缓存 - int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 - if (insertDcWarning==0){ - return 0; + int videoListLength = jsonObjectOne.getJSONArray("videoList").length();//已经存在数据库的图片的长度 + if (videoListLength>=10&&jsonObjectTwo.get("videoList")!=null){//如果数据长度大于等于10,对第十位进行替换 + JSONArray videoList = jsonObjectOne.getJSONArray("videoList");//获取图片数组 + videoList.put(9,jsonObjectTwo.get("videoList")); //替换第十个元素 + jsonObjectOne.put("videoList", videoList);//更新 jsonObjectOne 中的 videoList 数组 + if (jsonObjectOne.getJSONArray("pictures").length()>=10&&jsonObjectTwo.get("pictures")!=null){ + JSONArray pictures = jsonObjectOne.getJSONArray("pictures"); + pictures.put(9,jsonObjectTwo.get("pictures")); + jsonObjectOne.put("pictures",pictures); } - String id = dcWarning.getId();//取出加入后的id作为value - redisCache.setCacheObject(WARNINGDATA+key,id,24,TimeUnit.HOURS);//加入缓存,防止redis数据累计,这里也要设置过期时间,设置为24小时 - return 1;//结束 - } - //redis存在数据,取出redis的id找对对应事件的配置,合成事件配置 - HashMap map = dcWarningMapper.selectDcWarningById(dataId); - if (map==null){//redis中有id但是数据库中没有这条数据,那就删除这条redis数据,新数据加入到数据库,并加入到redis - redisCache.deleteObject(WARNINGDATA+key); - dcWarningMapper.insertDcWarning(dcWarning); - String id = dcWarning.getId(); - redisCache.setCacheObject(WARNINGDATA+key,id); - return 1; - } - String otherConfig=""; - otherConfig = map.get("otherConfig").toString();//取出原id的配置信息 - String otherConfigString = dcWarning.getOtherConfig();//新增的配置信息 - JSONObject jsonObjectOne = new JSONObject(otherConfig); - JSONObject jsonObjectTwo = new JSONObject(otherConfigString); - JSONObject jsonObject = new DcWarningServiceImpl().mergeJsonObjects(jsonObjectOne, jsonObjectTwo);//合成新的json - Integer integer = dcWarningMapper.updateOtherConfig(dataId, jsonObject.toString());//修改数据库配置 - redisCache.deleteObject(WARNINGDATA + key);//删除redis存储的数据 - if (integer==0){ - return 0; + redisCache.setCacheObject(WARNINGDATA+key,dataId,Integer.parseInt(strategyTime),TimeUnit.MINUTES);//重新设置延迟时间 + return dcWarningMapper.updateOtherConfig(dataId,jsonObjectOne.toString());//修改数据库配置 } - return 1; + DcWarningServiceImpl dcWarningService = new DcWarningServiceImpl();//合成工具类 + JSONObject jsonObject = dcWarningService.mergeJsonObjects(jsonObjectOne, jsonObjectTwo); + redisCache.setCacheObject(WARNINGDATA+key,dataId,Integer.parseInt(strategyTime),TimeUnit.MINUTES);//重新设置延迟时间 + return dcWarningMapper.updateOtherConfig(dataId, jsonObject.toString());//修改数据库配置 } return dcWarningMapper.insertDcWarning(dcWarning);//如果没有配置策略直接加入数据库; - } //优先级策略(还差优先级策略需要配置) @@ -260,10 +198,40 @@ public class DcWarningServiceImpl implements IDcWarningService String dataId = redisCache.getCacheObject(WARNINGDATA + key);//查看redis是否存在数据(id的值) HashMap redisValueOne = redisWarningStrategy.get(redisKye+"1");//查看传入的事件类型是否配置策略1(优先级策略) if(redisValueOne!=null){//执行策略1(暂时未定义,定义后开发) - + String priority = redisValueOne.get("priority").toString();//全部的优先等级 + String[] split = priority.split(","); + for (int i = 0; i < split.length; i++){ + String priorityValue=split[i];//取出当前循环的优先级类型 + String keys=dcWarning.getStakeMark()+dcWarning.getDirection()+dcWarning.getWarningSource(). + toString()+dcWarning.getWarningType().toString()+priorityValue;//redis存储事件的key + String dataIds = redisCache.getCacheObject(WARNINGDATA + keys);//查看redis是否存在数据(id的值) + if (dataIds==null){ //没有对应的优先级类型的id值,结束当前循环 + continue; + } + //redis存在数据,取出redis的id找对对应事件的配置,合成事件配置 + HashMap map = dcWarningMapper.selectDcWarningById(dataId); + if (map==null){//redis中有id但是数据库中没有这条数据,那就直接新增这个事件 + return dcWarningMapper.insertDcWarning(dcWarning); + } + String warningState = map.get("warningState").toString();//事件上报状态 + if ("1".equals(warningState)==false){ //状态不为上报,不用合成事件,删除之前的redis数据 + redisCache.deleteObject(WARNINGDATA+keys); + continue; + } + String otherConfig=""; + if (map.get("otherConfig")!=null){ + otherConfig = map.get("otherConfig").toString(); //取出原id的配置信息 + } + String otherConfigString = dcWarning.getOtherConfig();//新增的配置信息 + JSONObject jsonObjectOne = new JSONObject(otherConfig); + JSONObject jsonObjectTwo = new JSONObject(otherConfigString); + DcWarningServiceImpl dcWarningService = new DcWarningServiceImpl();//合成新的json + JSONObject jsonObject = dcWarningService.mergeJsonObjects(jsonObjectOne, jsonObjectTwo); + return dcWarningMapper.updateOtherConfig(dataId, jsonObject.toString());//修改数据库配置 + } } HashMap redisValueTwo = redisWarningStrategy.get(redisKye+"2");//查看传入的事件类型是否配置策略2(延迟策略) - if (redisValueOne==null&&redisValueTwo!=null){ //执行策略2,执行到这里说明1不存在或者1未满足过滤条件 + if (redisValueTwo!=null){ //执行策略2,执行到这里说明1不存在或者1未满足过滤条件 String strategyTime = redisValueTwo.get("strategyTime").toString();//策略时长 if (dataId==null){//如果不存在直接加入数据库,加入缓存,配置对应的过期时间 int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 @@ -300,7 +268,7 @@ public class DcWarningServiceImpl implements IDcWarningService return 1; } HashMap redisValueThree = redisWarningStrategy.get(redisKye+"3");//查看传入的事件类型是否配置策略3(时间窗口策略) - if (redisValueOne==null&&redisValueTwo==null&&redisValueThree!=null){ //执行策略3,执行到这里说明1不存在或者2不存在或者1未满足过滤条件 + if (redisValueTwo==null&&redisValueThree!=null){ //执行策略3,执行到这里说明1不存在或者2不存在或者1未满足过滤条件 String strategyTime = redisValueThree.get("strategyTime").toString();//策略时长 if (dataId==null){//如果不存在直接加入数据库,加入缓存,配置对应的过期时间 int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 @@ -333,14 +301,14 @@ public class DcWarningServiceImpl implements IDcWarningService return 1; } HashMap redisValueFour = redisWarningStrategy.get(redisKye+"4");//查看传入的事件类型是否配置策略3(自动结束策略) - if (redisValueOne==null&&redisValueTwo==null&&redisValueThree==null&&redisValueFour!=null){ //执行策略4,执行到这里说明1不存在或者2、3不存在或者1未满足过滤条件 + if (redisValueTwo==null&&redisValueThree==null&&redisValueFour!=null){ //执行策略4,执行到这里说明1不存在或者2、3不存在或者1未满足过滤条件 if (dataId==null){//如果不存在直接加入数据库,加入缓存 int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 if (insertDcWarning==0){ return 0; } String id = dcWarning.getId();//取出加入后的id作为value - redisCache.setCacheObject(WARNINGDATA+key,id);//加入缓存????存在问题会数据累计 + redisCache.setCacheObject(WARNINGDATA+key,id,24,TimeUnit.HOURS);//加入缓存,防止redis数据累计,这里也要设置过期时间,设置为24小时 return 1;//结束 } //redis存在数据,取出redis的id找对对应事件的配置,合成事件配置