From a0b351623b07302636a7b0c3ea5a92253bb3c5b1 Mon Sep 17 00:00:00 2001 From: Jone <515616805@qq.com> Date: Fri, 8 Mar 2024 11:05:29 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=B3=A8=E9=87=8A=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hzims-service/operational/pom.xml | 2 +- .../defect/controller/OperDefectController.java | 51 --------------------- .../controller/OperDefectStatisticsController.java | 52 ---------------------- .../controller/OperPhenomenonController.java | 35 --------------- .../controller/DistributeWorkOrderController.java | 2 + .../operational/workOrder/dto/GrabPackageDTO.java | 1 + .../workOrder/dto/InspectionOrderContentDTO.java | 2 +- .../workOrder/dto/InspectionOrderDTO.java | 1 + .../workOrder/dto/MaintOrderContentDTO.java | 1 + .../operational/workOrder/dto/MaintOrderDTO.java | 1 + .../operational/workOrder/dto/OrderPackageDto.java | 1 + .../operational/workOrder/dto/OtherOrderDTO.java | 1 + .../hzims/operational/workOrder/dto/Publisher.java | 1 + .../workOrder/dto/RepairOrderAcptDto.java | 1 + .../workOrder/dto/RepairOrderContentDTO.java | 1 + .../workOrder/dto/RepairOrderPrognosisDTO.java | 1 + .../hzims/operational/workOrder/dto/TenderDto.java | 1 + .../service/IDistributeWorkOrderService.java | 2 +- .../impl/DistributeWorkOrderServiceImpl.java | 1 + 19 files changed, 17 insertions(+), 141 deletions(-) diff --git a/hzims-service/operational/pom.xml b/hzims-service/operational/pom.xml index 7f60701..e124c05 100644 --- a/hzims-service/operational/pom.xml +++ b/hzims-service/operational/pom.xml @@ -4,7 +4,7 @@ com.hnac.hzims hzims-service - 4.0.0-SNAPSHOT + 4.0.0.5-SNAPSHOT 4.0.0 diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectController.java index b1d5fac..c5eba9b 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectController.java @@ -72,57 +72,6 @@ public class OperDefectController extends BladeController { return R.data(page); } - - /* - */ -/** - * 新增 代码自定义代号 - */ /* - - @PostMapping("/save") - @ApiOperationSupport(order = 4) - @ApiOperation(value = "新增", notes = "传入defect") - public R save(@Valid @RequestBody OperDefectEntity defect) { - return R.status(defectService.save(defect)); - } - - */ -/** - * 修改 代码自定义代号 - */ /* - - @PostMapping("/update") - @ApiOperationSupport(order = 5) - @ApiOperation(value = "修改", notes = "传入defect") - public R update(@Valid @RequestBody OperDefectEntity defect) { - return R.status(defectService.updateById(defect)); - } - - */ -/** - * 新增或修改 代码自定义代号 - */ /* - - @PostMapping("/submit") - @ApiOperationSupport(order = 6) - @ApiOperation(value = "新增或修改", notes = "传入defect") - public R submit(@Valid @RequestBody OperDefectEntity defect) { - return R.status(defectService.saveOrUpdate(defect)); - } -*/ - - - /* */ - - /** - * 删除 代码自定义代号 - */ /* - @PostMapping("/remove") - @ApiOperationSupport(order = 7) - @ApiOperation(value = "逻辑删除", notes = "传入ids") - public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { - return R.status(defectService.deleteLogic(Func.toLongList(ids))); - }*/ @PostMapping("/handleProcess") @ApiOperationSupport(order = 4) @ApiOperation(value = "执行问题处理流程", notes = "执行问题处理流程") diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectStatisticsController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectStatisticsController.java index 9290f04..ed687cd 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectStatisticsController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperDefectStatisticsController.java @@ -107,12 +107,6 @@ public class OperDefectStatisticsController extends BladeController { public void exportDefectList(HttpServletResponse response,@RequestBody OperDefectStatisticsVO entity) { try { long timeMillis = System.currentTimeMillis(); -// if(ObjectUtil.isEmpty(entity.getCreateTime())&&ObjectUtil.isEmpty(entity.getCreateEndTime())){ -// LocalDateTime date = LocalDateTime.now(); -// LocalDateTime firstDay = date.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0); -// entity.setCreateTime(Date.from(firstDay.atZone(ZoneId.systemDefault()).toInstant())); -// entity.setCreateEndTime(new Date()); -// } response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("UTF-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 @@ -121,18 +115,14 @@ public class OperDefectStatisticsController extends BladeController { LambdaQueryWrapper queryWrapper = statisticsService.getQueryWrapper(entity); List list = statisticsService.list(queryWrapper); long timeMillis1 =System.currentTimeMillis()- timeMillis; - System.out.println("查询对应实例类耗时============================"+ timeMillis1); List defectStatisticsExportVO = statisticsService.getDefectStatisticsExportVO(list); long timeMillis2 =System.currentTimeMillis()- timeMillis; - System.out.println("参数转换耗时============================"+ timeMillis2); if(defectStatisticsExportVO!=null && defectStatisticsExportVO.size()>0){ - System.out.println("---------------- size = " + defectStatisticsExportVO.size()); // 这里需要设置不关闭流 EasyExcel.write(response.getOutputStream(), OperDefectStatisticsExportVO.class).autoCloseStream(Boolean.FALSE).sheet("缺陷统计报表") .doWrite(defectStatisticsExportVO); } } catch (Exception e) { - System.out.println("exportExcel = " + e); // 重置response response.reset(); response.setContentType("application/json"); @@ -162,48 +152,6 @@ public class OperDefectStatisticsController extends BladeController { } /** - * 新增 代码自定义代号 - *//* - @PostMapping("/save") - @ApiOperationSupport(order = 4) - @ApiOperation(value = "新增", notes = "传入statistics") - public R save(@Valid @RequestBody OperDefectStatisticsEntity statistics) { - return R.status(statisticsService.save(statistics)); - } - - *//** - * 修改 代码自定义代号 - *//* - @PostMapping("/update") - @ApiOperationSupport(order = 5) - @ApiOperation(value = "修改", notes = "传入statistics") - public R update(@Valid @RequestBody OperDefectStatisticsEntity statistics) { - return R.status(statisticsService.updateById(statistics)); - } - - *//** - * 新增或修改 代码自定义代号 - *//* - @PostMapping("/submit") - @ApiOperationSupport(order = 6) - @ApiOperation(value = "新增或修改", notes = "传入statistics") - public R submit(@Valid @RequestBody OperDefectStatisticsEntity statistics) { - return R.status(statisticsService.saveOrUpdate(statistics)); - } - - - *//** - * 删除 代码自定义代号 - *//* - @PostMapping("/remove") - @ApiOperationSupport(order = 7) - @ApiOperation(value = "逻辑删除", notes = "传入ids") - public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { - return R.status(statisticsService.deleteLogic(Func.toLongList(ids))); - }*/ - - - /** * 巡检任务统计 * @return */ diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperPhenomenonController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperPhenomenonController.java index 11c37b0..ebf3a27 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperPhenomenonController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/controller/OperPhenomenonController.java @@ -79,43 +79,9 @@ public class OperPhenomenonController extends BladeController { public R> list(OperAppearanceVO phenomenon, Query query) { LambdaQueryWrapper queryWrapper = operAppearanceService.getQueryWrapper(phenomenon); IPage pages = operAppearanceService.page(Condition.getPage(query), queryWrapper); -// IPage vos = OperPhenomenonWrapper.build().pageVO(pages); return R.data(pages); } - - //此端口弃用20230621 -// /** -// * 新增 代码自定义代号 -// */ -// @PostMapping("/save") -// @ApiOperationSupport(order = 4) -// @ApiOperation(value = "提交现象,现象提交后不能修改", notes = "传入phenomenon") -// public R save(@Valid @RequestBody OperPhenomenonEntity phenomenon) { -// return R.data(phenomenonService.submit(phenomenon)); -// } - - /* */ /** - * 修改 代码自定义代号 - */ /* - @PostMapping("/update") - @ApiOperationSupport(order = 5) - @ApiOperation(value = "修改", notes = "传入phenomenon") - public R update(@Valid @RequestBody OperPhenomenonEntity phenomenon) { - return R.status(phenomenonService.updateById(phenomenon)); - } - - */ /** - * 新增或修改 代码自定义代号 - */ /* - @PostMapping("/submit") - @ApiOperationSupport(order = 6) - @ApiOperation(value = "新增或修改", notes = "传入phenomenon") - public R submit(@Valid @RequestBody OperPhenomenonEntity phenomenon) { - return R.status(phenomenonService.saveOrUpdate(phenomenon)); - }*/ - - /** * 删除 代码自定义代号 */ @@ -131,7 +97,6 @@ public class OperPhenomenonController extends BladeController { @ApiOperation(value = "处理问题甄别流程", notes = "处理问题甄别流程") public R handleCheckProcess(@RequestBody @ObjectRequiredInvalid(attributes = {"taskId", "processInstanceId", "comment", "flag", "variables.pass"}, message = "参数不能为空") BladeFlow flow) { - //@DictInvalid(dictKey = "") return R.status(phenomenonService.handleCheckProcess(flow)); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/controller/DistributeWorkOrderController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/controller/DistributeWorkOrderController.java index 8734551..545f392 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/controller/DistributeWorkOrderController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/controller/DistributeWorkOrderController.java @@ -18,12 +18,14 @@ import java.util.List; /** * @author hx + * 和水务进行对接,IMS无用。20240308,wxq */ @RestController @AllArgsConstructor @Slf4j @RequestMapping("/token/distribute/workOrder") @Api(value = "派发工单",tags = "派发工单") +@Deprecated public class DistributeWorkOrderController { private final IDistributeWorkOrderService distributeWorkOrderService; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/GrabPackageDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/GrabPackageDTO.java index b080213..d04aa71 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/GrabPackageDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/GrabPackageDTO.java @@ -8,6 +8,7 @@ import java.util.List; @Data @ApiModel(value = "抢单受理参数对象",description = "抢单受理参数对象") +@Deprecated public class GrabPackageDTO { @ApiModelProperty("水厂名称") diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderContentDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderContentDTO.java index 5c64490..2f37e47 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderContentDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderContentDTO.java @@ -1,4 +1,4 @@ package com.hnac.hzims.operational.workOrder.dto; - +@Deprecated public class InspectionOrderContentDTO { } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderDTO.java index 9b9842e..7b1ba6c 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/InspectionOrderDTO.java @@ -8,6 +8,7 @@ import java.util.List; @Data @ApiModel(value = "巡检工单列表",description = "巡检工单列表") +@Deprecated public class InspectionOrderDTO { @ApiModelProperty("异常设备数") private Integer equAbnormal; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderContentDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderContentDTO.java index d73d82e..d537027 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderContentDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderContentDTO.java @@ -8,6 +8,7 @@ import lombok.Data; @ApiModel(value = "MaintOrderContentDTO对象",description = "MaintOrderContentDTO对象") @Data +@Deprecated public class MaintOrderContentDTO { @ApiModelProperty("润滑内容") private String content; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderDTO.java index a610e28..777ce37 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/MaintOrderDTO.java @@ -10,6 +10,7 @@ import java.util.List; @Data @ApiModel(value = "MaintOrderDTO对象",description = "MaintOrderDTO对象") +@Deprecated public class MaintOrderDTO { @ApiModelProperty("所属大区") private String belongArea; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OrderPackageDto.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OrderPackageDto.java index 815ce60..65e0771 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OrderPackageDto.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OrderPackageDto.java @@ -13,6 +13,7 @@ import java.util.List; */ @Data @ApiModel(value = "工单包受理对象", description = "工单包受理对象") +@Deprecated public class OrderPackageDto { @ApiModelProperty("竞标主键ID") private String id; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OtherOrderDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OtherOrderDTO.java index da82f3e..8604051 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OtherOrderDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/OtherOrderDTO.java @@ -7,6 +7,7 @@ import lombok.Data; @Data @ApiModel(value = "OtherOrderDTO对象",description = "OtherOrderDTO对象") +@Deprecated public class OtherOrderDTO { @ApiModelProperty("工单类型 5防腐工单6大修工单7重置工单8临时通用工单") private String orderType; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/Publisher.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/Publisher.java index a3f6dcf..e1c7ac8 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/Publisher.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/Publisher.java @@ -6,6 +6,7 @@ import lombok.Data; @Data @ApiModel(value = "发布人信息", description = "发布人信息") +@Deprecated public class Publisher { @ApiModelProperty("联系地址") private String contactAddress; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderAcptDto.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderAcptDto.java index 01a0425..ef7a68d 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderAcptDto.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderAcptDto.java @@ -10,6 +10,7 @@ import java.util.List; @Data @ApiModel(value = "RepairOrderAcptDto对象", description = "RepairOrderAcptDto对象") +@Deprecated public class RepairOrderAcptDto { @ApiModelProperty("报修人") private String createUser; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderContentDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderContentDTO.java index a7a8075..eb7fccc 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderContentDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderContentDTO.java @@ -8,6 +8,7 @@ import lombok.Data; @Data @ApiModel(value = "RepairOrderContentDTO对象",description = "RepairOrderContentDTO对象") +@Deprecated public class RepairOrderContentDTO { @ApiModelProperty("报修人") private String createUser; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderPrognosisDTO.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderPrognosisDTO.java index bfbf258..cc5b967 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderPrognosisDTO.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/RepairOrderPrognosisDTO.java @@ -6,6 +6,7 @@ import lombok.Data; @Data @ApiModel(value = "RepairOrderPrognosisDTO对象",description = "RepairOrderPrognosisDTO对象") +@Deprecated public class RepairOrderPrognosisDTO { @ApiModelProperty("故障原因描述") private String cause; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/TenderDto.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/TenderDto.java index e6d3ccb..2454662 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/TenderDto.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/dto/TenderDto.java @@ -10,6 +10,7 @@ import java.util.List; @Data @ApiModel(value = "招标信息",description = "招标信息") +@Deprecated public class TenderDto { @ApiModelProperty("备注") private String orderRemark; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/IDistributeWorkOrderService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/IDistributeWorkOrderService.java index bb5caa8..77e7955 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/IDistributeWorkOrderService.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/IDistributeWorkOrderService.java @@ -3,7 +3,7 @@ package com.hnac.hzims.operational.workOrder.service; import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; import com.hnac.hzims.operational.defect.entity.OperDefectEntity; import org.springblade.core.tool.api.R; - +@Deprecated public interface IDistributeWorkOrderService { /** * 派发检修任务 diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/impl/DistributeWorkOrderServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/impl/DistributeWorkOrderServiceImpl.java index d7d25f8..059bdec 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/impl/DistributeWorkOrderServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/workOrder/service/impl/DistributeWorkOrderServiceImpl.java @@ -44,6 +44,7 @@ import java.util.Set; @Slf4j @RequiredArgsConstructor @Service +@Deprecated public class DistributeWorkOrderServiceImpl implements IDistributeWorkOrderService { private final IEmInfoClient emInfoClient; private final ISysClient sysClient; From 9239b230d8a95769c04f1853b9030feefcd4c785 Mon Sep 17 00:00:00 2001 From: Jone <515616805@qq.com> Date: Fri, 8 Mar 2024 11:59:01 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=9B=9E=E5=A4=8Dpom=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E4=B8=BA4.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hzims-service/operational/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/operational/pom.xml b/hzims-service/operational/pom.xml index e124c05..7f60701 100644 --- a/hzims-service/operational/pom.xml +++ b/hzims-service/operational/pom.xml @@ -4,7 +4,7 @@ com.hnac.hzims hzims-service - 4.0.0.5-SNAPSHOT + 4.0.0-SNAPSHOT 4.0.0 From fa21c630ff4ff501039c3977660a411b3ca94dda Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Fri, 8 Mar 2024 13:53:57 +0800 Subject: [PATCH 3/7] =?UTF-8?q?#=20=E6=93=8D=E4=BD=9C=E7=A5=A8=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/template/电气操作票.docx | Bin 43308 -> 49967 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hzims-service/ticket/src/main/resources/template/电气操作票.docx b/hzims-service/ticket/src/main/resources/template/电气操作票.docx index 2a8cc1bca32a75a910dd2ac423ea244cb12780da..38722490fe8ca9d054cb9b6e41de0486f893f8a7 100644 GIT binary patch delta 26452 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 g7pym|hrPvR=E=s7$r$h@ix zrA+4)SU2D7x&Sy2he*IEWQ(I{DJ>9Nu4>(ws zeext^#sRo0_|}qFlTw$RvZLhUW6BC8qs~+tv0xm~qf1C3k_ zLi97jU?6;3O`Lht)PAMjVLR{>Z^vLxH^x8y{*7csOMZic>EHHdP(=yCA6K0yxn->6oMWIyvJxsom!XK&;*OVV2K0M~<|1vcd^g5svrNco- zdObu+!=96l6fhR>Oa&IVCLlTaREI2Uft0hKt|B2N&6@Qfz$pQtfH5ak`(nI#D&P-W zzML>H&MK+-o-c)Aa=d^22p*Qy8#l%$CMZbgq*%jBzR?N>4g>A=SRj4F`JzkfuV&5xgB^xaiV zlY8m_s?=Jm+Du`KxA57Y|6kw`s%XuMxrUCRLAbci^quyIvQM1RNJ+{l{3J( zV0>sjTf<&U=7-Izzazl_ljD)m(lC}pg{|#v=WmTcjQwC_6~rxz&cw1ZabU>4n^==D z7={m+uGMWdN~w@HeHf_LR*b6555f+N0f;>fRdwMpv{4KVP=XLXRaDO3QFlm*Gay1; zj-*brgaJz)i3*M~s$j-st4IF~X zyXj}S(~~hYcI1lI%Kn$6+~wR3JNHsLVt)J)?`3Jm#_#4iyO-f|R@QZ4-(pYWw zR=4MqW$8l`^XdrP_ycV&mrtxu2{I*Te;7|)Mrg&18b*JWaNjMbdcR+@(>azhE6kOk zG>zIf(J{@#$+|ZX)@()afSWfzs>9z?<`!#7jtY4YCh@FZbLJz(HfPFHv)Oj__h&!-v-)5DH*p<0sBe9#&2sraIm( zR_;%^y&N6tlhoB|AHsU}6tJWZOv@{tkP+(6xUg$P;tew?w0=1G+4~(;%O=_8-$xp$ zQLCz;kJK~rUB_lEei}rV>)V&vL@4@BzdQ2z#NqP!!On*;u}{wODHTfW8RWepDBG_@ zqop(IAT#E~E+_Udi(%;>`F zi-#V6I`F5}2ez>ZgseLn3)veprKrrWa?XiUI)-YQRKf+-&hmd`#iEU*9#h=h3oQ(6 zM6&)m!8}IZ{c8A&DRVkJM$i^f>ckR39n)wC?qj0j zn!~=(cI=lco|M1cEcW%aoX5l})l>t+3O*5!_JZyzv^6`V5LE zd&*9~iHmEJ)!moV?~u@f^qOebP{zTfg#2qZ@xM3jUnjzWFoM_o5C3dx^iG}-Zc{y) zJ)akMz8;Ot7r;3|zsVQC#lxV7^F?tVV$j3|O1ShUX#D~SoImK4f@lA{l?(c+K#2A~ z-&o}4-^{`B&-|OwT7@jM|GeD=1acG1N&f9ze~*8DuZvDBl)O<59QPkHoao$Q4w3tf z|Mtn$&C0=@=f79xzk2(B&P=Nj_`U*eLlZi(h>P}Ldwk+U{%fH+(BnnoIHzb>u>?*e zTBBGD2a1jZuT|(z#e%rg7HD+~IGVl$X7b->VgFU`#*F{Noa}!u?SE`8P6Mj{&%*w@ z>CuWMEVTb|JBw!!2-$!6{xdqFL=@*6x~D`C_Zk!WPYDAlErb@5MF4^Lw){=`zW}yL B^0@#2 delta 19726 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 KS5I=;t^WbVOelH) From d2af1de45078e1cdc87e3682eea04f07bf5836f6 Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Fri, 8 Mar 2024 13:54:54 +0800 Subject: [PATCH 4/7] =?UTF-8?q?#=20=E9=9A=90=E6=82=A3=E6=8E=92=E6=9F=A5?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safeproduct/hiddenDanger/schedule/HiddenDangerPlanSchedule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/hiddenDanger/schedule/HiddenDangerPlanSchedule.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/hiddenDanger/schedule/HiddenDangerPlanSchedule.java index 844116b..94c1f56 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/hiddenDanger/schedule/HiddenDangerPlanSchedule.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/hiddenDanger/schedule/HiddenDangerPlanSchedule.java @@ -125,7 +125,8 @@ public class HiddenDangerPlanSchedule { // 已经生成过任务的计划 List existTaskPlanList = hdPlanService.list(Wrappers.lambdaQuery() .eq(HDPlanEntity::getStatus, Constants.PlanStatusEnum.HAVE.getStatus()) - .eq(HDPlanEntity::getNextGenerateTaskTime,LocalDateTime.of(currentDate,LocalTime.MIN)) + .ge(HDPlanEntity::getNextGenerateTaskTime,LocalDateTime.of(currentDate,LocalTime.MIN)) + .le(HDPlanEntity::getNextGenerateTaskTime,LocalDateTime.of(currentDate,LocalTime.MAX)) .eq(HDPlanEntity::getEnable,true) ); if(CollectionUtil.isNotEmpty(existTaskPlanList)) { From d69fe57d244b8ff608cc263a5ceb89ff1e363671 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Fri, 8 Mar 2024 14:20:31 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E9=9A=90=E6=82=A3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/constant/TicketProcessConstant.java | 10 ++++ .../safeproduct/feign/ISafeInnerDangerClient.java | 31 +++++++++++ .../feign/ISafeInnerDangerClientFallback.java | 21 +++++++ .../serviceimpl/HazardRiskServiceImpl.java | 52 +++++++++++++++++ .../serviceimpl/HiddenDangerFlowServiceImpl.java | 65 ++++++++++++++++++++++ 5 files changed, 179 insertions(+) create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClient.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClientFallback.java create mode 100644 hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HazardRiskServiceImpl.java create mode 100644 hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HiddenDangerFlowServiceImpl.java diff --git a/hzims-service-api/middle-api/src/main/java/com/hnac/hzims/middle/process/constant/TicketProcessConstant.java b/hzims-service-api/middle-api/src/main/java/com/hnac/hzims/middle/process/constant/TicketProcessConstant.java index e4a7222..d0b79d3 100644 --- a/hzims-service-api/middle-api/src/main/java/com/hnac/hzims/middle/process/constant/TicketProcessConstant.java +++ b/hzims-service-api/middle-api/src/main/java/com/hnac/hzims/middle/process/constant/TicketProcessConstant.java @@ -64,4 +64,14 @@ public class TicketProcessConstant { * 线下工作票 */ public static final String OFFLINE_WORK_TICKET = "offlineWorkTicket"; + /** + * 隐患流程标识 + */ + public static final String HIDDEN_DANGER_CHECK = "hiddenDangerCheck"; + + + /** + * 风险排查标识 + */ + public static final String HAZARD_RISK = "hazard_risk"; } diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClient.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClient.java new file mode 100644 index 0000000..c2aa068 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClient.java @@ -0,0 +1,31 @@ +package com.hnac.hzims.safeproduct.feign; + +import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; +import com.hnac.hzims.safeproduct.Constants; +import org.springblade.core.tool.api.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + + +/** + * @author xiashandong + * @created 2021/6/10 15:21 + **/ +@FeignClient( + value = Constants.APP_NAME, + fallback = ISafeInnerDangerClientFallback.class +) +public interface ISafeInnerDangerClient { + + String API_PREFIX = "/feign/hiddenDangerStart"; + + String SAVE_HIDDENDANGER = API_PREFIX + "/saveHiddenDanger"; + + + @PostMapping(SAVE_HIDDENDANGER) + R saveDefect(@RequestBody ProcessWorkFlowResponse processWorkFlowResponse); + + + +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClientFallback.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClientFallback.java new file mode 100644 index 0000000..b5a84ad --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/feign/ISafeInnerDangerClientFallback.java @@ -0,0 +1,21 @@ +package com.hnac.hzims.safeproduct.feign; + +import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.tool.api.R; +import org.springframework.stereotype.Component; + + +/** + * @author ysj + */ +@Slf4j +@Component +public class ISafeInnerDangerClientFallback implements ISafeInnerDangerClient { + + @Override + public R saveDefect(ProcessWorkFlowResponse processWorkFlowResponse) { + log.error("远程调用失败,接口:" + SAVE_HIDDENDANGER); + return null; + } +} diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HazardRiskServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HazardRiskServiceImpl.java new file mode 100644 index 0000000..640b8a7 --- /dev/null +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HazardRiskServiceImpl.java @@ -0,0 +1,52 @@ +package com.hnac.hzims.middle.processflow.strategy.serviceimpl; + +import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; +import com.hnac.hzims.middle.processflow.service.ProcessDictService; +import com.hnac.hzims.middle.processflow.strategy.abstracts.ProcessAbstractService; +import com.hnac.hzims.middle.processflow.strategy.entity.WorkflowQueue; +import com.hnac.hzims.safeproduct.risk.feign.IHazardRiskClient; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.tool.api.R; +import org.springframework.stereotype.Service; + +import static com.hnac.hzims.middle.process.constant.TicketProcessConstant.HAZARD_RISK; + +/** + * @author ysj + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class HazardRiskServiceImpl extends ProcessAbstractService { + + private final IHazardRiskClient hazardRiskClient; + + private final ProcessDictService processDictService; + + + /** + * 消息确认 + * @param flowQueue + * @return + */ + @Override + public Boolean isWorkflowProcess(WorkflowQueue flowQueue) { + String dictValue = processDictService.selectDictValueByKey(HAZARD_RISK); + return dictValue.equals(flowQueue.getProcessDefinitionKey()); + } + + /** + * 调用检修业务处理 + * @param response + */ + @Override + public void calculate(ProcessWorkFlowResponse response) { + R defect = hazardRiskClient.listener(response); + if (!defect.isSuccess()) { + throw new ServiceException("检修任务业务执行异常!"); + + } + } +} diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HiddenDangerFlowServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HiddenDangerFlowServiceImpl.java new file mode 100644 index 0000000..c3c6d28 --- /dev/null +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/HiddenDangerFlowServiceImpl.java @@ -0,0 +1,65 @@ +package com.hnac.hzims.middle.processflow.strategy.serviceimpl; + +import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; +import com.hnac.hzims.middle.processflow.service.ProcessDictService; +import com.hnac.hzims.middle.processflow.strategy.abstracts.ProcessAbstractService; +import com.hnac.hzims.middle.processflow.strategy.entity.WorkflowQueue; +import com.hnac.hzims.safeproduct.feign.ISafeInnerDangerClient; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.tool.api.R; +import org.springframework.stereotype.Service; + +import static com.hnac.hzims.middle.process.constant.TicketProcessConstant.HIDDEN_DANGER_CHECK; + +/** + * 隐患排查 + * + * @Author ty + * @Version v1.0 + * @Serial 1.0 + * @Date 2023/9/18 9:04 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class HiddenDangerFlowServiceImpl extends ProcessAbstractService { + + + private final ProcessDictService processDictService; + + + private final ISafeInnerDangerClient iSafeInnerDangerClient; + + /** + * 设置执行那种实现类 + * + * @param flowQueue + * @return + */ + @Override + public Boolean isWorkflowProcess(WorkflowQueue flowQueue) { + String dictValue = processDictService.selectDictValueByKey(HIDDEN_DANGER_CHECK); + if (dictValue.equals(flowQueue.getProcessDefinitionKey())) { + log.info("已执行隐患排查工作流程环节操作~~~~"); + return true; + } + log.error("未执行隐患排查流程环节操作,请联系管理员~~~~"); + return false; + } + + + /** + * 隐患排查业务方法 + * + * @param response + */ + @Override + public void calculate(ProcessWorkFlowResponse response) { + R dealtDutyRecFlow = iSafeInnerDangerClient.saveDefect(response); + if (!dealtDutyRecFlow.isSuccess()){ + throw new ServiceException("隐患排查流程失败"); + } + } +} From 88eaf665ba41c3340ee467086928f6561e4b6466 Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Fri, 8 Mar 2024 15:07:03 +0800 Subject: [PATCH 6/7] =?UTF-8?q?#=20=E6=9C=BA=E5=99=A8=E4=BA=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E3=80=81=E6=95=B0=E6=8D=AE=E7=9C=8B=E6=9D=BF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzinfo/inspect/ai/entity/RobotEntity.java | 16 +++++ .../inspect/ai/controller/RobotController.java | 23 ++++++- .../inspect/ai/dto/robot/RobotInstanceDTO.java | 35 ++++++++++ .../hzinfo/inspect/ai/service/IRobotService.java | 19 ++++++ .../inspect/ai/service/impl/RobotServiceImpl.java | 79 ++++++++++++++++++++++ .../inspect/ai/vo/robot/RobotRealDataVO.java | 45 ++++++++++++ .../hzinfo/inspect/constants/ParamConstants.java | 11 +++ .../inspect/src/main/resources/db/2.0.0.sql.1 | 5 +- .../risk/controller/RiskCheckController.java | 2 +- 9 files changed, 232 insertions(+), 3 deletions(-) create mode 100644 hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/dto/robot/RobotInstanceDTO.java create mode 100644 hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/vo/robot/RobotRealDataVO.java create mode 100644 hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/constants/ParamConstants.java diff --git a/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/ai/entity/RobotEntity.java b/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/ai/entity/RobotEntity.java index 3a02a3c..e179398 100644 --- a/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/ai/entity/RobotEntity.java +++ b/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/ai/entity/RobotEntity.java @@ -11,6 +11,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; + +import javax.validation.constraints.NotBlank; import java.util.Date; import java.time.LocalDateTime; @@ -28,6 +30,10 @@ public class RobotEntity extends TenantEntity { private static final long serialVersionUID = 4503880134032836625L; + @ApiModelProperty(value = "站点编号") + @QueryField(condition = SqlCondition.EQUAL) + private String stationCode; + /** * 机器人用户ID */ @@ -35,11 +41,16 @@ public class RobotEntity extends TenantEntity { @ApiModelProperty(value = "机器人用户ID") private Long userId; + @ApiModelProperty("机器人编号") + @QueryField(condition = SqlCondition.LIKE) + private String code; + /** * 机器人带的摄像头ID */ @QueryField(condition = SqlCondition.EQUAL) @ApiModelProperty(value = "机器人带的摄像头ID, 多个摄像头通过 , 隔开") + @NotBlank private String cameraId; /** @@ -47,8 +58,13 @@ public class RobotEntity extends TenantEntity { */ @QueryField(condition = SqlCondition.LIKE) @ApiModelProperty(value = "机器人名称") + @NotBlank(message = "巡检机器人名称不能为空") private String name; + @ApiModelProperty(value = "是否绑定设备实例") + @QueryField(condition = SqlCondition.EQUAL) + private Boolean isDeviceInstance; + /** * 描述信息 */ diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/controller/RobotController.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/controller/RobotController.java index 8454994..12cec92 100644 --- a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/controller/RobotController.java +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/controller/RobotController.java @@ -7,26 +7,35 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.hnac.hzims.common.logs.annotation.OperationAnnotation; import com.hnac.hzims.common.logs.enums.BusinessType; import com.hnac.hzims.common.logs.enums.OperatorType; +import com.hnac.hzinfo.inspect.ai.dto.robot.RobotInstanceDTO; import com.hnac.hzinfo.inspect.ai.vo.robot.RobotAiReturnData; +import com.hnac.hzinfo.inspect.ai.vo.robot.RobotRealDataVO; import com.hnac.hzinfo.inspect.ai.vo.robot.RobotServerTaskParam; +import com.hnac.hzinfo.inspect.obj.utils.CodeUtils; +import com.hnac.hzinfo.sdk.v5.device.client.DeviceClient; +import com.hnac.hzinfo.sdk.v5.device.vo.VirtualDeviceDTO; import io.swagger.annotations.*; import lombok.AllArgsConstructor; import javax.validation.Valid; import lombok.SneakyThrows; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import com.hnac.hzinfo.inspect.ai.entity.RobotEntity; import com.hnac.hzinfo.inspect.ai.service.IRobotService; + +import java.util.List; import java.util.Map; /** @@ -80,6 +89,7 @@ public class RobotController extends BladeController { @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入st_robot") public R save(@Valid @RequestBody RobotEntity st_robot) { + st_robot.setCode("robot"+CodeUtils.randomCode()); return R.status(st_robotService.save(st_robot)); } @@ -131,6 +141,17 @@ public class RobotController extends BladeController { return R.data(bladeFile); } + @PostMapping("/generateDeviceInstance") + @ApiOperationSupport(order = 10) + @ApiOperation(value = "生成机器人设备实例", notes = "生成机器人设备实例") + public R generateDeviceInstance(@RequestBody @Validated RobotInstanceDTO device) { + return R.status(st_robotService.generateDeviceInstance(device)); + } - + @PostMapping("/getRealDataByRobotCode") + @ApiOperationSupport(order = 11) + @ApiOperation(value = "获取机器人各项属性实时数据", notes = "获取机器人各项属性实时数据") + public R> getRealDataByRobotCode(@RequestParam @ApiParam(value = "机器人编号", required = true) String robotCode) { + return R.data(st_robotService.getRealDataByRobotCode(robotCode)); + } } diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/dto/robot/RobotInstanceDTO.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/dto/robot/RobotInstanceDTO.java new file mode 100644 index 0000000..9091112 --- /dev/null +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/dto/robot/RobotInstanceDTO.java @@ -0,0 +1,35 @@ +package com.hnac.hzinfo.inspect.ai.dto.robot; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +@Data +@EqualsAndHashCode +@ApiModel(value = "机器人设备实例DTO对象",description = "机器人设备实例DTO对象") +public class RobotInstanceDTO implements Serializable { + + @ApiModelProperty("设备编号") + @NotBlank(message = "机器人编号不能为空") + private String deviceCode; + + @ApiModelProperty("机器人名称") + @NotBlank(message = "机器人名称不能为空") + private String deviceName; + + @ApiModelProperty("模型标识") + private String modelSignage; + + @ApiModelProperty("站点编号") + @NotBlank(message = "站点编号不能为空") + private String projectId; + + @ApiModelProperty("标准设备需要传入密钥") + private String secretKey; + +} diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/IRobotService.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/IRobotService.java index 61a2397..e05d8fc 100644 --- a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/IRobotService.java +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/IRobotService.java @@ -1,9 +1,15 @@ package com.hnac.hzinfo.inspect.ai.service; +import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData; +import com.hnac.hzinfo.inspect.ai.dto.robot.RobotInstanceDTO; import com.hnac.hzinfo.inspect.ai.vo.RobotVO; +import com.hnac.hzinfo.inspect.ai.vo.robot.RobotRealDataVO; +import com.hnac.hzinfo.sdk.v5.device.vo.VirtualDeviceDTO; import org.springblade.core.mp.base.BaseService; import com.hnac.hzinfo.inspect.ai.entity.RobotEntity; +import java.util.List; + /** * 服务类 * @@ -18,4 +24,17 @@ public interface IRobotService extends BaseService { */ RobotVO getDetailByUserId(Long userId); + /** + * 生成机器人设备实例 + * @param device 机器人设备实例DTO + * @return 生成结果 + */ + Boolean generateDeviceInstance(RobotInstanceDTO device); + + /** + * 获取机器人各项属性实时数据 + * @param robotCode 机器人编号 + * @return 实时数据 + */ + List getRealDataByRobotCode(String robotCode); } diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/impl/RobotServiceImpl.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/impl/RobotServiceImpl.java index c3c14ef..372ca23 100644 --- a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/impl/RobotServiceImpl.java +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/service/impl/RobotServiceImpl.java @@ -1,15 +1,45 @@ package com.hnac.hzinfo.inspect.ai.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Lists; +import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; +import com.hnac.hzinfo.datasearch.analyse.IAnalyseInstanceClient; +import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData; +import com.hnac.hzinfo.datasearch.device.IDeviceClient; +import com.hnac.hzinfo.datasearch.real.po.RealDataSearchPO; +import com.hnac.hzinfo.inspect.ai.dto.robot.RobotInstanceDTO; import com.hnac.hzinfo.inspect.ai.vo.RobotVO; +import com.hnac.hzinfo.inspect.ai.vo.robot.RobotRealDataVO; import com.hnac.hzinfo.inspect.ai.wrapper.RobotWrapper; +import com.hnac.hzinfo.inspect.constants.ParamConstants; +import com.hnac.hzinfo.sdk.core.response.Result; +import com.hnac.hzinfo.sdk.v5.device.DeviceDataClient; +import com.hnac.hzinfo.sdk.v5.device.client.DeviceClient; +import com.hnac.hzinfo.sdk.v5.device.po.DeviceRealDataPO; +import com.hnac.hzinfo.sdk.v5.device.vo.DeviceInstanceAttrVO; +import com.hnac.hzinfo.sdk.v5.device.vo.RealDataRedisVO; +import com.hnac.hzinfo.sdk.v5.device.vo.VirtualDeviceDTO; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import com.hnac.hzinfo.inspect.ai.entity.RobotEntity; import com.hnac.hzinfo.inspect.ai.mapper.RobotMapper; import com.hnac.hzinfo.inspect.ai.service.IRobotService; import org.springblade.core.mp.support.Condition; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.system.cache.ParamCache; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 服务实现类 @@ -18,8 +48,13 @@ import org.springframework.stereotype.Service; */ @Service @AllArgsConstructor +@Slf4j public class RobotServiceImpl extends BaseServiceImpl implements IRobotService { + private final DeviceClient deviceClient; + private final IAnalyseDataSearchClient analyseDataSearchClient; + private final DeviceDataClient deviceDataClient; + /** * 根据用户id 获取 机器人信息 * @param userId @@ -35,4 +70,48 @@ public class RobotServiceImpl extends BaseServiceImpl RobotVO re = RobotWrapper.build().entityVO(robot); return re; } + + @Override + public Boolean generateDeviceInstance(RobotInstanceDTO device) { + if(deviceClient.isDeviceCodeExist(device.getDeviceCode()).getData()) { + throw new ServiceException("该机器人已经创建过设备实例,无需再创建!"); + } + else { + String modelSignage = ParamCache.getValue(ParamConstants.ROBOT_MODEL_CODE); + device.setModelSignage(Func.isNotEmpty(device.getModelSignage()) ? device.getModelSignage() : modelSignage); + VirtualDeviceDTO req = BeanUtil.copy(device, VirtualDeviceDTO.class); + req.setIsStandard(1); + req.setProtocolSignage("standard"); + R saveResult = deviceClient.saveVirtualDevice(req); + Assert.isTrue(saveResult.isSuccess(),() -> { + throw new ServiceException("生成设备实例失败,报错信息为:" + saveResult.getMsg()); + }); + LambdaUpdateWrapper luw = Wrappers.lambdaUpdate() + .set(RobotEntity::getIsDeviceInstance, true) + .eq(RobotEntity::getCode, device.getDeviceCode()); + return this.update(luw); + } + } + + @Override + public List getRealDataByRobotCode(String robotCode) { + Result> attrResult = deviceClient.getDeviceInstaceAttrsByDeviceCodes(Lists.newArrayList(robotCode)); + Assert.isTrue(attrResult.isSuccess(),() -> { + throw new ServiceException("获取设备实例物模型失败!"); + }); + DeviceRealDataPO po = new DeviceRealDataPO(); + po.setDeviceCode(robotCode); + po.setSignages(attrResult.getData().stream().map(DeviceInstanceAttrVO::getSignage).collect(Collectors.toList())); + Result>>> realDataResult = deviceDataClient.getDeviceRealDataByCodes(Lists.newArrayList(po)); + Assert.isTrue(realDataResult.isSuccess(),() -> { + throw new ServiceException("获取设备实例实时数据失败!"); + }); + List result = realDataResult.getData().stream() + .flatMap(l -> l.stream()) + .flatMap(m -> m.entrySet().stream().map(k -> BeanUtil.copy(m.get(k), RobotRealDataVO.class))) + .collect(Collectors.toList()); + return result; + } + + } diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/vo/robot/RobotRealDataVO.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/vo/robot/RobotRealDataVO.java new file mode 100644 index 0000000..d3561c7 --- /dev/null +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/ai/vo/robot/RobotRealDataVO.java @@ -0,0 +1,45 @@ +package com.hnac.hzinfo.inspect.ai.vo.robot; + + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.hnac.hzinfo.sdk.v5.device.vo.RealDataRedisVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode +public class RobotRealDataVO extends RealDataRedisVO implements Serializable { + @ApiModelProperty("数据上送时间") + private String ts; + + @ApiModelProperty("实时数据") + private String v; + + @ApiModelProperty("上送数据质量,0为有效") + private String q; + + @JsonIgnore + private String n; + + @ApiModelProperty("物模型属性ID") + private String attrId; + + @JsonIgnore + private String realId; + + @JsonIgnore + private Long attrType; + + @ApiModelProperty("物模型属性标识") + @JsonIgnore + private String signage; + + @ApiModelProperty("物模型属性名称") + private String attrName; + + @ApiModelProperty("启停状态") + private Integer state; +} diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/constants/ParamConstants.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/constants/ParamConstants.java new file mode 100644 index 0000000..3f306d1 --- /dev/null +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/constants/ParamConstants.java @@ -0,0 +1,11 @@ +package com.hnac.hzinfo.inspect.constants; + +public interface ParamConstants { + + /**机器人模型编号**/ + String ROBOT_MODEL_CODE = "robot.model.code"; + + /**机器人状态属性**/ + String ROBOT_DEVICE_ATTR_ENABLE = "robot.device.attr.enable"; + +} diff --git a/hzims-service/inspect/src/main/resources/db/2.0.0.sql.1 b/hzims-service/inspect/src/main/resources/db/2.0.0.sql.1 index bedd5d8..11f6355 100644 --- a/hzims-service/inspect/src/main/resources/db/2.0.0.sql.1 +++ b/hzims-service/inspect/src/main/resources/db/2.0.0.sql.1 @@ -7,4 +7,7 @@ alter table `hz_st_ex_task` add column `video_start_time` datetime default null alter table `hz_st_ex_task` add column `video_end_time` datetime default null comment '视频录制开始时间'; alter table `hz_st_ex_task` add column `video_url` varchar(255) default null comment '手动录制视频地址'; -- 巡检摄像头管理添加设备编号 -alter table `hz_st_camera_info` add column `em_code` varchar(50) default null comment '设备编号'; \ No newline at end of file +alter table `hz_st_camera_info` add column `em_code` varchar(50) default null comment '设备编号'; +alter table `hz_st_robot` add column `code` varchar(50) default null comment '机器人编号'; +alter table `hz_st_robot` add column `station_code` varchar(50) default null comment '站点编号'; +alter table `hz_st_robot` add column `is_device_instance` tinyint(2) default 0 comment '是否绑定设备实例'; \ No newline at end of file diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/risk/controller/RiskCheckController.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/risk/controller/RiskCheckController.java index 9a1686e..17ae357 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/risk/controller/RiskCheckController.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/risk/controller/RiskCheckController.java @@ -58,7 +58,7 @@ public class RiskCheckController extends BladeController { @ApiOperationSupport(order = 2) public R saveOrUpdateBatch(@RequestBody @Valid List req) { List riskCheckList = JSONArray.parseArray(JSON.toJSONString(req), RiskCheckEntity.class); - return R.status(riskCheckService.saveBatch(riskCheckList)); + return R.status(riskCheckService.saveOrUpdateBatch(riskCheckList)); } @DeleteMapping("/delete/{ids}") From d522c72631dc8bd63e564b7740922f6a3a69cde7 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Fri, 8 Mar 2024 15:44:08 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E9=9A=90=E6=82=A3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safeproduct/feign/SafeInnerDangerClient.java | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/feign/SafeInnerDangerClient.java diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/feign/SafeInnerDangerClient.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/feign/SafeInnerDangerClient.java new file mode 100644 index 0000000..7d4edb1 --- /dev/null +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/feign/SafeInnerDangerClient.java @@ -0,0 +1,25 @@ +package com.hnac.hzims.safeproduct.feign; + + +import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; +import com.hnac.hzims.safeproduct.flow.service.IInnerDangerFlowService; +import lombok.AllArgsConstructor; +import org.springblade.core.tool.api.R; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@AllArgsConstructor +public class SafeInnerDangerClient implements ISafeInnerDangerClient { + + private IInnerDangerFlowService service; + + + @PostMapping(SAVE_HIDDENDANGER) + @Override + public R saveDefect(@RequestBody ProcessWorkFlowResponse processWorkFlowResponse) { + return service.listenAndUpdateDefect(processWorkFlowResponse); + } +}