LED屏显示调整

dev_xd
lj7788 2026-03-21 20:29:43 +08:00
parent df917bbe01
commit 3dbbca0291
10 changed files with 182 additions and 117 deletions

View File

@ -21,6 +21,14 @@ public interface DevTowerProjectConfigMapper
*/ */
public DevTowerProjectConfig selectDevTowerProjectConfigById(Long id); public DevTowerProjectConfig selectDevTowerProjectConfigById(Long id);
/**
* ID
*
* @param deviceId ID
* @return
*/
public DevTowerProjectConfig selectDevTowerProjectConfigByDeviceId(Long deviceId);
/** /**
* *
* *

View File

@ -97,6 +97,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where dtpc.id = #{id} and dtpc.is_del=0 where dtpc.id = #{id} and dtpc.is_del=0
</select> </select>
<select id="selectDevTowerProjectConfigByDeviceId" parameterType="Long" resultMap="DevTowerProjectConfigResult">
<include refid="selectDevTowerProjectConfigVo"/>
where dtpc.id = #{deviceId} and dtpc.is_del=0
</select>
<insert id="insertDevTowerProjectConfig" parameterType="DevTowerProjectConfig" useGeneratedKeys="true" keyProperty="id"> <insert id="insertDevTowerProjectConfig" parameterType="DevTowerProjectConfig" useGeneratedKeys="true" keyProperty="id">
insert into dev_tower_project_config insert into dev_tower_project_config
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">

View File

@ -61,9 +61,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="latitude != null "> and pma.latitude = #{latitude}</if> <if test="latitude != null "> and pma.latitude = #{latitude}</if>
<if test="attDate != null "> and pma.att_date = #{attDate}</if> <if test="attDate != null "> and pma.att_date = #{attDate}</if>
<if test="attImg != null and attImg != ''"> and pma.att_img = #{attImg}</if> <if test="attImg != null and attImg != ''"> and pma.att_img = #{attImg}</if>
<if test="isDel != null "> and pma.is_del = #{isDel}</if> <if test="isDel != null "> and pma.work_area_id = #{isDel}</if>
<if test="state != null "> and pma.state = #{state}</if> <if test="state != null "> and pma.state = #{state}</if>
<if test="workAreaId != null "> and wa.work_area_id = #{workAreaId}</if> <if test="workAreaId != null "> and pma.is_del = #{workAreaId}</if>
<if test="userName!=null and userName!=''"> and psu.user_name like concat('%', #{userName}, '%')</if> <if test="userName!=null and userName!=''"> and psu.user_name like concat('%', #{userName}, '%')</if>
<if test="userPhone!=null and userPhone!=''"> and psu.user_phone like concat('%', #{userPhone}, '%')</if> <if test="userPhone!=null and userPhone!=''"> and psu.user_phone like concat('%', #{userPhone}, '%')</if>
<if test="startDate!=null"> and date(pma.att_date) &gt;= date(#{startDate})</if> <if test="startDate!=null"> and date(pma.att_date) &gt;= date(#{startDate})</if>
@ -88,7 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) psu ON pma.user_id = psu.user_id ) psu ON pma.user_id = psu.user_id
left join sys_dict_data dic1 on psu.`craft_type`=dic1.`dict_value` and dic1.`dict_type`='pro_craft_type' left join sys_dict_data dic1 on psu.`craft_type`=dic1.`dict_value` and dic1.`dict_type`='pro_craft_type'
left join sys_dict_data dic2 on psu.`craft_post`=dic2.`dict_value` and dic2.`dict_type`='pro_craft_post' left join sys_dict_data dic2 on psu.`craft_post`=dic2.`dict_value` and dic2.`dict_type`='pro_craft_post'
WHERE pma.is_del = 0 AND pma.in_out = 'in' AND pma.work_area_id = #{workAreaId} and pma.project_id = #{projectId} WHERE pma.work_area_id = 0 AND pma.in_out = 'in' AND pma.is_del = #{workAreaId} and pma.project_id = #{projectId}
AND DATE(pma.att_date) = CURDATE() AND DATE(pma.att_date) = CURDATE()
) ranked_data ) ranked_data
WHERE rn = 1 WHERE rn = 1

View File

@ -105,10 +105,13 @@ public class LedDrawService {
programFile.addArea(area); programFile.addArea(area);
// 添加图片页 // 添加图片页
if (imagePaths != null && imagePaths.length > 0) { if (imagePaths != null && imagePaths.length > 0) {
logger.info("图片数量2={},sn={}x:0,y:17,w:{},h:{}",imagePaths.length,ledScreen.getDeviceSn(),ledScreen.getWidth().intValue(),
ledScreen.getHeight().intValue()-32);
area = new TextCaptionBxArea(0, 17, ledScreen.getWidth().intValue(), area = new TextCaptionBxArea(0, 17, ledScreen.getWidth().intValue(),
ledScreen.getHeight().intValue()-16, profile); ledScreen.getHeight().intValue()-32, profile);
for (String imagePath : imagePaths) { for (String imagePath : imagePaths) {
ImageFileBxPage imagePage = new ImageFileBxPage(imagePath); ImageFileBxPage imagePage = new ImageFileBxPage(imagePath);
logger.info("图片路径:{}", imagePath);
area.addPage(imagePage); area.addPage(imagePage);
} }
programFile.addArea(area); programFile.addArea(area);
@ -118,7 +121,7 @@ public class LedDrawService {
onbon.bx06.area.DateTimeBxArea timeBxArea = new onbon.bx06.area.DateTimeBxArea(0, ledScreen.getHeight().intValue()-16, ledScreen.getWidth().intValue(), 16, profile); onbon.bx06.area.DateTimeBxArea timeBxArea = new onbon.bx06.area.DateTimeBxArea(0, ledScreen.getHeight().intValue()-16, ledScreen.getWidth().intValue(), 16, profile);
timeBxArea.setMultiline(false); timeBxArea.setMultiline(false);
timeBxArea.setDateStyle(DateStyle.YYYY_MM_DD_3); timeBxArea.setDateStyle(DateStyle.YYYY_MM_DD_3);
timeBxArea.setTimeStyle(TimeStyle.HH12_MM_SS_1); timeBxArea.setTimeStyle(TimeStyle.HH_MM_SS_1);
timeBxArea.setWeekStyle(WeekStyle.CHINESE); timeBxArea.setWeekStyle(WeekStyle.CHINESE);
programFile.addArea(timeBxArea); programFile.addArea(timeBxArea);

View File

@ -10,7 +10,8 @@ import com.yanzhu.manage.mapper.ProMobileAttendanceDataMapper;
import com.yanzhu.system.domain.SysLedscreen; import com.yanzhu.system.domain.SysLedscreen;
import com.yanzhu.system.domain.SysWorkArea; import com.yanzhu.system.domain.SysWorkArea;
import com.yanzhu.system.mapper.SysLedscreenMapper; import com.yanzhu.system.mapper.SysLedscreenMapper;
import com.yanzhu.system.mapper.SysWorkAreaMapper; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -18,11 +19,14 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
public class LedScreenServiceImpl implements ILedScreenService { public class LedScreenServiceImpl implements ILedScreenService {
private static final Logger log = LoggerFactory.getLogger(LedScreenServiceImpl.class);
@Autowired @Autowired
private SysLedscreenMapper sysLedscreenMapper; private SysLedscreenMapper sysLedscreenMapper;
@ -154,7 +158,11 @@ public class LedScreenServiceImpl implements ILedScreenService {
where.setWorkAreaId(ledScreen.getWorkareaId()); where.setWorkAreaId(ledScreen.getWorkareaId());
where.setProjectId(ledScreen.getProjectId()); where.setProjectId(ledScreen.getProjectId());
// 可以添加更多筛选条件,如最近考勤时间等 // 可以添加更多筛选条件,如最近考勤时间等
return proMobileAttendanceDataMapper.selectProMobileAttendanceDataListByWorkArea(where); List<ProMobileAttendanceData> list=proMobileAttendanceDataMapper.selectProMobileAttendanceDataListByWorkArea(where);
//打印日志
log.info("根据工区ID获取考勤数据: {}条, 工区ID: {}, 项目ID: {}", list.size(), ledScreen.getWorkareaId(), ledScreen.getProjectId());
//根据屏的DeviceNo为目录创建图片路径
return list;
// return Arrays.stream("1,2,3,4,5,6,7,8,9,10".split(",")).map(id -> { // return Arrays.stream("1,2,3,4,5,6,7,8,9,10".split(",")).map(id -> {
// ProMobileAttendanceData d=new ProMobileAttendanceData(); // ProMobileAttendanceData d=new ProMobileAttendanceData();
// d.setId(Long.parseLong(id)); // d.setId(Long.parseLong(id));

View File

@ -26,108 +26,117 @@ public class Uni2LedDrawer extends BaseDrawer{
int screenHeight=ledScreen.getHeight().intValue(); int screenHeight=ledScreen.getHeight().intValue();
int dataLine = Math.max(3, (screenHeight-32)/16-1); // 确保dataLine至少为1 int dataLine = Math.max(3, (screenHeight-32)/18-1); // 确保dataLine至少为1
List<String> imagePaths = new ArrayList<>(); List<String> imagePaths = new ArrayList<>();
//根据dataLine来对list进行分页调用绘制方法 //根据dataLine来对list进行分页调用绘制方法
if (!attendanceDataList.isEmpty() && dataLine > 0) { // 检查列表不为空且dataLine大于0 if (!attendanceDataList.isEmpty() && dataLine > 0) { // 检查列表不为空且dataLine大于0
for (int i = 0; i < attendanceDataList.size(); i += dataLine) { for (int i = 0; i < attendanceDataList.size(); i += dataLine) {
List<ProMobileAttendanceData> subList = attendanceDataList.subList(i, Math.min(i + dataLine, attendanceDataList.size())); List<ProMobileAttendanceData> subList = attendanceDataList.subList(i, Math.min(i + dataLine, attendanceDataList.size()));
String imagePath=ledSavePath + "image" + (i / dataLine + 1) + ".bmp"; String imagePath=ledSavePath + "image" + (i / dataLine + 1) + ".bmp";
drawImage(ledScreen, subList, imagePath); drawImage(ledScreen, subList, imagePath, dataLine);
imagePaths.add(imagePath); imagePaths.add(imagePath);
} }
} }
imagePaths.clear();
return imagePaths.toArray(new String[0]); return imagePaths.toArray(new String[0]);
} }
private static void drawImage(SysLedscreen ledScreen, List<ProMobileAttendanceData> subList, String imagePath) { private static void drawImage(SysLedscreen ledScreen, List<ProMobileAttendanceData> subList, String imagePath, int maxRows) {
int screenWidth=ledScreen.getWidth().intValue(); int screenWidth=ledScreen.getWidth().intValue();
int lineHeight = 16; int screenHeight=ledScreen.getHeight().intValue();
int lineHeight = 18;
int headerHeight = lineHeight; int headerHeight = lineHeight;
int rowHeight = lineHeight; int rowHeight = lineHeight;
int margin = 3; int margin = 2;
int drawWidth = screenWidth - 2 * margin; int drawWidth = screenWidth - 2 * margin;
int totalHeight = headerHeight + subList.size() * rowHeight; int imageHeight = screenHeight - 32;
int totalHeight = imageHeight - 2 * margin;
int imageWidth = screenWidth; int imageWidth = screenWidth;
int imageHeight = totalHeight + 2 * margin;
// 创建4位16色的BMP图片 BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_BYTE_BINARY);
BufferedImage image = create4BitBmpImage(imageWidth, imageHeight);
Graphics2D g2d = image.createGraphics(); Graphics2D g2d = image.createGraphics();
try { try {
// 设置背景色为黑色 g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2d.setColor(Color.BLACK); g2d.setColor(Color.BLACK);
g2d.fillRect(0, 0, imageWidth, imageHeight); g2d.fillRect(0, 0, imageWidth, imageHeight);
// 设置字体 Font font = new Font("宋体", Font.BOLD, 14);
Font font = new Font("宋体", Font.PLAIN, 12);
g2d.setFont(font); g2d.setFont(font);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
// 设置文字颜色为白色
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
// 表头:姓名 班组 进入时间
String[] headers = {"姓名", "班组", "进入时间"}; String[] headers = {"姓名", "班组", "进入时间"};
int[] columnWidths = {drawWidth / 3, drawWidth / 3, drawWidth / 3}; int[] columnWidths = {drawWidth / 3, drawWidth / 3, drawWidth / 3};
// 绘制表头
int x = margin; int x = margin;
for (int i = 0; i < headers.length; i++) { for (int i = 0; i < headers.length; i++) {
g2d.drawString(headers[i], x + 2, margin + headerHeight - 4); g2d.drawString(headers[i], x + 2, margin + headerHeight - 2);
x += columnWidths[i]; x += columnWidths[i];
} }
// 绘制表头下划线
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
g2d.drawLine(margin, margin + headerHeight, margin + drawWidth, margin + headerHeight); g2d.drawLine(margin, margin + headerHeight, margin + drawWidth, margin + headerHeight);
// 绘制数据行
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
for (int i = 0; i < subList.size(); i++) { for (int i = 0; i < maxRows; i++) {
ProMobileAttendanceData data = subList.get(i);
int rowY = margin + headerHeight + i * rowHeight; int rowY = margin + headerHeight + i * rowHeight;
int lineY = rowY + rowHeight;
if (lineY > margin + totalHeight) {
lineY = margin + totalHeight;
}
if (i < subList.size()) {
ProMobileAttendanceData data = subList.get(i);
// 获取数据
String userName = data.getUserName() != null ? data.getUserName() : ""; String userName = data.getUserName() != null ? data.getUserName() : "";
String subDeptGroupName = data.getSubDeptGroupName() != null ? data.getSubDeptGroupName() : ""; String subDeptGroupName = data.getSubDeptGroupName() != null ? data.getSubDeptGroupName() : "";
// 格式化考勤时间
String attTime = ""; String attTime = "";
if (data.getAttDate() != null) { if (data.getAttDate() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
attTime = sdf.format(data.getAttDate()); attTime = sdf.format(data.getAttDate());
} }
// 绘制数据行
x = margin; x = margin;
g2d.drawString(userName, x + 2, rowY + rowHeight - 4); g2d.drawString(userName, x + 2, rowY + rowHeight - 4);
x += columnWidths[0]; x += columnWidths[0];
g2d.drawString(subDeptGroupName, x + 2, rowY + rowHeight - 4); g2d.drawString(subDeptGroupName, x + 2, rowY + rowHeight - 4);
x += columnWidths[1]; x += columnWidths[1];
g2d.drawString(attTime, x + 2, rowY + rowHeight - 4); g2d.drawString(attTime, x + 2, rowY + rowHeight - 4);
} else {
// 绘制行下划线 x = margin;
g2d.setColor(Color.WHITE); g2d.drawString("", x + 2, rowY + rowHeight - 4);
g2d.drawLine(margin, rowY + rowHeight, margin + drawWidth, rowY + rowHeight); x += columnWidths[0];
g2d.drawString("", x + 2, rowY + rowHeight - 4);
x += columnWidths[1];
g2d.drawString("", x + 2, rowY + rowHeight - 4);
}
g2d.setColor(Color.WHITE);
g2d.drawLine(margin, lineY, margin + drawWidth, lineY);
} }
// 绘制垂直分割线
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
int x1 = margin + columnWidths[0]; int x1 = margin + columnWidths[0];
int x2 = margin + columnWidths[0] + columnWidths[1]; int x2 = margin + columnWidths[0] + columnWidths[1];
g2d.drawLine(x1, margin, x1, margin + totalHeight); g2d.drawLine(x1, margin, x1, margin + totalHeight);
g2d.drawLine(x2, margin, x2, margin + totalHeight); g2d.drawLine(x2, margin, x2, margin + totalHeight);
// 绘制表格外边框
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
g2d.drawRect(margin, margin, drawWidth, totalHeight); g2d.drawRect(margin, margin, drawWidth, totalHeight);
// 保存图片为BMP格式
File outputFile = new File(imagePath); File outputFile = new File(imagePath);
ImageIO.write(image, "bmp", outputFile); ImageIO.write(image, "bmp", outputFile);

View File

@ -27,108 +27,117 @@ public class UniLedDrawer extends BaseDrawer{
int screenHeight=ledScreen.getHeight().intValue(); int screenHeight=ledScreen.getHeight().intValue();
int dataLine = Math.max(3, (screenHeight-32)/16-1); // 确保dataLine至少为1 int dataLine = Math.max(3, (screenHeight-32)/18-1); // 确保dataLine至少为1
List<String> imagePaths = new ArrayList<>(); List<String> imagePaths = new ArrayList<>();
//根据dataLine来对list进行分页调用绘制方法 //根据dataLine来对list进行分页调用绘制方法
if (!attendanceDataList.isEmpty() && dataLine > 0) { // 检查列表不为空且dataLine大于0 if (!attendanceDataList.isEmpty() && dataLine > 0) { // 检查列表不为空且dataLine大于0
for (int i = 0; i < attendanceDataList.size(); i += dataLine) { for (int i = 0; i < attendanceDataList.size(); i += dataLine) {
List<ProMobileAttendanceData> subList = attendanceDataList.subList(i, Math.min(i + dataLine, attendanceDataList.size())); List<ProMobileAttendanceData> subList = attendanceDataList.subList(i, Math.min(i + dataLine, attendanceDataList.size()));
String imagePath=ledSavePath + "image" + (i / dataLine + 1) + ".bmp"; String imagePath=ledSavePath + "image" + (i / dataLine + 1) + ".bmp";
drawImage(ledScreen, subList, imagePath); drawImage(ledScreen, subList, imagePath, dataLine);
imagePaths.add(imagePath); imagePaths.add(imagePath);
} }
} }
imagePaths.clear();
return imagePaths.toArray(new String[0]); return imagePaths.toArray(new String[0]);
} }
private static void drawImage(SysLedscreen ledScreen, List<ProMobileAttendanceData> subList, String imagePath) { private static void drawImage(SysLedscreen ledScreen, List<ProMobileAttendanceData> subList, String imagePath, int maxRows) {
int screenWidth=ledScreen.getWidth().intValue(); int screenWidth=ledScreen.getWidth().intValue();
int lineHeight = 16; int screenHeight=ledScreen.getHeight().intValue();
int lineHeight = 18;
int headerHeight = lineHeight; int headerHeight = lineHeight;
int rowHeight = lineHeight; int rowHeight = lineHeight;
int margin = 3; int margin = 2;
int drawWidth = screenWidth - 2 * margin; int drawWidth = screenWidth - 2 * margin;
int totalHeight = headerHeight + subList.size() * rowHeight; int imageHeight = screenHeight - 32;
int totalHeight = imageHeight - 2 * margin;
int imageWidth = screenWidth; int imageWidth = screenWidth;
int imageHeight = totalHeight + 2 * margin;
// 创建4位16色的BMP图片 BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_BYTE_BINARY);
BufferedImage image = create4BitBmpImage(imageWidth, imageHeight);
Graphics2D g2d = image.createGraphics(); Graphics2D g2d = image.createGraphics();
try { try {
// 设置背景色为黑色 g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2d.setColor(Color.BLACK); g2d.setColor(Color.BLACK);
g2d.fillRect(0, 0, imageWidth, imageHeight); g2d.fillRect(0, 0, imageWidth, imageHeight);
// 设置字体 Font font = new Font("宋体", Font.BOLD, 14);
Font font = new Font("宋体", Font.PLAIN, 12);
g2d.setFont(font); g2d.setFont(font);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
// 设置文字颜色为白色
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
// 表头:姓名 班组 进入时间
String[] headers = {"姓名", "班组", "进入时间"}; String[] headers = {"姓名", "班组", "进入时间"};
int[] columnWidths = {drawWidth / 3, drawWidth / 3, drawWidth / 3}; int[] columnWidths = {drawWidth / 3, drawWidth / 3, drawWidth / 3};
// 绘制表头
int x = margin; int x = margin;
for (int i = 0; i < headers.length; i++) { for (int i = 0; i < headers.length; i++) {
g2d.drawString(headers[i], x + 2, margin + headerHeight - 4); g2d.drawString(headers[i], x + 2, margin + headerHeight - 2);
x += columnWidths[i]; x += columnWidths[i];
} }
// 绘制表头下划线
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
g2d.drawLine(margin, margin + headerHeight, margin + drawWidth, margin + headerHeight); g2d.drawLine(margin, margin + headerHeight, margin + drawWidth, margin + headerHeight);
// 绘制数据行
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
for (int i = 0; i < subList.size(); i++) { for (int i = 0; i < maxRows; i++) {
ProMobileAttendanceData data = subList.get(i);
int rowY = margin + headerHeight + i * rowHeight; int rowY = margin + headerHeight + i * rowHeight;
int lineY = rowY + rowHeight;
if (lineY > margin + totalHeight) {
lineY = margin + totalHeight;
}
if (i < subList.size()) {
ProMobileAttendanceData data = subList.get(i);
// 获取数据
String userName = data.getUserName() != null ? data.getUserName() : ""; String userName = data.getUserName() != null ? data.getUserName() : "";
String subDeptGroupName = data.getSubDeptGroupName() != null ? data.getSubDeptGroupName() : ""; String subDeptGroupName = data.getSubDeptGroupName() != null ? data.getSubDeptGroupName() : "";
// 格式化考勤时间
String attTime = ""; String attTime = "";
if (data.getAttDate() != null) { if (data.getAttDate() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
attTime = sdf.format(data.getAttDate()); attTime = sdf.format(data.getAttDate());
} }
// 绘制数据行
x = margin; x = margin;
g2d.drawString(userName, x + 2, rowY + rowHeight - 4); g2d.drawString(userName, x + 2, rowY + rowHeight - 4);
x += columnWidths[0]; x += columnWidths[0];
g2d.drawString(subDeptGroupName, x + 2, rowY + rowHeight - 4); g2d.drawString(subDeptGroupName, x + 2, rowY + rowHeight - 4);
x += columnWidths[1]; x += columnWidths[1];
g2d.drawString(attTime, x + 2, rowY + rowHeight - 4); g2d.drawString(attTime, x + 2, rowY + rowHeight - 4);
} else {
// 绘制行下划线 x = margin;
g2d.setColor(Color.WHITE); g2d.drawString("", x + 2, rowY + rowHeight - 4);
g2d.drawLine(margin, rowY + rowHeight, margin + drawWidth, rowY + rowHeight); x += columnWidths[0];
g2d.drawString("", x + 2, rowY + rowHeight - 4);
x += columnWidths[1];
g2d.drawString("", x + 2, rowY + rowHeight - 4);
}
g2d.setColor(Color.WHITE);
g2d.drawLine(margin, lineY, margin + drawWidth, lineY);
} }
// 绘制垂直分割线
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
int x1 = margin + columnWidths[0]; int x1 = margin + columnWidths[0];
int x2 = margin + columnWidths[0] + columnWidths[1]; int x2 = margin + columnWidths[0] + columnWidths[1];
g2d.drawLine(x1, margin, x1, margin + totalHeight); g2d.drawLine(x1, margin, x1, margin + totalHeight);
g2d.drawLine(x2, margin, x2, margin + totalHeight); g2d.drawLine(x2, margin, x2, margin + totalHeight);
// 绘制表格外边框
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
g2d.drawRect(margin, margin, drawWidth, totalHeight); g2d.drawRect(margin, margin, drawWidth, totalHeight);
// 保存图片为BMP格式
File outputFile = new File(imagePath); File outputFile = new File(imagePath);
ImageIO.write(image, "bmp", outputFile); ImageIO.write(image, "bmp", outputFile);

View File

@ -404,11 +404,11 @@ public class TowerCraneApiController {
@PostMapping("/tyLinux/run/push") @PostMapping("/tyLinux/run/push")
public AjaxResult tyLinuxPushRunData(@RequestBody @Valid TyTowerLinuxRunReqVO req) { public AjaxResult tyLinuxPushRunData(@RequestBody @Valid TyTowerLinuxRunReqVO req) {
log.info("desApi.towerCrane.tyLinux.run.push...{}",req.getEid()); log.info("desApi.towerCrane.tyLinux.run.push...{}",req.getEid());
DevTowerProjectConfig config = redisService.getCacheObject(YANZHU_DEVICE_TOWER + req.getEid()); DevTowerProjectConfig config = devTowerProjectConfigService.selectDevTowerProjectConfigByDeviceId(req.getEid().longValue());
if (config == null) { if (config == null) {
throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode());
} }
String deviceKey = req.getEid().toString(); String deviceKey = config.getDeviceSn();
DevTowerDataLimit devTowerDataLimit = staticLimitMap.get(deviceKey); DevTowerDataLimit devTowerDataLimit = staticLimitMap.get(deviceKey);
if(devTowerDataLimit==null){ if(devTowerDataLimit==null){
DevTowerDataLimit devTowerDataLimitQuery = new DevTowerDataLimit(); DevTowerDataLimit devTowerDataLimitQuery = new DevTowerDataLimit();
@ -456,11 +456,11 @@ public class TowerCraneApiController {
@PostMapping("/v2_ty/run/push") @PostMapping("/v2_ty/run/push")
public AjaxResult tyPushRunData(@RequestBody @Valid TyTowerRunReqVO req) { public AjaxResult tyPushRunData(@RequestBody @Valid TyTowerRunReqVO req) {
log.info("desApi.towerCrane.v2_ty.run.push...{}",req.getEid()); log.info("desApi.towerCrane.v2_ty.run.push...{}",req.getEid());
DevTowerProjectConfig config = redisService.getCacheObject(YANZHU_DEVICE_TOWER + req.getEid()); DevTowerProjectConfig config = devTowerProjectConfigService.selectDevTowerProjectConfigByDeviceId(req.getEid().longValue());
if (config == null) { if (config == null) {
throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode());
} }
String deviceKey = req.getEid().toString(); String deviceKey = config.getDeviceSn();
DevTowerDataLimit devTowerDataLimit = staticLimitMap.get(deviceKey); DevTowerDataLimit devTowerDataLimit = staticLimitMap.get(deviceKey);
if(devTowerDataLimit==null){ if(devTowerDataLimit==null){
DevTowerDataLimit devTowerDataLimitQuery = new DevTowerDataLimit(); DevTowerDataLimit devTowerDataLimitQuery = new DevTowerDataLimit();
@ -508,7 +508,7 @@ public class TowerCraneApiController {
@PostMapping("/tyLinux/round/push") @PostMapping("/tyLinux/round/push")
public AjaxResult tyLinuxPushRoundData(@RequestBody @Valid TyTowerLinuxRoundReqVO req) { public AjaxResult tyLinuxPushRoundData(@RequestBody @Valid TyTowerLinuxRoundReqVO req) {
log.info("desApi.towerCrane.tyLinux.round.push...{}",req.getEid()); log.info("desApi.towerCrane.tyLinux.round.push...{}",req.getEid());
DevTowerProjectConfig config = redisService.getCacheObject(YANZHU_DEVICE_TOWER + req.getEid()); DevTowerProjectConfig config = devTowerProjectConfigService.selectDevTowerProjectConfigByDeviceId(req.getEid().longValue());
if (config == null) { if (config == null) {
throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode());
} }
@ -548,7 +548,7 @@ public class TowerCraneApiController {
@PostMapping("/v2_ty/round/push") @PostMapping("/v2_ty/round/push")
public AjaxResult tyPushRoundData(@RequestBody @Valid TyTowerRoundReqVO req) { public AjaxResult tyPushRoundData(@RequestBody @Valid TyTowerRoundReqVO req) {
log.info("desApi.towerCrane.v2_ty.round.push...{}",req.getEid()); log.info("desApi.towerCrane.v2_ty.round.push...{}",req.getEid());
DevTowerProjectConfig config = redisService.getCacheObject(YANZHU_DEVICE_TOWER + req.getEid()); DevTowerProjectConfig config = devTowerProjectConfigService.selectDevTowerProjectConfigByDeviceId(req.getEid().longValue());
if (config == null) { if (config == null) {
throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode());
} }
@ -588,7 +588,7 @@ public class TowerCraneApiController {
@PostMapping("/tyLinux/warning/push") @PostMapping("/tyLinux/warning/push")
public AjaxResult tyLinuxPushWarningData(@RequestBody @Valid TyTowerLinuxWarningReqVO req) { public AjaxResult tyLinuxPushWarningData(@RequestBody @Valid TyTowerLinuxWarningReqVO req) {
log.info("desApi.towerCrane.tyLinux.warning.push...{}",req.getEid()); log.info("desApi.towerCrane.tyLinux.warning.push...{}",req.getEid());
DevTowerProjectConfig config = redisService.getCacheObject(YANZHU_DEVICE_TOWER + req.getEid()); DevTowerProjectConfig config = devTowerProjectConfigService.selectDevTowerProjectConfigByDeviceId(req.getEid().longValue());
if (config == null) { if (config == null) {
throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode());
} }
@ -629,7 +629,7 @@ public class TowerCraneApiController {
@PostMapping("/v2_ty/warning/push") @PostMapping("/v2_ty/warning/push")
public AjaxResult tyPushWarningData(@RequestBody @Valid TyTowerWarningReqVO req) { public AjaxResult tyPushWarningData(@RequestBody @Valid TyTowerWarningReqVO req) {
log.info("desApi.towerCrane.v2_ty.warning.push...{}",req.getEid()); log.info("desApi.towerCrane.v2_ty.warning.push...{}",req.getEid());
DevTowerProjectConfig config = redisService.getCacheObject(YANZHU_DEVICE_TOWER + req.getEid()); DevTowerProjectConfig config = devTowerProjectConfigService.selectDevTowerProjectConfigByDeviceId(req.getEid().longValue());
if (config == null) { if (config == null) {
throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode());
} }

View File

@ -26,6 +26,14 @@ public interface IDevTowerProjectConfigService
*/ */
public DevTowerProjectConfig selectDevTowerProjectConfigById(Long id); public DevTowerProjectConfig selectDevTowerProjectConfigById(Long id);
/**
* ID
*
* @param deviceId ID
* @return
*/
public DevTowerProjectConfig selectDevTowerProjectConfigByDeviceId(Long deviceId);
/** /**
* *
* *

View File

@ -73,6 +73,21 @@ public class DevTowerProjectConfigServiceImpl implements IDevTowerProjectConfigS
return devTowerProjectConfigMapper.selectDevTowerProjectConfigById(id); return devTowerProjectConfigMapper.selectDevTowerProjectConfigById(id);
} }
/**
* ID
*
* @param deviceId ID
* @return
*/
@Override
public DevTowerProjectConfig selectDevTowerProjectConfigByDeviceId(Long deviceId)
{
DevTowerProjectConfig config = new DevTowerProjectConfig();
config.setId(deviceId);
List<DevTowerProjectConfig> configList = devTowerProjectConfigMapper.selectDevTowerProjectConfigList(config);
return CollectionUtils.isNotEmpty(configList) ? configList.get(0) : null;
}
/** /**
* *
* *