Commit 9a18238b authored by 夏东伟's avatar 夏东伟

设备实时状态功能开发;

parent e8ec2f2a
...@@ -11,6 +11,7 @@ import net.vtstar.user.mybatis.provider.WhereFilter; ...@@ -11,6 +11,7 @@ import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.DateUtils; import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.access.domain.AssemblyNewEnergy; import net.vtstar.zhongtong.avi.access.domain.AssemblyNewEnergy;
import net.vtstar.zhongtong.avi.access.mapper.AssemblyNewEnergyMapper; import net.vtstar.zhongtong.avi.access.mapper.AssemblyNewEnergyMapper;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
import net.vtstar.zhongtong.avi.utils.SmbFileUtil; import net.vtstar.zhongtong.avi.utils.SmbFileUtil;
import org.quartz.DisallowConcurrentExecution; import org.quartz.DisallowConcurrentExecution;
...@@ -55,6 +56,9 @@ public class AssemblyNewEnergyJob extends QuartzJobBean { ...@@ -55,6 +56,9 @@ public class AssemblyNewEnergyJob extends QuartzJobBean {
private String baseUrl = "D:/scada/assemblynewenergy/"; private String baseUrl = "D:/scada/assemblynewenergy/";
@Autowired
private EquipStatusRealTimeService realTimeService;
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
List<String> ipAddressList = Arrays.asList(ipAddress1, ipAddress2, ipAddress3, ipAddress4); List<String> ipAddressList = Arrays.asList(ipAddress1, ipAddress2, ipAddress3, ipAddress4);
...@@ -63,10 +67,27 @@ public class AssemblyNewEnergyJob extends QuartzJobBean { ...@@ -63,10 +67,27 @@ public class AssemblyNewEnergyJob extends QuartzJobBean {
Date startOfDay = DateUtils.getStartOfDay(0); Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd"); String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd");
for (String ipAddress : ipAddressList){ for (String ipAddress : ipAddressList){
String equipCode = "";
switch (ipAddress){
case "10.1.25.128":
equipCode = "742609-87";
break;
case "10.1.25.129":
equipCode = "742609-88";
break;
case "10.1.25.130":
equipCode = "742609-89";
break;
case "10.1.25.131":
equipCode = "742609-107";
break;
}
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) { if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) {
log.error("ping: {}失败, 此次同步总装新能源检测点数据操作结束!", ipAddress); log.error("ping: {}失败, 此次同步总装新能源检测点数据操作结束!", ipAddress);
realTimeService.saveEquip("总装车间", equipCode, "新能源检测点", "关机");
continue; continue;
} }
realTimeService.saveEquip("总装车间", equipCode, "新能源检测点", "开机");
//todo:账户, 密码需要变 //todo:账户, 密码需要变
String url = "smb://admin:123456@" + ipAddress + "/AN9637H/testdata@" + dateString + ".mdb"; String url = "smb://admin:123456@" + ipAddress + "/AN9637H/testdata@" + dateString + ".mdb";
// String url = "smb://admin:123456@10.1.25.128/an9637h/test/data@2018-05-04.mdb"; // String url = "smb://admin:123456@10.1.25.128/an9637h/test/data@2018-05-04.mdb";
......
...@@ -11,6 +11,7 @@ import net.vtstar.user.mybatis.provider.WhereFilter; ...@@ -11,6 +11,7 @@ import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.DateUtils; import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.access.domain.WheelAlignment; import net.vtstar.zhongtong.avi.access.domain.WheelAlignment;
import net.vtstar.zhongtong.avi.access.mapper.WheelAlignmentMapper; import net.vtstar.zhongtong.avi.access.mapper.WheelAlignmentMapper;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.sqlserver.domain.TestLineResult; import net.vtstar.zhongtong.avi.sqlserver.domain.TestLineResult;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
import net.vtstar.zhongtong.avi.utils.SmbFileUtil; import net.vtstar.zhongtong.avi.utils.SmbFileUtil;
...@@ -53,6 +54,8 @@ public class WheelAlignmentJob extends QuartzJobBean { ...@@ -53,6 +54,8 @@ public class WheelAlignmentJob extends QuartzJobBean {
private int timeOut; private int timeOut;
private String baseUrl = "D:/scada/wheelalignment/"; private String baseUrl = "D:/scada/wheelalignment/";
@Autowired
private EquipStatusRealTimeService realTimeService;
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
...@@ -65,10 +68,28 @@ public class WheelAlignmentJob extends QuartzJobBean { ...@@ -65,10 +68,28 @@ public class WheelAlignmentJob extends QuartzJobBean {
String newDateString = sdf.format(new Date()); String newDateString = sdf.format(new Date());
String dataBaseFileName = "BL_Align"; String dataBaseFileName = "BL_Align";
for (String ipAddress : ipAddressList){ for (String ipAddress : ipAddressList){
String equipCode = "";
String equipName = "";
switch (ipAddress){
case "10.1.25.86":
equipCode = "742609-50";
equipName = "四轮定位B线";
break;
case "10.1.25.87":
equipCode = "742609-17";
equipName = "四轮定位A线";
break;
case "10.1.25.88":
equipCode = "742609-61";
equipName = "四轮定位C线";
break;
}
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) { if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) {
log.error("ping: {}失败, 此次同步底盘四轮定位数据操作结束!", ipAddress); log.error("ping: {}失败, 此次同步底盘四轮定位数据操作结束!", ipAddress);
realTimeService.saveEquip("底盘车间", equipCode, equipName, "关机");
continue; continue;
} }
realTimeService.saveEquip("底盘车间", equipCode, equipName, "开机");
//todo:账户, 密码, 文件位置需要变 BL_Align(数据库文件) //todo:账户, 密码, 文件位置需要变 BL_Align(数据库文件)
String url = "smb://" + ipAddress + "/Database/" + dataBaseFileName + ".mdb"; String url = "smb://" + ipAddress + "/Database/" + dataBaseFileName + ".mdb";
SmbFile file = null; SmbFile file = null;
......
...@@ -10,6 +10,7 @@ import net.vtstar.utils.domain.Return; ...@@ -10,6 +10,7 @@ import net.vtstar.utils.domain.Return;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo; import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation; import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.equipment.service.BasicInfoService; import net.vtstar.zhongtong.avi.equipment.service.BasicInfoService;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -30,6 +31,9 @@ public class BasicInfoController { ...@@ -30,6 +31,9 @@ public class BasicInfoController {
@Autowired @Autowired
BasicInfoService basicInfoService; BasicInfoService basicInfoService;
@Autowired
private EquipStatusRealTimeService realTimeService;
@ApiOperation(value = "分页查询设备列表", notes = "使用通用搜索组件,searchCode:SCADA_EQUIP_INFO\n" + @ApiOperation(value = "分页查询设备列表", notes = "使用通用搜索组件,searchCode:SCADA_EQUIP_INFO\n" +
"字段含义:\n{\n" + "字段含义:\n{\n" +
" \"workshopName\": \"车间,字符串类型\",\n" + " \"workshopName\": \"车间,字符串类型\",\n" +
...@@ -151,4 +155,15 @@ public class BasicInfoController { ...@@ -151,4 +155,15 @@ public class BasicInfoController {
public Return getWorkOrder(@RequestBody SearchVo pageFilter) { public Return getWorkOrder(@RequestBody SearchVo pageFilter) {
return Return.success(new PageInfo<>(basicInfoService.getWorkOrder(pageFilter.toJSONObject()))); return Return.success(new PageInfo<>(basicInfoService.getWorkOrder(pageFilter.toJSONObject())));
} }
@ApiOperation(value = "设备实时状态查询", notes = "字段含义:\n{\n" +
" \"equipWorkshop\": \"车间,字符串类型\",\n" +
" \"equipCode\": \"设备编号,字符串类型\",\n" +
" \"equipName\": \"设备名称,字符串类型\",\n" +
" \"equipState\": \"实时状态,字符串类型\",\n" +
"}")
@PostMapping("/equipStatusRealTime")
public Return equipStatusRealTime(@RequestBody SearchVo pageFilter) {
return Return.success(new PageInfo<>(realTimeService.findPageEquipRealStatus(pageFilter.toJSONObject())));
}
} }
package net.vtstar.zhongtong.avi.equipment.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.user.search.Search;
import net.vtstar.zhongtong.avi.equipment.domain.enums.WorkshopNames;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @Author: xiadongwei
* @Date: 2020/3/11 16:53
*/
@ApiModel("设备实时状态表")
@Data
@Search(code = "REAL_TIME_STATUS")
@Table(name = "equip_status_real_time")
public class EquipStatusRealTime {
@Id
private Long id;
@ApiModelProperty(notes = "车间")
@Column(name = "equip_workshop")
@Search
private WorkshopNames equipWorkshop;
@ApiModelProperty(notes = "设备编号")
@Column(name = "equip_code")
@Search
private String equipCode;
@ApiModelProperty(notes = "设备名称")
@Column(name = "equip_name")
@Search
private String equipName;
@ApiModelProperty(notes = "实时状态")
@Column(name = "equip_state")
private String equipState;
@ApiModelProperty(notes = "创建时间")
@Column(name = "create_time")
private Date createTime;
}
package net.vtstar.zhongtong.avi.equipment.domain.enums;
/**
* @Author: xiadongwei
* @Date: 2020/3/13 13:44
*/
public enum WorkshopNames {
制件车间,
焊装车间,
涂装车间,
底盘车间,
装配车间,
试交车间,
质量管理部,
其他
}
...@@ -5,18 +5,21 @@ import net.vtstar.scada.base.equipmgt.service.EquipDataService; ...@@ -5,18 +5,21 @@ import net.vtstar.scada.base.equipmgt.service.EquipDataService;
import net.vtstar.scada.base.gather.domain.EquipmentData; import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.scada.base.redis.service.SimpleRedisService; import net.vtstar.scada.base.redis.service.SimpleRedisService;
import net.vtstar.scada.base.redis.util.EquipDataUtil; import net.vtstar.scada.base.redis.util.EquipDataUtil;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper; import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import net.vtstar.zhongtong.avi.equipment.service.BasicInfoService;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import org.quartz.DisallowConcurrentExecution; import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
...@@ -28,12 +31,18 @@ public class CleanStatusDataJob extends QuartzJobBean { ...@@ -28,12 +31,18 @@ public class CleanStatusDataJob extends QuartzJobBean {
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
@Resource(name = "redisTemplate")
protected ValueOperations valueOperations;
@Autowired @Autowired
private EquipDataService equipDataService; private EquipDataService equipDataService;
@Autowired @Autowired
private SimpleRedisService simpleRedisService; private SimpleRedisService simpleRedisService;
@Autowired @Autowired
private EquipmentDataMapper equipmentDataMapper; private EquipmentDataMapper equipmentDataMapper;
@Autowired
private BasicInfoService basicInfoService;
@Autowired
private EquipStatusRealTimeService realTimeService;
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
...@@ -41,9 +50,7 @@ public class CleanStatusDataJob extends QuartzJobBean { ...@@ -41,9 +50,7 @@ public class CleanStatusDataJob extends QuartzJobBean {
log.info("_______________________________________________________________"); log.info("_______________________________________________________________");
log.info("开始清洗设备状态数据..."); log.info("开始清洗设备状态数据...");
Set<String> keys = redisTemplate.keys(EquipDataUtil.getStatusKey("*")); Set<String> keys = redisTemplate.keys(EquipDataUtil.getStatusKey("*"));
if (CollectionUtils.isEmpty(keys)) { if (!CollectionUtils.isEmpty(keys)) {
return;
}
log.info("开始清洗设备状态数据 key.size: {}", keys.size()); log.info("开始清洗设备状态数据 key.size: {}", keys.size());
for (String key : keys) { for (String key : keys) {
...@@ -100,7 +107,44 @@ public class CleanStatusDataJob extends QuartzJobBean { ...@@ -100,7 +107,44 @@ public class CleanStatusDataJob extends QuartzJobBean {
} else { } else {
equipDataService.save(last); equipDataService.save(last);
} }
}
}
log.info("_______________________________________________________________");
List<EquipInfo> allEquip = basicInfoService.findAllEquip();
log.info("开始清洗设备实时状态数据 allEquip.size: {}", allEquip.size());
for (EquipInfo info : allEquip) {
if ("PLC".equals(info.getEquipType())){
continue;
}
EquipmentData data = (EquipmentData) valueOperations.get(EquipDataUtil.getLastStatusKey(info.getAlias()));
if (null == data || null == data.getEquipStatus()){
realTimeService.saveEquip(info.getWorkshopName(), info.getEquipCode(), info.getAlias(), "关机");
continue;
} }
String state = "";
switch (data.getEquipStatus().name()){
case "RUN":
state = "运行";
break;
case "IDLE":
state = "待机";
break;
case "PAUSE":
state = "暂定";
break;
case "ALARM":
state = "报警";
break;
case "SHUTDOWN":
state = "关机";
break;
default:
state = "关机";
break;
}
realTimeService.saveEquip(info.getWorkshopName(), info.getEquipCode(), info.getAlias(), state);
}
log.info("_______________________________________________________________");
} }
} }
package net.vtstar.zhongtong.avi.equipment.mapper;
import net.vtstar.user.mybatis.BaseMapper;
import net.vtstar.zhongtong.avi.equipment.domain.EquipStatusRealTime;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: xiadongwei
* @Date: 2020/3/11 9:31
*/
@Mapper
public interface EquipStatusRealTimeMapper extends BaseMapper<EquipStatusRealTime> {
}
...@@ -71,6 +71,15 @@ public class BasicInfoService { ...@@ -71,6 +71,15 @@ public class BasicInfoService {
return basicInfoMapper.findList(searchService.pageFilter2Filter(pageFilter), EquipInfo.class); return basicInfoMapper.findList(searchService.pageFilter2Filter(pageFilter), EquipInfo.class);
} }
/**
* 查询所有设备
*/
public List<EquipInfo> findAllEquip() {
return basicInfoMapper.findList(new WhereFilter(){{
addOrderBy("workshop_name", OrderBy.ASC);
}}, EquipInfo.class);
}
/** /**
* 新增设备 * 新增设备
*/ */
......
package net.vtstar.zhongtong.avi.equipment.service;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.user.search.service.SearchService;
import net.vtstar.utils.CollecUtils;
import net.vtstar.zhongtong.avi.equipment.domain.EquipStatusRealTime;
import net.vtstar.zhongtong.avi.equipment.domain.enums.WorkshopNames;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipStatusRealTimeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Author: xiadongwei
* @Date: 2020/3/11 19:31
*/
@Slf4j
@Service
public class EquipStatusRealTimeService {
@Autowired
private EquipStatusRealTimeMapper mapper;
@Autowired
private SearchService searchService;
/**
* 分页查询设备
*/
public List<EquipStatusRealTime> findPageEquipRealStatus(JSONObject pageFilter) {
PageHelper.startPage(pageFilter.getIntValue("pageNum"), pageFilter.getIntValue("pageSize"));
return mapper.findList(searchService.pageFilter2Filter(pageFilter, new WhereFilter(){{
addOrderBy("equip_workshop", OrderBy.ASC);
}}), EquipStatusRealTime.class);
}
/**
* 新增/更新设备状态
*/
public void saveEquip(String equipWorkshop, String equipCode, String equipName, String equipState) {
List<EquipStatusRealTime> list = mapper.findList(new WhereFilter() {{
addFilter("equip_workshop", Operation.EQUAL, equipWorkshop);
addFilter("equip_code", Operation.EQUAL, equipCode);
addFilter("equip_name", Operation.EQUAL, equipName);
}}, EquipStatusRealTime.class);
if (CollecUtils.isEmpty(list)){
EquipStatusRealTime realTimeState = new EquipStatusRealTime();
realTimeState.setEquipWorkshop(WorkshopNames.valueOf(equipWorkshop));
realTimeState.setEquipCode(equipCode);
realTimeState.setEquipName(equipName);
realTimeState.setEquipState(equipState);
realTimeState.setCreateTime(new Date());
mapper.insert(realTimeState);
}else{
EquipStatusRealTime equipStatusRealTime = list.get(0);
equipStatusRealTime.setEquipState(equipState);
equipStatusRealTime.setCreateTime(new Date());
mapper.update(equipStatusRealTime);
}
}
}
...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.vtstar.protocol.modbus.tcp.netty.utils.NettyUtils; import net.vtstar.protocol.modbus.tcp.netty.utils.NettyUtils;
import net.vtstar.protocol.modbus.tcp.netty.utils.PoolKey; import net.vtstar.protocol.modbus.tcp.netty.utils.PoolKey;
import net.vtstar.scada.base.global.service.ModbusService; import net.vtstar.scada.base.global.service.ModbusService;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.gateway.parts.domain.WeldingRobotMachine; import net.vtstar.zhongtong.avi.gateway.parts.domain.WeldingRobotMachine;
import net.vtstar.zhongtong.avi.gateway.parts.mapper.WeldingRobotMapper; import net.vtstar.zhongtong.avi.gateway.parts.mapper.WeldingRobotMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
...@@ -45,14 +46,39 @@ public class WeldingRobotMachineJob extends QuartzJobBean { ...@@ -45,14 +46,39 @@ public class WeldingRobotMachineJob extends QuartzJobBean {
@Autowired @Autowired
private WeldingRobotMapper mapper; private WeldingRobotMapper mapper;
@Autowired
private EquipStatusRealTimeService realTimeService;
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
List<String> ipAddressList = Arrays.asList(ipAddress1, ipAddress2, ipAddress3, ipAddress4); List<String> ipAddressList = Arrays.asList(ipAddress1, ipAddress2, ipAddress3, ipAddress4);
for (String ipAddress : ipAddressList) { for (String ipAddress : ipAddressList) {
String equipCode = "";
String equipFactory = "";
switch (ipAddress){
case "10.1.25.186":
equipCode = "076102-1324";
equipFactory = "西北过道东侧";
break;
case "10.1.25.187":
equipCode = "076102-1326";
equipFactory = "西北过道东侧";
break;
case "10.1.25.188":
equipCode = "076102-1327";
equipFactory = "西北过道东侧";
break;
case "10.1.25.189":
equipCode = "076102-1325";
equipFactory = "西北过道东侧";
break;
}
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) { if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) {
log.error("ping: {}失败, 读取焊接机器人数据操作结束!", ipAddress); log.error("ping: {}失败, 读取焊接机器人数据操作结束!", ipAddress);
realTimeService.saveEquip("制件车间", equipCode, "焊接机器人", "关机");
continue; continue;
} }
realTimeService.saveEquip("制件车间", equipCode, "焊接机器人", "开机");
//1.获得当天日期,2.通过日期去查询当天的开机时间和焊接时间 //1.获得当天日期,2.通过日期去查询当天的开机时间和焊接时间
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
int date = calendar.get(Calendar.DATE); int date = calendar.get(Calendar.DATE);
...@@ -78,31 +104,14 @@ public class WeldingRobotMachineJob extends QuartzJobBean { ...@@ -78,31 +104,14 @@ public class WeldingRobotMachineJob extends QuartzJobBean {
Integer.valueOf(secondWelding.toString()) + "秒"; Integer.valueOf(secondWelding.toString()) + "秒";
WeldingRobotMachine machine = new WeldingRobotMachine(); WeldingRobotMachine machine = new WeldingRobotMachine();
machine.setEquipCode("焊接机器人单体工作站"); machine.setEquipCode("焊接机器人单体工作站");
switch (ipAddress){ machine.setAlias(equipCode);
case "10.1.25.186": machine.setEquipFactory(equipFactory);
machine.setAlias("076102-1324");
machine.setEquipFactory("西北过道东侧");
break;
case "10.1.25.187":
machine.setAlias("076102-1326");
machine.setEquipFactory("西北过道东侧");
break;
case "10.1.25.188":
machine.setAlias("076102-1327");
machine.setEquipFactory("西北过道东侧");
break;
case "10.1.25.189":
machine.setAlias("076102-1325");
machine.setEquipFactory("西北过道东侧");
break;
}
machine.setTurnOnTime(turnOnTime); machine.setTurnOnTime(turnOnTime);
machine.setWeldingTime(weldingTime); machine.setWeldingTime(weldingTime);
machine.setCreateTime(new Date()); machine.setCreateTime(new Date());
mapper.insert(machine); mapper.insert(machine);
} catch (Exception e) { } catch (Exception e) {
log.error("读取焊接机器人数据失败! e : {}", e.getMessage()); log.error("读取焊接机器人数据失败! e : {}", e.getMessage());
return;
} }
} }
......
...@@ -6,6 +6,7 @@ import net.vtstar.user.mybatis.provider.Operation; ...@@ -6,6 +6,7 @@ import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter; import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.CollecUtils; import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils; import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.sqlserver.domain.TestSpeedResult; import net.vtstar.zhongtong.avi.sqlserver.domain.TestSpeedResult;
import net.vtstar.zhongtong.avi.sqlserver.mapper.TestSpeedMapper; import net.vtstar.zhongtong.avi.sqlserver.mapper.TestSpeedMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
...@@ -45,6 +46,9 @@ public class ErrorFrameJob extends QuartzJobBean { ...@@ -45,6 +46,9 @@ public class ErrorFrameJob extends QuartzJobBean {
private String baseUrl = "D:/scada/errorframe/"; private String baseUrl = "D:/scada/errorframe/";
@Autowired
private EquipStatusRealTimeService realTimeService;
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("--------开始同步试交车间错误帧数据--------"); log.info("--------开始同步试交车间错误帧数据--------");
...@@ -52,8 +56,10 @@ public class ErrorFrameJob extends QuartzJobBean { ...@@ -52,8 +56,10 @@ public class ErrorFrameJob extends QuartzJobBean {
String dateString = DateUtils.parseDateToString(new Date(), "yyyy-MM-dd"); String dateString = DateUtils.parseDateToString(new Date(), "yyyy-MM-dd");
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) { if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) {
log.error("ping: {}失败, 此次同步试交车间错误帧数据操作结束!", ipAddress); log.error("ping: {}失败, 此次同步试交车间错误帧数据操作结束!", ipAddress);
realTimeService.saveEquip("质量管理部", "", "错误帧", "关机");
return; return;
} }
realTimeService.saveEquip("质量管理部", "", "错误帧", "开机");
//todo:账户, 密码需要变 //todo:账户, 密码需要变
String url = "smb://" + ipAddress + "/ztlog/"; String url = "smb://" + ipAddress + "/ztlog/";
SmbFile file = null; SmbFile file = null;
......
...@@ -155,31 +155,4 @@ public class AreaController { ...@@ -155,31 +155,4 @@ public class AreaController {
return Return.success(bus); return Return.success(bus);
} }
/*@GetMapping("/test")
private Return test() {
PoolKey key = new PoolKey("localhost", 502);
ReadCoilsRequest readCoilsRequest = new ReadCoilsRequest(1, 0, 50);
try {
int capacity = body.capacity();
//byte b = body.readByte();
byte aByte4 = body.getByte(0);
byte aByte1 = body.getByte(1);
byte aByte = body.getByte(2);
int length = body.readableBytes();
// byte[] bytes = new byte[lenght];
// ByteBuf bytes1 = body.getBytes(body.readerIndex(), bytes);
int a = 1;
} catch (Exception e) {
}
return Return.success();
}
*/
} }
package net.vtstar.zhongtong.avi.monitoring.controller;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.search.controller.vo.SearchVo;
import net.vtstar.utils.domain.Return;
import net.vtstar.zhongtong.avi.monitoring.domain.StationPassInfo;
import net.vtstar.zhongtong.avi.monitoring.service.StationPassInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author: xiadongwei
* @Date: 2020/3/5 14:10
*/
@Slf4j
@Api(description = "过站信息模块")
@RestController
@RequestMapping("/pass")
public class StationPassInfoController {
@Autowired
private StationPassInfoService passInfoService;
@ApiOperation(value = "报工点补扫--查询所有待补扫的过站记录", notes =
"字段含义:\n{\n" +
" \"VIN\": \"工单号, 字符串类型\",\n" +
" \"stationName\": \"报工点,字符串类型\",\n" +
" \"stationNo\": \"工位编码,字符串类型\",\n" +
" \"passTime\": \"过站时间,时间类型\"\n" +
" \"createBy\": \"操作人,字符串类型\"\n" +
"}")
@PostMapping("/findPassInfoByNoFind")
public Return findPassInfoByNoFind(){
List<StationPassInfo> list = passInfoService.findPassInfoByNoFind();
return Return.success(list);
}
@ApiOperation(value = "查询过站记录", notes = "使用通用搜索组件,searchCode:PASS_INFO\n" +
"字段含义:\n{\n" +
" \"VIN\": \"工单号, 字符串类型\",\n" +
" \"stationName\": \"报工点,字符串类型\",\n" +
" \"stationNo\": \"工位编码,字符串类型\",\n" +
" \"passTime\": \"过站时间,时间类型\"\n" +
" \"createBy\": \"操作人,字符串类型\"\n" +
"}")
@PostMapping("/findPassInfoBySearchCode")
public Return findPassInfoBySearchCode(@RequestBody SearchVo searchVo){
List<StationPassInfo> list = passInfoService.findPassInfoBySearchCode(searchVo.toJSONObject());
return Return.success(new PageInfo<>(list));
}
@ApiOperation(value = "根据报工点获取工位编码")
@GetMapping("/getStationNo/{stationName}")
public Return getStationNoByName(@PathVariable("stationName") String stationName){
String[] stationNo = passInfoService.getStationNoByName(stationName);
return Return.success(stationNo);
}
@ApiOperation(value = "保存缺失的过站记录", notes = "字段含义:\n{\n" +
" \"VIN\": \"工单号, 字符串类型\",\n" +
" \"stationName\": \"报工点,字符串类型\",\n" +
" \"stationNo\": \"工位编码,字符串类型\",\n" +
" \"createTime\": \"过站时间,字符串类型\"\n" +
" \"createBy\": \"操作人,字符串类型\"\n" +
"}")
@PostMapping("/savePassInfo")
public Return savePassInfo(@RequestBody StationPassInfo stationPassInfo){
passInfoService.savePassInfo(stationPassInfo);
return Return.success();
}
@ApiOperation(value = "自动补扫开启")
@GetMapping("/startReplenishScan")
public Return startReplenishScan(@RequestParam Integer beginTimeInt,
@RequestParam Integer endTimeInt){
passInfoService.startReplenishScan(beginTimeInt, endTimeInt);
return Return.success();
}
@ApiOperation(value = "自动补扫关闭")
@GetMapping("/stopReplenishScan")
public Return stopReplenishScan(){
passInfoService.stopReplenishScan();
return Return.success();
}
}
package net.vtstar.zhongtong.avi.monitoring.domain; package net.vtstar.zhongtong.avi.monitoring.domain;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import net.vtstar.user.search.Search;
import net.vtstar.zhongtong.avi.global.web.Show;
import net.vtstar.zhongtong.avi.global.web.domain.enums.FieldType;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.ScanType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
...@@ -10,13 +15,21 @@ import java.util.Date; ...@@ -10,13 +15,21 @@ import java.util.Date;
@ApiModel("过站信息") @ApiModel("过站信息")
@Data @Data
@Search(code = "PASS_INFO")
@Table(name = "vehicle_passing_info") @Table(name = "vehicle_passing_info")
public class StationPassInfo { public class StationPassInfo {
@Id @Id
private Long id; private Long id;
@ApiModelProperty(notes = "报工点补扫")
@Search
private ScanType scanType;
@Show(label = "工单号")
@ApiModelProperty(notes = "工单号")
@Column(name = "VIN") @Column(name = "VIN")
@Search
private String VIN; private String VIN;
@Column(name = "rfid") @Column(name = "rfid")
...@@ -25,17 +38,37 @@ public class StationPassInfo { ...@@ -25,17 +38,37 @@ public class StationPassInfo {
@Column(name = "area_no") @Column(name = "area_no")
private String areaNo; private String areaNo;
@Column(name = "station_no")
private String stationNo;
@Column(name = "in_time") @Column(name = "in_time")
private Date inTime; private Date inTime;
@Column(name = "out_time") @Column(name = "out_time")
private Date outTime; private Date outTime;
@Show(label = "报工点")
@ApiModelProperty(notes = "报工点名称")
@Column(name = "station_name")
@Search
private String stationName;
@Show(label = "工位编码")
@Column(name = "station_no")
private String stationNo;
@Show(label = "过站时间", dataType = FieldType.DATETIME)
@ApiModelProperty(notes = "过站时间")
@Column(name = "pass_time")
private Date passTime;
private String busType;
@Show(label = "操作者")
@ApiModelProperty(name = "操作者")
@Column(name = "create_by")
private String createBy;
@ApiModelProperty(notes = "过站时间")
@Column(name = "create_time") @Column(name = "create_time")
@Search
private Date createTime; private Date createTime;
private String busType;
} }
package net.vtstar.zhongtong.avi.monitoring.domain.enums;
import io.swagger.annotations.ApiModel;
@ApiModel("补扫类型")
public enum ScanType {
NULL("只查补扫"),
ALL("查询所有");
private String value;
ScanType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
...@@ -116,7 +116,8 @@ public class AVIElectrophoresisJob extends GatherJob { ...@@ -116,7 +116,8 @@ public class AVIElectrophoresisJob extends GatherJob {
transaction.execute(); transaction.execute();
response = transaction.getResponse(); response = transaction.getResponse();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("PLC连接异常, PLC地址: {}, 端口:{}", poolKey.getHost(), poolKey.getPort());
continue;
} }
if (null == response) { if (null == response) {
log.error("读取失败! response 为空!"); log.error("读取失败! response 为空!");
......
...@@ -15,14 +15,12 @@ import net.vtstar.zhongtong.avi.monitoring.domain.vo.CarStatisticsVO; ...@@ -15,14 +15,12 @@ import net.vtstar.zhongtong.avi.monitoring.domain.vo.CarStatisticsVO;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; import org.springframework.cache.Cache;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.cache.Cache;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
...@@ -50,10 +48,8 @@ public class RedisToCacheJob extends GatherJob { ...@@ -50,10 +48,8 @@ public class RedisToCacheJob extends GatherJob {
log.info("______________"); log.info("______________");
log.info("RedisToCacheJob start"); log.info("RedisToCacheJob start");
//处理报警 //处理报警
Set<String> warningKeys = redisTemplate.keys(Constant.WARNING_PREFIX + "*"); Set<String> warningKeys = redisTemplate.keys(Constant.WARNING_PREFIX + "*");
Map<String, List<String>> warningKeyMap = warningKeys.stream().collect(Collectors.groupingBy(a -> a.split(":")[1])); Map<String, List<String>> warningKeyMap = warningKeys.stream().collect(Collectors.groupingBy(a -> a.split(":")[1]));
List<Warning> list = new ArrayList<>(); List<Warning> list = new ArrayList<>();
for (Map.Entry<String, List<String>> warningKey : warningKeyMap.entrySet()) { for (Map.Entry<String, List<String>> warningKey : warningKeyMap.entrySet()) {
...@@ -130,12 +126,7 @@ public class RedisToCacheJob extends GatherJob { ...@@ -130,12 +126,7 @@ public class RedisToCacheJob extends GatherJob {
Integer todaySize = (Integer) valueOperations.get(Constant.BUS_SIZE_IN + code + ":" + today); Integer todaySize = (Integer) valueOperations.get(Constant.BUS_SIZE_IN + code + ":" + today);
vo.setDateType(dateType); vo.setDateType(dateType);
if (null == todaySize) { if (null == todaySize) {
// if (code.equals("0")) {
// vo.setSize(BigDecimal.valueOf(40));
// } else {
vo.setSize(BigDecimal.ZERO); vo.setSize(BigDecimal.ZERO);
// vo.setSize(BigDecimal.valueOf(10).add(new BigDecimal(r.nextInt(20))));
// }
} else { } else {
vo.setSize(BigDecimal.valueOf(todaySize)); vo.setSize(BigDecimal.valueOf(todaySize));
} }
...@@ -146,12 +137,7 @@ public class RedisToCacheJob extends GatherJob { ...@@ -146,12 +137,7 @@ public class RedisToCacheJob extends GatherJob {
Integer todayOut = (Integer) valueOperations.get(Constant.BUS_SIZE_OUT + code + ":" + today); Integer todayOut = (Integer) valueOperations.get(Constant.BUS_SIZE_OUT + code + ":" + today);
out.setDateType(dateType); out.setDateType(dateType);
if (null == todayOut) { if (null == todayOut) {
// if (code.equals("0")) {
// out.setSize(BigDecimal.valueOf(40));
// } else {
out.setSize(BigDecimal.ZERO); out.setSize(BigDecimal.ZERO);
// out.setSize(BigDecimal.valueOf(10).add(new BigDecimal(r.nextInt(20))));
// }
} else { } else {
out.setSize(BigDecimal.valueOf(todayOut)); out.setSize(BigDecimal.valueOf(todayOut));
} }
......
...@@ -10,11 +10,8 @@ import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation; ...@@ -10,11 +10,8 @@ import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopAreaMapper; import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopAreaMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopStationMapper; import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopStationMapper;
import net.vtstar.zhongtong.avi.global.constant.Constant; import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import net.vtstar.zhongtong.avi.monitoring.domain.Vehicle; import net.vtstar.zhongtong.avi.monitoring.domain.Vehicle;
import net.vtstar.zhongtong.avi.monitoring.domain.Warning; import net.vtstar.zhongtong.avi.monitoring.domain.Warning;
import net.vtstar.zhongtong.avi.monitoring.domain.WorkRoom;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.ProductionType;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState; import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
import net.vtstar.zhongtong.avi.monitoring.mapper.SkidMapper; import net.vtstar.zhongtong.avi.monitoring.mapper.SkidMapper;
import net.vtstar.zhongtong.avi.monitoring.mapper.VehicleMapper; import net.vtstar.zhongtong.avi.monitoring.mapper.VehicleMapper;
...@@ -82,21 +79,13 @@ public class ReadDataToCacheRunner implements CommandLineRunner { ...@@ -82,21 +79,13 @@ public class ReadDataToCacheRunner implements CommandLineRunner {
warningCache.put(warning.getCode(), warning); warningCache.put(warning.getCode(), warning);
} }
// List<WorkRoom> rooms = workRoomMapper.findList(new WhereFilter(), WorkRoom.class);
//
//
// Map<String, List<WorkRoom>> listMap = rooms.stream().collect(Collectors.groupingBy(WorkRoom::getLedNo));
// for (Map.Entry<String, List<WorkRoom>> entry : listMap.entrySet()) {
// roomCache.put(Constant.LED_PREFIX + entry.getKey(), entry.getValue());
// }
List<PaintshopStation> stations = stationMapper.findList(new WhereFilter() {{ List<PaintshopStation> stations = stationMapper.findList(new WhereFilter() {{
addJoin(PaintshopStation.class, "area_id", PaintshopArea.class, "id"); addJoin(PaintshopStation.class, "area_id", PaintshopArea.class, "id");
addJoin(PaintshopStation.class, "lane_id", PaintshopLane.class, "id"); addJoin(PaintshopStation.class, "lane_id", PaintshopLane.class, "id");
addOrderBy(PaintshopStation.class, "id", OrderBy.ASC); addOrderBy(PaintshopStation.class, "id", OrderBy.ASC);
}}, PaintshopStation.class); }}, PaintshopStation.class);
//todo: 初始化工位信息 //todo: 初始化工位信息
/*for (int i = 0; i < stations.size(); i++) { /*for (int i = 0; i < stations.size(); i++) {
PaintshopStation station = stations.get(i); PaintshopStation station = stations.get(i);
if (i % 5 == 0) { if (i % 5 == 0) {
...@@ -119,13 +108,6 @@ public class ReadDataToCacheRunner implements CommandLineRunner { ...@@ -119,13 +108,6 @@ public class ReadDataToCacheRunner implements CommandLineRunner {
station.setState(StationState.FREE); station.setState(StationState.FREE);
valueOperations.set(Constant.STATION_PREFIX + station.getCode(), station); valueOperations.set(Constant.STATION_PREFIX + station.getCode(), station);
} }
// station.setTurnF(false);
// station.setTurnR(false);
// station.setArrive(false);
// station.setBusType(ProductionType.OWN);
// station.setBusNo("eee");
// station.setState(StationState.USE);
// valueOperations.set(Constant.STATION_PREFIX + station.getCode() ,station);
} }
stationCache.put("ALL", stations); stationCache.put("ALL", stations);
//将工位按照车道号进行分组 //将工位按照车道号进行分组
...@@ -144,17 +126,6 @@ public class ReadDataToCacheRunner implements CommandLineRunner { ...@@ -144,17 +126,6 @@ public class ReadDataToCacheRunner implements CommandLineRunner {
vehicleCache.put(vehicle.getMqttPrefix(), vehicle); vehicleCache.put(vehicle.getMqttPrefix(), vehicle);
} }
//
// Map<String, Skid> skidMap = hashOperations.entries("skid");
// if (null == skidMap) {
// List<Skid> skids = skidMapper.findList(null, Skid.class);
// Map<String, Skid> skid = skids.stream().collect(Collectors.toMap(Skid::getRfid, s -> s, (k1, k2) -> k1));
// hashOperations.putAll("skid", skid);
// }
// List<Skid> skids = skidMapper.findList(new WhereFilter(), Skid.class);
// for (PaintshopStation station : stations) {
// stationCache.put(station.getCode(), station);
// }
List<PaintshopArea> list = areaMapper.findList(new WhereFilter(), PaintshopArea.class); List<PaintshopArea> list = areaMapper.findList(new WhereFilter(), PaintshopArea.class);
webStationCache.put("stationList", list); webStationCache.put("stationList", list);
......
...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation; import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter; import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.DateUtils; import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.sqlserver.domain.AssemblyTorqueWrench; import net.vtstar.zhongtong.avi.sqlserver.domain.AssemblyTorqueWrench;
import net.vtstar.zhongtong.avi.sqlserver.mapper.AssemblyTorqueWrenchMapper; import net.vtstar.zhongtong.avi.sqlserver.mapper.AssemblyTorqueWrenchMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
...@@ -37,6 +38,9 @@ public class AssemblyTorqueWrenchJob extends QuartzJobBean { ...@@ -37,6 +38,9 @@ public class AssemblyTorqueWrenchJob extends QuartzJobBean {
@Autowired @Autowired
private AssemblyTorqueWrenchMapper assemblyTorqueWrenchMapper; private AssemblyTorqueWrenchMapper assemblyTorqueWrenchMapper;
@Autowired
private EquipStatusRealTimeService realTimeService;
@Value("${zt.ip.assemblytorquewrench}") @Value("${zt.ip.assemblytorquewrench}")
private String ipAddress; private String ipAddress;
@Value("${zt.ip.pingtimes}") @Value("${zt.ip.pingtimes}")
...@@ -48,8 +52,10 @@ public class AssemblyTorqueWrenchJob extends QuartzJobBean { ...@@ -48,8 +52,10 @@ public class AssemblyTorqueWrenchJob extends QuartzJobBean {
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){ if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){
log.error("ping: {}失败, 此次同步总装车间智能扭力扳手数据操作结束!", ipAddress); log.error("ping: {}失败, 此次同步总装车间智能扭力扳手数据操作结束!", ipAddress);
realTimeService.saveEquip("总装车间", "", "智能扭力扳手", "关机");
return; return;
} }
realTimeService.saveEquip("总装车间", "", "智能扭力扳手", "开机");
log.info("--------开始同步总装车间智能扭力扳手数据--------"); log.info("--------开始同步总装车间智能扭力扳手数据--------");
Date startOfDay = DateUtils.getStartOfDay(0); Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss"); String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss");
......
...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation; import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter; import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.DateUtils; import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.sqlserver.domain.TestLineResult; import net.vtstar.zhongtong.avi.sqlserver.domain.TestLineResult;
import net.vtstar.zhongtong.avi.sqlserver.mapper.TestLineResultMapper; import net.vtstar.zhongtong.avi.sqlserver.mapper.TestLineResultMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
...@@ -35,6 +36,9 @@ public class TestLineResultJob extends QuartzJobBean { ...@@ -35,6 +36,9 @@ public class TestLineResultJob extends QuartzJobBean {
@Autowired @Autowired
private TestLineResultMapper testLineResultMapper; private TestLineResultMapper testLineResultMapper;
@Autowired
private EquipStatusRealTimeService realTimeService;
@Value("${zt.ip.testlineresult}") @Value("${zt.ip.testlineresult}")
private String ipAddress; private String ipAddress;
@Value("${zt.ip.pingtimes}") @Value("${zt.ip.pingtimes}")
...@@ -46,8 +50,10 @@ public class TestLineResultJob extends QuartzJobBean { ...@@ -46,8 +50,10 @@ public class TestLineResultJob extends QuartzJobBean {
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){ if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){
log.error("ping: {}失败, 此次同步试交车间检测线数据操作结束!", ipAddress); log.error("ping: {}失败, 此次同步试交车间检测线数据操作结束!", ipAddress);
realTimeService.saveEquip("质量管理部", "769000-04", "检测线", "关机");
return; return;
} }
realTimeService.saveEquip("质量管理部", "769000-04", "检测线", "开机");
log.info("--------开始同步试交车间检测线数据--------"); log.info("--------开始同步试交车间检测线数据--------");
Date startOfDay = DateUtils.getStartOfDay(0); Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss"); String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss");
......
...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation; import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter; import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.DateUtils; import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.sqlserver.domain.TestSpeedResult; import net.vtstar.zhongtong.avi.sqlserver.domain.TestSpeedResult;
import net.vtstar.zhongtong.avi.sqlserver.mapper.TestSpeedMapper; import net.vtstar.zhongtong.avi.sqlserver.mapper.TestSpeedMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils; import net.vtstar.zhongtong.avi.utils.PingIpUtils;
...@@ -35,6 +36,9 @@ public class TestSpeedResultJob extends QuartzJobBean { ...@@ -35,6 +36,9 @@ public class TestSpeedResultJob extends QuartzJobBean {
@Autowired @Autowired
private TestSpeedMapper testSpeedMapper; private TestSpeedMapper testSpeedMapper;
@Autowired
private EquipStatusRealTimeService realTimeService;
@Value("${zt.ip.testspeedresult}") @Value("${zt.ip.testspeedresult}")
private String ipAddress; private String ipAddress;
@Value("${zt.ip.pingtimes}") @Value("${zt.ip.pingtimes}")
...@@ -46,8 +50,10 @@ public class TestSpeedResultJob extends QuartzJobBean { ...@@ -46,8 +50,10 @@ public class TestSpeedResultJob extends QuartzJobBean {
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){ if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){
log.error("ping: {}失败, 此次同步试交车间限速值数据操作结束!", ipAddress); log.error("ping: {}失败, 此次同步试交车间限速值数据操作结束!", ipAddress);
realTimeService.saveEquip("质量管理部", "", "限速值", "关机");
return; return;
} }
realTimeService.saveEquip("质量管理部", "", "限速值", "开机");
log.info("--------开始同步试交车间限速值数据--------"); log.info("--------开始同步试交车间限速值数据--------");
Date startOfDay = DateUtils.getStartOfDay(0); Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss"); String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss");
......
package net.vtstar.zhongtong.avi.utils;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
/**
* @Author: xiadongwei
* @Date: 2019/8/28 11:03
*/
public class ExpertUtils {
private static String tempFileHomePath = "D:/vtstar/template/";
public static void main(String[] arg){
exportExcel();
}
/**
* 生成excel并下载
*/
public static void exportExcel(){
File newFile = createNewFile();
//File newFile = new File("d:/ss.xls");
//新文件写入数据,并下载*****************************************************
InputStream is = null;
XSSFWorkbook workbook = null;
XSSFSheet sheet = null;
try {
is = new FileInputStream(newFile);
workbook = new XSSFWorkbook(is);
//获取第一个sheet
sheet = workbook.getSheetAt(0);
} catch (Exception e1) {
e1.printStackTrace();
}
if(sheet != null){
try {
//写数据
FileOutputStream fos = new FileOutputStream(newFile);
XSSFRow row = sheet.getRow(4);
XSSFCell cell = row.getCell(1);
System.out.println(cell.getStringCellValue());
cell.setCellValue("ssssssssssssssssssssssssssssssssssssssssssss");
workbook.write(fos);
fos.flush();
fos.close();
//下载
/*InputStream fis = new BufferedInputStream(new FileInputStream(newFile));
HttpServletResponse response = this.getResponse();
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
response.setContentType("text/html;charset=UTF-8");
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-msdownload");
String newName = URLEncoder.encode("采购合同"+System.currentTimeMillis()+".xls", "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename=\""+ newName + "\"");
response.addHeader("Content-Length", "" + newFile.length());
toClient.write(buffer);
toClient.flush();*/
}
catch(Exception e) {
e.printStackTrace();
}finally {
try {
if (null != is) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//删除创建的新文件
//this.deleteFile(newFile);
}
/**
* 复制文件
*
* @param s
* 源文件
* @param t
* 复制到的新文件
*/
public static void fileChannelCopy(File s, File t) {
try {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(s),1024);
out = new BufferedOutputStream(new FileOutputStream(t),1024);
byte[] buffer = new byte[1024];
int len;
while ((len=in.read(buffer))!=-1) {
out.write(buffer,0,len);
}
} finally {
if (null != in) {
in.close();
}
if (null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取excel模板,并复制到新文件中供写入和下载
* @return
*/
public static File createNewFile(){
//读取模板,并赋值到新文件************************************************************
//文件模板路径
String fileName = "向阳生产计划模板";
File file = new File(tempFileHomePath, fileName + ".xls");
//新的文件名
String newFileName = "日常检测报告" + System.currentTimeMillis() + ".xls";
//写入到新的excel
File newFile = new File(tempFileHomePath, newFileName);
try {
newFile.createNewFile();
//复制模板到新文件
fileChannelCopy(file, newFile);
} catch (Exception e) {
e.printStackTrace();
}
return newFile;
}
/**
* 下载成功后删除
*
* @param files
*/
private void deleteFile(File... files) {
for (File file : files) {
if (file.exists()) {
file.delete();
}
}
}
}
package net.vtstar.zhongtong.avi.utils;
import java.io.File;
/**
* @Author: xiadongwei
* @Date: 2019/10/20 18:56
*/
public class PrintDemo {
public static boolean printOfficeFile(File f) {
return true;
/*if (f != null && f.exists()) {
String fileNameString = f.getName();
String postfixString = Utils.getPostfix(fileNameString);
if (postfixString.equalsIgnoreCase("xls") || postfixString.equalsIgnoreCase("xlsx")) {
*//**
* 功能:实现excel打印工作
*//*
ComThread.InitSTA();
ActiveXComponent xl = new ActiveXComponent("Excel.Application");
try {
// System.out.println("version=" +
// xl.getProperty("Version"));
// 不打开文档
Dispatch.put(xl, "Visible", new Variant(false));
Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();
// 打开文档
Dispatch excel = Dispatch.call(workbooks, "Open", f.getAbsolutePath()).toDispatch();
// 横向打印(2013/05/24)
// Dispatch currentSheet = Dispatch.get(excel,
// "ActiveSheet")
// .toDispatch();
// Dispatch pageSetup = Dispatch
// .get(currentSheet, "PageSetup").toDispatch();
// Dispatch.put(pageSetup, "Orientation", new Variant(2));
// 每张表都横向打印2013-10-31
Dispatch sheets = Dispatch.get((Dispatch) excel, "Sheets").toDispatch();
// 获得几个sheet
int count = Dispatch.get(sheets, "Count").getInt();
// System.out.println(count);
for (int j = 1; j <= count; j++) {
Dispatch sheet = Dispatch
.invoke(sheets, "Item", Dispatch.Get, new Object[] { new Integer(j) }, new int[1])
.toDispatch();
Dispatch pageSetup = Dispatch.get(sheet, "PageSetup").toDispatch();
Dispatch.put(pageSetup, "Orientation", new Variant(2));
Dispatch.call(sheet, "PrintOut");
}
// 开始打印
if (excel != null) {
// Dispatch.call(excel, "PrintOut");
// 增加以下三行代码解决文件无法删除bug
Dispatch.call(excel, "save");
Dispatch.call(excel, "Close", new Variant(true));
excel = null;
}
xl.invoke("Quit", new Variant[] {});
xl = null;
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
// 始终释放资源
ComThread.Release();
}
} else if (postfixString.equalsIgnoreCase("doc") || postfixString.equalsIgnoreCase("docx")) {
ComThread.InitSTA();
ActiveXComponent wd = new ActiveXComponent("Word.Application");
try {
// 不打开文档
Dispatch.put(wd, "Visible", new Variant(false));
Dispatch document = wd.getProperty("Documents").toDispatch();
// 打开文档
Dispatch doc = Dispatch
.invoke(document, "Open", Dispatch.Method, new Object[] { f.getAbsolutePath() }, new int[1])
.toDispatch();
// 开始打印
if (doc != null) {
Dispatch.call(doc, "PrintOut");
// 增加以下三行代码解决文件无法删除bug
Dispatch.call(doc, "save");
Dispatch.call(doc, "Close", new Variant(true));
doc = null;
}
wd.invoke("Quit", new Variant[] {});
wd = null;
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
// 始终释放资源
ComThread.Release();
}
} else {
return false;
}
} else {
return false;
}*/
}
public static void main(String[] args) {
PrintDemo.printOfficeFile(new File("hehe.xls"));
}
}
...@@ -31,8 +31,8 @@ quartz.job.taskInfos[1].jobName=net.vtstar.zhongtong.avi.equipment.job.CleanStat ...@@ -31,8 +31,8 @@ quartz.job.taskInfos[1].jobName=net.vtstar.zhongtong.avi.equipment.job.CleanStat
quartz.job.taskInfos[1].jobGroup=CleanStatusDataJob quartz.job.taskInfos[1].jobGroup=CleanStatusDataJob
quartz.job.taskInfos[1].jobDescription=\u6E05\u6D17\u8BBE\u5907\u72B6\u6001Job quartz.job.taskInfos[1].jobDescription=\u6E05\u6D17\u8BBE\u5907\u72B6\u6001Job
#quartz.job.taskInfos[1].cronExpression=0 0 0 * * ? #quartz.job.taskInfos[1].cronExpression=0 0 0 * * ?
quartz.job.taskInfos[1].cronExpression=0 0/5 * * * ? quartz.job.taskInfos[1].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[1].start=false quartz.job.taskInfos[1].start=true
quartz.job.taskInfos[2].jobName=net.vtstar.zhongtong.avi.equipment.job.StatisticsTimeJob quartz.job.taskInfos[2].jobName=net.vtstar.zhongtong.avi.equipment.job.StatisticsTimeJob
quartz.job.taskInfos[2].jobGroup=StatisticsTimeJob quartz.job.taskInfos[2].jobGroup=StatisticsTimeJob
...@@ -117,8 +117,8 @@ quartz.job.taskInfos[12].start=false ...@@ -117,8 +117,8 @@ quartz.job.taskInfos[12].start=false
quartz.job.taskInfos[13].jobName=net.vtstar.zhongtong.avi.gateway.painting.job.SprayBoothStateMachineJob quartz.job.taskInfos[13].jobName=net.vtstar.zhongtong.avi.gateway.painting.job.SprayBoothStateMachineJob
quartz.job.taskInfos[13].jobGroup=SprayBoothStateMachineJob quartz.job.taskInfos[13].jobGroup=SprayBoothStateMachineJob
quartz.job.taskInfos[13].jobDescription=\u6d82\u88c5\u55b7\u6d82\u5ba4Job quartz.job.taskInfos[13].jobDescription=\u6d82\u88c5\u55b7\u6d82\u5ba4Job
quartz.job.taskInfos[13].cronExpression=0 0/5 * * * ? quartz.job.taskInfos[13].cronExpression=0/15 * * * * ?
quartz.job.taskInfos[13].start=false quartz.job.taskInfos[13].start=true
#烘干室 #烘干室
quartz.job.taskInfos[14].jobName=net.vtstar.zhongtong.avi.gateway.painting.job.DryingRoomTempMachineJob quartz.job.taskInfos[14].jobName=net.vtstar.zhongtong.avi.gateway.painting.job.DryingRoomTempMachineJob
...@@ -278,8 +278,8 @@ quartz.job.taskInfos[35].cronExpression=0 0/1 * * * ? ...@@ -278,8 +278,8 @@ quartz.job.taskInfos[35].cronExpression=0 0/1 * * * ?
quartz.job.taskInfos[35].start=false quartz.job.taskInfos[35].start=false
#AVI plc 采集 #AVI plc 采集
quartz.job.taskInfos[36].jobName=net.vtstar.zhongtong.avi.monitoring.job.AVIMonitorJob1 quartz.job.taskInfos[36].jobName=net.vtstar.zhongtong.avi.monitoring.job.AVIMonitorJob
quartz.job.taskInfos[36].jobGroup=AVIMonitorJob1 quartz.job.taskInfos[36].jobGroup=AVIMonitorJob
quartz.job.taskInfos[36].jobDescription=\u76d1\u63a7\u0041\u0056\u0049Job quartz.job.taskInfos[36].jobDescription=\u76d1\u63a7\u0041\u0056\u0049Job
quartz.job.taskInfos[36].cronExpression=0/3 * * * * ? quartz.job.taskInfos[36].cronExpression=0/3 * * * * ?
quartz.job.taskInfos[36].start=false quartz.job.taskInfos[36].start=false
......
package net.vtstar.zhongtong.avi; package net.vtstar.zhongtong.avi;
import jcifs.smb.SmbFile;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.utils.SmbFileUtil;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Date;
@ActiveProfiles("xdw")
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest @SpringBootTest
@Slf4j
public class ApplicationTests { public class ApplicationTests {
@Test @Test
public void contextLoads() { public void contextLoads() {
} }
private String baseUrl = "D:/scada/assemblynewenergy/";
@Test
public void shareTestxgsk() throws Exception {
Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd");
// String url = "smb://10.1.4.107/数控下料/下料计划01.06.xls";
log.error(String.valueOf(new Date().getTime()));
String url = "smb://admin:123456@10.1.25.128/an9637h/testdata@2019-04-10.mdb";
SmbFile file = new SmbFile(url);
if (file.exists()) {
SmbFileUtil.smbGet(url, baseUrl);
// SmbFileUtil.smbPut("smb://10.1.4.107/数控下料/", "D:/error.xls");
}else {
log.error("日期: {} 的总装车间新能源检测点共享文件不存在!", dateString);
}
log.error(String.valueOf(new Date().getTime()));
}
@Test
public void socketTest() throws Exception{
String aByte = "<get><var>.P107</var><auto>yes</auto></get>\n";
Socket socket = new Socket("172.18.81.191",62944);
OutputStream outputStream = socket.getOutputStream();
outputStream.write(aByte.getBytes());
outputStream.flush();
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
//注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
sb.append(new String(bytes, 0, len,"UTF-8"));
}
System.out.println("get message from server: " + sb);
inputStream.close();
outputStream.close();
socket.close();
}
} }
...@@ -6,31 +6,198 @@ import net.vtstar.protocol.modbus.tcp.netty.packet.ReadCoilsRequest; ...@@ -6,31 +6,198 @@ import net.vtstar.protocol.modbus.tcp.netty.packet.ReadCoilsRequest;
import net.vtstar.protocol.modbus.tcp.netty.packet.ReadCoilsResponse; import net.vtstar.protocol.modbus.tcp.netty.packet.ReadCoilsResponse;
import net.vtstar.protocol.modbus.tcp.netty.service.ModbusTemplate; import net.vtstar.protocol.modbus.tcp.netty.service.ModbusTemplate;
import net.vtstar.protocol.modbus.tcp.netty.utils.PoolKey; import net.vtstar.protocol.modbus.tcp.netty.utils.PoolKey;
import net.vtstar.scada.base.equipmgt.domain.EquipDataTemplate;
import net.vtstar.scada.base.equipmgt.domain.EquipDataTemplateItem;
import net.vtstar.scada.base.equipmgt.mapper.EquipDataTemplateItemMapper;
import net.vtstar.scada.base.equipmgt.mapper.EquipDataTemplateMapper;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.asserts.ParamAssert;
import net.vtstar.zhongtong.avi.monitoring.domain.Warning;
import net.vtstar.zhongtong.avi.monitoring.mapper.WarningMapper;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesWorkOrderInfo;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j @Slf4j
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class) @SpringBootTest(classes = Application.class)
@ActiveProfiles("dev-yxh") @ActiveProfiles("xdw")
public class ModbusTest { public class ModbusTest {
@Autowired @Autowired
private ModbusTemplate modbusTemplate; private ModbusTemplate modbusTemplate;
@Autowired
private WarningMapper warningMapper;
@Autowired
private EquipDataTemplateItemMapper itemMapper;
@Autowired
private EquipDataTemplateMapper templateMapper;
@Test @Test
public void test() throws Exception { public void test() throws Exception {
ReadCoilsRequest readCoilsRequest = new ReadCoilsRequest(1,0,5); ReadCoilsRequest readCoilsRequest = new ReadCoilsRequest(1, 0, 5);
PoolKey poolKey = new PoolKey("localhost",502); PoolKey poolKey = new PoolKey("localhost", 502);
ReadCoilsResponse response= modbusTemplate.execute(poolKey, readCoilsRequest, ReadCoilsResponse.class); ReadCoilsResponse response = modbusTemplate.execute(poolKey, readCoilsRequest, ReadCoilsResponse.class);
ByteBuf body = response.getBody(); ByteBuf body = response.getBody();
byte b = body.readByte(); byte b = body.readByte();
System.out.println("___" + b); System.out.println("___" + b);
// byte[] array = body.array(); // byte[] array = body.array();
} }
private static final String SUFFIX_2003 = ".xls";
private static final String SUFFIX_2007 = ".xlsx";
private Map<String, Integer> map = new HashMap<>();
@Test
public void parsingExcel() {
map.put("KS111腻子烘干室335", 3);
map.put("KS1053工位电泳烘干室302", 1);
map.put("KS1062工位电泳烘干室303", 1);
map.put("KS113腻子烘干室336", 3);
map.put("KS112腻子烘干室377", 3);
map.put("KS114中途烘干室351", 3);
map.put("KS115中途烘干室352", 3);
map.put("KS116面漆烘干室360", 7);
map.put("KS117面漆烘干室362", 7);
map.put("KS118面漆烘干室364", 7);
map.put("KS119彩条烘干室366", 6);
map.put("KS120彩条烘干室368", 6);
map.put("KS121彩条烘干室370", 6);
map.put("KS122彩条烘干室372", 6);
map.put("KS123罩光漆烘干室373", 6);
map.put("KS142A中涂喷漆室349", 4);
map.put("KS143A中涂喷漆室350", 4);
map.put("KS144A面漆喷漆室359", 5);
map.put("KS145面漆喷漆室361", 5);
map.put("KS146A面漆喷漆室363", 5);
map.put("KS147A彩条喷漆室365", 6);
map.put("KS149A彩条喷漆室367", 6);
map.put("KS148A彩条喷漆室369", 6);
map.put("KS150A彩条喷漆室371", 6);
map.put("KS151A罩光喷漆室374", 6);
map.put("前处理", 1);
map.put("超滤UF", 1);
map.put("纯水OR", 1);
map.put("前处理空中行车", 1);
List<Warning> list = new ArrayList<>();
File file = new File("Y:/前处理纯水超滤行车.xlsx");
//获取文件的名字
Workbook workbook = null;
String fileName = file.getName();
try {
if (fileName.endsWith(SUFFIX_2003)) {
workbook = new HSSFWorkbook(new FileInputStream(file));
} else if (fileName.endsWith(SUFFIX_2007)) {
workbook = new XSSFWorkbook(new FileInputStream(file));
}
} catch (Exception e) {
log.error("读取文件错误: {}", e.getMessage());
}
ParamAssert.notNull(workbook, "文件名 :" + file + "不符合EXCEL的格式要求!标准格式:.xls/.xlsx");
//获取所有的工作表的的数量
int numOfSheet = workbook.getNumberOfSheets();
//遍历这个这些表
for (int i = 0; i < numOfSheet; i++) {
//获取一个sheet也就是一个工作簿
Sheet sheet = workbook.getSheetAt(i);
int lastRowNum = sheet.getLastRowNum();
//从第一行开始第一行一般是标题
for (int j = 0; j <= lastRowNum; j++) {
Row row = sheet.getRow(j);
if (null == row) {
continue;
}
Warning warning = new Warning();
//描述
if (row.getCell(0) != null) {
row.getCell(0).setCellType(CellType.STRING);
String info = row.getCell(0).getStringCellValue();
if (StringUtils.isEmpty(info)) {
continue;
}
warning.setInfo(info);
}
//类型
if (row.getCell(3) != null) {
row.getCell(3).setCellType(CellType.STRING);
String type = row.getCell(3).getStringCellValue();
if (null == type) {
continue;
}
warning.setType(type);
}
//解决
if (row.getCell(4) != null) {
row.getCell(4).setCellType(CellType.STRING);
String name = row.getCell(4).getStringCellValue();
warning.setName(name);
}
//创建warning, 获取code
warningMapper.insertRecord(warning);
Long id = warning.getId();
//产线
String name = "";
if (row.getCell(1) != null) {
row.getCell(1).setCellType(CellType.STRING);
name = row.getCell(1).getStringCellValue();
}
String address = "";
if (row.getCell(2) != null) {
row.getCell(2).setCellType(CellType.STRING);
address = row.getCell(2).getStringCellValue();
}
EquipDataTemplate byName = templateMapper.findByName(name);
if (byName == null){
log.error(name);
return;
}
EquipDataTemplateItem item = new EquipDataTemplateItem();
item.setTemplateId(byName.getId());
item.setFieldName("warning:" + map.get(name) + ":" + id);
if (address.contains(".")){
String[] split = address.substring(1).split("\\.");
item.setAddress(Integer.valueOf(split[0]) * 8 + Integer.valueOf(split[1]));
}else{
item.setAddress(Integer.valueOf(address.substring(1)) * 8);
}
item.setFunctionCode(2);
item.setFieldType("BIT");
item.setLength(1);
item.setFieldDesc(name);
itemMapper.insert(item);
list.add(warning);
}
log.error("加载数据: {} 条", list.size());
List<Warning> list1 = warningMapper.findList(new WhereFilter(), Warning.class);
for (Warning warning : list1){
warning.setCode(warning.getId() + "");
warningMapper.update(warning);
}
}
}
} }
...@@ -3,6 +3,8 @@ package net.vtstar.zhongtong.avi; ...@@ -3,6 +3,8 @@ package net.vtstar.zhongtong.avi;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.vtstar.scada.base.equipmgt.domain.EquipDataTemplateItem; import net.vtstar.scada.base.equipmgt.domain.EquipDataTemplateItem;
import net.vtstar.scada.base.equipmgt.mapper.EquipDataTemplateItemMapper; import net.vtstar.scada.base.equipmgt.mapper.EquipDataTemplateItemMapper;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter; import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation; import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopStationMapper; import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopStationMapper;
...@@ -10,10 +12,13 @@ import net.vtstar.zhongtong.avi.global.constant.Constant; ...@@ -10,10 +12,13 @@ import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid; import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.ProductionType; import net.vtstar.zhongtong.avi.monitoring.domain.enums.ProductionType;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState; import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesWorkOrderInfo;
import net.vtstar.zhongtong.avi.sqlserver.mapper.MesWorkOrderMapper;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
...@@ -22,12 +27,13 @@ import javax.annotation.Resource; ...@@ -22,12 +27,13 @@ import javax.annotation.Resource;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class) @SpringBootTest(classes = Application.class)
@ActiveProfiles("dev-yxh") @ActiveProfiles("xdw")
public class StationTest { public class StationTest {
@Autowired @Autowired
...@@ -36,6 +42,11 @@ public class StationTest { ...@@ -36,6 +42,11 @@ public class StationTest {
private EquipDataTemplateItemMapper itemMapper; private EquipDataTemplateItemMapper itemMapper;
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private ValueOperations valueOperations; private ValueOperations valueOperations;
@Resource(name = "redisTemplate")
private RedisTemplate redisTemplate;
@Autowired
private MesWorkOrderMapper mesWorkOrderMapper;
@Test @Test
public void test() { public void test() {
...@@ -99,4 +110,33 @@ public class StationTest { ...@@ -99,4 +110,33 @@ public class StationTest {
paintshopStation.setSkid(skid); paintshopStation.setSkid(skid);
valueOperations.set("station:HDG1-13",paintshopStation); valueOperations.set("station:HDG1-13",paintshopStation);
} }
@Test
public void skidTest() {
List<MesWorkOrderInfo> mesWorkOrderInfos = mesWorkOrderMapper.findList(new WhereFilter() {{
addFilter("status", Operation.EQUAL, "4");
addOrderBy("crt_date", OrderBy.DESC);
}}, MesWorkOrderInfo.class);
Set<String> veKeys = redisTemplate.keys(Constant.SKID_PREFIX + "*");
int num = 0;
for (String veKey : veKeys) {
Skid skid = (Skid)valueOperations.get(veKey);
MesWorkOrderInfo mesWorkOrderInfo = mesWorkOrderInfos.get(num);
num ++;
skid.setWorkOrderNo(mesWorkOrderInfo.getWorkOrderNo());
skid.setBusNo(mesWorkOrderInfo.getVehicleModel());
valueOperations.set(veKey, skid);
}
Set<String> veKeyStation = redisTemplate.keys(Constant.STATION_PREFIX + "*");
for (String key : veKeyStation){
PaintshopStation station = (PaintshopStation) valueOperations.get(key);
if (null != station.getSkid()){
Skid skid = (Skid)valueOperations.get(Constant.SKID_PREFIX + station.getSkid().getRfid());
station.setSkid(skid);
station.setWorkOrderNo(skid.getWorkOrderNo());
station.setBusNo(skid.getBusNo());
valueOperations.set(key, station);
}
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment