diff --git a/threecolor-modbus-collector/src/main/java/com/xujie/modbus/mapper/ResourceScheduledMapper.java b/threecolor-modbus-collector/src/main/java/com/xujie/modbus/mapper/ResourceScheduledMapper.java index 7748c60..940b0a2 100644 --- a/threecolor-modbus-collector/src/main/java/com/xujie/modbus/mapper/ResourceScheduledMapper.java +++ b/threecolor-modbus-collector/src/main/java/com/xujie/modbus/mapper/ResourceScheduledMapper.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xujie.modbus.entity.ResourceScheduled; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + @Mapper public interface ResourceScheduledMapper extends BaseMapper { + List selectResourceScheduledAndResourceList(String site, String resourceId); } diff --git a/threecolor-modbus-collector/src/main/java/com/xujie/modbus/runner/ModbusCollectRunner.java b/threecolor-modbus-collector/src/main/java/com/xujie/modbus/runner/ModbusCollectRunner.java index 46f27a3..2f0cd16 100644 --- a/threecolor-modbus-collector/src/main/java/com/xujie/modbus/runner/ModbusCollectRunner.java +++ b/threecolor-modbus-collector/src/main/java/com/xujie/modbus/runner/ModbusCollectRunner.java @@ -70,7 +70,6 @@ public class ModbusCollectRunner { */ @Scheduled(cron = "${task.data.threecolortime}") public void run() { - if (resourceList == null || resourceList.isEmpty()) { // 重新查询设备列表 resourceList = resourceService.queryResource(); if (resourceList.isEmpty()) { @@ -78,7 +77,7 @@ public class ModbusCollectRunner { return; } logger.info("重新查询到 {} 个激活的设备", resourceList.size()); - } + logger.info("开始执行同步采集任务,共 {} 个设备", resourceList.size()); diff --git a/threecolor-modbus-collector/src/main/java/com/xujie/modbus/service/impl/ModbusCollectServiceImpl.java b/threecolor-modbus-collector/src/main/java/com/xujie/modbus/service/impl/ModbusCollectServiceImpl.java index 5e9c1a5..54f39ea 100644 --- a/threecolor-modbus-collector/src/main/java/com/xujie/modbus/service/impl/ModbusCollectServiceImpl.java +++ b/threecolor-modbus-collector/src/main/java/com/xujie/modbus/service/impl/ModbusCollectServiceImpl.java @@ -231,28 +231,24 @@ public class ModbusCollectServiceImpl } }else{ - + //如果寄存器不为空 System.out.println("寄存器数据:"+ registerData); logger.info("寄存器数据: {}", registerData); //site+equipmentNo查询前failureTime分钟,如果failureTime条都是0,0,1,就往sfdc_time_hist插入数据,先要确认中间表有工单号 + //获取前几条数据,默认5 List colorLampLisByTime = threeColorLampMapper.getThreeColorLampLisByTime(folderLocation.getSite(), folderLocation.getResourceId(), failureTime); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("site", folderLocation.getSite()); - queryWrapper.eq("resource_id", folderLocation.getResourceId()); - queryWrapper.isNotNull("seq_no"); - List resourceScheduleds = resourceScheduledMapper.selectList(queryWrapper); + //查询中间表是否有设备和派工单号 + List resourceScheduleds = resourceScheduledMapper.selectResourceScheduledAndResourceList(folderLocation.getSite(), folderLocation.getResourceId()); + //不为空并大于0,往mes表插数据 if (resourceScheduleds != null && resourceScheduleds.size()>0){ for(ResourceScheduled resourceScheduled:resourceScheduleds){ + logger.info("获取前几条灯数据: {}", colorLampLisByTime); // site+equipmentNo 查询前 failureTime 分钟,如果 **failureTime 条记录全部为 0,0,1**,才插入 sfdc_time_hist boolean shouldInsertHist = false; - if (colorLampLisByTime != null && colorLampLisByTime.size() >= failureTime) { + if (colorLampLisByTime != null && colorLampLisByTime.size() > 0) { // 只取最近 failureTime 条记录做判断 - int size = colorLampLisByTime.size(); - List lastN = colorLampLisByTime.subList(size - failureTime, size); - // 要求条数刚好为 failureTime,且每条都是 0,0,1 - if (lastN.size() == failureTime) { shouldInsertHist = true; - for (ThreeColorLamp lamp3 : lastN) { + for (ThreeColorLamp lamp3 : colorLampLisByTime) { boolean isRed = ("0".equals(lamp3.getGreen())) && ("0".equals(lamp3.getOrange())) && ("1".equals(lamp3.getRed())); @@ -261,7 +257,6 @@ public class ModbusCollectServiceImpl break; } } - } } if (shouldInsertHist){ @@ -269,52 +264,7 @@ public class ModbusCollectServiceImpl SfdcTimeHist timeHist = sfdcTimeHistMapper.selectSfdcTimeHistByNew(folderLocation.getSite(), resourceScheduled.getSeqNo(), "自动停机"); if(timeHist == null){ SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); - int histSeqno = threeColorLampMapper.selectHistSeqno(folderLocation.getSite(), resourceScheduled.getSeqNo()); - SfdcTimeHist sfdcTimeHist = new SfdcTimeHist(); - sfdcTimeHist.setSite(folderLocation.getSite()); - sfdcTimeHist.setOrderNo(soscheduled.getOrderno()); - sfdcTimeHist.setItemNo(Double.valueOf(soscheduled.getItemno())); - sfdcTimeHist.setSeqNo(soscheduled.getSeqno()); - sfdcTimeHist.setHistSeqno(histSeqno+1); - Date currentTime = new Date(); - Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); - sfdcTimeHist.setEventTime(fiveMinutesAgo); - sfdcTimeHist.setEnteredBy(null); - sfdcTimeHist.setEventDesc(null); - sfdcTimeHist.setDowntimeCode(null); - sfdcTimeHist.setEventType("D"); - sfdcTimeHist.setLinkhistSeqno(null); - sfdcTimeHist.setTillenteredBy(null); - sfdcTimeHist.setCompletedFlag("N"); - if("T".equals(resourceScheduled.getStatus())){ - sfdcTimeHist.setDowntimePhasein("调机"); - }else{ - sfdcTimeHist.setDowntimePhasein("生产"); - } - - sfdcTimeHist.setRollNo(soscheduled.getRollNo()); - sfdcTimeHist.setCreatedDate(new Date()); - sfdcTimeHist.setCreatedBy("自动停机"); - sfdcTimeHist.setUpdatedDate(new Date()); - sfdcTimeHist.setDelflag("N"); - sfdcTimeHist.setVersion(1); - sfdcTimeHist.setReplaceFlag("0"); - sfdcTimeHist.setBatchNo(null); - sfdcTimeHist.setRemark(null); - sfdcTimeHistMapper.insert(sfdcTimeHist); - logger.info("停机红灯插入数据: {}", sfdcTimeHist); - - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("site", folderLocation.getSite()); - updateWrapper.eq("resource_id", folderLocation.getResourceId()); - updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); - updateWrapper.set("issend", "X"); - updateWrapper.set("sfdcid",sfdcTimeHist.getId()); - resourceScheduledMapper.update(updateWrapper); - logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); - }else{ - if( "Y".equals(timeHist.getCompletedFlag())){ - SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); + if(soscheduled != null){ int histSeqno = threeColorLampMapper.selectHistSeqno(folderLocation.getSite(), resourceScheduled.getSeqNo()); SfdcTimeHist sfdcTimeHist = new SfdcTimeHist(); sfdcTimeHist.setSite(folderLocation.getSite()); @@ -347,17 +297,72 @@ public class ModbusCollectServiceImpl sfdcTimeHist.setReplaceFlag("0"); sfdcTimeHist.setBatchNo(null); sfdcTimeHist.setRemark(null); - sfdcTimeHistMapper.insert(sfdcTimeHist); + int insert = sfdcTimeHistMapper.insert(sfdcTimeHist); logger.info("停机红灯插入数据: {}", sfdcTimeHist); + if(insert >0){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("site", folderLocation.getSite()); + updateWrapper.eq("resource_id", folderLocation.getResourceId()); + updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); + updateWrapper.set("issend", "X"); + updateWrapper.set("sfdcid",sfdcTimeHist.getId()); + resourceScheduledMapper.update(updateWrapper); + logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); + } + + } + + }else{ + if( "Y".equals(timeHist.getCompletedFlag())){ + SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); + if(soscheduled != null){ + int histSeqno = threeColorLampMapper.selectHistSeqno(folderLocation.getSite(), resourceScheduled.getSeqNo()); + SfdcTimeHist sfdcTimeHist = new SfdcTimeHist(); + sfdcTimeHist.setSite(folderLocation.getSite()); + sfdcTimeHist.setOrderNo(soscheduled.getOrderno()); + sfdcTimeHist.setItemNo(Double.valueOf(soscheduled.getItemno())); + sfdcTimeHist.setSeqNo(soscheduled.getSeqno()); + sfdcTimeHist.setHistSeqno(histSeqno+1); + Date currentTime = new Date(); + Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); + sfdcTimeHist.setEventTime(fiveMinutesAgo); + sfdcTimeHist.setEnteredBy(null); + sfdcTimeHist.setEventDesc(null); + sfdcTimeHist.setDowntimeCode(null); + sfdcTimeHist.setEventType("D"); + sfdcTimeHist.setLinkhistSeqno(null); + sfdcTimeHist.setTillenteredBy(null); + sfdcTimeHist.setCompletedFlag("N"); + if("T".equals(resourceScheduled.getStatus())){ + sfdcTimeHist.setDowntimePhasein("调机"); + }else{ + sfdcTimeHist.setDowntimePhasein("生产"); + } + + sfdcTimeHist.setRollNo(soscheduled.getRollNo()); + sfdcTimeHist.setCreatedDate(new Date()); + sfdcTimeHist.setCreatedBy("自动停机"); + sfdcTimeHist.setUpdatedDate(new Date()); + sfdcTimeHist.setDelflag("N"); + sfdcTimeHist.setVersion(1); + sfdcTimeHist.setReplaceFlag("0"); + sfdcTimeHist.setBatchNo(null); + sfdcTimeHist.setRemark(null); + int insert = sfdcTimeHistMapper.insert(sfdcTimeHist); + logger.info("停机红灯插入数据: {}", sfdcTimeHist); + if(insert >0){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("site", folderLocation.getSite()); + updateWrapper.eq("resource_id", folderLocation.getResourceId()); + updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); + updateWrapper.set("issend", "X"); + updateWrapper.set("sfdcid",sfdcTimeHist.getId()); + resourceScheduledMapper.update(updateWrapper); + logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); + } + + } - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("site", folderLocation.getSite()); - updateWrapper.eq("resource_id", folderLocation.getResourceId()); - updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); - updateWrapper.set("issend", "X"); - updateWrapper.set("sfdcid",sfdcTimeHist.getId()); - resourceScheduledMapper.update(updateWrapper); - logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); } } @@ -379,14 +384,16 @@ public class ModbusCollectServiceImpl }else{ logger.error("设备或工单号不存在 - 设备: {}", folderLocation.getRegisterIp()); } - //记录变灯时长 + //不为空并大于0 if (resourceScheduleds != null && resourceScheduleds.size()>0){ for(ResourceScheduled resourceScheduled:resourceScheduleds){ + //查最后一次边灯 ThreeColorLamp colorLamp = threeColorLampMapper.selectThreeColorLastByResourceId(folderLocation.getSite(),resourceScheduled.getResourceId()); if(colorLamp == null){ break; } ThreeColorLampDownlog downlogChangeLast = threeColorLampDownlogMapper.selectDownlogLast(folderLocation.getSite(),folderLocation.getResourceId()); + //如果变灯了,则更新 if(!mapValueToString(registerData.get(0)).equals(colorLamp.getGreen()) || !mapValueToString(registerData.get(1)).equals(colorLamp.getOrange())|| !mapValueToString(registerData.get(2)).equals(colorLamp.getRed())){ if(downlogChangeLast != null){ downlogChangeLast.setEndDate(new Date()); @@ -397,11 +404,11 @@ public class ModbusCollectServiceImpl SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); ThreeColorLampDownlog downlog = new ThreeColorLampDownlog(); downlog.setSite(folderLocation.getSite()); - downlog.setResourceId(soscheduled.getSResourceid()); - downlog.setWorkShop(soscheduled.getSWorkcenterno()); - downlog.setOrderNo(soscheduled.getOrderno()); - downlog.setSeqNo(soscheduled.getSeqno()); - downlog.setSShiftno(soscheduled.getSShiftno()); + downlog.setResourceId(soscheduled.getSResourceid() == null ? folderLocation.getResourceId() : soscheduled.getSResourceid()); + downlog.setWorkShop(soscheduled.getSWorkcenterno()== null ? null : soscheduled.getSWorkcenterno()); + downlog.setOrderNo(soscheduled.getOrderno() == null ? null : soscheduled.getOrderno()); + downlog.setSeqNo(soscheduled.getSeqno() == null ? null : soscheduled.getSeqno()); + downlog.setSShiftno(soscheduled.getSShiftno() == null ? null : soscheduled.getSShiftno()); if(registerData.get(2) == 1){ downlog.setEventDesc("设备故障"); } @@ -421,7 +428,8 @@ public class ModbusCollectServiceImpl if(1 == registerData.get(0) && 0 == registerData.get(1) && 0 == registerData.get(2)){ ResourceScheduled updateResourceScheduled = resourceScheduledMapper.selectById(resourceScheduled.getId()); - logger.info("正常中间表发送状态{},sfdcid{}", resourceScheduled.getIssend(),resourceScheduled.getSfdcid()); + logger.info("正常中间表发送状态{},sfdcid{}", resourceScheduled.getIssend(),updateResourceScheduled.getSfdcid()); + //如果发送标记不为null,且sfdcid不为null,修改mes表 if(StringUtils.isNotBlank(resourceScheduled.getIssend()) && updateResourceScheduled.getSfdcid() != null){ SfdcTimeHist sfdcTimeHist = new SfdcTimeHist(); sfdcTimeHist.setId(updateResourceScheduled.getSfdcid()); @@ -429,17 +437,20 @@ public class ModbusCollectServiceImpl sfdcTimeHist.setTillTime(new Date()); sfdcTimeHist.setTillenteredTime(new Date()); sfdcTimeHist.setCompletedFlag("Y"); - sfdcTimeHistMapper.updatesfdcTimeHistById(sfdcTimeHist); + int i = sfdcTimeHistMapper.updatesfdcTimeHistById(sfdcTimeHist); logger.info("更新了sfdc表,completedFlaf变为{},id:{}",sfdcTimeHist.getCompletedFlag(),updateResourceScheduled.getSfdcid()); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("site", folderLocation.getSite()); - updateWrapper.eq("resource_id", folderLocation.getResourceId()); - updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); - updateWrapper.set("issend", null); - updateWrapper.set("sfdcid",null); - resourceScheduledMapper.update(updateWrapper); - logger.info("更新了中间表,变为null,id:{}",resourceScheduled.getSfdcid()); + if(i >0){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("site", folderLocation.getSite()); + updateWrapper.eq("resource_id", folderLocation.getResourceId()); + updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); + updateWrapper.set("issend", "Y"); + updateWrapper.set("sfdcid",null); + resourceScheduledMapper.update(updateWrapper); + logger.info("更新了中间表,sfdcid变为null,id:{}",resourceScheduled.getId()); + } + } } }else{ @@ -447,11 +458,11 @@ public class ModbusCollectServiceImpl SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); ThreeColorLampDownlog downlog = new ThreeColorLampDownlog(); downlog.setSite(folderLocation.getSite()); - downlog.setResourceId(soscheduled.getSResourceid()); - downlog.setWorkShop(soscheduled.getSWorkcenterno()); - downlog.setOrderNo(soscheduled.getOrderno()); - downlog.setSeqNo(soscheduled.getSeqno()); - downlog.setSShiftno(soscheduled.getSShiftno()); + downlog.setResourceId(soscheduled.getSResourceid() == null ? folderLocation.getResourceId() : soscheduled.getSResourceid()); + downlog.setWorkShop(soscheduled.getSWorkcenterno() == null ? null : soscheduled.getSWorkcenterno()); + downlog.setOrderNo(soscheduled.getOrderno()== null ? null : soscheduled.getOrderno()); + downlog.setSeqNo(soscheduled.getSeqno()== null ? null : soscheduled.getSeqno()); + downlog.setSShiftno(soscheduled.getSShiftno()== null ? null : soscheduled.getSShiftno()); if(registerData.get(2) == 1){ downlog.setEventDesc("设备故障"); } @@ -467,6 +478,17 @@ public class ModbusCollectServiceImpl downlog.setLamp(nowlamp); threeColorLampDownlogMapper.insert(downlog); }else{ + //如果有最后一条,并且灯是100并是无工单运作,就去更新那最后一条数据 + if(1 == registerData.get(0) && 0 == registerData.get(1) && 0 == registerData.get(2) && "无工单运作".equals(downlogChangeLast.getEventDesc())){ + SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); + downlogChangeLast.setWorkShop(soscheduled.getSWorkcenterno() == null ? null : soscheduled.getSWorkcenterno()); + downlogChangeLast.setOrderNo(soscheduled.getOrderno()== null ? null : soscheduled.getOrderno()); + downlogChangeLast.setSeqNo(soscheduled.getSeqno()== null ? null : soscheduled.getSeqno()); + downlogChangeLast.setSShiftno(soscheduled.getSShiftno()== null ? null : soscheduled.getSShiftno()); + downlogChangeLast.setEventDesc("正常运作"); + threeColorLampDownlogMapper.updateById(downlogChangeLast); + } + //如果是999,并且工单是同一个,则结束 if("999".equals(downlogChangeLast.getLamp()) && folderLocation.getResourceId().equals(downlogChangeLast.getResourceId())){ downlogChangeLast.setEndDate(new Date()); threeColorLampDownlogMapper.updateById(downlogChangeLast); @@ -476,9 +498,11 @@ public class ModbusCollectServiceImpl } }else{ + //没有工单,查设备的最后一条亮灯 ThreeColorLamp colorLamp = threeColorLampMapper.selectThreeColorLastByResourceId(folderLocation.getSite(),folderLocation.getResourceId()); if(colorLamp != null){ ThreeColorLampDownlog downlogChangeLast = threeColorLampDownlogMapper.selectDownlogLast(folderLocation.getSite(),folderLocation.getResourceId()); + //如果灯变化,则更新,插入新的 if(!mapValueToString(registerData.get(0)).equals(colorLamp.getGreen()) || !mapValueToString(registerData.get(1)).equals(colorLamp.getOrange())|| !mapValueToString(registerData.get(2)).equals(colorLamp.getRed())){ if(downlogChangeLast != null){ downlogChangeLast.setEndDate(new Date()); @@ -488,7 +512,11 @@ public class ModbusCollectServiceImpl ThreeColorLampDownlog downlog = new ThreeColorLampDownlog(); downlog.setSite(folderLocation.getSite()); downlog.setResourceId(folderLocation.getResourceId()); - downlog.setEventDesc("计划停机"); + if(registerData.get(0) == 1){ + downlog.setEventDesc("无工单运作"); + }else{ + downlog.setEventDesc("计划停机"); + } downlog.setStartDate(new Date()); downlog.setCreateDate(new Date()); String nowlamp = registerData.get(0)+"" + registerData.get(1) + ""+registerData.get(2); @@ -499,7 +527,11 @@ public class ModbusCollectServiceImpl ThreeColorLampDownlog downlog = new ThreeColorLampDownlog(); downlog.setSite(folderLocation.getSite()); downlog.setResourceId(folderLocation.getResourceId()); - downlog.setEventDesc("计划停机"); + if(registerData.get(0) == 1){ + downlog.setEventDesc("无工单运作"); + }else{ + downlog.setEventDesc("计划停机"); + } downlog.setStartDate(new Date()); downlog.setCreateDate(new Date()); String nowlamp = registerData.get(0)+"" + registerData.get(1) + ""+registerData.get(2); @@ -514,6 +546,7 @@ public class ModbusCollectServiceImpl } } } + //不管上面,始终插入 ThreeColorLamp lamp = new ThreeColorLamp(); lamp.setSite(folderLocation.getSite()); lamp.setEquipmentNo(folderLocation.getResourceId()); diff --git a/threecolor-modbus-collector/src/main/resources/dao/ResourceScheduledMapper.xml b/threecolor-modbus-collector/src/main/resources/dao/ResourceScheduledMapper.xml new file mode 100644 index 0000000..ff8bb36 --- /dev/null +++ b/threecolor-modbus-collector/src/main/resources/dao/ResourceScheduledMapper.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/threecolor-modbus-collector/src/main/resources/dao/SfdcTimeHistMapper.xml b/threecolor-modbus-collector/src/main/resources/dao/SfdcTimeHistMapper.xml index 15c2d88..112eff3 100644 --- a/threecolor-modbus-collector/src/main/resources/dao/SfdcTimeHistMapper.xml +++ b/threecolor-modbus-collector/src/main/resources/dao/SfdcTimeHistMapper.xml @@ -7,6 +7,7 @@ completed_flag = #{sfdcTimeHist.completedFlag},total_time = DATEDIFF(MINUTE, event_time, #{sfdcTimeHist.tillTime}) WHERE id = #{sfdcTimeHist.id}; \ No newline at end of file diff --git a/threecolor-modbus-collector/src/main/resources/dao/ThreeColorLampMapper.xml b/threecolor-modbus-collector/src/main/resources/dao/ThreeColorLampMapper.xml index be3ab0f..b582986 100644 --- a/threecolor-modbus-collector/src/main/resources/dao/ThreeColorLampMapper.xml +++ b/threecolor-modbus-collector/src/main/resources/dao/ThreeColorLampMapper.xml @@ -35,7 +35,7 @@ FROM three_color_lamp WHERE site = #{site} and equipment_no = #{equipmentNo} - ORDER BY create_date DESC + ORDER BY id desc