Browse Source

三色灯停机采集

master
shenzhouyu 2 weeks ago
parent
commit
5b3aa48a18
  1. 3
      threecolor-modbus-collector/src/main/java/com/xujie/modbus/mapper/ResourceScheduledMapper.java
  2. 3
      threecolor-modbus-collector/src/main/java/com/xujie/modbus/runner/ModbusCollectRunner.java
  3. 97
      threecolor-modbus-collector/src/main/java/com/xujie/modbus/service/impl/ModbusCollectServiceImpl.java
  4. 8
      threecolor-modbus-collector/src/main/resources/dao/ResourceScheduledMapper.xml
  5. 3
      threecolor-modbus-collector/src/main/resources/dao/SfdcTimeHistMapper.xml
  6. 2
      threecolor-modbus-collector/src/main/resources/dao/ThreeColorLampMapper.xml

3
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<ResourceScheduled> {
List<ResourceScheduled> selectResourceScheduledAndResourceList(String site, String resourceId);
}

3
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());

97
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条都是001就往sfdc_time_hist插入数据先要确认中间表有工单号
//获取前几条数据默认5
List<ThreeColorLamp> colorLampLisByTime = threeColorLampMapper.getThreeColorLampLisByTime(folderLocation.getSite(), folderLocation.getResourceId(), failureTime);
QueryWrapper<ResourceScheduled> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("site", folderLocation.getSite());
queryWrapper.eq("resource_id", folderLocation.getResourceId());
queryWrapper.isNotNull("seq_no");
List<ResourceScheduled> resourceScheduleds = resourceScheduledMapper.selectList(queryWrapper);
//查询中间表是否有设备和派工单号
List<ResourceScheduled> 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<ThreeColorLamp> 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()));
@ -262,13 +258,13 @@ public class ModbusCollectServiceImpl
}
}
}
}
if (shouldInsertHist){
if(!"X".equals(resourceScheduled.getIssend())){
SfdcTimeHist timeHist = sfdcTimeHistMapper.selectSfdcTimeHistByNew(folderLocation.getSite(), resourceScheduled.getSeqNo(), "自动停机");
if(timeHist == null){
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());
@ -301,9 +297,9 @@ 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<ResourceScheduled> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("site", folderLocation.getSite());
updateWrapper.eq("resource_id", folderLocation.getResourceId());
@ -312,9 +308,14 @@ public class ModbusCollectServiceImpl
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,9 +348,9 @@ 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<ResourceScheduled> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("site", folderLocation.getSite());
updateWrapper.eq("resource_id", folderLocation.getResourceId());
@ -359,6 +360,10 @@ public class ModbusCollectServiceImpl
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());
if(i >0){
UpdateWrapper<ResourceScheduled> 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("issend", "Y");
updateWrapper.set("sfdcid",null);
resourceScheduledMapper.update(updateWrapper);
logger.info("更新了中间表,变为null,id:{}",resourceScheduled.getSfdcid());
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());
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());
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());

8
threecolor-modbus-collector/src/main/resources/dao/ResourceScheduledMapper.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xujie.modbus.mapper.ResourceScheduledMapper">
<select id="selectResourceScheduledAndResourceList" resultType="com.xujie.modbus.entity.ResourceScheduled">
select * from resource_scheduled where site = #{site} and resource_id = #{resourceId} and seq_no is not null and RTRIM(LTRIM(seq_no)) != ''
</select>
</mapper>

3
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};
</update>
<select id="selectSfdcTimeHistByNew" resultType="com.xujie.modbus.entity.SfdcTimeHist">
select top 1 id,site,order_no,item_no,seq_no,hist_seqno,event_time,entered_by,event_desc,downtime_code,event_type,linkhist_seqno,till_time,tillentered_time,tillentered_by,completed_flag,total_time,downtime_phasein,roll_no,created_date,created_by,updated_date from sfdc_time_hist where site = #{site} and seq_no=#{seqNo} and created_by = #{createdBy} order by id
select top 1 id,site,order_no,item_no,seq_no,hist_seqno,event_time,entered_by,event_desc,downtime_code,event_type,linkhist_seqno,till_time,tillentered_time,tillentered_by,completed_flag,total_time,downtime_phasein,roll_no,created_date,created_by,updated_date
from sfdc_time_hist where site = #{site} and seq_no=#{seqNo} and created_by = #{createdBy} order by id desc
</select>
</mapper>

2
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
</select>
<select id="selectDownlogLast" resultType="com.xujie.modbus.entity.ThreeColorLamp">
SELECT top 1

Loading…
Cancel
Save