From 397eda7e04fd23016ba55b1b12af63bfeb00e482 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期二, 12 十一月 2024 11:16:55 +0800 Subject: [PATCH] bug+检测按钮+新的故障下拉框+工单删除+记录检测离线具体时间点等等 --- ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml | 6 ycl-common/src/main/java/pojo/CascadeOption.java | 18 ++ ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java | 6 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderYwConditionRecordVO.java | 3 ycl-server/src/main/java/com/ycl/task/ContractTask.java | 48 +++--- ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml | 45 +++-- ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java | 2 ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java | 26 +++ ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java | 2 ycl-server/src/main/resources/mapper/zgyw/WorkOrderYwConditionRecordMapper.xml | 3 ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java | 5 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 13 + ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java | 7 ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java | 11 + ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java | 4 ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java | 20 +- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 133 +++++++++++++++- ycl-server/src/main/java/com/ycl/task/MonitorTask.java | 3 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java | 4 ycl-common/src/main/java/enumeration/ErrorType.java | 80 ++++++--- ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml | 2 21 files changed, 340 insertions(+), 101 deletions(-) diff --git a/ycl-common/src/main/java/enumeration/ErrorType.java b/ycl-common/src/main/java/enumeration/ErrorType.java index 743fe1f..43630c1 100644 --- a/ycl-common/src/main/java/enumeration/ErrorType.java +++ b/ycl-common/src/main/java/enumeration/ErrorType.java @@ -3,52 +3,70 @@ import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.Getter; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + /** * @author锛歺p * @date锛�2024/8/19 11:39 */ @Getter public enum ErrorType { - - PLATFORM_OFFLINE("PLATFORMOFFLINE", "骞冲彴绂荤嚎"), - SEVER_INTERRUPT("SEVERINTERRUPT", "鏈嶅姟涓柇"), - DEVICE_OFFLINE("DEVICEOFFLINE", "璁惧绂荤嚎"), - VIDEO_LOSS("VIDEOMISS", "褰曞儚缂哄け"), - VIDEO_NONE("NOVIDEO", "鏃犲綍鍍�"), - POINT_INFO_ERROR("POINTINFOERRO", "鐐逛綅淇℃伅閿欒"), - POINT_INFO_MISS("POINTINFOMISS", "鐐逛綅淇℃伅涓嶅叏"), - SIGNAL_LOSS("SIGNALMISS", "淇″彿缂哄け"), - SCREEN_COLOR_DEVIATION("SCREENCOLOR", "鐢婚潰鍋忚壊"), - SNOW_STORM("SCREENSNOW", "闆姳骞叉壈"), - STRIPE_INTERFERENCE("SCREENSTRIP", "鏉$汗骞叉壈"), - SCREEN_OCCLUSION("SCREENSHADE", "鐢婚潰閬尅"), - ABNORMAL_CLARITY("SCREENBLUR", "娓呮櫚搴﹀紓甯�"), - ABNORMAL_BRIGHTNESS("SCREENLIGHT", "浜害寮傚父"), - UNKNOWN("UNKNOWN", "鏈煡"), - CLOCK_SKEW("CLOCKSKEW", "鏃堕挓鍋忓樊"), - OSD_ERROR("OSD", "osd寮傚父"), - PIC_URLABNORMAL("PICURLABNORMAL","鍥剧墖璁块棶寮傚父"), - MONITOR_UNQUALIFY("MONITORUNQUALIFY", "涓�鏈轰竴妗d笉鍚堟牸"), - PIC_UNUSEFUL("PICUNUSEFUL", "澶у浘涓嶅彲鐢�"), - VIDEO_ORPIC_UNNORMAL("VIDEOORPICUNNORMAL", "瑙嗛鎷夋祦銆佸浘鐗囪幏鍙栧紓甯�"), + //閫氱敤 +// PLATFORM_OFFLINE("PLATFORMOFFLINE", "骞冲彴绂荤嚎","COMMON"), +// SEVER_INTERRUPT("SEVERINTERRUPT", "鏈嶅姟涓柇","COMMON"), + DEVICE_OFFLINE("DEVICEOFFLINE", "璁惧绂荤嚎","COMMON"), + POINT_INFO_ERROR("POINTINFOERRO", "鐐逛綅淇℃伅閿欒","COMMON"), + //瑙嗛 + CLOCK_SKEW("CLOCKSKEW", "鏃堕挓鍋忓樊","VIDEO"), + SIGNAL_LOSS("SIGNALMISS", "淇″彿缂哄け","VIDEO"), + SCREEN_COLOR_DEVIATION("SCREENCOLOR", "鐢婚潰鍋忚壊","VIDEO"), + SNOW_STORM("SCREENSNOW", "闆姳骞叉壈","VIDEO"), + STRIPE_INTERFERENCE("SCREENSTRIP", "鏉$汗骞叉壈","VIDEO"), + SCREEN_OCCLUSION("SCREENSHADE", "鐢婚潰閬尅","VIDEO"), + ABNORMAL_CLARITY("SCREENBLUR", "娓呮櫚搴﹀紓甯�","VIDEO"), + ABNORMAL_BRIGHTNESS("SCREENLIGHT", "浜害寮傚父","VIDEO"), + OSD_ERROR("OSD", "osd寮傚父","VIDEO"), +// VIDEO_LOSS("VIDEOMISS", "褰曞儚缂哄け","VIDEO"), +// VIDEO_NONE("NOVIDEO", "鏃犲綍鍍�","VIDEO"), +// POINT_INFO_MISS("POINTINFOMISS", "鐐逛綅淇℃伅涓嶅叏","COMMON"), +// UNKNOWN("UNKNOWN", "鏈煡"), +// PIC_URLABNORMAL("PICURLABNORMAL","鍥剧墖璁块棶寮傚父",""), +// MONITOR_UNQUALIFY("MONITORUNQUALIFY", "涓�鏈轰竴妗d笉鍚堟牸"), +// PIC_UNUSEFUL("PICUNUSEFUL", "澶у浘涓嶅彲鐢�"), +// VIDEO_ORPIC_UNNORMAL("VIDEOORPICUNNORMAL", "瑙嗛鎷夋祦銆佸浘鐗囪幏鍙栧紓甯�"), // 闃堝�� - CLOCK_RIGHT("CLOCK_RIGHT", "鏃堕挓鍑嗙‘鐜囧紓甯�"), - LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "闀挎椂闂存棤鏁版嵁"), - DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "鏁版嵁鍙婃椂鎬у紓甯�"), - NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "涓嶅敮涓�鏁版嵁閲忓紓甯�"), - UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "鐧藉ぉ鏈瘑鍒暟鎹噺寮傚父"), - CAR_SIX("CAR_SIX", "杞﹁締鍏」灞炴�т笉瀹屾暣"), - MODELING_FAIL("MODELING_FAIL", "寤烘ā澶辫触鐜囧紓甯�"), - FACE_LOW("FACE_LOW", "浜鸿劯浣庡垎鐜囧紓甯�"), + //杞﹁締浜鸿劯閫氱敤 + CLOCK_RIGHT("CLOCK_RIGHT", "鏃堕挓鍑嗙‘鐜囧紓甯�","CARORFACE"), + LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "闀挎椂闂存棤鏁版嵁","CARORFACE"), + DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "鏁版嵁鍙婃椂鎬у紓甯�","CARORFACE"), + NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "涓嶅敮涓�鏁版嵁閲忓紓甯�","CARORFACE"), + UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "鐧藉ぉ鏈瘑鍒暟鎹噺寮傚父","CARORFACE"), + //杞﹁締 + CAR_SIX("CAR_SIX", "杞﹁締鍏」灞炴�т笉瀹屾暣","CAR"), + //浜鸿劯 + MODELING_FAIL("MODELING_FAIL", "寤烘ā澶辫触鐜囧紓甯�","FACE"), + FACE_LOW("FACE_LOW", "浜鸿劯浣庡垎鐜囧紓甯�","FACE"), ; private String value; private String desc; - ErrorType(String value, String desc) { + private String category; + + ErrorType(String value, String desc,String category) { this.value = value; this.desc = desc; + this.category = category; + } + + // 鏍规嵁鍒嗙被鑾峰彇閿欒绫诲瀷鍒楄〃 + public static List<ErrorType> getErrorTypesByCategory(String category) { + return Arrays.stream(values()) + .filter(errorType -> errorType.getCategory() == category) + .collect(Collectors.toList()); } } diff --git a/ycl-common/src/main/java/pojo/CascadeOption.java b/ycl-common/src/main/java/pojo/CascadeOption.java new file mode 100644 index 0000000..d325f09 --- /dev/null +++ b/ycl-common/src/main/java/pojo/CascadeOption.java @@ -0,0 +1,18 @@ +package pojo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +//鍓嶇绾ц仈閫夋嫨鏁版嵁 +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CascadeOption { + private String value; + private String label; + private List<CascadeOption> children; +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java index 015d175..222727f 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java @@ -30,7 +30,7 @@ /** * 鏁呴殰绫诲瀷 */ - private List<String> errorTypeList; + private String errorType; /** * 宸ュ崟id diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java index 7f677da..1475c1d 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java @@ -38,7 +38,7 @@ /** * 鏁呴殰绫诲瀷 */ - private List<String> errorTypeList; + private String errorType; /** * 鐘舵�� diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java index 88992c7..d1fa4cf 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java @@ -42,8 +42,11 @@ /** * 鏁呴殰绫诲瀷 */ - private List<String> errorTypeList; - + private String errorType; + /** + * 鏁呴殰绫诲瀷 + */ + private String errorTypeLabel; /** * 鐘舵�� */ diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java index a05236b..828af36 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java @@ -7,6 +7,7 @@ import lombok.Data; import org.springframework.data.mongodb.core.mapping.Document; +import java.util.Date; import java.util.List; /** @@ -30,6 +31,11 @@ private Integer checkCount; /** 褰撴棩绂荤嚎 */ private Integer offLineCount; + /** + * 绂荤嚎鏃堕棿鐐� + */ + private List<Date> offLineTime; + private List<String> offLineTimeStr; /** 璁惧绫诲瀷 */ private String monitorType; /** 璁惧鍚� */ diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderYwConditionRecordVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderYwConditionRecordVO.java index ad0aeb2..70724e1 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderYwConditionRecordVO.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderYwConditionRecordVO.java @@ -37,6 +37,9 @@ /** 鏄惁绯荤粺娑堟伅 */ private Boolean sysMsg; + /** 鏄惁绯荤粺娑堟伅 */ + private Integer userId; + public static WorkOrderYwConditionRecordVO getVoByEntity(@NonNull WorkOrderYwConditionRecord entity, WorkOrderYwConditionRecordVO vo) { if(vo == null) { vo = new WorkOrderYwConditionRecordVO(); diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java index 4b71e63..10b913d 100644 --- a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java +++ b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java @@ -156,6 +156,13 @@ return workOrderService.detail(id); } + @GetMapping("/check") + @ApiOperation(value = "鍥剧墖妫�娴�", notes = "鍥剧墖妫�娴�") + @PreAuthorize("@ss.hasPermi('work:order:check')") + public Result check(String workOrderNo,String serialNumber) { + return workOrderService.checkImage(workOrderNo,serialNumber); + } + @GetMapping("/list") @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃") @PreAuthorize("@ss.hasPermi('work:order:list')") @@ -163,6 +170,12 @@ return workOrderService.all(); } + @GetMapping("/errorType/list") + @ApiOperation(value = "鏁呴殰鍒楄〃", notes = "鏁呴殰鍒楄〃") + @PreAuthorize("@ss.hasPermi('work:order:list')") + public Result errorList() { + return workOrderService.errorAll(); + } @GetMapping("/detail/info/{workOrderNo}") @ApiOperation(value = "璇︽儏", notes = "璇︽儏") @PreAuthorize("@ss.hasPermi('work:order:detail')") @@ -219,4 +232,17 @@ public Result batchDeleteWorkOrderWhite(@RequestBody List<String> ids) { return workOrderService.batchDeleteWorkOrderWhite(ids); } + + /** + * 鎵归噺鍒犻櫎宸ュ崟 + * + * @return {@link Result } + * @author + */ + @DeleteMapping("/batchDelete") + @PreAuthorize("@ss.hasPermi('work:order:delete')") + @ApiOperation(value = "鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�", notes = "鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�") + public Result batchDeleteWorkOrder(@RequestBody List<String> workOrderNos) { + return workOrderService.batchDeleteWorkOrder(workOrderNos); + } } diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java index 378fd6c..7583ad6 100644 --- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java +++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.platform.domain.entity.WorkOrder; +import com.ycl.platform.domain.form.WorkOrderBatchAuditingForm; import com.ycl.platform.domain.query.*; import com.ycl.platform.domain.vo.DeviceInfoVO; import com.ycl.platform.domain.vo.WorkOrderDetailVO; @@ -109,4 +110,7 @@ * @return */ List<WorkOrderVO> getRecoveryInfo(List<String> orders); + + List<WorkOrder> batchGetByError(@Param("form") WorkOrderBatchAuditingForm form); + } 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 6abc566..c816ad0 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 @@ -271,4 +271,15 @@ */ void batchImportWhite(List<PointExport> dataList); + /** + * 妫�娴嬫寜閽� + * @param workOrderNo + * @return + */ + Result checkImage(String workOrderNo,String serialNumber); + + Result batchDeleteWorkOrder(List<String> workOrderNos); + + Result errorAll(); + } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java index aba88a9..b2acaff 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java @@ -43,6 +43,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; +import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -106,6 +107,18 @@ } else { item.setOnlineStr("鏈煡"); } + List<Date> offLineTime = item.getOffLineTime(); + //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟) + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if(CollectionUtils.isNotEmpty(offLineTime) && offLineTime.size()>1){ + offLineTime = offLineTime.subList(0,1); + } + List<String> dateStr = new ArrayList<>(); + for (Date date : offLineTime) { + String formatDate = format.format(date); + dateStr.add(formatDate); + } + item.setOffLineTimeStr(dateStr); }); params.setDeptTag(-1); params.setDeviceType(1); diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java index f20f559..4ff8e9e 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java @@ -119,16 +119,16 @@ @Override public void recordMetaDSumCheck(List<RecordMetaDSumResult> dataList) { - List<WorkOrder> workOrderList = dataList.stream().map(item -> { - WorkOrder workOrder = new WorkOrder(); - if (0 == item.getRecordStatus()) { - this.genWorkOrder(workOrder, ErrorType.VIDEO_LOSS, item.getDeviceId()); - } else if (-1 == item.getRecordStatus()) { - this.genWorkOrder(workOrder, ErrorType.VIDEO_NONE, item.getDeviceId()); - } - return workOrder; - }).collect(Collectors.toList()); - workOrderService.innerAddWorkOrder(workOrderList); +// List<WorkOrder> workOrderList = dataList.stream().map(item -> { +// WorkOrder workOrder = new WorkOrder(); +// if (0 == item.getRecordStatus()) { +// this.genWorkOrder(workOrder, ErrorType.VIDEO_LOSS, item.getDeviceId()); +// } else if (-1 == item.getRecordStatus()) { +// this.genWorkOrder(workOrder, ErrorType.VIDEO_NONE, item.getDeviceId()); +// } +// return workOrder; +// }).collect(Collectors.toList()); +// workOrderService.innerAddWorkOrder(workOrderList); } 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 86f83a0..8c1f764 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 @@ -44,6 +44,7 @@ import constant.CheckConstants; import constant.Constants; import constant.RedisConstant; +import enumeration.ErrorType; import enumeration.general.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -62,6 +63,7 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import pojo.CascadeOption; import javax.imageio.ImageIO; import javax.swing.*; @@ -98,6 +100,7 @@ private final NotifyService notifyService; private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService; + private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper; private final SysConfigMapper configMapper; private final ReportMapper reportMapper; private final WorkOrderCheckImgMapper workOrderCheckImgMapper; @@ -422,11 +425,12 @@ @Transactional(rollbackFor = Exception.class) public Result batchAuditing(WorkOrderBatchAuditingForm form) { // 鏍规嵁鏁呴殰绫诲瀷鑾峰彇鍒楄〃 - List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper) - .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue()) - .in(WorkOrder::getErrorType, form.getErrorTypes()) - .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo, WorkOrder::getSerialNumber) - .list(); + List<WorkOrder> list = baseMapper.batchGetByError(form); +// List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper) +// .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue()) +// .in(WorkOrder::getErrorType, form.getErrorTypes()) +// .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo, WorkOrder::getSerialNumber) +// .list(); if (list.isEmpty()) { return Result.error("娌℃湁宸ュ崟鍙互瀹℃牳"); } @@ -521,6 +525,9 @@ public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) { List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo); ywConditionList.stream().forEach(item -> { + if(item.getUserId().equals(1)){ + item.setUnitName("绠$悊鍛�"); + } if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) { item.setUnitName("绯荤粺娑堟伅"); } @@ -595,7 +602,18 @@ if (!CollectionUtils.isEmpty(page.getRecords())) { page.getRecords().stream().forEach(item -> { if (StringUtils.hasText(item.getErrorType())) { - item.setErrorTypeList(List.of(item.getErrorType().split(","))); + List<String> errorTypeList = new ArrayList<>(List.of(item.getErrorType().split(","))); + int index = errorTypeList.indexOf(query.getErrorTypeLabel()); + if (index != -1) { + // 淇濆瓨瑕佺Щ鍔ㄧ殑鍏冪礌 + String firstOccurrence = errorTypeList.get(index); + // 浠庡垪琛ㄤ腑绉婚櫎璇ュ厓绱狅紙绗竴娆″嚭鐜扮殑浣嶇疆锛� + errorTypeList.remove(index); + // 灏嗚鍏冪礌娣诲姞鍒板垪琛ㄧ殑棣栦綅 + errorTypeList.add(0, firstOccurrence); + } + // 璁剧疆鏇存柊鍚庣殑鍒楄〃 + item.setErrorTypeList(errorTypeList); } if (StringUtils.hasText(item.getImgListStr())) { item.setImgList(List.of(item.getImgListStr().split(","))); @@ -835,7 +853,7 @@ @Override - public synchronized String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception { + public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception { String url = String.format(this.rtspServer + "/api/play/start/img/%s/%s", deviceId, channelId); log.info("璁块棶璺緞{}",url); String result = HttpUtils.sendGet(url); @@ -1037,7 +1055,9 @@ @Override public List<WorkOrderVO> export (WorkOrderExportQuery query){ - query.setUnitId(SecurityUtils.getUnitId()); + if(query.getUnitId()==null) { + query.setUnitId(SecurityUtils.getUnitId()); + } if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00"); if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59"); @@ -1119,5 +1139,102 @@ insertWhiteList.stream().forEach(white -> workOrderWhiteMapper.insert(white)); } + /** + * 妫�娴嬪伐鍗曟寜閽� + * @param workOrderNo + * @return + */ + @Override + public Result checkImage(String workOrderNo,String serialNumber) { + // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹� + List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper) + .orderByDesc(DeviceInfo::getUpdateTime) + .last("limit 1") + .list(); + if (!CollectionUtils.isEmpty(gbDevices)) { + try { + String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber,workOrderNo); + if (StringUtils.hasText(imgUrl)) { + WorkOrderCheckImg img = new WorkOrderCheckImg(); + img.setWorkOrderNo(workOrderNo); + img.setImgUrl(imgUrl); + img.setCreateTime(new Date()); + workOrderCheckImgMapper.insert(img); + } + return Result.ok().data(imgUrl); + } catch (Exception e) { + e.printStackTrace(); + } + } + return Result.ok(); + } + @Override + @Transactional(rollbackFor = Exception.class) + public Result batchDeleteWorkOrder(List<String> workOrderNos) { + if(!CollectionUtils.isEmpty(workOrderNos)) { + //鍒犻櫎宸ュ崟瀹℃牳璁板綍 + workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().in("work_order_no", workOrderNos)); + //鍒犻櫎宸ュ崟鍥剧墖璁板綍 + workOrderCheckImgMapper.delete(new QueryWrapper<WorkOrderCheckImg>().in("work_order_no", workOrderNos)); + //鍒犻櫎宸ュ崟涓嬪彂璁板綍 + workOrderDistributeRecordMapper.delete(new QueryWrapper<WorkOrderDistributeRecord>().in("work_order_no", workOrderNos)); + //鍒犻櫎宸ュ崟鏁呴殰绫诲瀷 + workOrderErrorTypeMapper.delete(new QueryWrapper<WorkOrderErrorType>().in("work_order_no", workOrderNos)); + //鍒犻櫎宸ュ崟鎯呭喌璁板綍 + workOrderYwConditionRecordMapper.delete(new QueryWrapper<WorkOrderYwConditionRecord>().in("work_order_no", workOrderNos)); + //鍒犻櫎宸ュ崟 + this.baseMapper.delete(new QueryWrapper<WorkOrder>().in("work_order_no", workOrderNos)); + } + return Result.ok(); + } + + @Override + public Result errorAll() { + List<CascadeOption> results = new ArrayList<>(); + CascadeOption video = new CascadeOption(); + video.setLabel("瑙嗛"); + video.setValue("VIDEO"); + List<ErrorType> videoErr = ErrorType.getErrorTypesByCategory("VIDEO"); + List<ErrorType> videoErr1 = ErrorType.getErrorTypesByCategory("COMMON"); + videoErr.addAll(videoErr1); + List<CascadeOption> videoChildren = videoErr.stream().map(item -> CascadeOption.builder() + .value(item.getValue()) + .label(item.getDesc()) + .build()).collect(Collectors.toList()); + video.setChildren(videoChildren); + + CascadeOption car = new CascadeOption(); + car.setLabel("杞﹁締"); + car.setValue("CAR"); + List<ErrorType> carErr = ErrorType.getErrorTypesByCategory("CAR"); + List<ErrorType> carErr1 = ErrorType.getErrorTypesByCategory("COMMON"); + List<ErrorType> carErr2 = ErrorType.getErrorTypesByCategory("CARORFACE"); + carErr.addAll(carErr1); + carErr.addAll(carErr2); + List<CascadeOption> carChildren = carErr.stream().map(item -> CascadeOption.builder() + .value(item.getValue()) + .label(item.getDesc()) + .build()).collect(Collectors.toList()); + car.setChildren(carChildren); + + CascadeOption face = new CascadeOption(); + face.setLabel("浜鸿劯"); + face.setValue("FACE"); + List<ErrorType> faceErr = ErrorType.getErrorTypesByCategory("FACE"); + List<ErrorType> faceErr1 = ErrorType.getErrorTypesByCategory("COMMON"); + List<ErrorType> faceErr2 = ErrorType.getErrorTypesByCategory("CARORFACE"); + faceErr.addAll(faceErr1); + faceErr.addAll(faceErr2); + List<CascadeOption> faceChildren = faceErr.stream().map(item -> CascadeOption.builder() + .value(item.getValue()) + .label(item.getDesc()) + .build()).collect(Collectors.toList()); + face.setChildren(faceChildren); + + results.add(video); + results.add(car); + results.add(face); + return Result.ok().data(results); + } } diff --git a/ycl-server/src/main/java/com/ycl/task/ContractTask.java b/ycl-server/src/main/java/com/ycl/task/ContractTask.java index ca1e987..44702c0 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -222,31 +222,31 @@ } String errorType = workOrder.getErrorType(); //瀛樺偍鏁呴殰 褰曞儚鎴栧浘鐗囪闂紓甯� - if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) { - if (!CollectionUtils.isEmpty(storeRuleMap)) { - storeRuleMap.forEach((contractId, rules) -> { - Integer unitId = rules.get(0).getUnitId(); - //鎵惧埌瀵瑰簲鐨勮鍒� - if (workOrder.getUnitId().equals(unitId)) { - //宸ュ崟涓嬪彂鏃堕棿 - Date createTime = workOrder.getDistributeTime(); - Date auditTime = workOrder.getAuditTime(); - double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60); - //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯 - for (CalculateRuleVO rule : rules) { - if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { - double deductScore = rule.getCalcFraction() * Math.ceil(diffTime); - ContractScore contractScore = getContractScore(rule, deductScore, Math.round(diffTime * 100) / 100 + "", Remark + "宸ュ崟缂栧彿涓�:" + workOrder.getWorkOrderNo() + "澶勭悊瓒呮椂锛屾墸闄�" + deductScore + "鍒�"); - contractScoreList.add(contractScore); - workOrderList.add(workOrder.getWorkOrderNo()); - } - } - } - }); - } - } +// if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) { +// if (!CollectionUtils.isEmpty(storeRuleMap)) { +// storeRuleMap.forEach((contractId, rules) -> { +// Integer unitId = rules.get(0).getUnitId(); +// //鎵惧埌瀵瑰簲鐨勮鍒� +// if (workOrder.getUnitId().equals(unitId)) { +// //宸ュ崟涓嬪彂鏃堕棿 +// Date createTime = workOrder.getDistributeTime(); +// Date auditTime = workOrder.getAuditTime(); +// double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60); +// //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯 +// for (CalculateRuleVO rule : rules) { +// if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { +// double deductScore = rule.getCalcFraction() * Math.ceil(diffTime); +// ContractScore contractScore = getContractScore(rule, deductScore, Math.round(diffTime * 100) / 100 + "", Remark + "宸ュ崟缂栧彿涓�:" + workOrder.getWorkOrderNo() + "澶勭悊瓒呮椂锛屾墸闄�" + deductScore + "鍒�"); +// contractScoreList.add(contractScore); +// workOrderList.add(workOrder.getWorkOrderNo()); +// } +// } +// } +// }); +// } +// } //鍓嶇鎰熺煡婧愭不鐞嗗伐浣滐紙鏃堕挓鍚屾瑙勫垯銆丱SD瑙勫垯銆佷竴鏈轰竴妗h鍒欙級 - if (ErrorType.MONITOR_UNQUALIFY.getValue().equals(errorType) || ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType)) { + if (ErrorType.POINT_INFO_ERROR.getValue().equals(errorType) || ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType)) { if (!CollectionUtils.isEmpty(monitorRuleMap)) { monitorRuleMap.forEach((contractId, rules) -> { Integer unitId = rules.get(0).getUnitId(); diff --git a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java index 1b3a5ac..91c191c 100644 --- a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java +++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java @@ -122,6 +122,7 @@ if (osdCheckResult != null) { monitor.setDeviceType(osdCheckResult.getDeviceBrand()); } + monitorList.add(monitor); } }); @@ -130,6 +131,8 @@ //鑰佽澶囩姸鎬佹敼涓轰笉鍙備笌鑰冩牳 if (!points.contains(key)) { value.setExamineStatus(Boolean.FALSE); + //鍗曚綅璁剧疆涓虹┖ + value.setUnitId(null); ywPointList.add(value); } }); diff --git a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java index 38a7f89..c00ca77 100644 --- a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java +++ b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java @@ -63,8 +63,8 @@ @Override public TMonitorResult call() { TMonitorResult result = checkPointUtil.check(monitor); - // 涓�澶╁唴鐩戞祴鍒扮绾�1娆′互涓婏紝鐢熸垚宸ュ崟 - if (result.getOffLineCount() >= times) { + // 杩欐涓嶅湪绾夸笖涓�澶╁唴鐩戞祴鍒扮绾�2娆″強浠ヤ笂锛岀敓鎴愬伐鍗� + if (!result.getPingOnline() && result.getOffLineCount() >= times) { WorkOrder workOrder = new WorkOrder(); workOrder.setSerialNumber(result.getNo()); List<String> errList = new ArrayList<>(); diff --git a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java index a3fbf48..cc5fa17 100644 --- a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java +++ b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java @@ -71,6 +71,7 @@ } else { map = new HashMap<>(); } + if (!monitor.getPingOnline()) { try { reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000); @@ -81,6 +82,10 @@ } if (!monitor.getPingOnline()) { offLineTimes++; + List<Date> offLineTime = monitor.getOffLineTime(); + if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>(); + offLineTime.add(new Date()); + monitor.setOffLineTime(offLineTime); } map.put("checkTimes", checkTimes); map.put("offLineTimes", offLineTimes); diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml index af04ecb..5e6b7dd 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml @@ -128,7 +128,7 @@ left join ( WITH cte AS ( SELECT *,row_number() OVER(PARTITION BY serial_number ORDER BY create_time DESC) rn FROM t_work_order - WHERE deleted = 0 AND status == 'AUDITING_SUCCESS' + WHERE deleted = 0 AND status = 'AUDITING_SUCCESS' ) SELECT * FROM cte WHERE rn=1 ) w on m.serial_number = w.serial_number and w.deleted = 0 left join t_yw_unit u on p.unit_id = u.id and u.deleted = 0 diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml index d7da245..12caa67 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml @@ -58,8 +58,8 @@ FROM t_work_order wo INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number - INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0 + INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type' LEFT JOIN t_work_order_check_img ci ON ci.work_order_no = wo.work_order_no LEFT JOIN t_yw_people p ON wo.yw_people_id = p.id AND p.deleted = 0 @@ -68,13 +68,12 @@ <if test="query.unitId != null"> AND wo.unit_id = #{query.unitId} </if> - <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> + <if test="query.errorType != null and query.errorType != ''"> AND (EXISTS ( SELECT 1 FROM t_work_order_error_type twoet WHERE twoet.work_order_no = wo.work_order_no - AND twoet.error_name in - <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType}</foreach> + AND twoet.error_name = #{query.errorType} )) </if> <if test="query.keyword != null and query.keyword != ''"> @@ -118,8 +117,8 @@ t_work_order wo INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no - INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0 INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type' + INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0 LEFT JOIN t_work_order_check_img ci ON ci.work_order_no = wo.work_order_no LEFT JOIN t_yw_people p ON wo.yw_people_id = p.id AND p.deleted = 0 WHERE @@ -136,13 +135,12 @@ <if test="query.start != null and query.end != null"> AND wo.create_time BETWEEN #{query.start} AND #{query.end} </if> - <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> + <if test="query.errorType != null and query.errorType !='' "> AND (EXISTS ( SELECT 1 FROM t_work_order_error_type twoet WHERE twoet.work_order_no = wo.work_order_no - AND twoet.error_name in - <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType}</foreach> + AND twoet.error_name = #{query.errorType} )) </if> GROUP BY @@ -170,9 +168,9 @@ t_work_order wo INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number INNER JOIN t_yw_point yp ON yp.serial_number = wo.serial_number AND yp.deleted = 0 + INNER JOIN t_yw_unit u ON wo.unit_id = u.id and u.deleted = 0 INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type' - INNER JOIN t_yw_unit u ON wo.unit_id = u.id and u.deleted = 0 LEFT JOIN t_yw_people p ON wo.yw_people_id = p.id and p.deleted = 0 LEFT JOIN t_work_order_distribute_record odr ON odr.work_order_no = wo.work_order_no AND odr.deleted = 0 LEFT JOIN sys_user su ON su.user_id = odr.user_id @@ -194,14 +192,12 @@ <if test="query.start != null and query.end != null"> AND wo.create_time BETWEEN #{query.start} AND #{query.end} </if> - <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> + <if test="query.errorType != null and query.errorType != ''"> AND (EXISTS ( SELECT 1 FROM t_work_order_error_type twoet WHERE twoet.work_order_no = wo.work_order_no - AND twoet.error_name in - <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType} - </foreach> + AND twoet.error_name = #{query.errorType} )) </if> GROUP BY @@ -292,8 +288,8 @@ <select id="workOrderTotal" resultType="com.ycl.platform.domain.vo.screen.WorkOrderTotalVO"> SELECT - COUNT(*) AS totalNum, - COUNT(IF(w.status != 'AUDITING_SUCCESS' and w.status != 'WAIT_DISTRIBUTED', 1, NULL)) AS todoNum, + COUNT(IF(w.status != 'WAIT_DISTRIBUTE', 1, NULL)) AS totalNum, + COUNT(IF(w.status != 'AUDITING_SUCCESS' and w.status != 'WAIT_DISTRIBUTE', 1, NULL)) AS todoNum, COUNT(IF(w.status = 'AUDITING_SUCCESS', 1, NULL)) AS doneNum FROM t_work_order w LEFT JOIN t_yw_point p ON w.serial_number = p.serial_number AND p.deleted = 0 @@ -437,5 +433,22 @@ p.yw_person_name </select> - + <select id="batchGetByError" resultType="com.ycl.platform.domain.entity.WorkOrder"> + select wo.id,wo.unit_id,wo.work_order_no,wo.serial_number + from t_work_order wo + <where> + wo.deleted = 0 and wo.status = 'YW_HANDLE' + <if test="form.errorTypes != null and form.errorTypes.size() > 0"> + AND (EXISTS ( + SELECT 1 + FROM t_work_order_error_type twoet + WHERE twoet.work_order_no = wo.work_order_no + AND twoet.error_name in + <foreach collection="form.errorTypes" open="(" separator="," close=")" item="errorType"> + #{errorType} + </foreach> + )) + </if> + </where> + </select> </mapper> diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderYwConditionRecordMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderYwConditionRecordMapper.xml index 1697b67..992bf4f 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderYwConditionRecordMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderYwConditionRecordMapper.xml @@ -11,10 +11,11 @@ <result column="unit_name" property="unitName"/> <result column="sys_msg" property="sysMsg"/> <result column="yw_proofMaterials" property="ywProofMaterials"/> + <result column="user_id" property="userId"/> </resultMap> <select id="selectYwConditionByYwId" resultMap="BaseResultMap"> - SELECT DISTINCT yw.id, yu.id as unit_id, yu.unit_name,yw.yw_condition, yw.yw_proofMaterials ,yw.create_time, yw.sys_msg, su.nick_name + SELECT DISTINCT yw.id, yu.id as unit_id, yu.unit_name,yw.yw_condition, yw.yw_proofMaterials ,yw.create_time, yw.sys_msg, su.nick_name,su.user_id FROM t_work_order_yw_condition_record yw LEFT JOIN sys_user su ON yw.commit_user = su.user_id AND yw.deleted = 0 LEFT JOIN t_yw_unit yu ON su.unit_id = yu.id diff --git a/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml index b88a779..6f84271 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml @@ -57,14 +57,12 @@ <if test="query.start != null and query.end != null"> AND wo.create_time BETWEEN #{query.start} AND #{query.end} </if> - <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> + <if test="query.errorType != null and query.errorType !='' "> AND (EXISTS ( SELECT 1 FROM t_work_order_error_type twoet WHERE twoet.work_order_no = wo.work_order_no - AND twoet.error_name in - <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType} - </foreach> + AND twoet.error_name = #{query.errorType} )) </if> </select> -- Gitblit v1.8.0