Commit 321d6c73 authored by 喻训浩's avatar 喻训浩

Merge remote-tracking branch 'origin/develop' into develop

parents 105810b7 af227588
......@@ -14,7 +14,7 @@ import java.util.Date;
* @Author: xiadongwei
* @Date: 2019/10/17 17:23
*/
@ApiModel("总装车间--新能源检测点")
@ApiModel(value = "总装车间--新能源检测点", description = "新能源检测点监控数据表")
@Data
@Search(code = "NEW_ENERGY")
@Table(name = "assembly_new_energy")
......
......@@ -14,7 +14,7 @@ import java.util.Date;
* @Author: xiadongwei
* @Date: 2019/10/17 17:23
*/
@ApiModel("底盘车间--车轮定位")
@ApiModel(value = "底盘车间--车轮定位", description = "四轮定位监控数据表")
@Data
@Search(code = "WHEEL_ALIGNMENT")
@Table(name = "wheel_alignment")
......
......@@ -68,7 +68,8 @@ public class AssemblyNewEnergyJob extends QuartzJobBean {
continue;
}
//todo:账户, 密码需要变
String url = "smb://wanteng:wanteng@" + 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/testdata@2018-05-04.mdb";
SmbFile file = null;
try {
file = new SmbFile(url);
......
......@@ -4,9 +4,9 @@ import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.scada.base.equipmgt.domain.EquipInfo;
import net.vtstar.user.search.controller.vo.SearchVo;
import net.vtstar.utils.domain.Return;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.Program;
import net.vtstar.zhongtong.avi.equipment.domain.vo.ProgramTransferVO;
import net.vtstar.zhongtong.avi.equipment.service.EquipmentService;
......@@ -17,7 +17,6 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -36,39 +35,30 @@ public class EquipmentController {
"")
@PostMapping(value = "/realTime/data")
private Return getRealTimeData(@RequestBody SearchVo pageFilter) {
Object realTimeData = equipmentService.findRealTimeData(pageFilter);
List<Map<String, Object>> data = (List<Map<String, Object>>) realTimeData;
List<Map<String, Object>> data = equipmentService.findRealTimeData(pageFilter.toJSONObject());
return Return.success(new PageInfo<>(data));
}
@ApiOperation(value = "根据设备类型和车间code获得设备列表")
@GetMapping("/equip/findByType")
private Return findEquipByShopAndType(@RequestParam String workshopCode,@RequestParam String equipType){
List<EquipInfo> equipInfos = new ArrayList<>();
EquipInfo equipInfo = new EquipInfo();
equipInfo.setEquipCode("mingshao");
equipInfo.setEquipName("李氏集团");
EquipInfo equipInfo2 = new EquipInfo();
equipInfo2.setEquipCode("mingshao2");
equipInfo2.setEquipName("李氏集团2");
equipInfos.add(equipInfo);
equipInfos.add(equipInfo2);
private Return findEquipByShopAndType(@RequestParam String workshopCode, @RequestParam String equipType){
List<EquipInfo> equipInfos = equipmentService.findMachineByType(equipType);
return Return.success(equipInfos);
}
@ApiOperation(value = "程序传输")
@PostMapping("/program/transfer")
private Return programTransfer(@RequestBody ProgramTransferVO transferVO){
//TODO:
return Return.success();
}
@ApiOperation(value = "报表导出")
@PostMapping("/data/export")
private Return dataExport(@RequestBody SearchVo pageFilter,HttpServletResponse response) throws UnsupportedEncodingException {
private Return dataExport(@RequestBody SearchVo pageFilter, HttpServletResponse response) throws UnsupportedEncodingException {
try {
equipmentService.orderExport(response);
equipmentService.orderExport(pageFilter.toJSONObject(), response);
} catch (Exception e) {
String message = URLEncoder.encode("报表导出失败", "utf-8").replaceAll("\\+", "%20");
response.setHeader("status","601");
......@@ -82,8 +72,7 @@ public class EquipmentController {
@ApiOperation("文件上传")
@PostMapping("/file/upload")
public Return uploadNcFile(@RequestParam("file") MultipartFile file){
Program program = new Program();
program.setPath("D:/test/a.txt");
Program program = equipmentService.saveNcFile(file);
return Return.success(program);
}
}
......@@ -8,6 +8,7 @@ import net.vtstar.zhongtong.avi.global.web.Show;
import javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
/**
* @Author: xiadongwei
......@@ -62,8 +63,29 @@ public class MesWorkOrderInfo {
@Column(name = "production_line")
private String productionLine;
@Show(label = "读取标识")
@ApiModelProperty(notes = "读取标识")
@Column(name = "reading_id")
private String readingId;
@Show(label = "计划开始时间")
@ApiModelProperty(notes = "计划开始时间")
@Column(name = "start_date")
private Date startDate;
@Show(label = "计划结束时间")
@ApiModelProperty(notes = "计划结束时间")
@Column(name = "end_date")
private Date endDate;
@Show(label = "计划交期")
@ApiModelProperty(notes = "计划交期")
@Column(name = "delivery_date")
private Date deliveryDate;
@Show(label = "状态")
@ApiModelProperty(notes = "状态")
@Column(name = "status")
private String status;
@Show(label = "创建时间")
@ApiModelProperty(notes = "创建时间")
@Column(name = "crt_date")
private Date crtDate;
}
......@@ -52,6 +52,9 @@ public class CleanStatusDataJob extends QuartzJobBean {
}
//插入设备监控数据
equipmentDataMapper.insertList(dataList);
if (key.contains("DRYING_ROOM_TEMP") || key.contains("SPRAY_BOOTH")){
continue;
}
equipDataService.updateLastStatus(dataList.get(dataList.size() - 1));
String equipCode = dataList.get(0).getEquipCode();
......
package net.vtstar.zhongtong.avi.equipment.mapper;
import net.vtstar.user.mybatis.BaseMapper;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopLane;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import org.apache.ibatis.annotations.Mapper;
......
package net.vtstar.zhongtong.avi.equipment.service;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
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.controller.vo.SearchVo;
import net.vtstar.user.search.service.SearchService;
import net.vtstar.utils.asserts.ParamAssert;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
import net.vtstar.zhongtong.avi.equipment.domain.Program;
import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import net.vtstar.zhongtong.avi.stamping.domain.LaserCuttingMachine;
import net.vtstar.zhongtong.avi.global.web.domain.ShowField;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
......@@ -18,54 +20,51 @@ import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
public class EquipmentService {
@Autowired
private EquipmentService equipmentService;
@Autowired
private EquipmentDataMapper dataMapper;
@Resource(name = "classNameCache")
private Cache classNameCache;
@Resource(name = "showFieldCache")
private Cache showFieldCache;
@Autowired
private SearchService searchService;
@Autowired
private BasicInfoMapper basicInfoMapper;
public <T> T findRealTimeData(SearchVo pageFilter) {
List<LaserCuttingMachine> ma = new ArrayList<>();
LaserCuttingMachine machine = new LaserCuttingMachine();
machine.setBeginTime(new Date());
machine.setAlias("设备1");
machine.setEquipCode("511111");
machine.setCuttingSpeed(new BigDecimal(555));
machine.setGasPressure(new BigDecimal(477));
machine.setCreateTime(new Date());
machine.setLaserPower(new BigDecimal(77777));
ma.add(machine);
List<PaintshopStation> sequence = dataMapper.findList(new WhereFilter() {{
addOrderBy(PaintshopStation.class, "sequence", OrderBy.ASC);
}}, PaintshopStation.class);
return (T) ma;
private String baseUrl = "D:/scada/program/";
public List<Map<String, Object>> findRealTimeData(JSONObject pageFilter) {
PageHelper.startPage(pageFilter.getIntValue("pageNum"), pageFilter.getIntValue("pageSize"));
Class searchCode = classNameCache.get(pageFilter.getString("searchCode"), Class.class);
return dataMapper.findJoin(searchService.pageFilter2Filter(pageFilter), searchCode);
}
public void orderExport(HttpServletResponse response) throws IOException {
public void orderExport(JSONObject pageFilter, HttpServletResponse response) throws IOException {
String searchCode = pageFilter.getString("searchCode");
List<ShowField> showFields = showFieldCache.get(searchCode, ArrayList<ShowField>::new);
Class itemClazz = classNameCache.get(searchCode, Class.class);
List<Map<String, Object>> result = dataMapper.findJoin(searchService.pageFilter2Filter(pageFilter), itemClazz);
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("0");
sheet.setColumnWidth(0, 4000);
sheet.setColumnWidth(1, 5000);
sheet.setColumnWidth(2, 3000);
sheet.setColumnWidth(3, 2000);
sheet.setColumnWidth(4, 6000);
sheet.setColumnWidth(5, 3000);
sheet.setColumnWidth(6, 4000);
sheet.setColumnWidth(7, 4000);
sheet.setColumnWidth(8, 4000);
XSSFSheet sheet = wb.createSheet("采集数据");
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle.setBorderTop(BorderStyle.DASHED);
......@@ -82,17 +81,26 @@ public class EquipmentService {
titleFont.setFontHeight(24);
titleFont.setBold(true);
String[] title = {"设备名称", "设备编码", "设备状态"};
int rowNumber = 0;
XSSFRow row = sheet.createRow(rowNumber);
for (int i = 0; i < showFields.size(); i++) {
sheet.setColumnWidth(i, 5000);
row.createCell(i).setCellValue(showFields.get(i).getLabel());
}
for (Map<String, Object> item : result){
rowNumber++;
for (int i = 0; i < title.length; i++) {
row.createCell(i).setCellValue(title[i]);
XSSFRow xssfRow = sheet.createRow(rowNumber);
for (int i = 0; i < showFields.size(); i++) {
Object value = item.get(showFields.get(i).getValue());
xssfRow.createCell(i).setCellValue(null == value ? "" : String.valueOf(value));
}
}
response.setCharacterEncoding("utf-8");
String filename = URLEncoder.encode("测试报表", "utf-8").replaceAll("\\+", "%20");
String name = classNameCache.get(searchCode + "name", String.class);
if (StringUtils.isEmpty(name)){
name = "监控数据表";
}
String filename = URLEncoder.encode(name, "utf-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xlsx");
response.setHeader("filename", filename + ".xlsx");
......@@ -105,4 +113,44 @@ public class EquipmentService {
throw new IOException("报表导出失败!");
}
}
public List<EquipInfo> findMachineByType(String equipType) {
return basicInfoMapper.findList(new WhereFilter(){{
addFilter("equip_type", Operation.EQUAL, equipType);
}}, EquipInfo.class);
}
public Program saveNcFile(MultipartFile ncFile) {
ParamAssert.isTrue(ncFile != null && !ncFile.isEmpty(),
"文件不能为空!");
File fileHome = new File(baseUrl);
if (!fileHome.exists()) {
fileHome.mkdirs();
}
String fileName = ncFile.getOriginalFilename();
File saveNcFile = new File(baseUrl + fileName);
if (saveNcFile.exists()){
saveNcFile.delete();
}
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(saveNcFile);
outputStream.write(ncFile.getBytes());
outputStream.flush();
Program program = new Program();
program.setName(fileName);
program.setPath(baseUrl + fileName);
return program;
} catch (Exception e) {
throw new IllegalArgumentException("文件上传失败!");
}finally {
if (null != outputStream) {
try {
outputStream.close();
} catch (IOException e) {
throw new IllegalArgumentException("IO错误!");
}
}
}
}
}
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("总装车间车间--离合油加注")
@ApiModel(value = "总装车间车间--离合油加注", description = "离合油加注监控数据表")
@Data
@Search(code = "CENTRALIZED_FILLING_CLUTCH")
@Table(name = "eqp_data_centralized_filling_clutch")
......@@ -29,11 +29,27 @@ public class CentralizedFillingClutchMachine extends EquipmentData {
@Search
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "加注设定值(ml)")
@ApiModelProperty(notes = "加注设定值")
@Column(name = "filling_settings")
private Long fillingSettings;
@Show(label = "加注量(ml)")
@ApiModelProperty(notes = "加注量")
@Column(name = "filling_amount")
private Long fillingAmount;
@Show(label = "压力设定值")
@ApiModelProperty(notes = "压力设定值")
@Column(name = "pressure_settings")
private Long pressureSettings;
@Show(label = "加注压力(bar)")
@ApiModelProperty(notes = "加注压力(bar)")
@Column(name = "filling_pressure")
......@@ -44,7 +60,7 @@ public class CentralizedFillingClutchMachine extends EquipmentData {
@ApiModelProperty(notes = "设备状态(0是关机,1是运行)")
private Integer status;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("总装车间车间--地板革热熔涂胶设备")
@ApiModel(value = "总装车间车间--地板革热熔涂胶设备", description = "地板隔热熔监控数据表")
@Data
@Search(code = "FLOOR_LEATHER_HOT")
@Table(name = "eqp_data_floor_leather_hot")
......@@ -28,6 +28,12 @@ public class FloorLeatherHotMachine extends EquipmentData {
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "模头1区温度")
@ApiModelProperty(notes = "模头1区温度")
@Column(name = "die_temperature1")
......@@ -98,7 +104,7 @@ public class FloorLeatherHotMachine extends EquipmentData {
@ApiModelProperty(notes = "设备状态(0是关机,1是运行)")
private Integer status;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("总装车间车间--冷媒加注机")
@ApiModel(value = "总装车间车间--冷媒加注机", description = "冷媒加注机监控数据表")
@Data
@Search(code = "FOCUS_ADDING_REFRIGERANT")
@Table(name = "eqp_data_focus_adding_refrigerant")
......@@ -29,6 +29,17 @@ public class FocusAddingRefrigerantMachine extends EquipmentData {
@Search
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "加注设定值(ml)")
@ApiModelProperty(notes = "加注设定值")
@Column(name = "filling_settings")
private Long fillingSettings;
@Show(label = "加注量(ml)")
@ApiModelProperty(notes = "加注量")
@Column(name = "filling_amount")
......@@ -44,7 +55,7 @@ public class FocusAddingRefrigerantMachine extends EquipmentData {
@ApiModelProperty(notes = "设备状态(0是关机,1是运行)")
private Integer status;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("总装车间车间--助力油加注")
@ApiModel(value = "总装车间车间--助力油加注", description = "助力油加注机监控数据表")
@Data
@Search(code = "FOCUS_BOOSTER_OIL")
@Table(name = "eqp_data_focus_booster_oil")
......@@ -29,6 +29,12 @@ public class FocusBoosterOilMachine extends EquipmentData {
@Search
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "枪1加注量(ml)")
@ApiModelProperty(notes = "枪1加注量(ml)")
@Column(name = "filling_amount1")
......@@ -44,7 +50,7 @@ public class FocusBoosterOilMachine extends EquipmentData {
@ApiModelProperty(notes = "设备状态(0是关机,1是运行)")
private Integer status;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -16,7 +16,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("总装车间--板链记录")
@ApiModel(value = "总装车间--板链记录", description = "总装板链监控数据表")
@Data
@Search(code = "ASSEMBLY_PLATE_CHAIN")
@Table(name = "eqp_data_assembly_plate_chain")
......@@ -28,12 +28,18 @@ public class PlateChainMachine{
@Search
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "当班平均运行间隔时间")
@ApiModelProperty(notes = "当班平均运行间隔时间")
@Column(name = "average_time")
private String averageTime;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -39,7 +39,7 @@ public class CentralizedFillingClutchMachineJob extends GatherJob {
@Override
public Object handleValue(String fieldName, Object value) {
if ("fillingPressure".equals(fieldName)){
if ("fillingPressure".equals(fieldName) || "pressureSettings".equals(fieldName)){
return Integer.valueOf(value.toString()) / 10;
}
return value;
......
......@@ -34,6 +34,9 @@ public class FloorLeatherHotMachineJob extends GatherJob {
if (state != null && state == 0) {
return false;
}
if (data.getCurrentYield() == 0){
return false;
}
equipmentData.setEquipStatus(EquipStatusEnum.RUN);
return true;
}
......
......@@ -34,10 +34,10 @@ public class FocusAddingRefrigerantMachineJob extends GatherJob {
if (state != null && state == 0) {
return false;
}
if (null == ((FocusAddingRefrigerantMachine) equipmentData).getFillingAmount() ||
/*if (null == ((FocusAddingRefrigerantMachine) equipmentData).getFillingAmount() ||
((FocusAddingRefrigerantMachine) equipmentData).getFillingAmount().intValue() == 0){
return false;
}
}*/
equipmentData.setEquipStatus(EquipStatusEnum.RUN);
return true;
}
......
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("底盘车间车间--智能扭力扳手")
@ApiModel(value = "底盘车间车间--智能扭力扳手", description = "底盘拧紧机监控数据表")
@Data
@Search(code = "CHASSIS_TORQUE_WRENCH")
@Table(name = "eqp_data_chassis_torque_wrench")
......@@ -29,6 +29,12 @@ public class ChassisTorqueWrench extends EquipmentData {
@Search
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "一轴扭矩")
@ApiModelProperty(notes = "一轴扭矩")
@Column(name = "shaft_torque_1")
......@@ -54,7 +60,7 @@ public class ChassisTorqueWrench extends EquipmentData {
@ApiModelProperty(notes = "设备状态(0是关机,1是运行)")
private Integer status;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
package net.vtstar.zhongtong.avi.gateway.painting.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
@Data
@ApiModel(value = "涂装--烘干室温度", description = "烘干室监控数据表")
@Table(name = "eqp_data_drying_room_temp")
public class DryingRoomTempMachine extends EquipmentData {
@Column(name = "eqp_code")
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Column(name = "temperature")
@ApiModelProperty(notes = "温度")
private Float temperature;
@ApiModelProperty("采集时间")
@Column(name = "create_time")
private Date createTime;
private Integer status;
}
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "PAINTING_ROBOT")
@ApiModel("喷涂机器人")
@ApiModel(value = "喷涂机器人", description = "喷涂机器人监控数据表")
@Table(name = "eqp_data_painting_robot")
public class PaintingRobotMachine extends EquipmentData {
......@@ -39,7 +39,7 @@ public class PaintingRobotMachine extends EquipmentData {
@ApiModelProperty(notes = "系统状态")
private Integer status;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
package net.vtstar.zhongtong.avi.gateway.painting.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.user.search.Search;
import net.vtstar.zhongtong.avi.global.web.Show;
import javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
@Data
@Search(code = "SPRAY_BOOTH")
@ApiModel(value = "涂装-喷涂室温湿度", description = "喷涂室监控数据表")
@Table(name = "eqp_data_spray_booth")
public class SprayBoothMachine extends EquipmentData {
@Show(label = "设备编号")
@Column(name = "eqp_code")
@ApiModelProperty(notes = "设备编号")
@Search
private String equipCode;
@Show(label = "温度")
@Column(name = "temperature")
@ApiModelProperty(notes = "温度")
private Float temperature;
@Show(label = "湿度")
@Column(name = "humidity")
@ApiModelProperty(notes = "湿度")
private Float humidity;
@Show(label = "采集时间")
@ApiModelProperty("时间")
@Column(name = "create_time")
private Date createTime;
private Integer status;
}
package net.vtstar.zhongtong.avi.gateway.painting.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.scada.base.gather.job.GatherJob;
import net.vtstar.zhongtong.avi.gateway.painting.domain.DryingRoomTempMachine;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
/**
* 烘干室温度数据采集JOB
*/
@Slf4j
@Component
public class DryingRoomTempMachineJob extends GatherJob {
private static final String NAME = "DRYING_ROOM_TEMP";
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("JobName: {}", context.getJobDetail().getKey().getName());
super.gatherByModbus(NAME, DryingRoomTempMachine.class);
}
@Override
public boolean handleObject(EquipmentData equipmentData) {
DryingRoomTempMachine data = (DryingRoomTempMachine) equipmentData;
Integer state = data.getStatus();
if (state != null && state == 0) {
return false;
}
if (null == data.getTemperature()){
return false;
}
return true;
}
@Override
public Object handleValue(String fieldName, Object value) {
return value;
}
@Override
protected void postHandle(EquipmentData equipmentData) {
}
}
package net.vtstar.zhongtong.avi.gateway.painting.listener;
import com.jnrsmcu.sdk.netdevice.*;
import java.text.SimpleDateFormat;
/**
* 温湿度传感器监听类默认实现
* @Author: xiadongwei
* @Date: 2019/11/4 19:03
*/
public class MyIDataListener implements IDataListener {
@Override
public void receiveTimmingAck(TimmingAck data) {// 校时指令应答处理
System.out.println("校时应答->设备编号:" + data.getDeviceId()
+ "\t执行结果:" + data.getStatus());
}
@Override
public void receiveTelecontrolAck(TelecontrolAck data) {// 遥控指令应答处理
System.out.println("遥控应答->设备编号:" + data.getDeviceId()
+ "\t继电器编号:" + data.getRelayId() + "\t执行结果:"
+ data.getStatus());
}
@Override
public void receiveStoreData(StoreData data) {// 已存储数据接收处理
// 遍历节点数据。数据包括网络设备的数据以及各个节点数据。温湿度数据存放在节点数据中
for (NodeData nd : data.getNodeList()) {
SimpleDateFormat sdf = new SimpleDateFormat(
"yy-MM-dd HH:mm:ss");
String str = sdf.format(nd.getRecordTime());
System.out.println("存储数据->设备地址:" + data.getDeviceId()
+ "\t节点:" + nd.getNodeId() + "\t温度:" + nd.getTem()
+ "\t湿度:" + nd.getHum() + "\t存储时间:" + str);
}
}
@Override
public void receiveRealtimeData(RealTimeData data) {// 实时数据接收处理
// 遍历节点数据。数据包括网络设备的数据以及各个节点数据。温湿度数据存放在节点数据中
for (NodeData nd : data.getNodeList()) {
System.out.println("实时数据->设备地址:" + data.getDeviceId()
+ "\t节点:" + nd.getNodeId() + "\t温度:" + nd.getTem()
+ "\t湿度:" + nd.getHum() + "\t经度:" + data.getLng()
+ "\t纬度:" + data.getLat() + "\t坐标类型:"
+ data.getCoordinateType() + "\t继电器状态:"
+ data.getRelayStatus());
}
}
@Override
public void receiveLoginData(LoginData data) {// 登录数据接收处理
System.out.println("登录->设备地址:" + data.getDeviceId());
}
@Override
public void receiveParamIds(ParamIdsData data) {
String str = "设备参数编号列表->设备编号:" + data.getDeviceId()
+ "\t参数总数量:" + data.getTotalCount() + "\t本帧参数数量:"
+ data.getCount() + "\r\n";
for (int paramId : data.getPararmIdList())// 遍历设备中参数id编号
{
str += paramId + ",";
}
System.out.println(str);
}
@Override
public void receiveParam(ParamData data) {
String str = "设备参数->设备编号:" + data.getDeviceId() + "\r\n";
for (ParamItem pararm : data.getParameterList()) {
str += "参数编号:"
+ pararm.getParamId()
+ "\t参数描述:"
+ pararm.getDescription()
+ "\t参数值:"
+ (pararm.getValueDescription() == null ? pararm
.getValue() : pararm.getValueDescription()
.get(pararm.getValue())) + "\r\n";
}
System.out.println(str);
}
@Override
public void receiveWriteParamAck(WriteParamAck data) {
String str = "下载设备参数->设备编号:" + data.getDeviceId() + "\t参数数量:"
+ data.getCount() + "\t"
+ (data.isSuccess() ? "下载成功" : "下载失败");
System.out.println(str);
}
@Override
public void receiveTransDataAck(TransDataAck data) {
String str = "数据透传->设备编号:" + data.getDeviceId() + "\t响应结果:"
+ data.getData() + "\r\n字节数:" + data.getTransDataLen();
System.out.println(str);
}}
package net.vtstar.zhongtong.avi.gateway.painting.listener;
import com.jnrsmcu.sdk.netdevice.NodeData;
import com.jnrsmcu.sdk.netdevice.RSServer;
import com.jnrsmcu.sdk.netdevice.RealTimeData;
import net.vtstar.zhongtong.avi.gateway.painting.domain.SprayBoothMachine;
import net.vtstar.zhongtong.avi.gateway.painting.mapper.SprayBoothMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 温度传感器监听
* @Author: xiadongwei
* @Date: 2019/11/4 18:55
*/
@Component
@Order(99)
public class SprayBoothListener implements CommandLineRunner {
@Autowired
private SprayBoothMapper mapper;
@Override
public void run(String... args) throws Exception {
// 初始化
RSServer rsServer = RSServer.Initiate(2404);
rsServer.addDataListener(new MyIDataListener(){
@Override
public void receiveRealtimeData(RealTimeData data){
List<SprayBoothMachine> list = new ArrayList<>();
for (NodeData nd : data.getNodeList()) {
//TODO: 根据设备地址设置设备编号
SprayBoothMachine sprayBoothMachine = new SprayBoothMachine();
sprayBoothMachine.setTemperature(nd.getTem());
sprayBoothMachine.setHumidity(nd.getHum());
sprayBoothMachine.setCreateTime(new Date());
list.add(sprayBoothMachine);
}
mapper.insertList(list);
}
});
rsServer.start();
}
}
package net.vtstar.zhongtong.avi.gateway.painting.mapper;
import net.vtstar.user.mybatis.BaseMapper;
import net.vtstar.zhongtong.avi.gateway.painting.domain.SprayBoothMachine;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SprayBoothMapper extends BaseMapper<SprayBoothMachine> {
}
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "DUSTING_LINE")
@ApiModel("喷粉线")
@ApiModel(value = "喷粉线", description = "喷粉线监控数据表")
@Table(name = "eqp_data_dusting_line")
public class DustingLineMachine extends EquipmentData {
......@@ -38,7 +38,7 @@ public class DustingLineMachine extends EquipmentData {
@ApiModelProperty(notes = "喷粉二状态")
private String state2;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "PRETREATMENT")
@ApiModel("前处理")
@ApiModel(value = "前处理", description = "前处理监控数据表")
@Table(name = "eqp_data_pretreatment")
public class PretreatmentMachine extends EquipmentData {
......@@ -98,11 +98,9 @@ public class PretreatmentMachine extends EquipmentData {
@ApiModelProperty(notes = "10#防锈液时间")
private Integer fx10Time;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
private Date createTime;
private Integer status;
}
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "STEEL_CNC_CUTTING")
@ApiModel("型钢数控下料")
@ApiModel(value = "型钢数控下料", description = "型钢数控下料监控数据表")
@Table(name = "eqp_data_steel_cnc_cutting")
public class SteelCncCuttingMachine extends EquipmentData {
......@@ -23,12 +23,18 @@ public class SteelCncCuttingMachine extends EquipmentData {
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "设备状态")
@Column(name = "state")
@ApiModelProperty(notes = "设备状态")
private String stateString;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "WELDING_ROBOT")
@ApiModel("机器人焊接")
@ApiModel(value = "机器人焊接", description = "机器人焊接监控数据表")
@Table(name = "eqp_data_welding_robot")
public class WeldingRobotMachine{
......@@ -26,6 +26,12 @@ public class WeldingRobotMachine{
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "开机时间")
@Column(name = "turn_on_time")
@ApiModelProperty(notes = "开机时间")
......@@ -36,7 +42,7 @@ public class WeldingRobotMachine{
@ApiModelProperty(notes = "焊接时间")
private String weldingTime;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("试交车间--充电桩")
@ApiModel(value = "试交车间--充电桩", description = "充电桩监控数据表")
@Data
@Search(code = "CHARGING_PILE")
@Table(name = "eqp_data_charging_pile")
......@@ -28,6 +28,12 @@ public class ChargingPileMachine extends EquipmentData {
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "车辆编号")
@ApiModelProperty(notes = "车辆编号")
@Column(name = "bus_code")
......@@ -79,7 +85,7 @@ public class ChargingPileMachine extends EquipmentData {
@Column(name = "soc")
private Integer soc;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
private Date createTime;
......
package net.vtstar.zhongtong.avi.gateway.trial.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.scada.base.gather.domain.EquipmentData;
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 javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
/**
* @Author: xiadongwei
* @Date: 2019/10/17 11:52
*/
@ApiModel(value = "试交车间--加氢站", description = "加氢站监控数据表")
@Data
@Search(code = "HYDROGEN_STATIONVoc")
@Table(name = "eqp_data_hydrogen_station")
public class HydrogenStationVocMachine extends EquipmentData {
@Show(label = "设备编号")
@Column(name = "eqp_code")
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "卸气口压力(Mpa)")
@ApiModelProperty(notes = "卸气口压力(Mpa)")
@Column(name = "discharge_port_pressure")
private Float dischargePortPressure;
@Show(label = "氢气源压力(mmH2O)")
@ApiModelProperty(notes = "氢气源压力(mmH2O)")
@Column(name = "hydrogen_source_pressure")
private Float hydrogenSourcePressure;
@Show(label = "泵出口压力(Mpa)")
@ApiModelProperty(notes = "泵出口压力(Mpa)")
@Column(name = "pump_outlet_pressure")
private Float pumpOutletPressure;
@Show(label = "仪表风压力(Mpa)")
@ApiModelProperty(notes = "仪表风压力(Mpa)")
@Column(name = "instrument_air_pressure")
private Float instrumentAirPressure;
@Show(label = "油温度(°C)")
@ApiModelProperty(notes = "油温度(°C)")
@Column(name = "oil_temperature")
private Float oilTemperature;
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
private Date createTime;
@Column(name = "state")
@ApiModelProperty(notes = "设备状态(0是关机,1是运行)")
private Integer status;
}
package net.vtstar.zhongtong.avi.gateway.trial.job;
import jcifs.smb.SmbFile;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.sqlserver.domain.TestSpeedResult;
import net.vtstar.zhongtong.avi.sqlserver.mapper.TestSpeedMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils;
import net.vtstar.zhongtong.avi.utils.SmbFileUtil;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.io.*;
import java.util.*;
/**
* 试交车间--错误帧
*
* @Author: xiadongwei
* @Date: 2019/10/16 18:20
*/
@Slf4j
@Component
@DisallowConcurrentExecution
public class ErrorFrameJob extends QuartzJobBean {
@Autowired
private TestSpeedMapper mapper;
@Value("${zt.ip.errorframe}")
private String ipAddress;
@Value("${zt.ip.pingtimes}")
private int pingTimes;
@Value("${zt.ip.timeout}")
private int timeOut;
private String baseUrl = "D:/scada/errorframe/";
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("--------开始同步试交车间错误帧数据--------");
//ZTLOG_2019-10-26_11-35-46
String dateString = DateUtils.parseDateToString(new Date(), "yyyy-MM-dd");
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) {
log.error("ping: {}失败, 此次同步试交车间错误帧数据操作结束!", ipAddress);
return;
}
//todo:账户, 密码需要变
String url = "smb://" + ipAddress + "/ztlog/";
SmbFile file = null;
InputStream in = null;
List<String> fileName = new ArrayList<>();
try {
file = new SmbFile(url);
if (file.exists()) {
SmbFile[] files = file.listFiles();
for (SmbFile f : files) {
String name = f.getName();
String[] split = name.split("_");
if (split.length != 3 || !dateString.equals(split[1])) {
continue;
}
fileName.add(name);
}
} else {
log.error("试交车间错误帧共享文件夹: {}不存在!", url);
return;
}
if (CollecUtils.isEmpty(fileName)) {
log.error("试交车间错误帧共享文件夹中不存在当天日期的文件!", dateString);
return;
}
for (String name : fileName){
String urlName = url + name;
SmbFile remoteFile = new SmbFile(urlName);
if (!remoteFile.exists()) {
log.error("远程共享文件: {}不存在", urlName);
continue;
}
SmbFileUtil.smbGet(url, baseUrl + ipAddress);
}
List<TestSpeedResult> results = new ArrayList<>();
for (String name : fileName) {
String urlName = baseUrl + ipAddress + "/" + name;
File remoteFile = new File(urlName);
if (!remoteFile.exists()) {
log.error("本地共享文件: {}不存在", urlName);
continue;
}
List<TestSpeedResult> item = new ArrayList<>();
in = new BufferedInputStream(new FileInputStream(urlName));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String lineString = "";
String err = "";
Map<Integer, String> vinMap = new HashMap<>();
while ((lineString = bufferedReader.readLine()) != null) {
if (lineString.contains("cfeec21")) {
String[] split = lineString.split(",");
if (split.length == 3) {
if (split[1].trim().startsWith("01")) {
vinMap.put(1, split[1].trim());
}
if (split[1].trim().startsWith("02")) {
vinMap.put(2, split[1].trim());
}
if (split[1].trim().startsWith("03")) {
vinMap.put(3, split[1].trim());
}
}
}
if (lineString.contains("err=")) {
if (vinMap.size() == 3) {
StringBuilder vin = new StringBuilder();
for (int i = 1; i <= 3; i++) {
String[] ascString = vinMap.get(i).split(" ");
for (int j = 1; j < ascString.length; j++) {
if ("ff".equals(ascString[j])){
continue;
}
vin.append((char) Integer.parseInt(ascString[j], 16));
}
}
lineString.replace(" ", "");
err = lineString.substring(lineString.indexOf("err=") + 4, lineString.indexOf("rec=")).trim();
if (StringUtils.isEmpty(vin.toString()) || StringUtils.isEmpty(err)) {
continue;
}
TestSpeedResult result = new TestSpeedResult();
result.setVin(vin.toString());
result.setErrorFrame(Integer.valueOf(err));
item.add(result);
vinMap.clear();
}else{
vinMap.clear();
}
}
}
int errItem = 0;
String vinItem = "";
for (TestSpeedResult itemResult : item){
vinItem = itemResult.getVin();
if (itemResult.getErrorFrame() > errItem){
errItem = itemResult.getErrorFrame();
}
}
TestSpeedResult result = new TestSpeedResult();
result.setVin(vinItem);
result.setErrorFrame(errItem);
result.setMODEL_ID("错误帧");
String[] split = name.split("_");
Date date = DateUtils.parse(split[1] + " " + split[2], "yyyy-MM-dd HH-mm-ss");
result.setTestDate(date);
results.add(result);
}
//当天零点
Date startOfDay = DateUtils.getStartOfDay(0);
String startString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH-mm-ss");
mapper.delByFilter(new WhereFilter() {{
addFilter("test_date", Operation.GREATER_THAN, startString);
addFilter("MODEL_ID", Operation.EQUAL, "错误帧");
}}, TestSpeedResult.class);
mapper.insertList(results);
log.info("更新试交车间错误帧: {} 数据: {}条", ipAddress, results.size());
} catch (Exception e) {
log.error("获取试交车间错误帧共享文件失败!ip: {}", ipAddress);
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("--------同步试交车间错误帧数据结束--------");
}
}
package net.vtstar.zhongtong.avi.gateway.trial.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.scada.base.equipmgt.domain.Enum.EquipStatusEnum;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.scada.base.gather.job.GatherJob;
import net.vtstar.zhongtong.avi.gateway.trial.domain.HydrogenStationVocMachine;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 加氢站设备数据采集JOB
*/
@Slf4j
@Component
public class HydrogenStationVocMachineJob extends GatherJob {
private static final String NAME = "HYDROGEN_STATIONVoc";
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("JobName: {}", context.getJobDetail().getKey().getName());
super.gatherByModbus(NAME, HydrogenStationVocMachine.class);
}
public boolean handleObject(EquipmentData equipmentData) {
HydrogenStationVocMachine data = (HydrogenStationVocMachine) equipmentData;
Integer state = data.getStatus();
if (state != null && state == 0) {
return false;
}
equipmentData.setEquipStatus(EquipStatusEnum.RUN);
return true;
}
@Override
public Object handleValue(String fieldName, Object value) {
return value;
}
@Override
protected void postHandle(EquipmentData equipmentData) {
((HydrogenStationVocMachine)equipmentData).setCreateTime(new Date());
}
}
package net.vtstar.zhongtong.avi.gateway.welding.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.scada.base.gather.domain.EquipmentData;
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 javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
@Data
@Search(code = "AUTOMATIC_SPOT_WELDING")
@ApiModel(value = "车顶点焊", description = "车顶自动点焊监控数据表")
@Table(name = "eqp_data_automatic_spot_welding")
public class AutomaticSpotWeldingMachine extends EquipmentData {
@Show(label = "设备编号")
@Column(name = "eqp_code")
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "焊点1电流")
@Column(name = "welding_spot_A_1")
@ApiModelProperty(notes = "焊点1电流")
private Integer weldingSpotA1;
@Show(label = "焊点1电压")
@Column(name = "welding_spot_V_1")
@ApiModelProperty(notes = "焊点1电压")
private Integer weldingSpotV1;
@Show(label = "焊点2电流")
@Column(name = "welding_spot_A_2")
@ApiModelProperty(notes = "焊点2电流")
private Integer weldingSpotA2;
@Show(label = "焊点2电压")
@Column(name = "welding_spot_V_2")
@ApiModelProperty(notes = "焊点2电压")
private Integer weldingSpotV2;
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
private Date createTime;
}
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "PLATE_CHAIN")
@ApiModel("板链")
@ApiModel(value = "板链", description = "焊装板链监控数据表")
@Table(name = "eqp_data_plate_chain")
public class PlateChainMachine extends EquipmentData {
......@@ -23,6 +23,12 @@ public class PlateChainMachine extends EquipmentData {
@ApiModelProperty(notes = "设备编号")
private String equipCode;
@Show(label = "设备名称")
@Column(name = "eqp_name")
@ApiModelProperty(notes = "设备名称")
@Search
private String alias;
@Show(label = "系统是否报警")
@Column(name = "error_state")
@ApiModelProperty(notes = "系统是否报警")
......@@ -33,7 +39,7 @@ public class PlateChainMachine extends EquipmentData {
@ApiModelProperty(notes = "系统是否运行")
private int state;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "PLC_CONTROL_TIRE_1")
@ApiModel("PLC数控合装胎, 串口")
@ApiModel(value = "PLC数控合装胎, 串口", description = "PLC数控合装胎监控数据表")
@Table(name = "eqp_data_control_tire_1")
public class PlcControlTireMachine1 extends EquipmentData {
......@@ -94,7 +94,7 @@ public class PlcControlTireMachine1 extends EquipmentData {
private Float vehicleWidth;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
......
......@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Search(code = "PLC_CONTROL_TIRE_2")
@ApiModel("PLC数控合装胎, 网口")
@ApiModel(value = "PLC数控合装胎, 网口", description = "PLC数控合装胎监控数据表")
@Table(name = "eqp_data_control_tire_2")
public class PlcControlTireMachine2 extends EquipmentData {
......@@ -68,12 +68,9 @@ public class PlcControlTireMachine2 extends EquipmentData {
@ApiModelProperty(notes = "地盘高")
private Float siteHeight;
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
private Date createTime;
@ApiModelProperty(notes = "系统运行(1,0)")
private Integer status;
}
package net.vtstar.zhongtong.avi.gateway.welding.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.scada.base.equipmgt.domain.Enum.EquipStatusEnum;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.scada.base.gather.job.GatherJob;
import net.vtstar.zhongtong.avi.gateway.welding.domain.AutomaticSpotWeldingMachine;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 焊装车顶点焊数据采集JOB
*/
@Slf4j
@Component
public class AutomaticSpotWeldingMachineJob extends GatherJob {
private static final String NAME = "AUTOMATIC_SPOT_WELDING";
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("JobName: {}", context.getJobDetail().getKey().getName());
super.gatherByModbus(NAME, AutomaticSpotWeldingMachine.class);
}
@Override
public boolean handleObject(EquipmentData equipmentData) {
AutomaticSpotWeldingMachine data = (AutomaticSpotWeldingMachine) equipmentData;
Integer state = data.getStatus();
if (state != null && state == 0) {
return false;
}
if (data.getWeldingSpotA1() == null || data.getWeldingSpotA2() == null){
return false;
}
equipmentData.setEquipStatus(EquipStatusEnum.RUN);
return true;
}
@Override
public Object handleValue(String fieldName, Object value) {
return value;
}
@Override
protected void postHandle(EquipmentData equipmentData) {
AutomaticSpotWeldingMachine data = (AutomaticSpotWeldingMachine) equipmentData;
(data).setWeldingSpotV1((data).getWeldingSpotA1() * 4000);
(data).setWeldingSpotV2((data).getWeldingSpotA2() * 4000);
(data).setCreateTime(new Date());
}
}
......@@ -23,6 +23,11 @@ public class CacheConfig {
return cacheManager.getCache("showFieldCache");
}
@Bean
Cache classNameCache(ConcurrentMapCacheManager cacheManager) {
return cacheManager.getCache("classNameCache");
}
@Bean
Cache stationCache(ConcurrentMapCacheManager cacheManager) {
return cacheManager.getCache("stationCache");
......
package net.vtstar.zhongtong.avi.global.listener;
import io.swagger.annotations.ApiModel;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.search.Search;
import net.vtstar.user.util.ReadAnnotationUtils;
......@@ -28,6 +29,9 @@ public class WebFiledListener implements ApplicationListener<ContextRefreshedEve
@Resource(name = "showFieldCache")
private Cache showFieldCache;
@Resource(name = "classNameCache")
private Cache classNameCache;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
......@@ -41,6 +45,11 @@ public class WebFiledListener implements ApplicationListener<ContextRefreshedEve
if (StringUtils.isEmpty(clazzAnnotation.code())) {
log.error("{} 类@Search注解code属性未赋值!", clazz);
}
classNameCache.put(clazzAnnotation.code(), clazz);
String name = clazz.getAnnotation(ApiModel.class).description();
if (!StringUtils.isEmpty(name)){
classNameCache.put(clazzAnnotation.code() + "name", name);
}
List<ShowField> showFileds = new ArrayList<>();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
......
......@@ -16,7 +16,7 @@ import java.util.Date;
* @Date: 2019/10/17 11:52
*/
@ApiModel("总装车间车间--智能扭力扳手")
@ApiModel(value = "总装车间车间--智能扭力扳手", description = "总装拧紧机监控数据表")
@Data
@Search(code = "ASSEMBLY_TORQUE_WRENCH")
@Table(name = "assembly_torque_wrench")
......
......@@ -16,7 +16,7 @@ import java.util.Date;
* @Author: xiadongwei
* @Date: 2019/10/16 10:23
*/
@ApiModel("试交车间--检测线")
@ApiModel(value = "试交车间--检测线", description = "试交检测线监控数据表")
@Data
@Search(code = "CHECK_LINE")
@Table(name = "test_line_result")
......
......@@ -17,7 +17,7 @@ import java.util.Date;
* @Author: xiadongwei
* @Date: 2019/10/16 10:23
*/
@ApiModel("试交车间--动静态检测(限速值,错误帧)")
@ApiModel(value = "试交车间--动静态检测(限速值,错误帧)", description = "动静态检测监控数据表")
@Data
@Search(code = "DYNAMIC_STATIC_TEST")
@Table(name = "test_speed_result")
......
package net.vtstar.zhongtong.avi.sqlserver.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.equipment.domain.MesWorkOrderInfo;
import net.vtstar.zhongtong.avi.equipment.mapper.MesWorkOrderMapper;
import net.vtstar.zhongtong.avi.utils.PingIpUtils;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* mes工单同步数据
* @Author: xiadongwei
* @Date: 2019/11/4 18:20
*/
@Slf4j
@Component
@DisallowConcurrentExecution
public class MesWorkOrderJob extends QuartzJobBean {
@Resource(name = "mesSqlServerJdbcTemplate")
private JdbcTemplate mesSqlServerJdbcTemplate;
@Autowired
private MesWorkOrderMapper mapper;
@Value("${zt.ip.mes}")
private String ipAddress;
@Value("${zt.ip.pingtimes}")
private int pingTimes;
@Value("${zt.ip.timeout}")
private int timeOut;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){
log.error("ping: {}失败, 此次同步mes数据操作结束!", ipAddress);
return;
}
log.info("--------开始同步mes数据--------");
Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss");
StringBuilder sql = new StringBuilder();
sql.append("SELECT SaleOrderNo, PreWONo, WONo, MaterialNo, ORDER_COUNT, UNIT, " +
"WorkShopCode, MLine, StartDate, EndDate, DeliveryDate, Status, CrtDate FROM APS_PAINTING_WORKORDER " +
"WHERE WorkShopCode = 'HZ' or WorkShopCode = 'TZ'");
List<MesWorkOrderInfo> query = mesSqlServerJdbcTemplate.query(sql.toString(), (rs, rowNum) -> {
MesWorkOrderInfo map = new MesWorkOrderInfo();
map.setSalesOrderNo(rs.getString("SaleOrderNo"));
map.setMasterWorkOrderNo(rs.getString("PreWONo"));
map.setWorkOrderNo(rs.getString("WONo"));
map.setVehicleModel(rs.getString("MaterialNo"));
map.setOrderQuantity(rs.getInt("ORDER_COUNT"));
map.setUnit(rs.getString("UNIT"));
map.setWorkshop(rs.getString("WorkShopCode"));
map.setProductionLine(rs.getString("MLine"));
map.setStartDate(rs.getDate("StartDate"));
map.setEndDate(rs.getDate("EndDate"));
map.setDeliveryDate(rs.getDate("DeliveryDate"));
map.setStatus(rs.getString("Status"));
map.setCrtDate(rs.getDate("CrtDate"));
return map;
});
log.error("mes查询到数据: {} 条", query.size());
if (CollectionUtils.isEmpty(query)) {
//todo: ping通
log.error("连接mesSQL SERVER失败!");
return;
}
for (MesWorkOrderInfo info : query){
List<MesWorkOrderInfo> orderNo = mapper.findList(new WhereFilter() {{
addFilter("work_order_no", Operation.EQUAL, info.getWorkOrderNo());
}}, MesWorkOrderInfo.class);
if (CollecUtils.isEmpty(orderNo)){
mapper.insert(info);
}
}
log.info("--------同步mes数据结束--------");
}
}
......@@ -15,7 +15,7 @@ import java.util.Date;
@Data
@Search(code = "3D_LASER_CUTTING")
@ApiModel("激光切割机")
@ApiModel(value = "激光切割机", description = "激光切割机监控数据表")
@Table(name = "eqp_data_3d_laser")
public class LaserCuttingMachine extends EquipmentData {
......@@ -38,7 +38,7 @@ public class LaserCuttingMachine extends EquipmentData {
private BigDecimal gasPressure;
@Search
@Show(label = "时间",dataType = FieldType.DATETIME)
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
private Date createTime;
......
......@@ -50,7 +50,7 @@ public class PingIpUtils {
//如果出现类似=23 ms ttl=64(TTL=64 Windows)这样的字样,出现的次数=测试次数则返回真
//return connectedCount == pingTimes;
log.info("ping通设备IP :{}的次数为:" +connectedCount, ipAddress);
return connectedCount >= 2 ? true : false;
return connectedCount >= pingTimes ? true : false;
} catch (Exception ex) {
ex.printStackTrace(); //出现异常则返回假
return false;
......
......@@ -125,35 +125,35 @@ quartz.job.taskInfos[7].start=false
quartz.job.taskInfos[22].jobName=net.vtstar.zhongtong.avi.gateway.assembly.job.PlateChainStateMachineJob
quartz.job.taskInfos[22].jobGroup=PlateChainStateMachineJob
quartz.job.taskInfos[22].jobDescription=\u677f\u94feJob
quartz.job.taskInfos[22].cronExpression=0/5 * * * * ?
quartz.job.taskInfos[22].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[22].start=false
#离合油加注机
quartz.job.taskInfos[16].jobName=net.vtstar.zhongtong.avi.gateway.assembly.job.CentralizedFillingClutchMachineJob
quartz.job.taskInfos[16].jobGroup=CentralizedFillingClutchMachineJob
quartz.job.taskInfos[16].jobDescription=\u79bb\u5408\u6cb9\u52a0\u6ce8\u673aJob
quartz.job.taskInfos[16].cronExpression=0 0/15 * * * ?
quartz.job.taskInfos[16].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[16].start=false
#冷媒加注机
quartz.job.taskInfos[17].jobName=net.vtstar.zhongtong.avi.gateway.assembly.job.FocusAddingRefrigerantMachineJob
quartz.job.taskInfos[17].jobGroup=FocusAddingRefrigerantMachineJob
quartz.job.taskInfos[17].jobDescription=\u51b7\u5a92\u52a0\u6ce8\u673aJob
quartz.job.taskInfos[17].cronExpression=0/5 * * * * ?
quartz.job.taskInfos[17].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[17].start=false
#助力油加注
quartz.job.taskInfos[18].jobName=net.vtstar.zhongtong.avi.gateway.assembly.job.FocusBoosterOilMachineJob
quartz.job.taskInfos[18].jobGroup=FocusBoosterOilMachineJob
quartz.job.taskInfos[18].jobDescription=\u52a9\u529b\u6cb9\u52a0\u6ce8\u673aJob
quartz.job.taskInfos[18].cronExpression=0/5 * * * * ?
quartz.job.taskInfos[18].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[18].start=false
#地板革热熔涂胶
quartz.job.taskInfos[19].jobName=net.vtstar.zhongtong.avi.gateway.assembly.job.FloorLeatherHotMachineJob
quartz.job.taskInfos[19].jobGroup=FloorLeatherHotMachineJob
quartz.job.taskInfos[19].jobDescription=\u5730\u677f\u9694\u70ed\u7194\u8bbe\u5907Job
quartz.job.taskInfos[19].cronExpression=0/5 * * * * ?
quartz.job.taskInfos[19].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[19].start=false
#智能扭力扳手
......@@ -167,7 +167,7 @@ quartz.job.taskInfos[5].start=false
quartz.job.taskInfos[6].jobName=net.vtstar.zhongtong.avi.access.job.AssemblyNewEnergyJob
quartz.job.taskInfos[6].jobGroup=AssemblyNewEnergyJob
quartz.job.taskInfos[6].jobDescription=\u65b0\u80fd\u6e90\u68c0\u6d4b\u70b9Job
quartz.job.taskInfos[6].cronExpression=0 0/15 * * * ?
quartz.job.taskInfos[6].cronExpression=0/5 * * * * ?
quartz.job.taskInfos[6].start=false
#试交车间
......@@ -189,7 +189,7 @@ quartz.job.taskInfos[4].start=false
quartz.job.taskInfos[25].jobName=net.vtstar.zhongtong.avi.gateway.trial.job.ErrorFrameJob
quartz.job.taskInfos[25].jobGroup=ErrorFrameJob
quartz.job.taskInfos[25].jobDescription=\u9519\u8bef\u5e27Job
quartz.job.taskInfos[25].cronExpression=0/5 * * * * ?
quartz.job.taskInfos[25].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[25].start=false
#充电桩
......
......@@ -37,5 +37,5 @@ zt.ip.assemblytorquewrench=10.100.172.150
zt.ip.mes=192.168.100.226
zt.ip.pingtimes=2
zt.ip.timeout=500
\ No newline at end of file
zt.ip.pingtimes=1
zt.ip.timeout=1500
\ No newline at end of file
<?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="net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper">
</mapper>
\ No newline at end of file
<?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="net.vtstar.zhongtong.avi.gateway.painting.mapper.SprayBoothMapper">
</mapper>
\ No newline at end of file
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