From 3456ced921bf136035047b24702891f8b4f260ba Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 29 八月 2024 10:40:27 +0800 Subject: [PATCH] 新增工单检测图片表 --- ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java | 3 + ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java | 27 +++++++++ ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml | 1 ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java | 19 ++++-- ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java | 32 ++++++++++ ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 23 +++---- ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java | 9 +- ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml | 14 ++++ 8 files changed, 105 insertions(+), 23 deletions(-) diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java new file mode 100644 index 0000000..e0bfc64 --- /dev/null +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java @@ -0,0 +1,32 @@ +package com.ycl.platform.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 宸ュ崟妫�娴嬪浘鐗� + * + * @author锛歺p + * @date锛�2024/8/29 10:22 + */ +@Data +@TableName("t_work_order_check_img") +public class WorkOrderCheckImg { + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("work_order_no") + private String workOrderNo; + + @TableField("img_url") + private String imgUrl; + + @TableField("create_time") + private Date createTime; +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java index bcb6362..91455f1 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java @@ -19,6 +19,9 @@ /** 宸ュ崟ID */ private Integer workOrderId; + /** 宸ュ崟鍙� */ + private String workOrderNo; + /** 璁惧缂栧彿/鍥芥爣鐮� */ private String deviceId; diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java new file mode 100644 index 0000000..fbc6287 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java @@ -0,0 +1,27 @@ +package com.ycl.platform.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ycl.platform.domain.entity.CalculateMoneyRule; +import com.ycl.platform.domain.entity.WorkOrderCheckImg; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 宸ュ崟鍥剧墖妫�娴� + * + * @author xp + * @since 2024-04-26 + */ +@Mapper +public interface WorkOrderCheckImgMapper extends BaseMapper<WorkOrderCheckImg> { + + /** + * 鎵归噺鎻掑叆 + * @param list + */ + void insertMany(@Param("list") List<WorkOrderCheckImg> list); + + +} diff --git a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java index 6acfa37..4a2bca7 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java @@ -181,11 +181,12 @@ /** * 宸ュ崟璁惧鐐规挱鑾峰彇涓�甯у浘鐗� * - * @param deviceId 璁惧鍥芥爣鐮� - * @param channelId 璁惧閫氶亾缂栧彿 + * @param deviceId 鍥芥爣璁惧鍥芥爣鐮� + * @param channelId 璁惧閫氶亾缂栧彿锛堣澶囧浗鏍囩爜锛� + * @param workOrderNo 宸ュ崟鍙� * @return 鏁版嵁 */ - String getFrameImgByDevice(String deviceId, String channelId) throws FFmpegFrameGrabber.Exception; + String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo); /** * 鏌ヨ宸ュ崟锛氬凡涓嬪彂銆佸凡澶勭悊銆佸凡瀹屾垚鐨勫伐鍗� @@ -195,7 +196,7 @@ List<DeviceInfoVO> hasErrorWorkOrderList(); /** - * 鏌ヨ宸ュ崟锛氬凡涓嬪彂銆佸凡澶勭悊銆佸凡瀹屾垚鐨勫伐鍗� + * 鏇存柊宸ュ崟鍥剧墖 * * @param workOrderId 宸ュ崟ID * @param imgPath 鍥惧儚鍦板潃 diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java index a389e0d..7292182 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java @@ -38,6 +38,7 @@ import com.ycl.utils.http.HttpUtils; import com.ycl.utils.redis.RedisCache; import com.ycl.utils.uuid.IdUtils; +import constant.Constants; import enumeration.general.NotifyTypeEnum; import enumeration.general.UrgentLevelEnum; import enumeration.general.WorkOrderDistributeWayEnum; @@ -663,35 +664,32 @@ @Override - public String getFrameImgByDevice(String deviceId, String channelId) throws FFmpegFrameGrabber.Exception { + public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) { String url = String.format(this.rtspServer + "/api/play/start/%s/%s", deviceId, channelId); String result = HttpUtils.sendGet(url); -// 鍋囪WVPResult鏄纭В鏋愬搷搴旂殑绫� WVPResult wvpResult = JSON.parseObject(result, WVPResult.class); + String imgUrl = null; if (wvpResult.getCode() == 0) { - System.out.println("璇锋眰鎴愬姛"); JSONObject data = (JSONObject) wvpResult.getData(); String rtspUrl = data.getString("fmp4"); // 娉ㄦ剰锛氶�氬父RTSP URL涓嶄細浠�"fmp4"缁撳熬锛岃繖閲屽彲鑳芥槸鐗瑰畾API鐨勮繑鍥炴牸寮� if (StringUtils.hasText(rtspUrl)) { System.out.println("鐩爣鍦板潃锛�" + rtspUrl); - FFmpegFrameGrabber grabber = null; try { grabber = FFmpegFrameGrabber.createDefault(rtspUrl); grabber.start(); - Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯� if (frame != null) { System.out.println("鎴愬姛鎹曡幏涓�甯�"); - // 灏咶rame杞崲涓篗at OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); Mat mat = converter.convertToMat(frame); + imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png"; // 鐢熸垚鍥剧墖璺緞 - String imgPath = PlatformConfig.getUploadPath() + deviceId + IdUtils.fastSimpleUUID() + ".png"; - System.out.println("鍥剧墖鍦板潃锛�" + imgPath); - + String imgPath = PlatformConfig.getUploadPath() + "/" + imgUrl; + System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath); + imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl; // 淇濆瓨鍥剧墖 opencv_imgcodecs.imwrite(imgPath, mat); } else { @@ -714,8 +712,8 @@ } else { System.out.println("璇锋眰澶辫触锛岄敊璇爜锛�" + wvpResult.getCode()); } - - return null; + System.out.println("鍥剧墖URL锛�" + imgUrl); + return imgUrl; } @Override @@ -728,6 +726,7 @@ public void updateImgById(Integer workOrderId, String imgPath) { new LambdaUpdateChainWrapper<>(baseMapper) .eq(WorkOrder::getId, workOrderId) - .set(WorkOrder::getYwCheckResult, imgPath); + .set(WorkOrder::getYwCheckResult, imgPath) + .update(); } } diff --git a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java index 85a2aec..f93ab74 100644 --- a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java +++ b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ycl.platform.domain.entity.DeviceInfo; +import com.ycl.platform.domain.entity.WorkOrderCheckImg; import com.ycl.platform.domain.vo.DeviceInfoVO; import com.ycl.platform.mapper.DeviceInfoMapper; +import com.ycl.platform.mapper.WorkOrderCheckImgMapper; import com.ycl.platform.service.WorkOrderService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -12,6 +14,8 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; @@ -31,6 +35,7 @@ private final WorkOrderService workOrderService; private final DeviceInfoMapper deviceInfoMapper; + private final WorkOrderCheckImgMapper workOrderCheckImgMapper; private static final ExecutorService executorService = new ThreadPoolExecutor(8, 24, @@ -46,6 +51,7 @@ if (CollectionUtils.isEmpty(deviceList)) { return; } + // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹� List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper) .orderByDesc(DeviceInfo::getUpdateTime) .last("limit 1") @@ -56,14 +62,13 @@ for (DeviceInfoVO deviceInfo : deviceList) { executorService.submit(() -> { // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id - String frameImg = null; - try { - frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId()); - } catch (FFmpegFrameGrabber.Exception e) { - e.printStackTrace(); - } + String frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo()); if (StringUtils.hasText(frameImg)) { - workOrderService.updateImgById(deviceInfo.getWorkOrderId(), frameImg); + WorkOrderCheckImg img = new WorkOrderCheckImg(); + img.setWorkOrderNo(deviceInfo.getWorkOrderNo()); + img.setImgUrl(frameImg); + img.setCreateTime(new Date()); + workOrderCheckImgMapper.insert(img); } }); } diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml new file mode 100644 index 0000000..3e4de8e --- /dev/null +++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml @@ -0,0 +1,14 @@ +<?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="com.ycl.platform.mapper.WorkOrderCheckImgMapper"> + + <insert id="insertMany"> + INSERT INTO t_work_order_check_img (work_order_no, img_url, create_time) + VALUES <foreach collection="list" item="img" separator=","> + (#{img.workOrderNo}, #{img.imgUrl}, #{img.createTime}) + </foreach> + </insert> + +</mapper> diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml index 87fad71..d090669 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml @@ -215,6 +215,7 @@ <select id="hasErrorWorkOrderList" resultType="com.ycl.platform.domain.vo.DeviceInfoVO"> SELECT wo.id as workOrderId, + wo.work_order_no as workOrderNo, wo.serial_number as deviceId FROM t_work_order wo -- Gitblit v1.8.0