zrj
2024-06-25 a929d99e6b90e426a5e1bd2eee1d8820986b6c61
智能外呼详情查询新增测试,水尺监测新增图片标记并上传
9 files modified
228 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkStaffGaugeMon.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkStaffGaugeMonServiceImpl.java 175 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -119,6 +119,11 @@
            <artifactId>hutool-all</artifactId>
            <version>5.8.25</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-mock</artifactId>
            <version>2.0.8</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java
@@ -69,4 +69,14 @@
        put("131590","loitering");
        put("131593","group");
    }};
    /**
     * 海康事件图片基础路径
     */
    public static Map<String,String> picUrlMap = new HashMap()
    {{
        put("test","https://sk.hubeishuiyi.cn/haikEventSfImg");
        put("dev","https://sk.hubeishuiyi.cn/haikEventSfImg");
        put("prod","https://sk.hubeishuiyi.cn/haikEventSfImg");
    }};
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkStaffGaugeMon.java
@@ -154,4 +154,10 @@
     */
    @ApiModelProperty(value = "删除状态")
    private Integer deleteStatus;
    /**
     * 标记图片url
     */
    @ApiModelProperty(value = "标记图片url")
    private String taggedPic;
}
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));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -216,4 +216,12 @@
        List<CallExcel> list = new ArrayList<>();
        ExcelUtil.export(response, "智能外呼数据模板", "智能外呼数据表", list, CallExcel.class);
    }
    /**
     * 测试接口-调用外呼库查询任务详情信息
     */
    @GetMapping("/getTaskDetail")
    public R getTaskDetail(Integer taskId) {
        return R.data(callService.getTaskDetail(taskId));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java
@@ -205,4 +205,10 @@
    @DS("ztznwh")
    @InterceptorIgnore(tenantLine = "true")
    List<Scene> getCallListByArea();
    /**
     * 测试接口-调用外呼库查询任务详情信息
     */
    @DS("znwh")
    Map<Object,Object> getTaskDetail(@Param("taskId") Integer taskId);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml
@@ -1054,4 +1054,9 @@
        and arb."eng_scal"!='中型' and arb."eng_scal"!='大(2)型' and arb."eng_scal"!='大(1)型'
    </select>
    <!--测试接口-调用外呼库查询任务详情信息-->
    <select id="getTaskDetail" resultType="java.util.Map">
        select * from call_task where id = #{taskId}
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
@@ -131,4 +131,9 @@
     * @return
     */
    Object importCall(List<CallExcel> list,String time);
    /**
     * 测试接口-调用外呼库查询任务详情信息
     */
    Object getTaskDetail(Integer taskId);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -1271,4 +1271,12 @@
        // 返回
        return R.data(400,errorMsg,null);
    }
    /**
     * 测试接口-调用外呼库查询任务详情信息
     */
    @Override
    public Object getTaskDetail(Integer taskId) {
        return callTaskMapper.getTaskDetail(taskId);
    }
}