Commit ccba8bc2 authored by 喻训浩's avatar 喻训浩

fix: avi数据监控接口及led屏显示实现

parent ff051557
...@@ -37,11 +37,13 @@ ...@@ -37,11 +37,13 @@
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
</dependency> </dependency>
<!-- base --> <!-- base -->
<!--<dependency>--> <!--jna-->
<!--<groupId>net.vtstar</groupId>--> <dependency>
<!--<artifactId>user-spring-boot-starter</artifactId>--> <groupId>net.java.dev.jna</groupId>
<!--<version>0.0.1-mysql-SNAPSHOT</version>--> <artifactId>jna</artifactId>
<!--</dependency>--> <version>4.1.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
......
...@@ -30,7 +30,7 @@ public class EquipmentController { ...@@ -30,7 +30,7 @@ public class EquipmentController {
@Autowired @Autowired
private EquipmentService equipmentService; private EquipmentService equipmentService;
@ApiOperation(value = "获取设备实时监控数据(分页)", notes = "各车间对应code:\r\n" + @ApiOperation(value = "获取设备监控数据(分页)", notes = "各车间对应code:\r\n" +
"制件车间: PARTS\r\n焊装车间: WELDING\r\n涂装车间: PAINTING\r\n" + "制件车间: PARTS\r\n焊装车间: WELDING\r\n涂装车间: PAINTING\r\n" +
"底盘车间: CHASSIS\r\n总装车间: ASSEMBLY\r\n试交车间: TRIAL\r\n" + "底盘车间: CHASSIS\r\n总装车间: ASSEMBLY\r\n试交车间: TRIAL\r\n" +
"") "")
......
...@@ -8,6 +8,7 @@ import net.vtstar.user.search.Search; ...@@ -8,6 +8,7 @@ import net.vtstar.user.search.Search;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.List;
/** /**
* @Author: xiadongwei * @Author: xiadongwei
...@@ -28,4 +29,6 @@ public class PaintshopArea { ...@@ -28,4 +29,6 @@ public class PaintshopArea {
@ApiModelProperty(notes = "在线数量") @ApiModelProperty(notes = "在线数量")
@Column(name = "online_num") @Column(name = "online_num")
private String onlineNum; private String onlineNum;
private List<PaintshopLane> laneList;
} }
...@@ -8,6 +8,7 @@ import net.vtstar.user.search.Search; ...@@ -8,6 +8,7 @@ import net.vtstar.user.search.Search;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.List;
/** /**
* @Author: xiadongwei * @Author: xiadongwei
...@@ -36,4 +37,6 @@ public class PaintshopLane { ...@@ -36,4 +37,6 @@ public class PaintshopLane {
@ApiModelProperty(notes = "在线数量") @ApiModelProperty(notes = "在线数量")
@Column(name = "online_num") @Column(name = "online_num")
private Integer onlineNum; private Integer onlineNum;
private List<PaintshopStation> stationList;
} }
...@@ -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.zhongtong.avi.equipment.domain.EquipInfo; import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord; import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper; import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper; import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper;
import net.vtstar.zhongtong.avi.equipment.service.RunRecordService; import net.vtstar.zhongtong.avi.equipment.service.RunRecordService;
import org.quartz.DisallowConcurrentExecution; import org.quartz.DisallowConcurrentExecution;
...@@ -47,6 +48,9 @@ public class CleanAndStatisticsJob extends QuartzJobBean { ...@@ -47,6 +48,9 @@ public class CleanAndStatisticsJob extends QuartzJobBean {
private RuntimeRecordMapper runtimeRecordMapper; private RuntimeRecordMapper runtimeRecordMapper;
@Autowired @Autowired
private BasicInfoMapper basicInfoMapper; private BasicInfoMapper basicInfoMapper;
@Autowired
private EquipmentDataMapper equipmentDataMapper;
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
...@@ -64,7 +68,8 @@ public class CleanAndStatisticsJob extends QuartzJobBean { ...@@ -64,7 +68,8 @@ public class CleanAndStatisticsJob extends QuartzJobBean {
if (CollectionUtils.isEmpty(dataList)) { if (CollectionUtils.isEmpty(dataList)) {
continue; continue;
} }
//往数据库插入设备监控数据
equipmentDataMapper.insertList(dataList);
equipDataService.updateLastStatus(dataList.get(dataList.size() - 1)); equipDataService.updateLastStatus(dataList.get(dataList.size() - 1));
String equipCode = dataList.get(0).getEquipCode(); String equipCode = dataList.get(0).getEquipCode();
......
package net.vtstar.zhongtong.avi.equipment.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
* 统计运行时间job
*/
@Slf4j
public class StatisticsTimeJob extends QuartzJobBean {
@Autowired
private EquipmentDataMapper equipmentDataMapper;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//查询今日设备所有运行状态数据
}
}
package net.vtstar.zhongtong.avi.equipment.mapper;
import net.vtstar.user.mybatis.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EquipmentDataMapper<T> extends BaseMapper<T> {
}
...@@ -3,23 +3,23 @@ package net.vtstar.zhongtong.avi.equipment.service; ...@@ -3,23 +3,23 @@ package net.vtstar.zhongtong.avi.equipment.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.domain.Dict; import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.user.mybatis.BaseMapper;
import net.vtstar.user.mybatis.provider.Operation; import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.OrderBy; import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter; import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.user.search.service.SearchService; import net.vtstar.user.search.service.SearchService;
import net.vtstar.zhongtong.avi.equipment.domain.*; import net.vtstar.zhongtong.avi.equipment.domain.*;
import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper; import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.FaultRecordMapper; import net.vtstar.zhongtong.avi.equipment.mapper.FaultRecordMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper; import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper;
import net.vtstar.zhongtong.avi.stamping.domain.LaserCuttingMachine;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -42,6 +42,9 @@ public class RunRecordService { ...@@ -42,6 +42,9 @@ public class RunRecordService {
@Autowired @Autowired
private BasicInfoMapper basicInfoMapper; private BasicInfoMapper basicInfoMapper;
@Autowired
private EquipmentDataMapper equipmentData;
/** /**
* 分页查询运行时间 * 分页查询运行时间
*/ */
...@@ -84,7 +87,17 @@ public class RunRecordService { ...@@ -84,7 +87,17 @@ public class RunRecordService {
} }
public void test() { public void test() {
EquipmentData laser = new LaserCuttingMachine();
((LaserCuttingMachine) laser).setCuttingSpeed(new BigDecimal(500));
RuntimeRecord runtimeRecord = new RuntimeRecord(); RuntimeRecord runtimeRecord = new RuntimeRecord();
runtimeRecord.setWorkshopCode("23232"); runtimeRecord.setWorkshopCode("23232");
equipmentData.insert(runtimeRecord);
}
public static void main(String[] args) {
} }
} }
package net.vtstar.zhongtong.avi.ledlamp.service;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class LedService {
public interface test extends Library {
test INSTANCE = (test) Native.loadLibrary((Platform.isWindows() ? "dll//lv_led" : "c"), test.class);
int CreateProgram(int LedWidth, int LedHeight, int ColorType);
}
public static void main(String[] args) {
try {
test.INSTANCE.CreateProgram(128, 32, 1);
} catch (Exception e) {
System.out.println(String.format(e.getMessage(), "utf-8"));
}
}
}
package net.vtstar.zhongtong.avi.ledlamp.test;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.util.CellRangeAddress;
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;
public class ExcelTest {
public static void test(String path) throws Exception {
int sheetNum = 0;//读取表格第几页
int imageWidth = 200;//图片宽度
int imageHeight = 200;//图片高度
// int nullRowCount = 0;
InputStream inputStream = new FileInputStream(path);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(sheetNum);
List<List<String>> excelList = readXlsx(path, sheetNum);
List<CellRangeAddress> rangeAddress = sheet.getMergedRegions(); // 获取整个sheet中合并单元格组合的集合
//根据读取数据,动态获得表边界行列
int totalRow = excelList.size() + 1;
int totalCol = excelList.get(0).size();
//创建单元格数组,用于遍历单元格
UserCell[][] cells = new UserCell[totalRow + 1][totalCol + 1];
int[] rowPixPos = new int[totalRow + 1];// 存放行边界
rowPixPos[0] = 0;
int[] colPixPos = new int[totalCol + 1];// 存放列边界
colPixPos[0] = 0;
//开始遍历单元格
for (int i = 0; i < totalRow; i++) {
for (int j = 1; j < totalCol; j++) {
cells[i][j] = new UserCell();
cells[i][j].setCell(sheet.getRow(i).getCell(j));
cells[i][j].setRow(i);
cells[i][j].setCol(j);
boolean ifShow = !(sheet.isColumnHidden(j) || sheet.getRow(i).getZeroHeight());
cells[i][j].setShow(ifShow);
// 计算所求区域宽度
float widthPix = !ifShow ? 0 : (sheet.getColumnWidthInPixels(j)); // 如果该单元格是隐藏的,则置宽度为0
if (i == 0) {
imageWidth += widthPix;
}
colPixPos[j + 1] = (int) (widthPix * 1.15 + colPixPos[j]);
}
// 计算所求区域高度
boolean ifShow = (i >= 0); // 行序列在指定区域中间
ifShow = ifShow && !sheet.getRow(i).getZeroHeight(); // 行序列不能隐藏
float heightPoint = !ifShow ? 0 : (sheet.getRow(i).getHeightInPoints()); // 如果该单元格是隐藏的,则置高度为0
imageHeight += heightPoint;
rowPixPos[i + 1] = (int) (heightPoint * 96 / 72) + rowPixPos[i];
}
imageHeight = imageHeight * 96 / 72;
imageWidth = imageWidth * 115 / 100;
/* ------------------------------ */
List<Grid> grids = new ArrayList<Grid>();
for (int i = 0; i < totalRow; i++) {
for (int j = 1; j < totalCol; j++) {
Grid grid = new Grid();
// 设置坐标和宽高
grid.setX(colPixPos[j]);
grid.setY(rowPixPos[i]);
grid.setWidth(colPixPos[j + 1] - colPixPos[j]);
grid.setHeight(rowPixPos[i + 1] - rowPixPos[i]);
grid.setRow(cells[i][j].getRow());
grid.setCol(cells[i][j].getCol());
grid.setShow(cells[i][j].isShow());
// 判断是否为合并单元格
int[] isInMergedStatus = isInMerged(grid.getRow(), grid.getCol(), rangeAddress);
if (isInMergedStatus[0] == 0 && isInMergedStatus[1] == 0) {
// 此单元格是合并单元格,并且不是第一个单元格,需要跳过本次循环,不进行绘制
continue;
} else if (isInMergedStatus[0] != -1 && isInMergedStatus[1] != -1) {
// 此单元格是合并单元格,并且属于第一个单元格,则需要调整网格大小
int lastRowPos = isInMergedStatus[0] > totalRow - 1 ? totalRow - 1 : isInMergedStatus[0];
int lastColPos = isInMergedStatus[1] > totalCol - 1 ? totalCol - 1 : isInMergedStatus[1];
grid.setWidth(colPixPos[lastColPos + 1] - colPixPos[j]);
grid.setHeight(rowPixPos[lastRowPos + 1] - rowPixPos[i]);
}
// 单元格背景颜色
Cell cell = cells[i][j].getCell();
if (cell != null) {
CellStyle cs = cell.getCellStyle();
grid.setBgColor(cs.getFillForegroundColorColor());
// 设置字体
org.apache.poi.ss.usermodel.Font font = workbook.getFontAt(cs.getFontIndex());
grid.setFont(font);
// 设置前景色
grid.setFtColor(cs.getFillBackgroundColorColor());
// 设置文本
String strCell;
CellType cellType = cell.getCellTypeEnum();
switch (cellType) {
case STRING:
strCell = cell.getStringCellValue();
break;
case NUMERIC:
strCell = String.valueOf(cell.getNumericCellValue());
break;
case BLANK:
strCell = "";
break;
case FORMULA:
try {
strCell = String.valueOf(cell.getNumericCellValue());
} catch (IllegalStateException e) {
strCell = String.valueOf(cell.getRichStringCellValue());
}
break;
default:
strCell = "";
break;
}
if (cell.getCellStyle().getDataFormatString().contains("0.00%")) {
try {
double dbCell = Double.valueOf(strCell);
strCell = new DecimalFormat("0.00").format(dbCell * 100) + "%";
} catch (NumberFormatException e) {
}
}
grid.setText(strCell.matches("\\w*\\.0") ? strCell.substring(0, strCell.length() - 2) : strCell);
}
grids.add(grid);
}
}
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.white);
g2d.fillRect(0, 0, imageWidth, imageHeight);
// 平滑字体
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST, 140);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
// 绘制表格
for (Grid g : grids) {
if (!g.isShow()) {
continue;
}
// 绘制背景色
g2d.setColor(g.getBgColor() == null ? Color.white : g.getBgColor());
g2d.fillRect(g.getX(), g.getY(), g.getWidth(), g.getHeight());
// 绘制边框
g2d.setColor(Color.black);
g2d.setStroke(new BasicStroke(1));
g2d.drawRect(g.getX(), g.getY(), g.getWidth(), g.getHeight());
// 绘制文字,居中显示
g2d.setColor(g.getFtColor());
Font font = g.getFont();
if (font == null) {
continue;
}
FontMetrics fm = g2d.getFontMetrics(font);
int strWidth = fm.stringWidth(g.getText());// 获取将要绘制的文字宽度
g2d.setFont(font);
g2d.drawString(g.getText(), g.getX() + (g.getWidth() - strWidth) / 2,
g.getY() + (g.getHeight() - font.getSize()) / 2 + font.getSize());
}
//表格最后一行有可能不显示,手动画上一行
g2d.drawLine(0, imageHeight - 1, imageWidth - 4, imageHeight - 1);
g2d.dispose();
ImageIO.write(image, "png", new File("d:/test.png"));
System.out.println("Output to PNG file Success!");
}
/**
* 判断Excel中的单元格是否为合并单元格
*
* @param row
* @param col
* @param rangeAddress
* @return 如果不是合并单元格返回{-1,-1},如果是合并单元格并且是一个单元格返回{lastRow,lastCol},
* 如果是合并单元格并且不是第一个格子返回{0,0}
*/
private static int[] isInMerged(int row, int col, List<CellRangeAddress> rangeAddress) {
int[] isInMergedStatus = { -1, -1 };
for (CellRangeAddress cra : rangeAddress) {
if (row == cra.getFirstRow() && col == cra.getFirstColumn()) {
isInMergedStatus[0] = cra.getLastRow();
isInMergedStatus[1] = cra.getLastColumn();
return isInMergedStatus;
}
if (row >= cra.getFirstRow() && row <= cra.getLastRow()) {
if (col >= cra.getFirstColumn() && col <= cra.getLastColumn()) {
isInMergedStatus[0] = 0;
isInMergedStatus[1] = 0;
return isInMergedStatus;
}
}
}
return isInMergedStatus;
}
public static List<List<String>> readXlsx(String path, int pageNum) throws Exception {
InputStream in = new FileInputStream(path);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(in);
List<List<String>> resultList = new ArrayList<List<String>>();
// 遍历每一页,并循环处理当前页
// for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets();
// numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(pageNum);// 获取当前页
if (xssfSheet == null) {
// continue;
} else {
// 处理当前页,并处理每一行
for (int rowNum = 0; rowNum < xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);// 获取行数据
int minColIX = xssfRow.getFirstCellNum();// 第一行数据
int maxColIX = xssfRow.getLastCellNum();// 总行数
List<String> rowList = new ArrayList<String>();
// 遍历该行,处理该行数据
for (int colIX = minColIX; colIX < maxColIX; colIX++) {
XSSFCell cell = xssfRow.getCell(colIX);// 获取单元格
if (cell == null) {
continue;
} else {
rowList.add(cell.toString());
}
}
resultList.add(rowList);
}
}
// }
return resultList;
}
/**
* 读取xls文件
*
* @param path
* @return
* @throws Exception
*/
public static List<List<String>> readXls(String path, int num) throws Exception {
InputStream in = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(in);
List<List<String>> resultList = new ArrayList<List<String>>();
// 遍历每一页,并循环处理当前页
// for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets();
// numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(num);// 获取当前页
if (hssfSheet == null) {
// continue;
} else {
// 处理当前页,并处理每一行
for (int rowNum = 0; rowNum < hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);// 获取行数据
int minColIX = hssfRow.getFirstCellNum();// 第一行数据
int maxColIX = hssfRow.getLastCellNum();// 总行数
List<String> rowList = new ArrayList<String>();
// 遍历该行,处理该行数据
for (int colIX = minColIX; colIX < maxColIX; colIX++) {
HSSFCell cell = hssfRow.getCell(colIX);// 获取单元格
if (cell == null) {
continue;
} else {
rowList.add(cell.toString());
}
}
resultList.add(rowList);
}
}
// }
return resultList;
}
public static void main(String[] args) throws Exception {
String path = "D:/data.xlsx";
test(path);
}
}
\ No newline at end of file
package net.vtstar.zhongtong.avi.ledlamp.test;
import java.awt.Color;
import java.awt.Font;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.xssf.usermodel.XSSFColor;
public class Grid {
private boolean show;
private int row; // 对应Excel中的row,也可以理解为cells[i][j]的i
private int col; // 对应Excel中的col,也可以理解为cells[i][j]的j
private int x; // x坐标
private int y; // y坐标
private int width;
private int height;
private String text;
private Font font;
//= new Font("微软雅黑", Font.PLAIN, 12);
private Color bgColor = null;
private Color ftColor = null;
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getCol() {
return col;
}
public void setCol(int col) {
this.col = col;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
this.show = show;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Color getBgColor() {
return bgColor;
}
/**
* 将poi.ss.usermodel.Color 转换成 java.awt.Color
* <a href="http://home.cnblogs.com/u/309701/" target="_blank">@param</a>
* color
*/
public void setBgColor(org.apache.poi.ss.usermodel.Color color) {
this.bgColor = poiColor2awtColor(color);
}
public void setBgColor(java.awt.Color color) {
this.bgColor = color;
}
public Color getFtColor() {
return ftColor;
}
public void setFtColor(org.apache.poi.ss.usermodel.Color color) {
this.ftColor = poiColor2awtColor(color);
}
public Font getFont() {
return font;
}
public void setFont(org.apache.poi.ss.usermodel.Font font) {
if (font != null) {
this.font = new java.awt.Font(font.getFontName(), Font.BOLD, font.getFontHeight() / 20 + 2);
}
}
private java.awt.Color poiColor2awtColor(org.apache.poi.ss.usermodel.Color color) {
Color awtColor = null;
if (color instanceof XSSFColor) { // .xlsx
XSSFColor xc = (XSSFColor) color;
String rgbHex = xc.getARGBHex();
if (rgbHex != null) {
awtColor = new Color(Integer.parseInt(rgbHex.substring(2), 16));
}
} else if (color instanceof HSSFColor) { // .xls
HSSFColor hc = (HSSFColor) color;
short[] s = hc.getTriplet();
if (s != null) {
awtColor = new Color(s[0], s[1], s[2]);
}
}
return awtColor;
}
}
\ No newline at end of file
package net.vtstar.zhongtong.avi.ledlamp.test;
public class Test {
private static String ip = "192.168.1.3";
public static void main(String[] args) {
// System.out.println(led.SetBasicInfo(ip, 1, 96, 64));//set LED screen high and width and color
//
// System.out.println(led.AdjustTime(ip));//adjust time
//
// System.out.println(led.SetBrightness(ip, 5));//set brightness
//
//
int hProgram;
hProgram = led.CreateProgram(128, 32, 2);
System.out.println("句柄 =" + hProgram);
int i = led.AddProgram(hProgram, 1, 100, 100);
System.out.println(i);
int i1 = led.AddImageTextArea(hProgram, 1, 1, 0, 0, 128, 32, 0);
//led.AddImageTextArea(hProgram, 1, 1, 0, 0, 128, 32, 0);
// int tahoma = led.AddDigitalClockArea(hProgram, 1, 1, 0, 0, 128, 32, "Tahoma", 5, 0xff00, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0xff, 0, 0xff, 0, 0xff);
// System.out.println(tahoma);
//
// led.AddFileToImageTextArea(hProgram, 1, 2, "D://1.png", 0, 0, 100);
// System.out.println(i1);
// int i2 = led.AddMultiLineTextToImageTextArea(hProgram, 1, 1, 0, "速度 气压\r\n2.2KM/h ", "Tahoma", 5, 0xff00, 0, 0, 0, 0, 1, 2, 2, 1);
// System.out.println(i2);
// led.AddFileToImageTextArea(hProgram, 1, 1, "your file full path", 1, 4, 2);
// led.AddProgram(hProgram, 2, 0, 1);
// led.AddImageTextArea(hProgram, 2, 1, 0, 0, 64, 16, 1);
// led.AddSinglelineTextToImageTextArea(hProgram, 2, 1, 0, "welcome to listen vision", "Tahoma", 12, 0xff, 0, 0, 0, 6, 4, 1);
//
// led.AddDigitalClockArea(hProgram, 2, 2, 0, 16, 64, 16, "Tahoma", 9, 0xff, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0xff, 0, 0xff, 2, 0xff);
System.out.println(led.NetWorkSend(ip, hProgram));
led.DeleteProgram(hProgram);
}
}
package net.vtstar.zhongtong.avi.ledlamp.test;
import java.awt.Color;
import org.apache.poi.ss.usermodel.Cell;
public class UserCell {
private Cell cell;
private int row;
private int col;
private boolean show;
private String text="";
private Color color=null;
public Cell getCell() {
return cell;
}
public void setCell(Cell cell) {
this.cell = cell;
}
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getCol() {
return col;
}
public void setCol(int col) {
this.col = col;
}
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
this.show = show;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
package net.vtstar.zhongtong.avi.ledlamp.test;
public class led {
/*
*****************************************************************************************************************
* LED SDK 6.0
*
* 胡伟(HuWei)
*
*
* (C) Copyright 2010 - 2015, LISTEN VISION
* All Rights Reserved
*
*****************************************************************************************************************
*/
/********************************************************************************************
* CreateProgram 创建节目对象,成功返回节目对象句柄
*
* 参数说明
* LedWidth 屏的宽度
* LedHeight 屏的高度
* ColorType 屏的颜色 1.单色 2.双基色 3.七彩 4.全彩
* 返回值
* 0 创建节目对象失败
* 非0 创建节目对象成功
********************************************************************************************/
public native static int CreateProgram(int LedWidth,int LedHeight,int ColorType);
/*********************************************************************************************
* AddProgram 添加一个节目
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* ProgramTime 节目播放时长 0.节目播放时长 非0.指定播放时长
* LoopCount 循环播放次数
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddProgram(int hProgram,int ProgramNo,int ProgramTime,int LoopCount);
/*********************************************************************************************
* LV_AddImageTextArea 添加一个图文区域
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* AreaNo 区域号
* l 区域左上角横坐标
* t 区域左上角纵坐标
* w 区域宽度
* h 区域高度
* IsBackgroundArea 是否为背景区域,0.前景区(默认) 1.背景区
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddImageTextArea(int hProgram,int ProgramNo,int AreaNo,int l,int t,int w,int h,int IsForegroundArea);
/*********************************************************************************************
* AddFileToImageTextArea 添加一个文件到图文区
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* AreaNo 区域号
* FilePath 文件路径,支持的文件类型有 txt rtf bmp gif png jpg jpeg tiff
* InStyle 入场特技
* nSpeed 特技速度
* DelayTime 停留时间
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddFileToImageTextArea(int hProgram, int ProgramNo, int AreaNo, String FilePath, int InStyle, int nSpeed, int DelayTime);
/*********************************************************************************************
* AddMultiLineTextToImageTextArea 添加一个多行文本到图文区
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* AreaNo 区域号
* AddType 添加的类型 0.为字符串 1.文件(只支持txt和rtf文件)
* AddStr AddType为0则为字符串数据,AddType为1则为文件路径
* FontName 字体名
* FontSize 字体大小
* FontColor 字体颜色 0xff 红色 0xff00 绿色 0xffff黄色
* FontBold 是否加粗 0不加粗 1加粗
* FontItalic 是否是斜体 0 不斜 1斜
* FontUnderline 是否下划线 0不加下划线 1加下划线
* InStyle 入场特技
* nSpeed 特技速度
* DelayTime 停留时间
* nAlignment 左右居中对齐方式
* IsVCenter 是否垂直居中
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddMultiLineTextToImageTextArea(int hProgram, int ProgramNo, int AreaNo, int AddType, String AddStr, String FontName, int FontSize, int FontColor, int FontBold, int FontItalic, int FontUnderline, int InStyle, int nSpeed, int DelayTime, int nAlignment, int IsVCenter);
/*********************************************************************************************
* AddStaticTextToImageTextArea 添加一个静止文本到图文区
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* AreaNo 区域号
* AddType 添加的类型 0.为字符串 1.文件(只支持txt和rtf文件)
* AddStr AddType为0则为字符串数据,AddType为1则为文件路径
* FontName 字体名
* FontSize 字体大小
* FontColor 字体颜色 0xff 红色 0xff00 绿色 0xffff黄色
* FontBold 是否加粗 0不加粗 1加粗
* FontItalic 是否是斜体 0 不斜 1斜
* FontUnderline 是否下划线 0不加下划线 1加下划线
* DelayTime 停留时间
* nAlignment 左右居中对齐方式
* IsVCenter 是否垂直居中
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddStaticTextToImageTextArea(int hProgram, int ProgramNo, int AreaNo, int AddType, String AddStr, String FontName, int FontSize, int FontColor, int FontBold, int FontItalic, int FontUnderline, int DelayTime, int nAlignment, int IsVCenter);
/*********************************************************************************************
* AddSinglelineTextToImageTextArea 添加一个多行文本到图文区
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* AreaNo 区域号
* AddType 添加的类型 0.为字符串 1.文件(只支持txt和rtf文件)
* AddStr AddType为0则为字符串数据,AddType为1则为文件路径
* FontName 字体名
* FontSize 字体大小
* FontColor 字体颜色 0xff 红色 0xff00 绿色 0xffff黄色
* FontBold 是否加粗 0不加粗 1加粗
* FontItalic 是否是斜体 0 不斜 1斜
* FontUnderline 是否下划线 0不加下划线 1加下划线
* InStyle 入场特技
* nSpeed 特技速度
* DelayTime 停留时间
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddSinglelineTextToImageTextArea(int hProgram, int ProgramNo, int AreaNo, int AddType, String AddStr, String FontName, int FontSize, int FontColor, int FontBold, int FontItalic, int FontUnderline, int InStyle, int nSpeed, int DelayTime);
/*********************************************************************************************
* AddSinglelineTextToImageTextArea 添加一个多行文本到图文区
*
* 参数说明
* hProgram 节目对象句柄
* ProgramNo 节目号
* AreaNo 区域号
* l 区域左上角横坐标
* t 区域左上角纵坐标
* w 区域宽度
* h 区域高度
* FontName 字体名
* FontSize 字体大小
* FontColor 字体颜色 0xff 红色 0xff00 绿色 0xffff黄色
* FontBold 是否加粗 0不加粗 1加粗
* FontItalic 是否是斜体 0 不斜 1斜
* FontUnderline 是否下划线 0不加下划线 1加下划线
* IsYear 是否显示年 1为显示 0不显示 下同
* IsWeek 是否显示星期
* IsMonth 是否显示月
* IsDay 是否显示日
* IsHour 是否显示时
* IsMinute 是否显示分
* IsSecond 是否显示秒
* DateFormat 日期格式 0.YYYY年MM月DD日 1.YY年MM月DD日 2.MM/DD/YYYY 3.YYYY/MM/DD 4.YYYY-MM-DD 5.YYYY.MM.DD 6.MM.DD.YYYY 7.DD.MM.YYYY
* DateColor 日期字体颜色0xff 红色 0xff00 绿色 0xffff黄色
* WeekFormat 星期格式 0.星期X 1.Monday 2.Mon.
* WeekColor 星期字体颜色0xff 红色 0xff00 绿色 0xffff黄色
* TimeFormat 时间格式 0.HH时mm分ss秒 1.HH時mm分ss秒 2.HH:mm:ss 3.上午 HH:mm:ss 4.AM HH:mm:ss 5.HH:mm:ss 上午 6.HH:mm:ss AM
* TimeColor 时间字体颜色0xff 红色 0xff00 绿色 0xffff黄色
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AddDigitalClockArea(int hProgram, int ProgramNo, int AreaNo, int l, int t, int w, int h, String FontName, int FontSize, int FontColor, int FontBold, int FontItalic, int FontUnderline, int IsYear, int IsWeek, int IsMonth, int IsDay, int IsHour, int IsMinute, int IsSecond, int DateFormat, int DateColor, int WeekFormat, int WeekColor, int TimeFormat, int TimeColor);
/*********************************************************************************************
* DeleteProgram 销毁节目对象(注意:如果此节目对象不再使用,请调用此函数销毁,否则会造成内存泄露)
*
* 参数说明
* hProgram 节目对象句柄
********************************************************************************************/
public native static void DeleteProgram(int hProgram);
/*********************************************************************************************
* NetWorkSend 发送节目,此发送为一对一发送
*
* 参数说明
* IpStr LED屏IP
* hProgram 节目对象句柄
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int NetWorkSend(String IpStr, int hProgram);
/*********************************************************************************************
* SetBasicInfo 设置基本屏参
*
* 参数说明
* IpStr LED屏的IP
* ColorType 屏的颜色 1.单色 2.双基色 3.七彩 4.全彩
* LedWidth 屏的宽度点数
* LedHeight 屏的高度点数
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int SetBasicInfo(String IpStr, int ColorType, int LedWidth, int LedHeight);
/*********************************************************************************************
* SetOEDA 设置OE DA
*
* 参数说明
* IpStr LED屏的IP
* Oe OE 0.低有效 1.高有效
* Da DA 0.负极性 1.正极性
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int SetOEDA(String IpStr, int Oe, int Da);
/*********************************************************************************************
* AdjustTime 校时
*
* 参数说明
* IpStr LED屏的IP
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int AdjustTime(String IpStr);
/*********************************************************************************************
* PowerOnOff 开关屏
*
* 参数说明
* IpStr LED屏的IP
* OnOff 开关值 0.关屏 1.开屏
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int PowerOnOff(String IpStr, int OnOff);
/*********************************************************************************************
* TimePowerOnOff 定时开关屏
*
* 参数说明
* IpStr LED屏的IP
* StartHour 起始小时
* StartMinute 起始分钟
* EndHour 结束小时
* EndMinute 结束分钟
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int TimePowerOnOff(String IpStr, int StartHour, int StartMinute, int EndHour, int EndMinute);
/*********************************************************************************************
* SetBrightness 设置亮度
*
* 参数说明
* IpStr LED屏的IP
* BrightnessValue 亮度值 0~15
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int SetBrightness(String IpStr, int BrightnessValue);
/*********************************************************************************************
* LedTest LED测试
*
* 参数说明
* IpStr LED屏的IP
* TestValue 测试值
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int LedTest(String IpStr, int TestValue);
/*********************************************************************************************
* SetLedCommunicationParameter 设置LED屏的网络信息
*
* 参数说明
* IpStr LED屏的IP
* NewIp LED屏的新IP
* NewNetMask LED屏的新子网掩码
* NewGateway LED屏的新网关
* NewMac LED屏的新mac地址
* 返回值
* 0 成功
* 非0 失败
********************************************************************************************/
public native static int SetLedCommunicationParameter(String IpStr, String NewIp, String NewNetMask, String NewGateway, String NewMac);
static
{
System.loadLibrary("lv_led");
}
}
package net.vtstar.zhongtong.avi.monitoring.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.utils.domain.Return;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopArea;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.monitoring.domain.Bus;
import net.vtstar.zhongtong.avi.monitoring.domain.vo.CarStatisticsVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@Api(description = "avi区域实时监控模块相关")
@RestController
@RequestMapping("/area")
public class AreaController {
@ApiOperation(value = "根据区域编号查询区域实时信息", response = PaintshopArea.class, responseContainer = "List")
@GetMapping("/areaInfo/realTime")
private Return getAreaInfo(@RequestParam(value = "areaNo") String areaNo) {
return Return.success();
}
@ApiOperation(value = "查询车间各区域进车及交车数量", response = CarStatisticsVO.class, responseContainer = "List")
@GetMapping("/bus/statistics")
private Return getRealtimeData() {
return Return.success();
}
@ApiOperation(value = "根据工单号及车身号定位车体当前位置", response = PaintshopStation.class, responseContainer = "List")
@GetMapping("/currentPosition/orderNo/busNo")
private Return getPositionByOrderAndNo(@RequestParam("orderNo") String orderNo, @RequestParam("busNo") String busNo) {
return Return.success();
}
@ApiOperation(value = "根据工单号及车身号定位车体当前位置", response = Bus.class)
@GetMapping("/detail/busNo")
private Return getBusDetail(@RequestParam("busNo") String busNo) {
return Return.success();
}
}
package net.vtstar.zhongtong.avi.monitoring.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Data
@Slf4j
@ApiModel(value = "车体信息")
public class Bus {
private Long id;
@ApiModelProperty(value = "车身号")
private String code;
@ApiModelProperty(value = "工单号")
private String orderNo;
}
package net.vtstar.zhongtong.avi.monitoring.domain.enums;
public enum BusType {
/**
* 进车
*/
IN,
/**
* 出车
*/
OUT,
}
package net.vtstar.zhongtong.avi.monitoring.domain.enums;
import io.swagger.annotations.ApiModel;
@ApiModel("时间类型")
public enum DateType {
/**
* 今天
*/
TODAY,
/**
* 昨天
*/
YESTERDAY;
}
package net.vtstar.zhongtong.avi.monitoring.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.BusType;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.DateType;
import java.math.BigDecimal;
@Data
@ApiModel("车辆交进车数量统计VO")
public class CarStatisticsVO {
private Long id;
@ApiModelProperty(value = "区域名")
private String areaName;
@ApiModelProperty("日期类型:TODAY(今日),YESTERDAY(昨日)")
private DateType dateType;
@ApiModelProperty(value = "进出车类型:IN(进车) OUT(出车)")
private BusType busType;
@ApiModelProperty(value = "数量")
private BigDecimal size;
}
...@@ -8,32 +8,39 @@ import net.vtstar.user.search.Search; ...@@ -8,32 +8,39 @@ import net.vtstar.user.search.Search;
import net.vtstar.zhongtong.avi.global.web.Show; import net.vtstar.zhongtong.avi.global.web.Show;
import net.vtstar.zhongtong.avi.global.web.domain.enums.FieldType; import net.vtstar.zhongtong.avi.global.web.domain.enums.FieldType;
import javax.persistence.Column;
import javax.persistence.Table;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@Data @Data
@Search(code = "3D_LASER_CUTTING") @Search(code = "3D_LASER_CUTTING")
@ApiModel("激光切割机") @ApiModel("激光切割机")
@Table(name = "eqp_data_3d_laser")
public class LaserCuttingMachine extends EquipmentData { public class LaserCuttingMachine extends EquipmentData {
@Search @Search
@Show(label = "切割速率",sortable = true) @Show(label = "切割速率",sortable = true)
@ApiModelProperty("切割速率") @ApiModelProperty("切割速率")
@Column(name = "cutting_speed")
private BigDecimal cuttingSpeed; private BigDecimal cuttingSpeed;
@Search @Search
@Show(label = "激光器功率") @Show(label = "激光器功率")
@ApiModelProperty("激光器功率") @ApiModelProperty("激光器功率")
@Column(name = "laser_power")
private BigDecimal laserPower; private BigDecimal laserPower;
@Search @Search
@Show(label = "气体压力") @Show(label = "气体压力")
@ApiModelProperty("气体压力") @ApiModelProperty("气体压力")
@Column(name = "gas_pressure")
private BigDecimal gasPressure; private BigDecimal gasPressure;
@Search @Search
@Show(label = "时间",dataType = FieldType.DATETIME) @Show(label = "时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间") @ApiModelProperty("时间")
@Column(name = "create_time")
private Date createTime; private Date createTime;
private Integer state; private Integer state;
......
...@@ -17,6 +17,6 @@ sqlserver.username=sa ...@@ -17,6 +17,6 @@ sqlserver.username=sa
sqlserver.password=!QAZ0okm sqlserver.password=!QAZ0okm
# redis # redis
spring.redis.host=10.100.172.102 spring.redis.host=10.100.172.14
spring.redis.port=6379 spring.redis.port=6379
spring.redis.password= spring.redis.password=
\ No newline at end of file
...@@ -29,7 +29,8 @@ quartz.job.taskInfos[0].start=false ...@@ -29,7 +29,8 @@ quartz.job.taskInfos[0].start=false
quartz.job.taskInfos[1].jobName=net.vtstar.zhongtong.avi.equipment.job.CleanAndStatisticsJob quartz.job.taskInfos[1].jobName=net.vtstar.zhongtong.avi.equipment.job.CleanAndStatisticsJob
quartz.job.taskInfos[1].jobGroup=CleanAndStatisticsJob quartz.job.taskInfos[1].jobGroup=CleanAndStatisticsJob
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/1 * * * ?
quartz.job.taskInfos[1].start=false quartz.job.taskInfos[1].start=false
#quartz.job.taskInfos[2].jobName=net.vtstar.scada.base.equipmgt.job.CleanEquipStatusJob #quartz.job.taskInfos[2].jobName=net.vtstar.scada.base.equipmgt.job.CleanEquipStatusJob
......
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