From a929d99e6b90e426a5e1bd2eee1d8820986b6c61 Mon Sep 17 00:00:00 2001
From: zrj <646384940@qq.com>
Date: Tue, 25 Jun 2024 14:06:07 +0800
Subject: [PATCH] 智能外呼详情查询新增测试,水尺监测新增图片标记并上传

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkStaffGaugeMonServiceImpl.java |  175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 174 insertions(+), 1 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkStaffGaugeMonServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkStaffGaugeMonServiceImpl.java
index a3b0c8b..b03a923 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkStaffGaugeMonServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkStaffGaugeMonServiceImpl.java
@@ -1,7 +1,9 @@
 package cn.gistack.sm.hk.service.impl;
 
 import cn.gistack.common.utils.IdUtils;
-import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.common.utils.SpringContextUtil;
+import cn.gistack.resource.feign.IOssClient;
+import cn.gistack.sm.hk.constant.HkEventConstant;
 import cn.gistack.sm.hk.entity.HkStaffGaugeMon;
 import cn.gistack.sm.hk.mapper.HkStaffGaugeMonMapper;
 import cn.gistack.sm.hk.service.HkStaffGaugeMonService;
@@ -13,9 +15,21 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.geom.Line2D;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -29,6 +43,10 @@
 @Service
 @Slf4j
 public class HkStaffGaugeMonServiceImpl extends ServiceImpl<HkStaffGaugeMonMapper, HkStaffGaugeMon> implements HkStaffGaugeMonService {
+
+	@Autowired
+	private IOssClient ossClient;
+
 
 	/**
 	 * 自定义分页列表查询
@@ -96,10 +114,165 @@
 					hkStaffGaugeMon.setRemark4(jsonArray.getJSONObject(i).getString("remark4"));
 					hkStaffGaugeMon.setRemark5(jsonArray.getJSONObject(i).getString("remark5"));
 					hkStaffGaugeMon.setSysCreateTime(new Date());
+					// 设置标记图片
+					hkStaffGaugeMon.setTaggedPic(setTaggedUrl(hkStaffGaugeMon));
 					// 保存
 					save(hkStaffGaugeMon);
 				}
 			}
 		}
 	}
+
+	/**
+	 * 设置标记图片
+	 * @param hkStaffGaugeMon
+	 * @return
+	 */
+	private String setTaggedUrl(HkStaffGaugeMon hkStaffGaugeMon) {
+		String url = null;
+		if (!Strings.isBlank(hkStaffGaugeMon.getMarkPic()) &&
+		!Strings.isBlank(hkStaffGaugeMon.getMarkData())){
+			String tagGedUrl = hkStaffGaugeMon.getMarkPic();
+			// 获取环境
+			String activeProfile = SpringContextUtil.getActiveProfile();
+			String preUrl = HkEventConstant.picUrlMap.get(activeProfile);
+			// 替换url
+			tagGedUrl = tagGedUrl.replace("http://10.42.7.245:6120",preUrl);
+			// url 转换
+			url = drawAndGetPictureUrl(tagGedUrl,hkStaffGaugeMon.getMarkData(),hkStaffGaugeMon.getAlarmHeight(),Color.RED);
+		}
+		return url;
+	}
+
+	/**
+	 * 图片处理
+	 * @param url 原始图片地址
+	 * @param data:图片数据
+	 * @param drawColor:画框的颜色
+	 * @return
+	 * @throws Exception
+	 */
+	public String drawAndGetPictureUrl(String url,String data,Double alarmHeight, Color drawColor) {
+		String tagGedUrl = null;
+		BufferedImage bufferedImage = null;
+		// 读取图片文件,得到BufferedImage对象
+		try {
+			InputStream inputStream = null;
+			HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+			connection.setRequestMethod("GET");
+			if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
+				inputStream = connection.getInputStream();
+			}
+			bufferedImage = ImageIO.read(inputStream);
+			// 得到Graphics2D 对象
+			Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
+			// 设置颜色、画笔粗细
+			g2D.setColor(drawColor);
+			g2D.setStroke(new BasicStroke(2f));
+			// 绘制线
+			drawLine(g2D,data,bufferedImage);
+			// 标记点位文字
+			drawWord(g2D,data,bufferedImage,alarmHeight,24);
+			// 释放图形上下文
+			g2D.dispose();
+			// 将处理后的图片转换为输入流
+			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+			ImageIO.write(bufferedImage, "jpg", new File("F:\\out.jpg"));
+			// 写入
+			ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
+			ByteArrayInputStream stream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
+			String fileName = System.currentTimeMillis()  + ".jpg";
+			// 使用MinIO客户端上传图片
+			MockMultipartFile multipartFile
+				= new MockMultipartFile("__init__.py", fileName, "application/octet-stream", stream);
+			// 上传
+			tagGedUrl = ossClient.uploadFile(fileName, multipartFile);
+			// 返回
+			return tagGedUrl;
+		} catch (Exception e) {
+			log.error("绘制图片失败:,原图片:{},error:{}", url, e);
+		}
+		// 返回
+		return tagGedUrl;
+	}
+
+	/**
+	 * 画矩形
+	 * @param x:该参数用于返回检测框左上角位置的横坐标(x)所在的像素位置,结合剩余参数可唯一确定检测框的大小和位置。
+	 * @param y:该参数用于返回检测框左上角位置的纵坐标(y)所在的像素位置,结合剩余参数可唯一确定检测框的大小和位置。
+	 * @param width: 该参数用于返回检测框的宽度(由左上角出发在x轴向右延伸的长度),结合剩余参数可唯一确定检测框的大小和位置。
+	 * @param height:该参数用于返回检测框的高度(由左上角出发在y轴向下延伸的长度),结合剩余参数可唯一确定检测框的大小和位置。
+	 * @param g2D
+	 */
+	public void drawRectangle(int x, int y, int width, int height, Graphics2D g2D) {
+		//绘制矩形
+		g2D.drawRect(x, y, width, height);
+	}
+
+	/**
+	 * 画线
+	 * @param g2D
+	 * @param data
+	 * @param bufferedImage
+	 */
+	public void drawLine(Graphics2D g2D,String data,BufferedImage bufferedImage) {
+		int width = bufferedImage.getWidth();
+		int height = bufferedImage.getHeight();
+		// 解析data
+		JSONObject jsonObject = JSONObject.parseObject(data);
+		// 转换为Map
+		Map<String, Double> map = new HashMap<>();
+		for (String key : jsonObject.keySet()) {
+			map.put(key, jsonObject.getDoubleValue(key));
+
+		}
+		// 打印转换后的Map
+		Line2D.Double line = new Line2D.Double(map.get("x1")*width, map.get("y1")*height,
+			map.get("x2")*width, map.get("y2")*height);
+		g2D.draw(line);
+		Line2D.Double line1 = new Line2D.Double(map.get("x2")*width, map.get("y2")*height,
+			map.get("x3")*width, map.get("y3")*height);
+		g2D.draw(line1);
+	}
+
+	/**
+	 * 画线--int 类型
+	 * @param g2D
+	 * @param data
+	 */
+	public void drawLineInt(Graphics2D g2D,String data) {
+		//绘制矩形
+		// 定义多个点,每个点由x和y坐标组成
+		int[] xPoints = {10, 100, 50, 150, 20};
+		int[] yPoints = {10, 150, 100, 50, 10};
+		// 绘制多点划线
+		g2D.drawPolyline(xPoints, yPoints, xPoints.length);
+	}
+
+	/**
+	 * 画文字
+	 * @param g2D
+	 * @param data
+	 * @param data 数据
+	 * @param bufferedImage
+	 * @param size 文字大小
+	 */
+	public void drawWord(Graphics2D g2D, String data,BufferedImage bufferedImage,Double alarmHeight,int size) {
+		g2D.setFont(new Font("", Font.BOLD, size));
+		int width = bufferedImage.getWidth();
+		int height = bufferedImage.getHeight();
+		// 解析data
+		JSONObject jsonObject = JSONObject.parseObject(data);
+		// 转换为Map
+		Map<String, Double> map = new HashMap<>();
+		for (String key : jsonObject.keySet()) {
+			map.put(key, jsonObject.getDoubleValue(key));
+		}
+		g2D.drawString("A:" + map.get("h3") + "米", (float)(map.get("x3")*width-5), (float) (map.get("y3")*height-10));
+		g2D.drawString("B:" + map.get("h2") + "米", (float)(map.get("x2")*width-5), (float) (map.get("y2")*height-10));
+		g2D.drawString("C:" + map.get("h1") + "米", (float)(map.get("x1")*width-5), (float) (map.get("y1")*height-10));
+
+		g2D.setColor(Color.BLUE);
+		g2D.drawString("当前水位:" + alarmHeight + "米", (float)(map.get("x2")*width-100), (float) (map.get("y2")*height+60));
+	}
 }

--
Gitblit v1.9.3