42 Commits

Author SHA1 Message Date
贾同学
24187ca6d9 feat(report): 优化自定义报告数值计算逻辑
- 引入NumberUtil工具类判断字符串是否为数字
- 修复治理前后数据值的BigDecimal转换逻辑
- 确保计算公式中使用正确的数值进行比较和运算
- 提高数值处理的准确性和健壮性

fix(service): 修复敏感用户服务更新逻辑

- 修改保存方法返回值直接返回this.save结果
- 更正更新操作调用this.updateById方法
- 修复查询条件中ID比较的参数传递问题
- 确保更新时排除当前记录的唯一性校验正确

feat(vo): 扩展敏感用户视图对象字段

- 新增用户协议容量字段userAgreementCapacity
- 添加装机容量字段installedCapacity
- 增加所属厂站名称字段substationName
- 完善相关字段注释说明
2025-12-03 08:43:32 +08:00
cdf
f33986e934 用户对象管理接口 2025-12-02 14:34:04 +08:00
贾同学
cea2b9694a feat(report): 新增敏感用户报表生成功能 2025-12-02 08:56:34 +08:00
8e4c4383c0 1.bug修改 2025-11-28 16:43:04 +08:00
cdd1b5075c 1.微调 2025-11-27 16:44:38 +08:00
ea54b2b907 1.自定义报表模板调整 2025-11-26 14:41:23 +08:00
贾同学
61c8656fd9 feat(report): 迁移自定义报表功能模块 2025-11-26 09:58:44 +08:00
02e5100426 1.暂降概览下穿页面接口 2025-11-26 08:43:19 +08:00
85ae7e7ddb 1.添加登录用户查询监测点,设备,电能质量用户公共接口 2025-11-25 10:15:09 +08:00
9ae17b14f5 1.暂降预览页面接口 2025-11-25 09:11:58 +08:00
贾同学
f7477ea8ff feat(device): 1、开发监测点治理报告上传和下载接口,与前端联调;2、开发监测对象电网侧和负载侧监测点指标趋势对比数据查询接口 2025-11-24 08:54:45 +08:00
xy
9c6a74a2d6 新增敏感用户相关功能 2025-11-20 11:44:49 +08:00
xy
d346e80a88 新增敏感用户相关功能 2025-11-20 11:30:21 +08:00
贾同学
0227d0731c feat(cs-device): 增加监测点列表查询接口及参数过滤功能 2025-11-20 08:50:46 +08:00
贾同学
e34721c035 feat(device): 新增指标拟合图数据查询功能 2025-11-19 14:05:49 +08:00
xy
2451df7d8d 物联用户权限功能优化 2025-11-17 09:38:43 +08:00
xy
6e5aab4791 物联用户权限功能优化 2025-11-14 15:59:17 +08:00
xy
adb811e9df 物联用户权限功能添加 2025-11-14 10:01:55 +08:00
hzj
340ba18f99 组态bug修改,从无锡同步过来的 2025-11-13 16:18:51 +08:00
hzj
e320685af1 组态bug修改,从无锡同步过来的 2025-11-13 16:11:24 +08:00
贾同学
400b9fd9c1 refactor(service):更新方法调用从getDeviceRtDataByTime到getNewDeviceRtDataByTime 2025-11-13 09:47:32 +08:00
贾同学
ce0b9892c2 feat(device): 新增趋势数据查询功能- 在CsGroupController中增加/trendData接口,支持查询趋势数据-
fix(device): 完善监测点相关接口与实体字段

- 在CsLinePO实体中新增monitorObj和govern字段
- 补充getLineByName和list接口,增强监测点查询能力
2025-11-13 08:58:43 +08:00
xy
2fb11ecaaf 新增物联设备相关算法 2025-11-11 10:57:34 +08:00
xy
b7574b2916 云前置功能调整 2025-11-04 14:08:59 +08:00
xy
43bdcbf623 微调 2025-10-28 13:35:37 +08:00
xy
629ba0746a 云前置改造-补召功能调整 2025-10-23 09:41:05 +08:00
xy
b86c81d70a 云前置改造-新增补召功能 2025-10-22 15:04:46 +08:00
xy
d10240758b 云前置改造-微调 2025-10-20 09:30:13 +08:00
xy
995bd8b310 云前置改造-前置功能优化 2025-10-17 10:49:15 +08:00
xy
9531e18e93 云前置改造-暂态数据补召功能 2025-10-15 20:50:04 +08:00
xy
753a22eb4c 云前置改造-台账更新功能 2025-10-14 13:24:56 +08:00
xy
814b5757fd 云前置改造-台账相关功能 2025-10-11 09:13:32 +08:00
xy
9d2b4b97f9 云前置改造 2025-09-23 16:34:24 +08:00
xy
ee07f7a5e2 组态调整 2025-09-23 16:32:35 +08:00
xy
214f297297 新增云前置相关功能 2025-09-18 15:03:27 +08:00
hzj
b908186758 修改兼容其他设备的bug 2025-09-18 10:03:56 +08:00
xy
0d1c142885 新增云前置相关功能 2025-09-17 20:15:48 +08:00
xy
43b8473976 新增云前置相关功能 2025-09-16 18:30:53 +08:00
xy
8c442d8897 1、新增云协议设备台账录入功能;
2、新增云协议设备实时数据请求功能
2025-09-04 13:58:30 +08:00
xy
066dceaeaf 代码优化 2025-08-22 12:31:12 +08:00
xy
9dca3408ae 新增标签 2025-08-04 09:57:22 +08:00
xy
0d7d1781e3 模块状态判断调整 2025-08-04 09:55:27 +08:00
180 changed files with 11477 additions and 501 deletions

View File

@@ -35,12 +35,6 @@
<artifactId>common-microservice</artifactId> <artifactId>common-microservice</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>cs-warn-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>com.njcn</groupId> <groupId>com.njcn</groupId>
<artifactId>user-api</artifactId> <artifactId>user-api</artifactId>
@@ -59,6 +53,12 @@
<artifactId>common-device-biz</artifactId> <artifactId>common-device-biz</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.4.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

View File

@@ -22,4 +22,13 @@ public interface CsCommTerminalFeignClient {
@GetMapping("lineUnitDetail") @GetMapping("lineUnitDetail")
HttpResult<PqsDeviceUnit> lineUnitDetail(@RequestParam("lineId") String lineId); HttpResult<PqsDeviceUnit> lineUnitDetail(@RequestParam("lineId") String lineId);
@GetMapping("getDevIdsByUser")
HttpResult<List<String>> getDevIdsByUser(@RequestParam("userId") String userId);
@GetMapping("getLineIdsByUser")
HttpResult<List<String>> getLineIdsByUser(@RequestParam("userId") String userId);
@GetMapping("getPqUserIdsByUser")
HttpResult<List<String>> getPqUserIdsByUser(@RequestParam("userId") String userId);
} }

View File

@@ -3,6 +3,7 @@ package com.njcn.csdevice.api;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.fallback.CsDeviceUserClientFallbackFactory; import com.njcn.csdevice.api.fallback.CsDeviceUserClientFallbackFactory;
import com.njcn.csdevice.pojo.param.UserDevParam;
import com.njcn.csdevice.pojo.po.CsDeviceUserPO; import com.njcn.csdevice.pojo.po.CsDeviceUserPO;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@@ -22,4 +23,10 @@ public interface CsDeviceUserFeignClient {
@PostMapping("/findUserById") @PostMapping("/findUserById")
HttpResult<List<String>> findUserById(@RequestParam("id") String id); HttpResult<List<String>> findUserById(@RequestParam("id") String id);
@PostMapping("/findDevByUserId")
HttpResult<List<String>> findDevByUserId(@RequestParam("id") String id);
@PostMapping("/channelDevByUserId")
HttpResult<List<String>> channelDevByUserId(@RequestBody UserDevParam param);
} }

View File

@@ -1,18 +1,13 @@
package com.njcn.csdevice.api; package com.njcn.csdevice.api;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.api.fallback.CsLedgerFeignClientFallbackFactory; import com.njcn.csdevice.api.fallback.CsLedgerFeignClientFallbackFactory;
import com.njcn.csdevice.pojo.dto.DevDetailDTO; import com.njcn.csdevice.pojo.dto.DevDetailDTO;
import com.njcn.csdevice.pojo.dto.LineParamDTO; import com.njcn.csdevice.pojo.dto.LineParamDTO;
import com.njcn.csdevice.pojo.param.CsLedgerParam; import com.njcn.csdevice.pojo.param.CsLedgerParam;
import com.njcn.csdevice.pojo.po.CsLedger; import com.njcn.csdevice.pojo.po.CsLedger;
import com.njcn.csdevice.pojo.vo.CsLedgerVO; import com.njcn.csdevice.pojo.vo.CsLedgerVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -47,5 +42,15 @@ public interface CsLedgerFeignClient {
@PostMapping("/getAllLedger") @PostMapping("/getAllLedger")
HttpResult<List<CsLedgerVO>> getAllLedger(); HttpResult<List<CsLedgerVO>> getAllLedger();
@PostMapping("/getInfoByIds")
HttpResult<List<DevDetailDTO>> getInfoByIds(@RequestBody @Validated List<String> list);
@PostMapping("/getDevInfoByEngineerIds")
@ApiOperation("根据工程获取设备信息")
HttpResult<List<DevDetailDTO>> getDevInfoByEngineerIds(@RequestBody @Validated List<String> list);
@PostMapping("/getEngineeringHaveDevs")
@ApiOperation("根据工程信息获取有设备的工程")
HttpResult<List<DevDetailDTO>> getEngineeringHaveDevs(@RequestBody @Validated List<String> list);
} }

View File

@@ -1,10 +1,16 @@
package com.njcn.csdevice.api; package com.njcn.csdevice.api;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.api.fallback.CsLineClientFallbackFactory; import com.njcn.csdevice.api.fallback.CsLineClientFallbackFactory;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.device.biz.pojo.po.Overlimit;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@@ -44,5 +50,25 @@ public interface CsLineFeignClient {
HttpResult<CsLinePO> getById(@RequestParam("lineId") String lineId); HttpResult<CsLinePO> getById(@RequestParam("lineId") String lineId);
@PostMapping("/getLinesByDevList") @PostMapping("/getLinesByDevList")
HttpResult<List<CsLinePO>> getLinesByDevList(@RequestParam("ids") List<String> ids); HttpResult<List<CsLinePO>> getLinesByDevList(@RequestBody List<String> ids);
@PostMapping("/updateLineDataByList")
HttpResult<String> updateDataByList(@RequestParam("list") List<String> list, @RequestParam("id") String id, @RequestParam("setId") String setId);
@PostMapping("/getLineByName")
HttpResult<List<CsLinePO>> getLineByName(@RequestParam("lineName") String lineName);
@PostMapping("/getAllLine")
HttpResult<List<String>> getAllLine();
@PostMapping("/getOverLimitDataByIds")
HttpResult<List<Overlimit>> getOverLimitData(@RequestBody List<String> ids);
@PostMapping("/getLineBySensitiveUser")
@ApiOperation("根据敏感用户查询监测点")
HttpResult<List<CsLinePO>> getLineBySensitiveUser(@RequestBody List<String> list);
@PostMapping("/list")
HttpResult<List<CsLinePO>> list(@RequestBody CsLinePO param);
} }

View File

@@ -0,0 +1,20 @@
package com.njcn.csdevice.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.fallback.CsTerminalLogsClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author xy
*/
@FeignClient(value = ServerInfo.CS_DEVICE_BOOT, path = "/csTerminalLogs", fallbackFactory = CsTerminalLogsClientFallbackFactory.class,contextId = "csTerminalLogs")
public interface CsTerminalLogsFeignClient {
@PostMapping("/updateLaterData")
HttpResult<String> updateLaterData(@RequestParam("id") String id, @RequestParam("code") String code);
}

View File

@@ -0,0 +1,30 @@
package com.njcn.csdevice.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.fallback.CsTerminalReplyClientFallbackFactory;
import com.njcn.csdevice.param.IcdBzReplyParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author xy
*/
@FeignClient(value = ServerInfo.CS_DEVICE_BOOT, path = "/csTerminalReply", fallbackFactory = CsTerminalReplyClientFallbackFactory.class,contextId = "csTerminalReply")
public interface CsTerminalReplyFeignClient {
@PostMapping("/updateData")
@ApiOperation("更新推送结果")
HttpResult<String> updateData(@RequestBody @Validated IcdBzReplyParam param);
@PostMapping("/updateBzData")
@ApiOperation("更新补召推送结果")
HttpResult<String> updateBzData(@RequestBody @Validated IcdBzReplyParam param);
}

View File

@@ -1,17 +1,10 @@
package com.njcn.csdevice.api; package com.njcn.csdevice.api;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.api.fallback.DataSetFeignClientFallbackFactory; import com.njcn.csdevice.api.fallback.DataSetFeignClientFallbackFactory;
import com.njcn.csdevice.pojo.po.CsDataSet; import com.njcn.csdevice.pojo.po.CsDataSet;
import com.njcn.csdevice.pojo.vo.LineTargetVO; import com.njcn.csdevice.pojo.vo.LineTargetVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;

View File

@@ -28,4 +28,7 @@ public interface DevModelRelationFeignClient {
@PostMapping("/getModelByType") @PostMapping("/getModelByType")
HttpResult<String> getModelByType(@RequestParam("devId") String devId, @RequestParam("type") Integer type); HttpResult<String> getModelByType(@RequestParam("devId") String devId, @RequestParam("type") Integer type);
@PostMapping("/updateDataByList")
HttpResult<String> updateDataByList(@RequestParam("list") List<String> list, @RequestParam("id") String id);
} }

View File

@@ -10,10 +10,13 @@ import com.njcn.csdevice.api.fallback.EquipmentFeignClientFallbackFactory;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO; import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO; import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import springfox.documentation.annotations.ApiIgnore;
import java.util.List; import java.util.List;
@@ -64,4 +67,10 @@ public interface EquipmentFeignClient {
@PostMapping("/getDevByLineId") @PostMapping("/getDevByLineId")
HttpResult<CsEquipmentDeliveryPO> getDevByLineId(@RequestParam("lineId") String lineId); HttpResult<CsEquipmentDeliveryPO> getDevByLineId(@RequestParam("lineId") String lineId);
@PostMapping("/updateCldDevStatus")
HttpResult<Boolean> updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo);
@PostMapping("/flipCldDevStatus")
HttpResult<Boolean> flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status);
} }

View File

@@ -0,0 +1,29 @@
package com.njcn.csdevice.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.fallback.CsTerminalLogsClientFallbackFactory;
import com.njcn.csdevice.api.fallback.IcdFallbackFactory;
import com.njcn.csdevice.param.IcdBzParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author xy
*/
@FeignClient(value = ServerInfo.CS_DEVICE_BOOT, path = "/icd", fallbackFactory = IcdFallbackFactory.class,contextId = "icd")
public interface IcdFeignClient {
@PostMapping("/bzEvent")
@ApiOperation("补召事件")
HttpResult<String> bzEvent(@RequestBody @Validated IcdBzParam param);
@PostMapping("/bzFile")
@ApiOperation("补召波形")
HttpResult<String> bzFile(@RequestBody @Validated IcdBzParam param);
}

View File

@@ -0,0 +1,24 @@
package com.njcn.csdevice.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.fallback.NodeFallbackFactory;
import com.njcn.csdevice.pojo.po.Node;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
/**
* @author xy
*/
@FeignClient(value = ServerInfo.CS_DEVICE_BOOT, path = "/node", fallbackFactory = NodeFallbackFactory.class,contextId = "node")
public interface NodeFeignClient {
@ApiOperation("获取全部前置机")
@GetMapping("/nodeAllList")
HttpResult<List<Node>> nodeAllList();
}

View File

@@ -54,4 +54,7 @@ public interface WlRecordFeignClient {
@PostMapping("/findDevBaseDataByLineId") @PostMapping("/findDevBaseDataByLineId")
HttpResult<List<RecordVo>> findDevBaseDataByLineId(@RequestBody @Validated WlRecordParam.lineRecord param); HttpResult<List<RecordVo>> findDevBaseDataByLineId(@RequestBody @Validated WlRecordParam.lineRecord param);
@GetMapping("/getTestRecordById")
HttpResult<RecordVo.RecordItemVo> getTestRecordById(@RequestParam("testRecordId") @Validated String testRecordId);
} }

View File

@@ -9,6 +9,8 @@ import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @author xy * @author xy
*/ */
@@ -31,6 +33,24 @@ public class CsCommTerminalFeignClientFallbackFactory implements FallbackFactory
log.error("{}异常,降级处理,异常为:{}","查询分组",cause.toString()); log.error("{}异常,降级处理,异常为:{}","查询分组",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<List<String>> getDevIdsByUser(String userId) {
log.error("{}异常,降级处理,异常为:{}","根据登录用户id获取用户所有设备id集合",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<String>> getLineIdsByUser(String userId) {
log.error("{}异常,降级处理,异常为:{}","根据登录用户id获取用户所有监测点id集合",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<String>> getPqUserIdsByUser(String userId) {
log.error("{}异常,降级处理,异常为:{}","根据登录用户id获取电能质量用户id集合",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -4,6 +4,7 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.CsDeviceUserFeignClient; import com.njcn.csdevice.api.CsDeviceUserFeignClient;
import com.njcn.csdevice.pojo.param.UserDevParam;
import com.njcn.csdevice.pojo.po.CsDeviceUserPO; import com.njcn.csdevice.pojo.po.CsDeviceUserPO;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -38,6 +39,18 @@ public class CsDeviceUserClientFallbackFactory implements FallbackFactory<CsDevi
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<List<String>> findDevByUserId(String id) {
log.error("{}异常,降级处理,异常为:{}","根据用户Id查询设备集合",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<String>> channelDevByUserId(UserDevParam param) {
log.error("{}异常,降级处理,异常为:{}","根据用户Id解绑设备集合异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -68,6 +68,24 @@ public class CsLedgerFeignClientFallbackFactory implements FallbackFactory<CsLed
log.error("{}异常,降级处理,异常为:{}","获取台账树所有数据",cause.toString()); log.error("{}异常,降级处理,异常为:{}","获取台账树所有数据",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<List<DevDetailDTO>> getInfoByIds(List<String> list) {
log.error("{}异常,降级处理,异常为:{}","根据设备集合查询工程,设备信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<DevDetailDTO>> getDevInfoByEngineerIds(List<String> list) {
log.error("{}异常,降级处理,异常为:{}","根据工程获取设备信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<DevDetailDTO>> getEngineeringHaveDevs(List<String> list) {
log.error("{}异常,降级处理,异常为:{}","根据工程获取设备信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -6,6 +6,7 @@ import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.CsLineFeignClient; import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.device.biz.pojo.po.Overlimit;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -80,6 +81,41 @@ public class CsLineClientFallbackFactory implements FallbackFactory<CsLineFeignC
log.error("{}异常,降级处理,异常为:{}","根据装置id集合获取监测点id集合",cause.toString()); log.error("{}异常,降级处理,异常为:{}","根据装置id集合获取监测点id集合",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<String> updateDataByList(List<String> list, String id, String setId) {
log.error("{}异常,降级处理,异常为:{}","根据装置集合修改监测点信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<String>> getAllLine() {
log.error("{}异常,降级处理,异常为:{}","获取所有监测点id",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<Overlimit>> getOverLimitData(List<String> ids) {
log.error("{}异常,降级处理,异常为:{}","根据监测点id集合获取国标限值异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<CsLinePO>> getLineBySensitiveUser(List<String> list) {
log.error("{}异常,降级处理,异常为:{}","根据敏感用户查询监测点异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<CsLinePO>> getLineByName(String lineName) {
log.error("{}异常,降级处理,异常为:{}","根据名称查询监测点异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<CsLinePO>> list(CsLinePO param) {
log.error("{}异常,降级处理,异常为:{}","查询监测点列表异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -0,0 +1,33 @@
package com.njcn.csdevice.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.CsTerminalLogsFeignClient;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author xy
*/
@Slf4j
@Component
public class CsTerminalLogsClientFallbackFactory implements FallbackFactory<CsTerminalLogsFeignClient> {
@Override
public CsTerminalLogsFeignClient create(Throwable cause) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (cause.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) cause.getCause();
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new CsTerminalLogsFeignClient() {
@Override
public HttpResult<String> updateLaterData(String id, String code) {
log.error("{}异常,降级处理,异常为:{}","更新最新一组数据的推送状态",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -0,0 +1,41 @@
package com.njcn.csdevice.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.CsTerminalReplyFeignClient;
import com.njcn.csdevice.param.IcdBzReplyParam;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author xy
*/
@Slf4j
@Component
public class CsTerminalReplyClientFallbackFactory implements FallbackFactory<CsTerminalReplyFeignClient> {
@Override
public CsTerminalReplyFeignClient create(Throwable cause) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (cause.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) cause.getCause();
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new CsTerminalReplyFeignClient() {
@Override
public HttpResult<String> updateData(IcdBzReplyParam param) {
log.error("{}异常,降级处理,异常为:{}","更新推送结果异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<String> updateBzData(IcdBzReplyParam param) {
log.error("{}异常,降级处理,异常为:{}","更新补召推送结果异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -46,6 +46,12 @@ public class DevModelRelationFeignClientFallbackFactory implements FallbackFacto
log.error("{}异常,降级处理,异常为:{}","根据装置类型查询模板",cause.toString()); log.error("{}异常,降级处理,异常为:{}","根据装置类型查询模板",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<String> updateDataByList(List<String> list, String id) {
log.error("{}异常,降级处理,异常为:{}","根据装置集合修改模板信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -89,6 +89,19 @@ public class EquipmentFeignClientFallbackFactory implements FallbackFactory<Equi
log.error("{}异常,降级处理,异常为:{}","根据监测点id查询装置信息",cause.toString()); log.error("{}异常,降级处理,异常为:{}","根据监测点id查询装置信息",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<Boolean> updateCldDevStatus(String nodeId, Integer processNo) {
log.error("{}异常,降级处理,异常为:{}","云前置心跳丢失切换设备状态",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<Boolean> flipCldDevStatus(String devId, Integer status) {
log.error("{}异常,降级处理,异常为:{}","云前置设备状态翻转",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -0,0 +1,40 @@
package com.njcn.csdevice.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.IcdFeignClient;
import com.njcn.csdevice.param.IcdBzParam;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author xy
*/
@Slf4j
@Component
public class IcdFallbackFactory implements FallbackFactory<IcdFeignClient> {
@Override
public IcdFeignClient create(Throwable cause) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (cause.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) cause.getCause();
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new IcdFeignClient() {
@Override
public HttpResult<String> bzEvent(IcdBzParam param) {
log.error("{}异常,降级处理,异常为:{}","定时补召事件异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<String> bzFile(IcdBzParam param) {
log.error("{}异常,降级处理,异常为:{}","定时补召波形异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -0,0 +1,37 @@
package com.njcn.csdevice.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.NodeFeignClient;
import com.njcn.csdevice.pojo.po.Node;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author xy
*/
@Slf4j
@Component
public class NodeFallbackFactory implements FallbackFactory<NodeFeignClient> {
@Override
public NodeFeignClient create(Throwable cause) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (cause.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) cause.getCause();
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new NodeFeignClient() {
@Override
public HttpResult<List<Node>> nodeAllList() {
log.error("{}异常,降级处理,异常为:{}","获取全部前置机异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -70,6 +70,12 @@ public class WlRecordClientFallbackFactory implements FallbackFactory<WlRecordFe
log.error("{}异常,降级处理,异常为:{}","根据监测点id查询装置基础数据",cause.toString()); log.error("{}异常,降级处理,异常为:{}","根据监测点id查询装置基础数据",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<RecordVo.RecordItemVo> getTestRecordById(String testRecordId) {
log.error("{}异常,降级处理,异常为:{}","根据测试项ID查询测试项信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -58,6 +58,8 @@ public interface DataParam {
String GOVERNANCE_SYSTEM = "治理系统"; String GOVERNANCE_SYSTEM = "治理系统";
String cldDev = "在线设备";
String EvtParamPhase = "Evt_Param_Phase"; String EvtParamPhase = "Evt_Param_Phase";
String EvtParamDepth = "Evt_Param_VVaDepth"; String EvtParamDepth = "Evt_Param_VVaDepth";

View File

@@ -35,7 +35,6 @@ public enum AlgorithmResponseEnum {
CHIRLDREN2_EXIST("A00514","项目下存在设备,不能删除"), CHIRLDREN2_EXIST("A00514","项目下存在设备,不能删除"),
CHIRLDREN3_EXIST("A00516","存在设备使用拓扑图,不能删除"), CHIRLDREN3_EXIST("A00516","存在设备使用拓扑图,不能删除"),
DATA_ARRAY_MISSING("A00515","详细数据为空"), DATA_ARRAY_MISSING("A00515","详细数据为空"),
UNKNOW_ROLE("A00515","角色无权限操作"), UNKNOW_ROLE("A00515","角色无权限操作"),
DATA_MISSING("A00516","数据缺失"), DATA_MISSING("A00516","数据缺失"),
@@ -48,6 +47,13 @@ public enum AlgorithmResponseEnum {
RECORD_FILE_LOST("A00516","record.bin文件缺失请检查上传文件夹"), RECORD_FILE_LOST("A00516","record.bin文件缺失请检查上传文件夹"),
LINE_NUM_MISMATCH("A00516","上传文件的监测点序号和选择的监测点不匹配,请检查"), LINE_NUM_MISMATCH("A00516","上传文件的监测点序号和选择的监测点不匹配,请检查"),
DEV_OFFLINE("A00516","装置未连接MQTT服务器"), DEV_OFFLINE("A00516","装置未连接MQTT服务器"),
OVER_MAX_DEV_COUNT("A00517","前置机超出最大支持装置数"),
DEV_OLD_DATA("A00519","进程数修改失败,原进程数下存在装置,请修改装置进程号"),
DEV_EXIST_DATA("A00520","删除失败,前置机下存在装置"),
CLD_MODEL_MISSING("A00521","云前置模板缺失,请检查模板信息"),
CLD_MODEL_MORE("A00521","存在多个云前置模板,请检查模板信息"),
; ;

View File

@@ -0,0 +1,24 @@
package com.njcn.csdevice.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author xy
*/
@Data
public class IcdBzParam implements Serializable {
@ApiModelProperty("监测点集合")
private List<String> lineList;
@ApiModelProperty("开始时间")
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
}

View File

@@ -0,0 +1,31 @@
package com.njcn.csdevice.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author xy
*/
@Data
public class IcdBzReplyParam implements Serializable {
@ApiModelProperty("guid")
private String id;
@ApiModelProperty("状态")
private Integer state;
@ApiModelProperty("设备id")
private String deviceId;
@ApiModelProperty("监测点id")
private String lineId;
@ApiModelProperty("响应码")
private Integer code;
@ApiModelProperty("响应消息")
private String msg;
}

View File

@@ -0,0 +1,48 @@
package com.njcn.csdevice.param;
import com.njcn.csdevice.pojo.param.AppProjectAddParm;
import com.njcn.csdevice.pojo.param.CsEngineeringAddParm;
import com.njcn.csdevice.pojo.param.CsEquipmentDeliveryAddParm;
import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* @author xy
*/
@Data
public class IcdLedgerParam implements Serializable {
@ApiModelProperty("工程索引")
private String engineeringIndex;
@ApiModelProperty("项目索引")
private String projectIndex;
@ApiModelProperty("设备id")
private String devIndex;
@ApiModelProperty("设备和mac关系")
private Map<String,String> devMacMap;
@ApiModelProperty("设备mac和设备信息关系")
private Map<String, CsEquipmentDeliveryPO> devMap;
@ApiModelProperty("工程信息")
private CsEngineeringAddParm engineering;
@ApiModelProperty("项目信息")
private AppProjectAddParm project;
@ApiModelProperty("装置信息")
private List<CsEquipmentDeliveryAddParm> device;
@ApiModelProperty("监测点信息")
private List<CsLineParam> line;
}

View File

@@ -0,0 +1,22 @@
package com.njcn.csdevice.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author xy
*/
@Data
public class IcdNodeParam implements Serializable {
@ApiModelProperty("设备id")
private String id;
@ApiModelProperty("前置服务器id")
private String nodeId;
@ApiModelProperty("进程号")
private Integer processNo;
}

View File

@@ -0,0 +1,26 @@
package com.njcn.csdevice.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* @author xy
*/
@Data
public class IcdParam implements Serializable {
@ApiModelProperty("前置id不传时查询所有的终端台账信息")
@NotBlank(message = "前置id不可为空")
private String id;
@ApiModelProperty("终端运行状态,不传则查询所有的终端信息 (0运行1检修2停运3调试4退运)")
private List<Integer> runFlag;
@ApiModelProperty("终端型号(集合为空查询所有icd模型)")
private List<String> devType;
}

View File

@@ -5,7 +5,6 @@ import lombok.Data;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -20,16 +19,16 @@ import java.util.List;
@Data @Data
public class AppProjectAddParm { public class AppProjectAddParm {
private String description; private String description;
@ApiModelProperty(value="项目名称") @ApiModelProperty(value="项目名称")
@NotBlank(message="项目名称不能为空!") @NotBlank(message="项目名称不能为空!")
private String name; private String name;
@NotBlank(message="工程id不能为空") //@NotBlank(message="工程id不能为空")
private String engineeringId; private String engineeringId;
private String icdEngineeringId;
/** /**
* 地市Id * 地市Id

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import java.io.Serializable;
/** /**
* *
@@ -17,8 +18,7 @@ import javax.validation.constraints.Pattern;
*/ */
@Data @Data
public class CsEquipmentDeliveryAddParm{ public class CsEquipmentDeliveryAddParm implements Serializable {
/** /**
* 装置名称 * 装置名称
@@ -39,7 +39,6 @@ public class CsEquipmentDeliveryAddParm{
* 装置mac地址 * 装置mac地址
*/ */
@ApiModelProperty(value="装置mac地址") @ApiModelProperty(value="装置mac地址")
// @NotBlank(message="装置mac地址不能为空")
private String mac; private String mac;
/** /**
@@ -56,56 +55,12 @@ public class CsEquipmentDeliveryAddParm{
@NotBlank(message="装置型号不能为空!") @NotBlank(message="装置型号不能为空!")
private String devModel; private String devModel;
// /**
// * 装置程序版本
// */
// @ApiModelProperty(value="装置程序版本")
// @NotBlank(message="装置程序版本不能为空!")
// private String programVersion;
// /**
// * 调试人员
// */
// @ApiModelProperty(value="调试人员")
// @NotBlank(message="调试人员不能为空!")
// private String debugPerson;
//
// /**
// * 出厂日期
// */
// @ApiModelProperty(value="出厂日期")
// @NotNull(message="出厂日期不能为空!")
// @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
// private Date producteTime;
//
// /**
// * 检修日期
// */
// @ApiModelProperty(value="检修日期")
// @NotNull(message="检修日期不能为空!")
// @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
// private Date checkTime;
//
// /**
// * 调试日期
// */
// @ApiModelProperty(value="调试日期")
// @NotNull(message="调试日期不能为空!")
// @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
// private Date debugTime;
/** /**
* 合同号 * 合同号
*/ */
@ApiModelProperty(value="合同号") @ApiModelProperty(value="合同号")
private String cntractNo; private String cntractNo;
// /**
// * 营销经理
// */
// @ApiModelProperty(value="营销经理")
// private String salesManager;
/** /**
* 装置接入方式 * 装置接入方式
*/ */
@@ -127,4 +82,19 @@ public class CsEquipmentDeliveryAddParm{
@ApiModelProperty(value="排序") @ApiModelProperty(value="排序")
private Integer sort; private Integer sort;
@ApiModelProperty(value="前置机id")
private String nodeId;
@ApiModelProperty(value="前置机进程号")
private Integer nodeProcess;
@ApiModelProperty(value="模板id")
private String modelId;
@ApiModelProperty(value="工程id")
private String engineeringId;
@ApiModelProperty(value="项目id")
private String projectId;
} }

View File

@@ -95,4 +95,10 @@ public class CsEquipmentDeliveryAuditParm {
@ApiModelProperty(value="排序") @ApiModelProperty(value="排序")
private Integer sort; private Integer sort;
@ApiModelProperty(value="前置机id")
private String nodeId;
@ApiModelProperty(value="前置机进程号")
private Integer nodeProcess;
} }

View File

@@ -1,9 +1,12 @@
package com.njcn.csdevice.pojo.param; package com.njcn.csdevice.pojo.param;
import com.njcn.db.bo.BaseEntity; import com.njcn.db.bo.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.Min;
/** /**
* *
* Description: * Description:
@@ -18,26 +21,76 @@ public class CsLineParam extends BaseEntity {
private String lineId; private String lineId;
/**
* 监测点名称
*/
private String name;
@ApiModelProperty(value="工程id")
private String engineeringId;
@ApiModelProperty(value="项目id")
private String projectId;
/**
* 装置id
*/
private String devId;
/**
* 装置mac
*/
private String devMac;
/** /**
* 电压等级 * 电压等级
*/ */
private Double volGrade; private Double volGrade;
/**
* PT变比
*/
private Double ptRatio;
/**
* CT变比
*/
private Double ctRatio;
/** /**
* 接线方式 * 接线方式
*/ */
private Integer conType; private Integer conType;
/**
* PT一次变比
*/
@Min(value = 1, message = "PT一次变比必须大于等于1")
private Double ptRatio;
/**
* PT二次变比
*/
@Min(value = 1, message = "PT二次变比必须大于等于1")
private Double pt2Ratio;
/**
* CT一次变比
*/
@Min(value = 1, message = "CT一次变比必须大于等于1")
private Double ctRatio;
/**
* CT二次变比
*/
@Min(value = 1, message = "CT二次变比必须大于等于1")
private Double ct2Ratio;
/**
* 逻辑子设备id
*/
private Integer clDid;
/**
* 监测点线路号
*/
private Integer lineNo;
/**
* 统计间隔
*/
private Integer lineInterval;
/** /**
* 模板id * 模板id
*/ */
@@ -49,8 +102,30 @@ public class CsLineParam extends BaseEntity {
private String dataSetId; private String dataSetId;
/** /**
* 统计间隔 * 运行状态0运行1检修2停运3调试4退运
*/ */
private Integer lineInterval; private Integer runStatus;
/**
* 短路容量
*/
private Integer shortCircuitCapacity;
/**
* 设备容量
*/
private Integer devCapacity;
/**
* 基准容量
*/
private Integer basicCapacity;
/**
* 协议容量
*/
private Integer protocolCapacity;
} }

View File

@@ -0,0 +1,104 @@
package com.njcn.csdevice.pojo.param;
import com.njcn.common.pojo.constant.PatternRegex;
import com.njcn.web.constant.ValidMessage;
import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* pqs
*
* @author cdf
* @date 2022/1/14
*/
@Data
@ApiModel
public class NodeParam {
/**
* 名称
*/
@ApiModelProperty(name = "name",value = "前置服务器名称")
@NotBlank(message = "前置机名称不能为空")
@Pattern(regexp = PatternRegex.DEV_NAME_REGEX, message = ValidMessage.NAME_FORMAT_ERROR)
private String name;
/**
* 服务器IP
*/
@ApiModelProperty(name = "ip",value = "服务器IP")
@NotBlank(message = "前置机IP不能为空")
@Pattern(regexp = PatternRegex.IP_REGEX, message = ValidMessage.IP_FORMAT_ERROR)
private String ip;
/**
* 描述
*/
@ApiModelProperty(name = "remark",value = "描述")
private String remark;
/**
* 状态 前置等级
*/
@ApiModelProperty(name = "nodeGrade",value = "前置等级")
@NotNull(message = "前置机等级不可为空")
private Integer nodeGrade;
/**
* 前置机支持最大装置数
*/
@ApiModelProperty(name = "nodeDevNum",value = "前置机支持最大装置数")
@NotNull(message = "前置机支持最大装置数不可为空")
@Min(value = 1, message = "装置数不可小于1")
@Max(value = 1000, message = "装置数不可大于1000")
private Integer nodeDevNum;
/**
* 前置机支持最大进程数量
*/
@ApiModelProperty(name = "nodeDevNum",value = "前置机支持最大进程数量")
@NotNull(message = "前置机支持最大进程数量")
@Min(value = 1, message = "最大进程数量不可小于1")
@Max(value = 10, message = "最大进程数量不可大于10")
private Integer maxProcessNum;
/**
* 排序
*/
@ApiModelProperty(name = "sort",value = "排序")
@NotNull(message = "排序不可为空")
private Integer sort;
/**
* 更新操作实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
public static class NodeUpdateParam extends NodeParam {
/**
* 表Id
*/
@ApiModelProperty("id")
@NotBlank(message = ValidMessage.ID_NOT_BLANK)
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR)
private String id;
}
/**
* 前置查询
*/
@Data
@EqualsAndHashCode(callSuper = true)
public static class NodeQueryParam extends BaseParam {
@ApiModelProperty("前置等级")
private Integer nodeGrade;
}
}

View File

@@ -0,0 +1,18 @@
package com.njcn.csdevice.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class UserDevParam implements Serializable {
@ApiModelProperty(value="用户id")
private String userId;
@ApiModelProperty(value="设备集合id")
private List<String> list;
}

View File

@@ -64,8 +64,6 @@ public class CsEquipmentDeliveryPO extends BaseEntity {
@TableField(value = "dev_access_method") @TableField(value = "dev_access_method")
private String devAccessMethod; private String devAccessMethod;
/** /**
* 合同号 * 合同号
*/ */
@@ -120,4 +118,16 @@ public class CsEquipmentDeliveryPO extends BaseEntity {
@TableField(value = "sort") @TableField(value = "sort")
private Integer sort; private Integer sort;
/**
* 前置服务器IP
*/
@TableField(value = "node_id")
private String nodeId;
/**
* 前置进程号
*/
@TableField(value = "node_process")
private Integer nodeProcess;
} }

View File

@@ -66,12 +66,24 @@ public class CsLinePO extends BaseEntity {
@TableField(value = "pt_ratio") @TableField(value = "pt_ratio")
private Double ptRatio; private Double ptRatio;
/**
* PT2次变比
*/
@TableField(value = "pt2_ratio")
private Double pt2Ratio;
/** /**
* CT变比 * CT变比
*/ */
@TableField(value = "ct_ratio") @TableField(value = "ct_ratio")
private Double ctRatio; private Double ctRatio;
/**
* CT2变比
*/
@TableField(value = "ct2_ratio")
private Double ct2Ratio;
/** /**
* 状态(0删除 1正常) * 状态(0删除 1正常)
*/ */
@@ -86,9 +98,6 @@ public class CsLinePO extends BaseEntity {
/** /**
* 逻辑子设备id(与模板对应) * 逻辑子设备id(与模板对应)
* 治理监测点 0
* 负载监测点 1
* 电网监测点 2
*/ */
@TableField(value = "clDid") @TableField(value = "clDid")
private Integer clDid; private Integer clDid;
@@ -101,4 +110,35 @@ public class CsLinePO extends BaseEntity {
*/ */
@TableField(value = "line_interval") @TableField(value = "line_interval")
private Integer lineInterval; private Integer lineInterval;
/**
* 运行状态
*/
@TableField(value = "run_status")
private Integer runStatus;
/**
* 监测点线路号
*/
@TableField(value = "line_no")
private Integer lineNo;
/**
* 监测对象类型
*/
@TableField(value = "monitor_obj")
private String monitorObj;
/**
* 是否治理(0:未治理 1:已治理)
*/
@TableField(value = "is_govern")
private Integer govern;
@TableField(value = "monitor_user")
private String monitorUser;
/**
* 治理报告文件路径
*/
@TableField(value = "report_file_path")
private String reportFilePath;
} }

View File

@@ -0,0 +1,65 @@
package com.njcn.csdevice.pojo.po;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author xy
* @since 2025-09-26
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("cs_terminal_logs")
public class CsTerminalLogs extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
private String id;
/**
* 设备id
*/
private String deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 监测点id
*/
private String lineId;
/**
* 前置服务器id
*/
private String nodeId;
/**
* 进程号
*/
private Integer nodeProcess;
/**
* 操作类型(0:新增 1:修改 2:删除)
*/
private Integer operateType;
/**
* 是否推送(0未推送 1已推送)
*/
private Integer isPush;
}

View File

@@ -0,0 +1,81 @@
package com.njcn.csdevice.pojo.po;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author xy
* @since 2025-10-09
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("cs_terminal_reply")
public class CsTerminalReply extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 消息id
*/
private String replyId;
/**
* 操作类型
*/
private String code;
/**
* 前置id
*/
private String nodeId;
/**
* 进程号
*/
private Integer processNo;
/**
* 设备id
*/
private String deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 监测点id
*/
private String lineId;
/**
* 是否收到0未收到 1收到
*/
private Integer isReceived;
/**
* 接收消息状态码
*/
private Integer receivedCode;
/**
* 接收消息描述
*/
private String receivedMsg;
}

View File

@@ -0,0 +1,70 @@
package com.njcn.csdevice.pojo.po;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author xy
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pq_node")
public class Node extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 前置序号
*/
private String id;
/**
* 名称
*/
private String name;
/**
* 服务器IP
*/
private String ip;
/**
* 描述
*/
private String remark;
/**
* 状态 0-删除1-正常;默认正常
*/
private Integer state;
/**
* 状态 前置等级
*/
private Integer nodeGrade;
/**
* 前置机支持最大装置数
*/
private Integer nodeDevNum;
/**
* 前置机支持最大进程数量
*/
private Integer maxProcessNum;
/**
* 排序
*/
private Integer sort;
}

View File

@@ -0,0 +1,42 @@
package com.njcn.csdevice.pojo.vo;
import com.njcn.csdevice.pojo.po.AppProjectPO;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author xy
*/ //台账信息
@Data
public class CldLedgerVo implements Serializable {
@ApiModelProperty("工程id")
private String engineeringId;
@ApiModelProperty(value = "工程名称")
private String engineeringName;
@ApiModelProperty(value = "")
private String province;
@ApiModelProperty(value = "")
private String city;
@ApiModelProperty(value = "工程描述")
private String engineeringDescription;
@ApiModelProperty(value = "项目信息")
private List<AppProjectPO> projectInfoList;
@ApiModelProperty(value = "设备信息")
private List<CsEquipmentDeliveryPO> deviceInfoList;
@ApiModelProperty(value = "监测点信息")
private List<CsLinePO> lineInfoList;
}

View File

@@ -0,0 +1,42 @@
package com.njcn.csdevice.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author xy
* 日志信息
*/
@Data
public class CldLogsVo implements Serializable {
@ApiModelProperty("工程名称")
private String engineeringName;
@ApiModelProperty("项目名称")
private String projectName;
@ApiModelProperty("设备名称")
private String deviceName;
@ApiModelProperty("监测点名称")
private String lineName;
@ApiModelProperty("补召类型")
private String log;
@ApiModelProperty("补召时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime logTime;
@ApiModelProperty("状态")
private String status;
@ApiModelProperty("结果")
private String result;
}

View File

@@ -91,4 +91,7 @@ public class CsEquipmentDeliveryVO extends BaseEntity {
private Integer sort; private Integer sort;
@ApiModelProperty(value="前置服务器id")
private String nodeId ;
} }

View File

@@ -23,6 +23,9 @@ public class CsLedgerVO implements Serializable {
@ApiModelProperty(name = "pid",value = "父id") @ApiModelProperty(name = "pid",value = "父id")
private String pid; private String pid;
@ApiModelProperty(name = "pids",value = "父id集合")
private String pids;
@ApiModelProperty(name = "name",value = "名称") @ApiModelProperty(name = "name",value = "名称")
private String name; private String name;

View File

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
@@ -60,6 +61,12 @@ public class DataGroupEventVO {
@ApiModelProperty("暂降幅值") @ApiModelProperty("暂降幅值")
private Float featureAmplitude; private Float featureAmplitude;
@ApiModelProperty("映射数据库暂降幅值")
private Double amplitude;
@ApiModelProperty("严重度")
private String severity;
@ApiModelProperty("波形路径") @ApiModelProperty("波形路径")
private String wavePath; private String wavePath;

View File

@@ -1,7 +1,6 @@
package com.njcn.csdevice.pojo.vo; package com.njcn.csdevice.pojo.vo;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.cswarn.pojo.vo.CsEquipmentAlarmVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;

View File

@@ -0,0 +1,75 @@
package com.njcn.csdevice.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
//台账信息
@Data
public class DeviceInfo implements Serializable {
@ApiModelProperty("终端索引")
private String id;
@ApiModelProperty("终端mac")
private String ip;
@ApiModelProperty("终端型号")
private String devType;
@ApiModelProperty("终端名称")
private String name;
@ApiModelProperty("前置机序号")
private Integer node;
@ApiModelProperty("开启的进程数")
private Integer maxProcessNum;
@ApiModelProperty("对时启动标志")
private boolean rightTime;
@ApiModelProperty("监测点集合")
private List<MonitorInfo> monitorData;
//终端下的监测点信息
@Data
public static class MonitorInfo implements Serializable {
@ApiModelProperty("监测点索引")
private String id;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("监测点逻辑号")
private String lineNo;
@ApiModelProperty("监测点电压等级")
private String voltageLevel;
@ApiModelProperty("监测点运行状态 0运行1检修2停运3调试4退运")
private Integer status;
@ApiModelProperty("监测点接线方式 0-星型 1-角型 2-V型")
private String ptType;
@ApiModelProperty("装置id")
private String deviceId;
@ApiModelProperty("pt1")
private Double pt1;
@ApiModelProperty("pt2")
private Double pt2;
@ApiModelProperty("ct1")
private Double ct1;
@ApiModelProperty("ct2")
private Double ct2;
}
}

View File

@@ -0,0 +1,31 @@
package com.njcn.csdevice.pojo.vo;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.Node;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
* @author xy
*/
@Data
public class NodeProcessDeviceVo implements Serializable {
private Node node;
private List<ProcessDevice> processDeviceList;
@Data
@EqualsAndHashCode(callSuper = false)
public static class ProcessDevice implements Serializable{
private Integer processNo;
private String processState;
private List<CsEquipmentDeliveryPO> deviceInfoList;
}
}

View File

@@ -0,0 +1,30 @@
package com.njcn.csdevice.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class PqSensitiveUserLineVO {
@ApiModelProperty("治理对象")
private String sensitiveUser;
@ApiModelProperty("监测点ID")
private String lineId;
@ApiModelProperty("测点名称")
private String lineName;
@ApiModelProperty("是否治理")
private String govern;
@ApiModelProperty("电压等级")
private double volGrade;
@ApiModelProperty("监测类型")
private String position;
@ApiModelProperty("运行状态")
private String runStatus;
@ApiModelProperty("报告文件")
private String reportFilePath;
@ApiModelProperty("最新数据时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime latestTime;
}

View File

@@ -88,11 +88,6 @@
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.8.5</version> <version>5.8.5</version>
</dependency> </dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>cs-warn-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- zxing生成二维码 --> <!-- zxing生成二维码 -->
<dependency> <dependency>
@@ -153,6 +148,21 @@
<artifactId>access-api</artifactId> <artifactId>access-api</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-mq</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.njcn.platform</groupId>
<artifactId>message-api</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -12,7 +12,11 @@ import com.njcn.csdevice.pojo.vo.CsGroupVO;
import com.njcn.csdevice.pojo.vo.DataGroupTemplateVO; import com.njcn.csdevice.pojo.vo.DataGroupTemplateVO;
import com.njcn.csdevice.service.ICsGroupService; import com.njcn.csdevice.service.ICsGroupService;
import com.njcn.csharmonic.param.CommonStatisticalQueryParam; import com.njcn.csharmonic.param.CommonStatisticalQueryParam;
import com.njcn.csharmonic.param.FittingDataQueryParam;
import com.njcn.csharmonic.param.SensitiveUserTrendDataQueryParam;
import com.njcn.csharmonic.param.TrendDataQueryParam;
import com.njcn.csharmonic.pojo.vo.ThdDataTdVO; import com.njcn.csharmonic.pojo.vo.ThdDataTdVO;
import com.njcn.csharmonic.pojo.vo.ThdDataVO;
import com.njcn.system.pojo.po.EleEpdPqd; import com.njcn.system.pojo.po.EleEpdPqd;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@@ -21,9 +25,11 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
@@ -143,5 +149,39 @@ public class CsGroupController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/trendData")
@ApiOperation("查询指标趋势图数据")
@ApiImplicitParam(name = "param",required = true)
public HttpResult<List<ThdDataVO>> trendData(@RequestBody @Validated TrendDataQueryParam param){
String methodDescribe = getMethodDescribe("trendData");
List<ThdDataVO> list = csGroupService.trendData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/fittingData")
@ApiOperation("查询指标拟合图数据")
@ApiImplicitParam(name = "param",required = true)
public HttpResult<List<ThdDataVO>> fittingData(@RequestBody @Validated FittingDataQueryParam param){
String methodDescribe = getMethodDescribe("fittingData");
List<ThdDataVO> list = csGroupService.fittingData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/sensitiveUserTrendData")
@ApiOperation("查询监测对象电网侧和负载侧监测点指标趋势对比数据")
@ApiImplicitParam(name = "param",required = true)
public HttpResult<Map<String,List<ThdDataVO>>> sensitiveUserTrendData(@RequestBody @Validated SensitiveUserTrendDataQueryParam param){
String methodDescribe = getMethodDescribe("sensitiveUserTrendData");
Map<String,List<ThdDataVO>> result = csGroupService.sensitiveUserTrendData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
} }

View File

@@ -54,7 +54,7 @@ public class DevModelController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/AuditDevModel") @PostMapping("/AuditDevModel")
@ApiOperation("更新/删除出厂设备") @ApiOperation("更新/删除设备模板参数")
@ApiImplicitParam(name = "csDevModelAuditParm", value = "更新/删除设备模板参数", required = true) @ApiImplicitParam(name = "csDevModelAuditParm", value = "更新/删除设备模板参数", required = true)
public HttpResult<Boolean> AuditDevModel(@RequestBody @Validated CsDevModelAuditParm csDevModelAuditParm ){ public HttpResult<Boolean> AuditDevModel(@RequestBody @Validated CsDevModelAuditParm csDevModelAuditParm ){
String methodDescribe = getMethodDescribe("AuditDevModel"); String methodDescribe = getMethodDescribe("AuditDevModel");

View File

@@ -93,8 +93,8 @@ public class DevModelRelationController extends BaseController {
@PostMapping("/getModelByType") @PostMapping("/getModelByType")
@ApiOperation("根据装置类型查询模板") @ApiOperation("根据装置类型查询模板")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "devId", value = "装置id", required = true), @ApiImplicitParam(name = "devId", value = "装置id", required = true),
@ApiImplicitParam(name = "type", value = "模板类型", required = true) @ApiImplicitParam(name = "type", value = "模板类型", required = true)
}) })
@ApiIgnore @ApiIgnore
public HttpResult<String> getModelByType(@RequestParam("devId") String devId, @RequestParam("type") Integer type){ public HttpResult<String> getModelByType(@RequestParam("devId") String devId, @RequestParam("type") Integer type){
@@ -103,4 +103,18 @@ public class DevModelRelationController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, modelId, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, modelId, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateDataByList")
@ApiOperation("根据装置集合修改模板信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "list", value = "装置id集合", required = true),
@ApiImplicitParam(name = "id", value = "模板id", required = true)
})
@ApiIgnore
public HttpResult<String> updateDataByList(@RequestParam("list") List<String> list, @RequestParam("id") String id){
String methodDescribe = getMethodDescribe("updateDataByList");
csDevModelRelationService.updateDataByList(list,id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
} }

View File

@@ -6,6 +6,7 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.enums.DeviceOperate; import com.njcn.csdevice.enums.DeviceOperate;
import com.njcn.csdevice.pojo.param.UserDevParam;
import com.njcn.csdevice.pojo.po.CsDeviceUserPO; import com.njcn.csdevice.pojo.po.CsDeviceUserPO;
import com.njcn.csdevice.pojo.vo.DevCountVO; import com.njcn.csdevice.pojo.vo.DevCountVO;
import com.njcn.csdevice.pojo.vo.DevUserVO; import com.njcn.csdevice.pojo.vo.DevUserVO;
@@ -140,4 +141,24 @@ public class DeviceUserController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/findDevByUserId")
@ApiOperation("根据用户Id查询设备集合")
@ApiImplicitParam(name = "id", value = "用户id", required = true)
public HttpResult<List<String>> findDevByUserId(@RequestParam("id") String id){
String methodDescribe = getMethodDescribe("findDevByUserId");
List<String> list = csDeviceUserPOService.findDevByUserId(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/channelDevByUserId")
@ApiOperation("根据用户Id解绑设备集合")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<String>> channelDevByUserId(@RequestBody UserDevParam param){
String methodDescribe = getMethodDescribe("channelDevByUserId");
csDeviceUserPOService.channelDevByUserId(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
} }

View File

@@ -2,6 +2,7 @@ package com.njcn.csdevice.controller.equipment;
import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
@@ -45,7 +46,6 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
* Description: * Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html * 接口文档访问地址http://serverIP:port/swagger-ui.html
@@ -60,7 +60,6 @@ import java.util.stream.Stream;
@Api(tags = " 出厂设备") @Api(tags = " 出厂设备")
@AllArgsConstructor @AllArgsConstructor
public class EquipmentDeliveryController extends BaseController { public class EquipmentDeliveryController extends BaseController {
private final CsEquipmentDeliveryService csEquipmentDeliveryService; private final CsEquipmentDeliveryService csEquipmentDeliveryService;
private final IMqttUserService mqttUserService; private final IMqttUserService mqttUserService;
private final CsDevModelRelationService csDevModelRelationService; private final CsDevModelRelationService csDevModelRelationService;
@@ -85,7 +84,6 @@ public class EquipmentDeliveryController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/AuditEquipmentDelivery") @PostMapping("/AuditEquipmentDelivery")
@ApiOperation("删除出厂设备") @ApiOperation("删除出厂设备")
@@ -115,16 +113,13 @@ public class EquipmentDeliveryController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryEquipmentByndid") @PostMapping("/queryEquipmentByndid")
@ApiOperation("通过ndid查询出厂设备") @ApiOperation("通过ndid查询出厂设备")
@ApiImplicitParam(name = "ndid", value = "网关识别码", required = true) @ApiImplicitParam(name = "ndid", value = "网关识别码", required = true)
public HttpResult<CsEquipmentDeliveryVO> queryEquipmentByndid(@RequestParam("ndid")String ndid){ public HttpResult<CsEquipmentDeliveryVO> queryEquipmentByndid(@RequestParam("ndid")String ndid){
String methodDescribe = getMethodDescribe("queryEquipmentByndid"); String methodDescribe = getMethodDescribe("queryEquipmentByndid");
CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentByndid (ndid);
CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentByndid (ndid);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, csEquipmentDeliveryVO, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, csEquipmentDeliveryVO, methodDescribe);
} }
@@ -146,17 +141,21 @@ public class EquipmentDeliveryController extends BaseController {
@ApiImplicitParam(name = "status", value = "状态", required = true) @ApiImplicitParam(name = "status", value = "状态", required = true)
}) })
@DeviceLog(operateType = DeviceOperate.UPDATESTATUSBYNDID) @DeviceLog(operateType = DeviceOperate.UPDATESTATUSBYNDID)
public HttpResult<Boolean> updateStatusBynDid(@RequestParam("nDId") String nDid,@RequestParam("status") Integer status){ public HttpResult<Boolean> updateStatusBynDid(@RequestParam("nDId") String nDid,@RequestParam("status") Integer status){
String methodDescribe = getMethodDescribe("updateStatusBynDid"); String methodDescribe = getMethodDescribe("updateStatusBynDid");
csEquipmentDeliveryService.updateStatusBynDid(nDid,status); csEquipmentDeliveryService.updateStatusBynDid(nDid,status);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryEquipmentById") @PostMapping("/queryEquipmentById")
@ApiOperation("设备查询通过id获取") @ApiOperation("设备查询通过id获取")
@ApiImplicitParam(name = "ids", value = "设备id集合", required = true) @ApiImplicitParam(name = "ids", value = "设备id集合", required = true)
public HttpResult<List<CsEquipmentDeliveryDTO>> queryEquipmentById(@RequestParam List<String> ids){ public HttpResult<List<CsEquipmentDeliveryDTO>> queryEquipmentById(@RequestParam List<String> ids){
String methodDescribe = getMethodDescribe("queryEquipmentById"); String methodDescribe = getMethodDescribe("queryEquipmentById");
if (CollectionUtil.isEmpty(ids)) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
List<CsEquipmentDeliveryPO> csEquipmentDeliveryPOS = csEquipmentDeliveryService.listByIds(ids); List<CsEquipmentDeliveryPO> csEquipmentDeliveryPOS = csEquipmentDeliveryService.listByIds(ids);
List<CsEquipmentDeliveryDTO> collect = csEquipmentDeliveryPOS.stream().map(temp -> { List<CsEquipmentDeliveryDTO> collect = csEquipmentDeliveryPOS.stream().map(temp -> {
CsEquipmentDeliveryDTO csEquipmentDeliveryDTO = new CsEquipmentDeliveryDTO(); CsEquipmentDeliveryDTO csEquipmentDeliveryDTO = new CsEquipmentDeliveryDTO();
@@ -217,13 +216,11 @@ public class EquipmentDeliveryController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
} }
@ResponseBody @ResponseBody
@ApiOperation("导出设备模板") @ApiOperation("导出设备模板")
@GetMapping(value = "getExcelTemplate") @GetMapping(value = "getExcelTemplate")
public HttpResult<String> getExcelTemplate(HttpServletResponse response) { public HttpResult<String> getExcelTemplate(HttpServletResponse response) {
String methodDescribe = getMethodDescribe("getExcelTemplate"); String methodDescribe = getMethodDescribe("getExcelTemplate");
ExportParams exportParams = new ExportParams("批量导入模板(请严格按照模板标准填入数据)", "终端入网检测录入信息"); ExportParams exportParams = new ExportParams("批量导入模板(请严格按照模板标准填入数据)", "终端入网检测录入信息");
exportParams.setStyle(ExcelStyleUtil.class); exportParams.setStyle(ExcelStyleUtil.class);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, DeviceExcelTemplete.class, new ArrayList<DeviceExcelTemplete>()); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, DeviceExcelTemplete.class, new ArrayList<DeviceExcelTemplete>());
@@ -256,10 +253,10 @@ public class EquipmentDeliveryController extends BaseController {
mqttUserService.insertMqttUser(temp.getNdid()); mqttUserService.insertMqttUser(temp.getNdid());
} }
}); });
} }
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }
@ResponseBody @ResponseBody
@ApiOperation("联调完成") @ApiOperation("联调完成")
@PostMapping(value = "testcompletion") @PostMapping(value = "testcompletion")
@@ -282,8 +279,8 @@ public class EquipmentDeliveryController extends BaseController {
@PostMapping("/updateSoftInfo") @PostMapping("/updateSoftInfo")
@ApiOperation("更新设备软件信息") @ApiOperation("更新设备软件信息")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "nDid", value = "网络设备码", required = true), @ApiImplicitParam(name = "nDid", value = "网络设备码", required = true),
@ApiImplicitParam(name = "id", value = "软件信息id", required = true) @ApiImplicitParam(name = "id", value = "软件信息id", required = true)
}) })
@ApiIgnore @ApiIgnore
public HttpResult<String> updateSoftInfo(@RequestParam("nDid") String nDid,@RequestParam("id") String id){ public HttpResult<String> updateSoftInfo(@RequestParam("nDid") String nDid,@RequestParam("id") String id){
@@ -306,7 +303,6 @@ public class EquipmentDeliveryController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/rebootDevice") @PostMapping("/rebootDevice")
@ApiOperation("重启设备") @ApiOperation("重启设备")
@@ -348,4 +344,75 @@ public class EquipmentDeliveryController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/addCldDev")
@ApiOperation("新增云前置设备")
@ApiImplicitParam(name = "param", value = "参数", required = true)
@DeviceLog(operateType = DeviceOperate.ADD)
public HttpResult<CsEquipmentDeliveryPO> addCldDev(@RequestBody @Validated CsEquipmentDeliveryAddParm param){
String methodDescribe = getMethodDescribe("addCldDev");
CsEquipmentDeliveryPO po = csEquipmentDeliveryService.saveCld(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/delCldDev")
@ApiOperation("删除云前置设备")
@ApiImplicitParam(name = "id", value = "id", required = true)
@DeviceLog(operateType = DeviceOperate.DELETE)
public HttpResult<Boolean> delCldDev(@RequestParam("id") String id){
String methodDescribe = getMethodDescribe("delCldDev");
boolean result = csEquipmentDeliveryService.delCldDev(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateCldDev")
@ApiOperation("修改云前置设备")
@ApiImplicitParam(name = "param", value = "参数", required = true)
@DeviceLog(operateType = DeviceOperate.UPDATE)
public HttpResult<Boolean> updateCldDev(@RequestBody @Validated CsEquipmentDeliveryAuditParm param){
String methodDescribe = getMethodDescribe("updateCldDev");
boolean result = csEquipmentDeliveryService.updateCldDev(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateCldDevStatus")
@ApiOperation("云前置心跳丢失切换设备状态")
@ApiImplicitParams({
@ApiImplicitParam(name = "nodeId", value = "前置服务器id", required = true),
@ApiImplicitParam(name = "processNo", value = "进程号", required = true)
})
@ApiIgnore
public HttpResult<Boolean> updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo){
String methodDescribe = getMethodDescribe("updateCldDevStatus");
csEquipmentDeliveryService.updateCldDevStatus(nodeId,processNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/flipCldDevStatus")
@ApiOperation("云前置设备状态翻转")
@ApiImplicitParams({
@ApiImplicitParam(name = "devId", value = "设备id", required = true),
@ApiImplicitParam(name = "status", value = "状态", required = true)
})
@ApiIgnore
public HttpResult<Boolean> flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status){
String methodDescribe = getMethodDescribe("flipCldDevStatus");
csEquipmentDeliveryService.flipCldDevStatus(devId,status);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getRunPortableDev")
@ApiOperation("获取用户未绑定的在运的便携式设备")
@ApiImplicitParam(name = "userId", value = "用户id", required = true)
public HttpResult<List<CsEquipmentDeliveryPO>> getRunPortableDev(@RequestParam("userId") String userId){
String methodDescribe = getMethodDescribe("getRunPortableDev");
List<CsEquipmentDeliveryPO> result = csEquipmentDeliveryService.getRunPortableDev(userId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
} }

View File

@@ -0,0 +1,75 @@
package com.njcn.csdevice.controller.icd;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.service.ICsTerminalLogsService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author xy
* @since 2025-09-26
*/
@Slf4j
@RequestMapping("/csTerminalLogs")
@RestController
@Api(tags = "云前置台账信息日志")
@AllArgsConstructor
public class CsTerminalLogsController extends BaseController {
private final ICsTerminalLogsService csTerminalLogsService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/pushCldInfo")
@ApiOperation("推送日志台账信息")
public HttpResult<String> pushCldInfo(){
String methodDescribe = getMethodDescribe("pushCldInfo");
String result = csTerminalLogsService.pushCldInfo();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateCldInfo")
@ApiOperation("更新日志台账信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "设备id", required = true),
@ApiImplicitParam(name = "code", value = "流程状态", required = true)
})
public HttpResult<String> updateCldInfo(@RequestParam String id, @RequestParam Integer code){
String methodDescribe = getMethodDescribe("updateCldInfo");
csTerminalLogsService.updateLogs(id,code);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateLaterData")
@ApiOperation("更新最新一组数据的推送状态")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "设备id", required = true),
@ApiImplicitParam(name = "code", value = "流程状态", required = true)
})
public HttpResult<String> updateLaterData(@RequestParam String id, @RequestParam String code){
String methodDescribe = getMethodDescribe("updateLaterData");
csTerminalLogsService.updateLaterData(id,code);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -0,0 +1,85 @@
package com.njcn.csdevice.controller.icd;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.param.IcdBzParam;
import com.njcn.csdevice.param.IcdBzReplyParam;
import com.njcn.csdevice.pojo.vo.CldLogsVo;
import com.njcn.csdevice.service.ICsTerminalReplyService;
import com.njcn.web.controller.BaseController;
import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author xy
* @since 2025-10-09
*/
@Slf4j
@RequestMapping("/csTerminalReply")
@RestController
@Api(tags = "云前置台账信息响应记录")
@AllArgsConstructor
public class CsTerminalReplyController extends BaseController {
private final ICsTerminalReplyService csTerminalReplyService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryData")
@ApiOperation("查询推送结果")
public HttpResult<List<String>> queryData(){
String methodDescribe = getMethodDescribe("queryData");
List<String> result = csTerminalReplyService.queryReplyData();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateData")
@ApiOperation("更新推送结果")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<String> updateData(@RequestBody @Validated IcdBzReplyParam param){
String methodDescribe = getMethodDescribe("updateData");
csTerminalReplyService.updateReplyData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/bzLogs")
@ApiOperation("补召日志")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<Page<CldLogsVo>> bzLogs(@RequestBody @Validated BaseParam param){
String methodDescribe = getMethodDescribe("bzLogs");
Page<CldLogsVo> list = csTerminalReplyService.getBzLogs(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateBzData")
@ApiOperation("更新补召推送结果")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<String> updateBzData(@RequestBody @Validated IcdBzReplyParam param){
String methodDescribe = getMethodDescribe("updateBzData");
csTerminalReplyService.updateBzData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -0,0 +1,98 @@
package com.njcn.csdevice.controller.icd;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.param.IcdBzParam;
import com.njcn.csdevice.param.IcdLedgerParam;
import com.njcn.csdevice.param.IcdParam;
import com.njcn.csdevice.pojo.vo.CldLedgerVo;
import com.njcn.csdevice.pojo.vo.DeviceInfo;
import com.njcn.csdevice.service.IcdService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author xy
* @version V1.0.0
*/
@Slf4j
@RestController
@RequestMapping("/icd")
@Api(tags = "云前置改造")
@AllArgsConstructor
public class IcdController extends BaseController {
private final IcdService icdService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLedgerInfo")
@ApiOperation("获取台账信息")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<DeviceInfo>> getLedgerInfo(@RequestBody @Validated IcdParam param){
String methodDescribe = getMethodDescribe("getLedgerInfo");
List<DeviceInfo> result = icdService.getLedgerInfo(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/addLedgerInfo")
@ApiOperation("新增台账信息")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<DeviceInfo>> addLedgerInfo(@RequestBody @Validated IcdLedgerParam param){
String methodDescribe = getMethodDescribe("addLedgerInfo");
icdService.addLedgerInfo(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLedgerById")
@ApiOperation("根据Id获取台账信息")
@ApiImplicitParam(name = "id", value = "id", required = true)
public HttpResult<CldLedgerVo> getLedgerById(@RequestParam String id){
String methodDescribe = getMethodDescribe("getLedgerById");
CldLedgerVo vo = icdService.getLedgerById(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, vo, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/bzFileByEventId")
@ApiOperation("指定事件补召波形")
@ApiImplicitParam(name = "eventId", value = "事件id", required = true)
public HttpResult<String> bzFileByEventId(@RequestParam String eventId){
String methodDescribe = getMethodDescribe("bzFileByEventId");
icdService.bzFileByEventId(eventId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/bzEvent")
@ApiOperation("补召事件")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<String> bzEvent(@RequestBody @Validated IcdBzParam param){
String methodDescribe = getMethodDescribe("bzEvent");
icdService.bzEvent(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/bzFile")
@ApiOperation("补召波形")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<String> bzFile(@RequestBody @Validated IcdBzParam param){
String methodDescribe = getMethodDescribe("bzFile");
icdService.bzFile(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -0,0 +1,215 @@
package com.njcn.csdevice.controller.icd;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.param.IcdNodeParam;
import com.njcn.csdevice.pojo.param.NodeParam;
import com.njcn.csdevice.pojo.po.Node;
import com.njcn.csdevice.pojo.vo.NodeProcessDeviceVo;
import com.njcn.csdevice.service.INodeService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 前置程序控制器
* @author xy
*/
@Slf4j
@Api(tags = "前置机管理")
@RestController
@RequestMapping("node")
@RequiredArgsConstructor
public class NodeController extends BaseController {
private final INodeService iNodeService;
/**
* 新增前置机
* @author cdf
* @date 2021/6/23
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD)
@ApiOperation("新增前置机")
@ApiImplicitParam(value = "前置机信息",name = "nodeParam",required = true)
@PostMapping("addNode")
public HttpResult<Boolean> addNode(@Validated @RequestBody NodeParam nodeParam){
String methodDescribe = getMethodDescribe("addNode");
boolean result = iNodeService.addNode(nodeParam);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
/**
* 修改前置机
* @author cdf
* @date 2021/6/23
*/
@ApiOperation("修改前置机")
@ApiImplicitParam(value = "前置机信息",name = "updateNodeParam",required = true)
@PutMapping("updateNode")
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.UPDATE)
public HttpResult<Boolean> updateNode(@Validated @RequestBody NodeParam.NodeUpdateParam updateNodeParam){
String methodDescribe = getMethodDescribe("updateNode");
boolean result = iNodeService.updateNode(updateNodeParam);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
/**
* 删除前置
* @author cdf
* @date 2021/6/23
*/
@ApiOperation(value = "删除前置机")
@ApiImplicitParam(value = "前置机id",name = "id",required = true)
@PostMapping("delNode")
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.DELETE)
public HttpResult<Boolean> delNode(@Validated @NotNull(message = "id不可为空") @RequestParam("id")String id){
String methodDescribe = getMethodDescribe("delNode");
boolean result = iNodeService.delNode(id);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
/**
* 变更前置机状态
* @author cdf
* @date 2021/6/23
*/
@ApiOperation(value = "变更前置机状态")
@ApiImplicitParams({
@ApiImplicitParam(value = "前置机id",name = "id",required = true ),
@ApiImplicitParam(value = "前置机状态",name = "state",required = true )
})
@PostMapping("updateNodeState")
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.UPDATE)
public HttpResult<Boolean> updateNodeState(@Validated @NotNull(message = "id不可为空") @RequestParam("id")String id,@NotNull(message = "状态不为空") @RequestParam("state")Integer state){
String methodDescribe = getMethodDescribe("updateNodeState");
boolean result = iNodeService.updateNodeState(id,state);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
/**
* 获取全部前置机分页
* @author cdf
* @date 2021/6/23
*/
@ApiOperation("获取全部前置机")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
@PostMapping("nodeList")
public HttpResult<Page<Node>> nodeList(@RequestBody NodeParam.NodeQueryParam nodeQueryParam){
String methodDescribe = getMethodDescribe("nodeList");
Page<Node> page = iNodeService.nodeList(nodeQueryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
}
/**
* 获取全部前置机不分页
* @author cdf
* @date 2021/6/23
*/
@ApiOperation("获取全部前置机")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
@GetMapping("/nodeAllList")
public HttpResult<List<Node>> nodeAllList(){
String methodDescribe = getMethodDescribe("nodeAllList");
List<Node> resList = iNodeService.nodeAllList();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, resList, methodDescribe);
}
/**
* 根据id获取前置机
* @author cdf
* @date 2021/6/23
*/
@ApiOperation("根据id获取前置机")
@ApiImplicitParam(value = "前置机id",name = "id",required = true)
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
@GetMapping("/getNodeById")
public HttpResult<Node> getNodeById(@Validated @NotNull(message = "id不可为空") @RequestParam("id")String id){
String methodDescribe = getMethodDescribe("getNodeById");
Node node = iNodeService.getNodeById(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, node, methodDescribe);
}
/**
* 根据前置机id获取下面的进程和设备
* @author xy
*/
@ApiOperation("根据前置机id获取下面的进程和设备")
@ApiImplicitParam(value = "前置机id",name = "id",required = true)
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
@GetMapping("/getProcessNoAndDeviceById")
public HttpResult<NodeProcessDeviceVo> getProcessNoAndDeviceById(@Validated @NotNull(message = "id不可为空") @RequestParam("id")String id){
String methodDescribe = getMethodDescribe("getProcessNoAndDeviceById");
NodeProcessDeviceVo vo = iNodeService.getProcessNoAndDeviceById(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, vo, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/restartProcess")
@ApiOperation("重启前置机进程")
@ApiImplicitParams({
@ApiImplicitParam(name = "nodeId", value = "前置服务器id", required = true),
@ApiImplicitParam(name = "processNo", value = "进程号", required = true)
})
public HttpResult<String> restartProcess(@RequestParam String nodeId,@RequestParam Integer processNo){
String methodDescribe = getMethodDescribe("restartProcess");
iNodeService.restartProcess(nodeId,processNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateDevProcessNo")
@ApiOperation("更新设备进程号")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "设备id", required = true),
@ApiImplicitParam(name = "processNo", value = "进程号", required = true)
})
public HttpResult<String> updateDevProcessNo(@RequestParam String id,@RequestParam Integer processNo){
String methodDescribe = getMethodDescribe("updateDevProcessNo");
String result = iNodeService.updateDevProcessNo(id,processNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateDevNode")
@ApiOperation("更新设备前置信息")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<String> updateDevNode(@RequestBody IcdNodeParam param){
String methodDescribe = getMethodDescribe("updateDevNode");
String result = iNodeService.updateDevNode(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -1,13 +1,24 @@
package com.njcn.csdevice.controller.ledger; package com.njcn.csdevice.controller.ledger;
import cn.hutool.core.collection.CollUtil;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.mapper.PqsDeviceUnitMapper; import com.njcn.csdevice.mapper.PqsDeviceUnitMapper;
import com.njcn.csdevice.pojo.po.CsDeviceUserPO;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.service.CsDeviceUserPOService;
import com.njcn.csdevice.service.CsEquipmentDeliveryService;
import com.njcn.csdevice.service.CsLinePOService;
import com.njcn.device.biz.pojo.po.PqsDeviceUnit; import com.njcn.device.biz.pojo.po.PqsDeviceUnit;
import com.njcn.user.api.UserFeignClient;
import com.njcn.user.pojo.constant.UserType;
import com.njcn.user.pojo.vo.UserVO;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
@@ -17,7 +28,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
@@ -34,7 +49,89 @@ public class CsCommTerminalController extends BaseController {
private final PqsDeviceUnitMapper pqsDeviceUnitMapper; private final PqsDeviceUnitMapper pqsDeviceUnitMapper;
private final CsDeviceUserPOService csDeviceUserPOService;
private final CsLinePOService csLinePOService;
private final UserFeignClient userFeignClient;
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
/**
* 根据用户获取设备信息
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getDevIdsByUser")
@ApiOperation("根据登录用户id获取用户所有设备id集合")
@ApiImplicitParam(name = "userId", value = "用户id", required = true)
public HttpResult<List<String>> getDevIdsByUser(@RequestParam("userId") String userId) {
String methodDescribe = getMethodDescribe("getDevIdsByUser");
List<String> devIds = commGetDevIds(userId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, devIds, methodDescribe);
}
/**
* 根据用户获取设备信息
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getLineIdsByUser")
@ApiOperation("根据登录用户id获取用户所有监测点id集合")
@ApiImplicitParam(name = "userId", value = "用户id", required = true)
public HttpResult<List<String>> getLineIdsByUser(@RequestParam("userId") String userId) {
String methodDescribe = getMethodDescribe("getLineIdsByUser");
List<String> devIds = commGetDevIds(userId);
if(CollUtil.isNotEmpty(devIds)){
List<CsLinePO> poList = csLinePOService.lambdaQuery().select(CsLinePO::getLineId).in(CsLinePO::getDeviceId,devIds)
.eq(CsLinePO::getStatus,DataStateEnum.ENABLE.getCode()).list();
if(CollUtil.isEmpty(poList)){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, Collections.emptyList(), methodDescribe);
}else {
List<String> result = poList.stream().map(CsLinePO::getLineId).distinct().collect(Collectors.toList());
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, Collections.emptyList(), methodDescribe);
}
}
/**
* 根据用户获取设备信息
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getPqUserIdsByUser")
@ApiOperation("根据登录用户id获取电能质量用户id集合")
@ApiImplicitParam(name = "userId", value = "用户id", required = true)
public HttpResult<List<String>> getPqUserIdsByUser(@RequestParam("userId") String userId) {
String methodDescribe = getMethodDescribe("getPqUserIdsByUser");
List<String> devIds = commGetDevIds(userId);
if(CollUtil.isNotEmpty(devIds)){
List<CsLinePO> poList = csLinePOService.lambdaQuery().select(CsLinePO::getLineId,CsLinePO::getMonitorUser).in(CsLinePO::getDeviceId,devIds)
.eq(CsLinePO::getStatus,DataStateEnum.ENABLE.getCode()).list();
if(CollUtil.isEmpty(poList)){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, Collections.emptyList(), methodDescribe);
}else {
List<String> result = poList.stream().map(CsLinePO::getMonitorUser).distinct().collect(Collectors.toList());
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, Collections.emptyList(), methodDescribe);
}
}
private List<String> commGetDevIds(String userId){
UserVO userVO = userFeignClient.getUserById(userId).getData();
List<String> devIds;
if(userVO.getType().equals(UserType.SUPER_ADMINISTRATOR ) || userVO.getType().equals(UserType.ADMINISTRATOR )){
devIds = csEquipmentDeliveryService.getAll().stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
}else {
List<CsDeviceUserPO> devList = csDeviceUserPOService.lambdaQuery().select(CsDeviceUserPO::getDeviceId)
.and(w->w.eq(CsDeviceUserPO::getPrimaryUserId,userId).or().eq(CsDeviceUserPO::getSubUserId,userId))
.eq(CsDeviceUserPO::getStatus, DataStateEnum.ENABLE.getCode()).list();
devIds = devList.stream().map(CsDeviceUserPO::getDeviceId).distinct().collect(Collectors.toList());
}
return devIds;
}
/** /**
* 通过监测点获取监测点数据单位 * 通过监测点获取监测点数据单位

View File

@@ -156,5 +156,44 @@ public class CsLedgerController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, allList, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, allList, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/cldTree")
@ApiOperation("云前置树")
public HttpResult<CsLedgerVO> cldTree(){
String methodDescribe = getMethodDescribe("cldTree");
CsLedgerVO vo = csLedgerService.cldTree();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, vo, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getInfoByIds")
@ApiOperation("根据设备集合查询工程,设备信息")
@ApiImplicitParam(name = "list", value = "查询条件", required = true)
public HttpResult<List<DevDetailDTO>> getInfoByIds(@RequestBody @Validated List<String> list){
String methodDescribe = getMethodDescribe("getInfoByIds");
List<DevDetailDTO> details = csLedgerService.getInfoByIds(list);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, details, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getDevInfoByEngineerIds")
@ApiOperation("根据工程获取设备信息")
@ApiImplicitParam(name = "list", value = "查询条件", required = true)
public HttpResult<List<DevDetailDTO>> getDevInfoByEngineerIds(@RequestBody @Validated List<String> list){
String methodDescribe = getMethodDescribe("getDevInfoByEngineerIds");
List<DevDetailDTO> details = csLedgerService.getDevInfoByEngineerIds(list);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, details, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getEngineeringHaveDevs")
@ApiOperation("根据工程信息获取有设备的工程")
@ApiImplicitParam(name = "list", value = "查询条件", required = true)
public HttpResult<List<DevDetailDTO>> getEngineeringHaveDevs(@RequestBody @Validated List<String> list){
String methodDescribe = getMethodDescribe("getEngineeringHaveDevs");
List<DevDetailDTO> details = csLedgerService.getEngineeringHaveDevs(list);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, details, methodDescribe);
}
} }

View File

@@ -1,27 +1,29 @@
package com.njcn.csdevice.controller.line; package com.njcn.csdevice.controller.line;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.mapper.CsLinePOMapper;
import com.njcn.csdevice.mapper.OverlimitMapper; import com.njcn.csdevice.mapper.OverlimitMapper;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO;
import com.njcn.csdevice.service.CsLinePOService; import com.njcn.csdevice.service.CsLinePOService;
import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.biz.utils.COverlimitUtil; import com.njcn.device.biz.utils.COverlimitUtil;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api; import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.*;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import java.util.List; import java.util.List;
@@ -41,9 +43,7 @@ import java.util.List;
public class CslineController extends BaseController { public class CslineController extends BaseController {
private final CsLinePOService csLinePOService; private final CsLinePOService csLinePOService;
private final OverlimitMapper overlimitMapper; private final OverlimitMapper overlimitMapper;
private final CsLinePOMapper csLinePOMapper;
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryLineById") @PostMapping("/queryLineById")
@@ -92,16 +92,6 @@ public class CslineController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @PostMapping("/addLineList")
// @ApiOperation("批量新增监测点及绑定关系")
// @ApiImplicitParam(name = "list", value = "监测点数据集", required = true)
// public HttpResult<String> addLines(@RequestBody List<CsLineParm> list){
// String methodDescribe = getMethodDescribe("addLines");
// csLinePOService.addLines(list);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
// }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/findByNdid") @PostMapping("/findByNdid")
@ApiOperation("根据ndid查询监测点") @ApiOperation("根据ndid查询监测点")
@@ -148,23 +138,168 @@ public class CslineController extends BaseController {
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getOverLimitData") @PostMapping("/getOverLimitDataByIds")
@ApiOperation("根据监测点id获取国标限值") @ApiOperation("根据监测点id集合获取国标限值")
@ApiImplicitParam(name = "id", value = "监测点id", required = true) @ApiImplicitParam(name = "ids", value = "监测点id集合", required = true)
public HttpResult<Overlimit> getOverLimitData(@RequestParam("id") String id) { public HttpResult<List<Overlimit>> getOverLimitData(@RequestBody List<String> ids) {
String methodDescribe = getMethodDescribe("getOverLimitData"); String methodDescribe = getMethodDescribe("getOverLimitDataByIds");
Overlimit result = overlimitMapper.selectById(id); List<Overlimit> result = overlimitMapper.selectBatchIds(ids);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
} }
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @PostMapping("/getLinesByDevList")
// @ApiOperation("根据装置id集合获取监测点id集合")
// @ApiImplicitParam(name = "ids", value = "装置id集合", required = true)
// public HttpResult<List<CsLinePO>> getLinesByDevList(@RequestParam("ids") List<String> ids) {
// String methodDescribe = getMethodDescribe("getLinesByDevList");
// List<CsLinePO> list = csLinePOService.getLinesByDevList(ids);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
// }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLinesByDevList") @PostMapping("/getLinesByDevList")
@ApiOperation("根据装置id集合获取监测点id集合") @ApiOperation("根据装置id集合获取监测点id集合")
@ApiImplicitParam(name = "ids", value = "装置id集合", required = true) @ApiImplicitParam(name = "ids", value = "装置id集合", required = true)
public HttpResult<List<CsLinePO>> getLinesByDevList(@RequestParam("ids") List<String> ids) { public HttpResult<List<CsLinePO>> getLinesByDevList(@RequestBody List<String> ids) {
String methodDescribe = getMethodDescribe("getLinesByDevList"); String methodDescribe = getMethodDescribe("getLinesByDevList");
List<CsLinePO> list = csLinePOService.getLinesByDevList(ids); List<CsLinePO> list = csLinePOService.getLinesByDevList(ids);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/addCldLine")
@ApiOperation("新增云前置监测点")
@ApiImplicitParam(name = "param", value = "param", required = true)
public HttpResult<List<CsLinePO>> addCldLine(@RequestBody @Validated CsLineParam param) {
String methodDescribe = getMethodDescribe("addCldLine");
csLinePOService.addCldLine(param);
//新增监测点限值
Overlimit overlimit = COverlimitUtil.globalAssemble(param.getVolGrade().floatValue(),10f,10f,10f,0,1);
overlimit.setId(param.getLineId());
overlimitMapper.deleteById(param.getLineId());
overlimitMapper.insert(overlimit);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateCldLine")
@ApiOperation("修改云前置监测点")
@ApiImplicitParam(name = "param", value = "param", required = true)
public HttpResult<List<CsLinePO>> updateCldLine(@RequestBody CsLineParam param) {
String methodDescribe = getMethodDescribe("updateCldLine");
csLinePOService.updateCldLine(param);
//修改监测点限值
Overlimit overlimit = COverlimitUtil.globalAssemble(param.getVolGrade().floatValue(),10f,10f,10f,0,1);
overlimit.setId(param.getLineId());
overlimitMapper.deleteById(param.getLineId());
overlimitMapper.insert(overlimit);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/delCldLine")
@ApiOperation("删除云前置监测点")
@ApiImplicitParam(name = "id", value = "监测点id", required = true)
public HttpResult<List<CsLinePO>> delCldLine(@RequestParam("id") String id) {
String methodDescribe = getMethodDescribe("delCldLine");
csLinePOService.deleteCldLine(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateLineDataByList")
@ApiOperation("根据装置集合修改监测点信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "list", value = "装置id集合", required = true),
@ApiImplicitParam(name = "id", value = "模板id", required = true),
@ApiImplicitParam(name = "setId", value = "数据集id", required = true),
})
@ApiIgnore
public HttpResult<String> updateDataByList(@RequestParam("list") List<String> list, @RequestParam("id") String id, @RequestParam("setId") String setId){
String methodDescribe = getMethodDescribe("updateLineDataByList");
csLinePOService.updateLineDataByList(list,id,setId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getAllLine")
@ApiOperation("获取系统中所有监测点id")
public HttpResult<List<String>> getAllLine(){
String methodDescribe = getMethodDescribe("getAllLine");
List<String> list = csLinePOService.getAllLine();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getSimpleLine")
@ApiOperation("查询登录用户拥有的监测点台账")
public HttpResult<List<CsLinePO>> getSimpleLine(){
String methodDescribe = getMethodDescribe("getSimpleLine");
List<CsLinePO> list = csLinePOService.getSimpleLine();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLineByName")
@ApiOperation("根据名称获取监测点")
@ApiImplicitParam(name = "lineName", value = "监测点名称", required = true)
public HttpResult<List<CsLinePO>> getLineByName(@RequestParam("lineName") String lineName) {
String methodDescribe = getMethodDescribe("getLineByName");
List<CsLinePO> list = csLinePOService.getLineByName(lineName);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/list")
@ApiOperation("查询监测点列表")
@ApiImplicitParam(name = "param", value = "param", required = true)
public HttpResult<List<CsLinePO>> list(@RequestBody CsLinePO param) {
String methodDescribe = getMethodDescribe("list");
List<CsLinePO> list = csLinePOService.list(new LambdaQueryWrapper<CsLinePO>()
.eq(CsLinePO::getStatus, 1)
.eq(StrUtil.isNotBlank(param.getPosition()), CsLinePO::getPosition, param.getPosition())
.orderByAsc(CsLinePO::getName));
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLineBySensitiveUser")
@ApiOperation("根据敏感用户查询监测点")
public HttpResult<List<CsLinePO>> getLineBySensitiveUser(@RequestBody List<String> list) {
String methodDescribe = getMethodDescribe("getLineBySensitiveUser");
List<CsLinePO> result = csLinePOService.getLineBySensitiveUser(list);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSensitiveUserLineList")
@ApiOperation("获取敏感负荷用户监测点列表")
@ApiImplicitParam(name = "param", value = "查询参数", required = true)
public HttpResult<Page<PqSensitiveUserLineVO>> getSensitiveUserLineList(@RequestBody BaseParam param) {
String methodDescribe = getMethodDescribe("getList");
Page<PqSensitiveUserLineVO> page = csLinePOService.getSensitiveUserLineList(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/uploadReport")
@ApiOperation("上传治理报告")
public HttpResult<Boolean> uploadReport(@ApiParam(value = "文件",name="报告文件", required = true) @RequestPart("file") MultipartFile file,@ApiParam(value = "lineId", name="监测点ID", required = true) @RequestParam String lineId) {
String methodDescribe = getMethodDescribe("uploadReport");
boolean success = csLinePOService.uploadReport(file, lineId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, success, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getReportUrl")
@ApiOperation("获取治理报告链接")
public HttpResult<String> getReportUrl(@ApiParam(value = "lineId", name="监测点ID", required = true) @RequestParam String lineId) {
String methodDescribe = getMethodDescribe("getReportUrl");
String url = csLinePOService.getReportUrl(lineId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, url, methodDescribe);
}
} }

View File

@@ -1,5 +1,6 @@
package com.njcn.csdevice.controller.project; package com.njcn.csdevice.controller.project;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
@@ -68,8 +69,8 @@ public class AppProjectController extends BaseController {
public HttpResult<Boolean> addAppProject(@Validated AppProjectAddParm appProjectAddParm){ public HttpResult<Boolean> addAppProject(@Validated AppProjectAddParm appProjectAddParm){
String methodDescribe = getMethodDescribe("addAppProject"); String methodDescribe = getMethodDescribe("addAppProject");
Boolean flag = appProjectService.addAppProject(appProjectAddParm); AppProjectPO po = appProjectService.addAppProject(appProjectAddParm);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, ObjectUtil.isNotNull(po), methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/auditAppProject") @PostMapping("/auditAppProject")

View File

@@ -11,6 +11,8 @@ import com.njcn.csdevice.pojo.param.CsEngineeringAuditParm;
import com.njcn.csdevice.pojo.param.CsEngineeringQueryPageParm; import com.njcn.csdevice.pojo.param.CsEngineeringQueryPageParm;
import com.njcn.csdevice.pojo.param.CsEngineeringQueryParm; import com.njcn.csdevice.pojo.param.CsEngineeringQueryParm;
import com.njcn.csdevice.pojo.po.CsEngineeringPO; import com.njcn.csdevice.pojo.po.CsEngineeringPO;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.CsEngineeringVO; import com.njcn.csdevice.pojo.vo.CsEngineeringVO;
import com.njcn.csdevice.service.CsEngineeringService; import com.njcn.csdevice.service.CsEngineeringService;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
@@ -20,10 +22,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@@ -42,10 +41,8 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
public class EngineeringController extends BaseController { public class EngineeringController extends BaseController {
private final CsEngineeringService csEngineeringService; private final CsEngineeringService csEngineeringService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/addEngineering") @PostMapping("/addEngineering")
@ApiOperation("新增工程") @ApiOperation("新增工程")
@@ -88,4 +85,24 @@ public class EngineeringController extends BaseController {
IPage<CsEngineeringVO> page = csEngineeringService.queryEngineeringPage(csEngineeringQueryPageParm); IPage<CsEngineeringVO> page = csEngineeringService.queryEngineeringPage(csEngineeringQueryPageParm);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryEngineeringById")
@ApiOperation("工程查询通过id获取")
@ApiImplicitParam(name = "id", value = "工程id", required = true)
public HttpResult<CsEngineeringPO> queryEngineeringById(@RequestParam String id){
String methodDescribe = getMethodDescribe("queryEngineeringById");
CsEngineeringPO po = csEngineeringService.queryEngineeringById(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getUnlinkedEngineering")
@ApiOperation("获取用户未绑定的工程信息")
@ApiImplicitParam(name = "userId", value = "用户id", required = true)
public HttpResult<List<CsEngineeringPO>> getUnlinkedEngineering(@RequestParam("userId") String userId){
String methodDescribe = getMethodDescribe("getUnlinkedEngineering");
List<CsEngineeringPO> result = csEngineeringService.getUnlinkedEngineering(userId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
} }

View File

@@ -64,7 +64,7 @@ public class WlRecordController extends BaseController {
@GetMapping("/getTestRecordById") @GetMapping("/getTestRecordById")
@ApiOperation("根据测试项ID查询测试项信息") @ApiOperation("根据测试项ID查询测试项信息")
@ApiImplicitParam(name = "testRecordId", value = "测试项ID", required = true) @ApiImplicitParam(name = "testRecordId", value = "测试项ID", required = true)
public HttpResult<RecordVo.RecordItemVo> getTestRecordById(@RequestParam @Validated String testRecordId) { public HttpResult<RecordVo.RecordItemVo> getTestRecordById(@RequestParam("testRecordId") @Validated String testRecordId) {
String methodDescribe = getMethodDescribe("getTestRecordById"); String methodDescribe = getMethodDescribe("getTestRecordById");
LogUtil.njcnDebug(log, "{}测试项id为{}", methodDescribe, testRecordId); LogUtil.njcnDebug(log, "{}测试项id为{}", methodDescribe, testRecordId);
RecordVo.RecordItemVo result = wlRecordService.getTestRecordById(testRecordId); RecordVo.RecordItemVo result = wlRecordService.getTestRecordById(testRecordId);

View File

@@ -1,5 +1,6 @@
package com.njcn.csdevice.mapper; package com.njcn.csdevice.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,6 +22,7 @@ import java.util.List;
* @author clam * @author clam
* @version V1.0.0 * @version V1.0.0
*/ */
@DS("master")
public interface CsEquipmentDeliveryMapper extends BaseMapper<CsEquipmentDeliveryPO> { public interface CsEquipmentDeliveryMapper extends BaseMapper<CsEquipmentDeliveryPO> {
Page<ProjectEquipmentVO> queryProjectEquipmentVO(Page<ProjectEquipmentVO> returnpage,@Param("projectEquipmentQueryParm")ProjectEquipmentQueryParm projectEquipmentQueryParm,@Param("device")List<String> device); Page<ProjectEquipmentVO> queryProjectEquipmentVO(Page<ProjectEquipmentVO> returnpage,@Param("projectEquipmentQueryParm")ProjectEquipmentQueryParm projectEquipmentQueryParm,@Param("device")List<String> device);
@@ -32,4 +34,7 @@ public interface CsEquipmentDeliveryMapper extends BaseMapper<CsEquipmentDeliver
//获取符合条件的设备数量 //获取符合条件的设备数量
int getCounts(@Param("queryParam") CsEquipmentDeliveryQueryParm queryParam); int getCounts(@Param("queryParam") CsEquipmentDeliveryQueryParm queryParam);
int getListByNodeProcess(@Param("nodeId")String nodeId,@Param("process")Integer process);
List<CsEquipmentDeliveryPO> getDataByNodeIdAndProcessNo(@Param("nodeId")String nodeId,@Param("process")Integer process);
} }

View File

@@ -0,0 +1,16 @@
package com.njcn.csdevice.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.csdevice.pojo.po.CsTerminalLogs;
/**
* <p>
* Mapper 接口
* </p>
*
* @author xy
* @since 2025-09-26
*/
public interface CsTerminalLogsMapper extends BaseMapper<CsTerminalLogs> {
}

View File

@@ -0,0 +1,22 @@
package com.njcn.csdevice.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.csdevice.pojo.po.CsTerminalReply;
import com.njcn.user.pojo.vo.RoleVO;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* Mapper 接口
* </p>
*
* @author xy
* @since 2025-10-09
*/
public interface CsTerminalReplyMapper extends BaseMapper<CsTerminalReply> {
Page<CsTerminalReply> page(@Param("page")Page<RoleVO> page, @Param("ew") QueryWrapper<CsTerminalReply> queryWrapper);
}

View File

@@ -0,0 +1,25 @@
package com.njcn.csdevice.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.csdevice.param.IcdParam;
import com.njcn.csdevice.pojo.po.Node;
import com.njcn.csdevice.pojo.vo.DeviceInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author cdf
* @since 2022-01-04
*/
@DS("sjzx")
public interface NodeMapper extends BaseMapper<Node> {
List<DeviceInfo> nodeDeviceList(@Param("nodeDeviceParam") IcdParam icdParam);
}

View File

@@ -93,7 +93,7 @@
from from
cs_equipment_delivery cs_equipment_delivery
<where> <where>
1=1 dev_access_method = 'MQTT'
<if test="queryParam.process != null and queryParam.process !=''"> <if test="queryParam.process != null and queryParam.process !=''">
and process = #{queryParam.process} and process = #{queryParam.process}
</if> </if>
@@ -124,4 +124,29 @@
</if> </if>
</where> </where>
</select> </select>
<select id="getListByNodeProcess" resultType="int">
select
count(1)
from
cs_equipment_delivery
where
node_id = #{nodeId} and run_status != 0
<if test="process != null and process !=''">
and node_process > #{process}
</if>
</select>
<select id="getDataByNodeIdAndProcessNo" resultType="com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO">
select
*
from
cs_equipment_delivery
where
node_id = #{nodeId} and run_status != 0
<if test="process != null and process !=''">
and node_process = #{process}
</if>
</select>
</mapper> </mapper>

View File

@@ -32,7 +32,7 @@
</resultMap> </resultMap>
<select id="getAll" resultType="CsLedgerVO"> <select id="getAll" resultType="CsLedgerVO">
select select
id,pid,name,level,sort id,pid,pids,name,level,sort
from from
cs_ledger cs_ledger
where where

View File

@@ -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.njcn.csdevice.mapper.CsTerminalReplyMapper">
<!--获取角色分页列表-->
<select id="page" resultType="CsTerminalReply">
select
cs_terminal_reply.*
from
cs_terminal_reply
WHERE ${ew.sqlSegment}
</select>
</mapper>

View File

@@ -0,0 +1,43 @@
<?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.njcn.csdevice.mapper.NodeMapper">
<select id="nodeDeviceList" resultType="com.njcn.csdevice.pojo.vo.DeviceInfo">
SELECT
pq_device.Id id,
pq_device.IP ip,
s1.Name devType,
pq_device.Port port,
pq_line.Name name,
sub.Name subName,
pq_device.Update_Time updateTime,
s2.Name manufacturer,
pq_device.Com_Flag status,
pq_device.Series series,
pq_device_process.process_no processNo,
pq_device.Dev_Key devKey,
pq_node.max_Process_Num maxProcessNum
FROM
pq_device
LEFT JOIN pq_node ON pq_node.Id = pq_device.Node_Id
LEFT JOIN pq_line on pq_device.id = pq_line.id
LEFT JOIN pq_line sub on pq_line.pid = sub.id
LEFT JOIN pq_device_process on pq_device_process.id = pq_device.id
LEFT JOIN pq_dev_type s1 ON pq_device.Dev_Type = s1.id
LEFT JOIN sys_dict_data s2 ON pq_device.Manufacturer = s2.id
<where>
<if test="nodeDeviceParam.ip!=null and nodeDeviceParam.ip != ''">
pq_node.ip=#{nodeDeviceParam.ip}
</if>
<if test="nodeDeviceParam.devId!=null and nodeDeviceParam.devId != ''">
pq_device.id=#{nodeDeviceParam.devId}
</if>
<if test="nodeDeviceParam.runFlag!=null and nodeDeviceParam.runFlag.size()!=0">
AND pq_device.Run_Flag in
<foreach collection="nodeDeviceParam.runFlag" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>

View File

@@ -28,7 +28,7 @@ public interface AppProjectService extends IService<AppProjectPO> {
* @Author: clam * @Author: clam
* @Date: 2023/3/27 * @Date: 2023/3/27
*/ */
Boolean addAppProject(AppProjectAddParm appProjectAddOrAuditParm); AppProjectPO addAppProject(AppProjectAddParm appProjectAddOrAuditParm);
/** /**
* @Description: AuditAppProject * @Description: AuditAppProject
* @Param: [appProjectAuditParm] * @Param: [appProjectAuditParm]

View File

@@ -55,5 +55,5 @@ public interface CsDevModelRelationService extends IService<CsDevModelRelationPO
String getVersionByDevId(String devId); String getVersionByDevId(String devId);
void updateDataByList(List<String> list, String id);
} }

View File

@@ -76,4 +76,10 @@ public interface CsDevModelService extends IService<CsDevModelPO>{
*/ */
CsDevModelPO getModelById(String id); CsDevModelPO getModelById(String id);
/**
* 获取云前置模板
* @return
*/
CsDevModelPO getCldModel();
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.csdevice.service; package com.njcn.csdevice.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.pojo.param.UserDevParam;
import com.njcn.csdevice.pojo.po.CsDeviceUserPO; import com.njcn.csdevice.pojo.po.CsDeviceUserPO;
import com.njcn.csdevice.pojo.vo.DevCountVO; import com.njcn.csdevice.pojo.vo.DevCountVO;
import com.njcn.csdevice.pojo.vo.DevUserVO; import com.njcn.csdevice.pojo.vo.DevUserVO;
@@ -48,4 +49,8 @@ public interface CsDeviceUserPOService extends IService<CsDeviceUserPO>{
* @return * @return
*/ */
List<String> findUserById(String devId); List<String> findUserById(String devId);
List<String> findDevByUserId(String userId);
void channelDevByUserId(UserDevParam param);
} }

View File

@@ -55,4 +55,8 @@ public interface CsEngineeringService extends IService<CsEngineeringPO>{
* @return * @return
*/ */
List<CsEngineeringPO> getEngineerings(List<String> list); List<CsEngineeringPO> getEngineerings(List<String> list);
CsEngineeringPO queryEngineeringById(String id);
List<CsEngineeringPO> getUnlinkedEngineering(String userId);
} }

View File

@@ -11,6 +11,7 @@ import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO; import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import com.njcn.csdevice.pojo.vo.DeviceManagerVO; import com.njcn.csdevice.pojo.vo.DeviceManagerVO;
import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO; import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -32,30 +33,30 @@ public interface CsEquipmentDeliveryService extends IService<CsEquipmentDelivery
*/ */
void refreshDeviceDataCache(); void refreshDeviceDataCache();
/** /**
* @Description: save * @Description: save
* @Param: [csEquipmentDeliveryAddParm] * @Param: [csEquipmentDeliveryAddParm]
* @return: java.lang.Boolean * @return: java.lang.Boolean
* @Author: clam * @Author: clam
* @Date: 2023/3/31 * @Date: 2023/3/31
*/ */
CsEquipmentDeliveryPO save(CsEquipmentDeliveryAddParm csEquipmentDeliveryAddParm); CsEquipmentDeliveryPO save(CsEquipmentDeliveryAddParm csEquipmentDeliveryAddParm);
/** /**
* @Description: AuditEquipmentDelivery * @Description: AuditEquipmentDelivery
* @Param: [id] * @Param: [id]
* @return: java.lang.Boolean * @return: java.lang.Boolean
* @Author: clam * @Author: clam
* @Date: 2023/3/31 * @Date: 2023/3/31
*/ */
Boolean AuditEquipmentDelivery(String id); Boolean AuditEquipmentDelivery(String id);
/** /**
* @Description: queryEquipmentByndid * @Description: queryEquipmentByndid
* @Param: [ndid] * @Param: [ndid]
* @return: com.njcn.algorithm.pojo.vo.CsEquipmentDeliveryVO * @return: com.njcn.algorithm.pojo.vo.CsEquipmentDeliveryVO
* @Author: clam * @Author: clam
* @Date: 2023/3/31 * @Date: 2023/3/31
*/ */
CsEquipmentDeliveryVO queryEquipmentByndid(String ndid); CsEquipmentDeliveryVO queryEquipmentByndid(String ndid);
/** /**
* @Description: queryEquipmentByProject * @Description: queryEquipmentByProject
* @Param: [projectEquipmentQueryParm] * @Param: [projectEquipmentQueryParm]
@@ -129,10 +130,69 @@ public interface CsEquipmentDeliveryService extends IService<CsEquipmentDelivery
*/ */
List<CsEquipmentDeliveryPO> getAll(); List<CsEquipmentDeliveryPO> getAll();
/**
* 获取所有装置信息(投运且在线)
* @return
*/
List<CsEquipmentDeliveryPO> getAllOnline();
/** /**
* 判断设备型号 * 判断设备型号
*/ */
boolean judgeDevModel(String nDid); boolean judgeDevModel(String nDid);
CsEquipmentDeliveryPO getDevByLineId(String lineId); CsEquipmentDeliveryPO getDevByLineId(String lineId);
/**
* 新增云前置设备
* @param param
* @return
*/
CsEquipmentDeliveryPO saveCld(CsEquipmentDeliveryAddParm param);
/**
* 删除云前置设备
* @param id
* @return
*/
Boolean delCldDev(String id);
/**
* 更新云前置设备
* @param param
* @return
*/
Boolean updateCldDev(CsEquipmentDeliveryAuditParm param);
/**
* 根据前置ip和运行状态获取装置数据
* @param id
* @param runFlag
* @return
*/
List<CsEquipmentDeliveryPO> getCldDevByIp(String id, List<Integer> runFlag);
/**
* 根据前置id和进程号修改设备状态同时修改设备下的监测点的状态
*/
void updateCldDevStatus(String nodeId, Integer processNo);
/**
* 根据设备id和状态来修改设备运行状态同时修改设备下的监测点的状态
* @param devId
* @param status
*/
void flipCldDevStatus(String devId, Integer status);
/**
* 根据项目id获取设备列表
*/
List<CsEquipmentDeliveryPO> getDevListByProjectId(String projectId);
List<CsEquipmentDeliveryPO> getDataByNodeIdAndProcessNo(String nodeId, Integer processNo);
List<CsEquipmentDeliveryPO> getListByIds(List<String> devList);
List<CsEquipmentDeliveryPO> getRunPortableDev(String userId);
} }

View File

@@ -1,8 +1,12 @@
package com.njcn.csdevice.service; package com.njcn.csdevice.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO;
import com.njcn.web.pojo.param.BaseParam;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@@ -47,4 +51,36 @@ public interface CsLinePOService extends IService<CsLinePO>{
void updateIds(CsLineParam csLineParam); void updateIds(CsLineParam csLineParam);
List<CsLinePO> getLinesByDevList(List<String> list); List<CsLinePO> getLinesByDevList(List<String> list);
CsLinePO addCldLine(CsLineParam param);
void updateCldLine(CsLineParam param);
void deleteCldLine(String id);
/**
* 修改监测点状态为停运
* @param lineList 监测点集合
* @param status 运行状态
*/
void updateCldLineStatus(List<CsLinePO> lineList, Integer status);
void updateLineDataByList(List<String> list, String id, String setId);
/**
* 根据名称获取监测点
* @param lineName
* @return
*/
List<CsLinePO> getLineByName(String lineName);
List<String> getAllLine();
List<CsLinePO> getSimpleLine();
List<CsLinePO> getLineBySensitiveUser(List<String> list);
Page<PqSensitiveUserLineVO> getSensitiveUserLineList(BaseParam param);
boolean uploadReport(MultipartFile file, String lineId);
String getReportUrl(String lineId);
} }

View File

@@ -7,12 +7,15 @@ import com.njcn.csdevice.pojo.po.CsGroup;
import com.njcn.csdevice.pojo.vo.CsGroupVO; import com.njcn.csdevice.pojo.vo.CsGroupVO;
import com.njcn.csdevice.pojo.vo.DataGroupTemplateVO; import com.njcn.csdevice.pojo.vo.DataGroupTemplateVO;
import com.njcn.csharmonic.param.CommonStatisticalQueryParam; import com.njcn.csharmonic.param.CommonStatisticalQueryParam;
import com.njcn.csharmonic.param.FittingDataQueryParam;
import com.njcn.csharmonic.param.SensitiveUserTrendDataQueryParam;
import com.njcn.csharmonic.param.TrendDataQueryParam;
import com.njcn.csharmonic.pojo.vo.ThdDataTdVO; import com.njcn.csharmonic.pojo.vo.ThdDataTdVO;
import com.njcn.csharmonic.pojo.vo.ThdDataVO; import com.njcn.csharmonic.pojo.vo.ThdDataVO;
import com.njcn.system.pojo.po.EleEpdPqd; import com.njcn.system.pojo.po.EleEpdPqd;
import com.njcn.system.pojo.vo.EleEpdPqdListVO;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
@@ -78,4 +81,25 @@ public interface ICsGroupService extends IService<CsGroup> {
*/ */
void deleteGroup(String groupId); void deleteGroup(String groupId);
/**
* 查询趋势数据
* @param trendDataQueryParam
* @return
*/
List<ThdDataVO> trendData(TrendDataQueryParam trendDataQueryParam);
/**
* 查询指标拟合图数据
* @param fittingDataQueryParam
* @return
*/
List<ThdDataVO> fittingData(FittingDataQueryParam fittingDataQueryParam);
/**
* 查询敏感用户趋势数据
* @param sensitiveUserTrendDataQueryParam
* @return
*/
Map<String,List<ThdDataVO>> sensitiveUserTrendData(SensitiveUserTrendDataQueryParam sensitiveUserTrendDataQueryParam);
} }

View File

@@ -76,4 +76,20 @@ public interface ICsLedgerService extends IService<CsLedger> {
DevDetailDTO queryDevDetail(String devId); DevDetailDTO queryDevDetail(String devId);
List<CsLedgerVO> getztProjectTree(); List<CsLedgerVO> getztProjectTree();
/**
* 根据设备集合获取项目和工程
* @param id
* @return
*/
List<CsLedgerVO> getProAndEngineer(List<String> id);
CsLedgerVO cldTree();
List<DevDetailDTO> getInfoByIds(List<String> list);
List<DevDetailDTO> getDevInfoByEngineerIds(List<String> list);
List<DevDetailDTO> getEngineeringHaveDevs(List<String> list);
} }

View File

@@ -0,0 +1,31 @@
package com.njcn.csdevice.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.pojo.po.CsTerminalLogs;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author xy
* @since 2025-09-26
*/
public interface ICsTerminalLogsService extends IService<CsTerminalLogs> {
/**
* 更新台账操作日志信息
*/
void updateLogs(String id, Integer code);
/**
* 推送台账操作日志信息
*/
String pushCldInfo();
void updateLaterData(String id, String code);
}

View File

@@ -0,0 +1,34 @@
package com.njcn.csdevice.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.param.IcdBzParam;
import com.njcn.csdevice.param.IcdBzReplyParam;
import com.njcn.csdevice.pojo.po.CsTerminalReply;
import com.njcn.csdevice.pojo.vo.CldLogsVo;
import com.njcn.web.pojo.param.BaseParam;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author xy
* @since 2025-10-09
*/
public interface ICsTerminalReplyService extends IService<CsTerminalReply> {
List<String> queryReplyData();
void updateReplyData(IcdBzReplyParam param);
List<CsTerminalReply> getBzReplyData(String lineId);
Page<CldLogsVo> getBzLogs(BaseParam param);
void updateBzData(IcdBzReplyParam param);
}

View File

@@ -0,0 +1,90 @@
package com.njcn.csdevice.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.param.IcdNodeParam;
import com.njcn.csdevice.pojo.param.NodeParam;
import com.njcn.csdevice.pojo.po.Node;
import com.njcn.csdevice.pojo.vo.NodeProcessDeviceVo;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author cdf
* @since 2022-01-07
*/
public interface INodeService extends IService<Node> {
/**
* 新增前置机
* @author cdf
* @date 2021/6/23
*/
boolean addNode(NodeParam nodeParam);
/**
* 修改前置机
* @author cdf
* @date 2021/6/23
*/
boolean updateNode(NodeParam.NodeUpdateParam nodeParam);
/**
* 删除前置机
* @author cdf
* @date 2021/6/23
*/
boolean delNode(String id);
/**
* 修改前置机状态
* @author cdf
* @date 2021/6/23
*/
boolean updateNodeState(String id, Integer state);
/**
* 查询前置机列表
* @author cdf
* @date 2021/6/23
*/
Page<Node> nodeList(NodeParam.NodeQueryParam nodeQueryParam);
/**
* 查询前置机列表不分页
* @author cdf
* @date 2021/6/23
*/
List<Node> nodeAllList();
/**
* 根据前置机id获取前置机
* @author cdf
* @date 2021/6/23
*/
Node getNodeById(String id);
/**
* 根据前置机名称获取详细信息
* @param nodeName 前置机名称
* @return 前置信息
*/
Node getNodeByNodeName(String nodeName);
Node getNodeByIp(String ip);
NodeProcessDeviceVo getProcessNoAndDeviceById(String id);
void restartProcess(String nodeId, Integer processNo);
String updateDevProcessNo(String id, Integer processNo);
String updateDevNode(IcdNodeParam param);
}

View File

@@ -0,0 +1,25 @@
package com.njcn.csdevice.service;
import com.njcn.csdevice.param.IcdBzParam;
import com.njcn.csdevice.param.IcdLedgerParam;
import com.njcn.csdevice.param.IcdParam;
import com.njcn.csdevice.pojo.vo.CldLedgerVo;
import com.njcn.csdevice.pojo.vo.DeviceInfo;
import java.util.List;
public interface IcdService {
List<DeviceInfo> getLedgerInfo(IcdParam param);
void addLedgerInfo(IcdLedgerParam param);
CldLedgerVo getLedgerById(String id);
void bzFileByEventId(String eventId);
void bzEvent(IcdBzParam param);
void bzFile(IcdBzParam param);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.csdevice.service.impl; package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.stream.CollectorUtil;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -55,7 +56,7 @@ class AppProjectServiceImpl extends ServiceImpl<AppProjectMapper, AppProjectPO>
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean addAppProject(AppProjectAddParm appProjectAddOrAuditParm) { public AppProjectPO addAppProject(AppProjectAddParm appProjectAddOrAuditParm) {
AppProjectPO appProjectPO = new AppProjectPO ( ); AppProjectPO appProjectPO = new AppProjectPO ( );
// Boolean result = checkName (appProjectAddOrAuditParm.getUserId ( ), appProjectAddOrAuditParm.getName ( )); // Boolean result = checkName (appProjectAddOrAuditParm.getUserId ( ), appProjectAddOrAuditParm.getName ( ));
// if (result) { // if (result) {
@@ -109,19 +110,33 @@ class AppProjectServiceImpl extends ServiceImpl<AppProjectMapper, AppProjectPO>
} }
} }
CsLedger csLedger = csLedgerMapper.selectById(appProjectAddOrAuditParm.getEngineeringId()); //云协议工程
Optional.ofNullable(csLedger).orElseThrow(()-> new BusinessException(AlgorithmResponseEnum.ENGINEERING_DATA_ERROR)); if (Objects.nonNull(appProjectAddOrAuditParm.getIcdEngineeringId())){
CsLedger csLedger1 = new CsLedger(); CsLedger csLedger1 = new CsLedger();
csLedger1.setId(appProjectPO.getId()); csLedger1.setId(appProjectPO.getId());
csLedger1.setPid(appProjectAddOrAuditParm.getEngineeringId()); csLedger1.setPid(appProjectAddOrAuditParm.getEngineeringId());
csLedger1.setPids(csLedger.getPids()+ ","+appProjectAddOrAuditParm.getEngineeringId()); csLedger1.setPids("0,"+appProjectAddOrAuditParm.getEngineeringId());
csLedger1.setLevel(1); csLedger1.setLevel(1);
csLedger1.setName(appProjectPO.getName()); csLedger1.setName(appProjectPO.getName());
csLedger1.setState(1); csLedger1.setState(1);
csLedger1.setSort(0); csLedger1.setSort(0);
csLedgerMapper.insert(csLedger1); csLedgerMapper.insert(csLedger1);
}
return save; //其他工程
else {
CsLedger csLedger = csLedgerMapper.selectById(appProjectAddOrAuditParm.getEngineeringId());
Optional.ofNullable(csLedger).orElseThrow(()-> new BusinessException(AlgorithmResponseEnum.ENGINEERING_DATA_ERROR));
CsLedger csLedger1 = new CsLedger();
csLedger1.setId(appProjectPO.getId());
csLedger1.setPid(appProjectAddOrAuditParm.getEngineeringId());
csLedger1.setPids(csLedger.getPids()+ ","+appProjectAddOrAuditParm.getEngineeringId());
csLedger1.setLevel(1);
csLedger1.setName(appProjectPO.getName());
csLedger1.setState(1);
csLedger1.setSort(0);
csLedgerMapper.insert(csLedger1);
}
return appProjectPO;
} }
private Boolean checkName( String name,String id,String engineeringId) { private Boolean checkName( String name,String id,String engineeringId) {
@@ -342,10 +357,14 @@ class AppProjectServiceImpl extends ServiceImpl<AppProjectMapper, AppProjectPO>
@Override @Override
public List<AppProjectPO> getProjectByEngineering(List<String> list) { public List<AppProjectPO> getProjectByEngineering(List<String> list) {
List<AppProjectPO> result = new ArrayList<>();
QueryWrapper<CsLedger> csLedgerQueryWrapper = new QueryWrapper(); QueryWrapper<CsLedger> csLedgerQueryWrapper = new QueryWrapper();
csLedgerQueryWrapper.lambda().in(CsLedger::getPid, list).eq(CsLedger::getState,1); csLedgerQueryWrapper.lambda().in(CsLedger::getPid, list).eq(CsLedger::getState,1);
List<CsLedger> csLedgers = csLedgerMapper.selectList(csLedgerQueryWrapper); List<CsLedger> csLedgers = csLedgerMapper.selectList(csLedgerQueryWrapper);
List<String> collect = csLedgers.stream().map(CsLedger::getId).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(csLedgers)) {
return this.lambdaQuery().in(AppProjectPO::getId,collect).list(); List<String> collect = csLedgers.stream().map(CsLedger::getId).collect(Collectors.toList());
result = this.lambdaQuery().in(AppProjectPO::getId,collect).list();
}
return result;
} }
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.csdevice.service.impl; package com.njcn.csdevice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.enums.AlgorithmResponseEnum; import com.njcn.csdevice.enums.AlgorithmResponseEnum;
@@ -101,4 +102,11 @@ public class CsDevModelRelationServiceImpl extends ServiceImpl<CsDevModelRelatio
public String getVersionByDevId(String devId) { public String getVersionByDevId(String devId) {
return this.baseMapper.getVersionByDevId(devId); return this.baseMapper.getVersionByDevId(devId);
} }
@Override
public void updateDataByList(List<String> list, String id) {
LambdaUpdateWrapper<CsDevModelRelationPO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(CsDevModelRelationPO::getDevId,list).set(CsDevModelRelationPO::getModelId,id);
this.update(updateWrapper);
}
} }

View File

@@ -1,10 +1,12 @@
package com.njcn.csdevice.service.impl; package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.mapper.CsDevModelMapper; import com.njcn.csdevice.mapper.CsDevModelMapper;
import com.njcn.csdevice.pojo.param.CsDevModelAddParm; import com.njcn.csdevice.pojo.param.CsDevModelAddParm;
import com.njcn.csdevice.pojo.param.CsDevModelAuditParm; import com.njcn.csdevice.pojo.param.CsDevModelAuditParm;
@@ -17,6 +19,8 @@ import com.njcn.csdevice.service.ICsDataArrayService;
import com.njcn.csdevice.service.ICsDataSetService; import com.njcn.csdevice.service.ICsDataSetService;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.DictTreeFeignClient; import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicTreeEnum;
import com.njcn.system.pojo.po.SysDicTreePO; import com.njcn.system.pojo.po.SysDicTreePO;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -26,6 +30,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.sql.Date; import java.sql.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@@ -157,4 +162,20 @@ public class CsDevModelServiceImpl extends ServiceImpl<CsDevModelMapper, CsDevMo
return this.lambdaQuery().eq(CsDevModelPO::getId,id).one(); return this.lambdaQuery().eq(CsDevModelPO::getId,id).one();
} }
@Override
public CsDevModelPO getCldModel() {
List<CsDevModelPO> list = this.lambdaQuery()
.eq(CsDevModelPO::getDevTypeName, DicDataEnum.DEV_CLD.getCode())
.eq(CsDevModelPO::getStatus,1)
.list();
if (CollectionUtil.isEmpty(list)) {
throw new BusinessException(AlgorithmResponseEnum.CLD_MODEL_MISSING);
} else {
if (list.size() > 1) {
throw new BusinessException(AlgorithmResponseEnum.CLD_MODEL_MORE);
}
}
return list.get(0);
}
} }

View File

@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
@@ -12,6 +11,7 @@ import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.mapper.CsDeviceUserPOMapper; import com.njcn.csdevice.mapper.CsDeviceUserPOMapper;
import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper; import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper;
import com.njcn.csdevice.mapper.CsMarketDataMapper; import com.njcn.csdevice.mapper.CsMarketDataMapper;
import com.njcn.csdevice.pojo.param.UserDevParam;
import com.njcn.csdevice.pojo.po.*; import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.vo.CsLedgerVO; import com.njcn.csdevice.pojo.vo.CsLedgerVO;
import com.njcn.csdevice.pojo.vo.DevCountVO; import com.njcn.csdevice.pojo.vo.DevCountVO;
@@ -51,22 +51,17 @@ import static java.util.Objects.isNull;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class CsDeviceUserPOServiceImpl extends ServiceImpl<CsDeviceUserPOMapper, CsDeviceUserPO> implements CsDeviceUserPOService{ public class CsDeviceUserPOServiceImpl extends ServiceImpl<CsDeviceUserPOMapper, CsDeviceUserPO> implements CsDeviceUserPOService{
private final CsDevModelRelationService csDevModelRelationService;
private final CsDevModelRelationService csDevModelRelationService;
private final ICsLedgerService iCsLedgerService; private final ICsLedgerService iCsLedgerService;
// private final CsEquipmentAlarmFeignClient csEquipmentAlarmFeignClient;
private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper; private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper;
private final RoleEngineerDevService roleEngineerDevService; private final RoleEngineerDevService roleEngineerDevService;
private final AppLineTopologyDiagramService appLineTopologyDiagramService; private final AppLineTopologyDiagramService appLineTopologyDiagramService;
private final CsTouristDataPOService csTouristDataPOService; private final CsTouristDataPOService csTouristDataPOService;
private final CsLinePOService csLinePOService; private final CsLinePOService csLinePOService;
private final CsMarketDataMapper csMarketDataMapper; private final CsMarketDataMapper csMarketDataMapper;
private final EventUserFeignClient eventUserFeignClient; private final EventUserFeignClient eventUserFeignClient;
private final UserFeignClient userFeignClient; private final UserFeignClient userFeignClient;
private final FeedBackFeignClient feedBackFeignClient; private final FeedBackFeignClient feedBackFeignClient;
private final IMqttUserService mqttUserService; private final IMqttUserService mqttUserService;
@@ -407,4 +402,22 @@ public class CsDeviceUserPOServiceImpl extends ServiceImpl<CsDeviceUserPOMapper,
} }
return result; return result;
} }
@Override
public List<String> findDevByUserId(String userId) {
List<String> result = new ArrayList<>();
List<CsDeviceUserPO> list = this.lambdaQuery().eq(CsDeviceUserPO::getPrimaryUserId,userId).list();
if (CollectionUtil.isNotEmpty(list)){
result = list.stream().map(CsDeviceUserPO::getDeviceId).collect(Collectors.toList());
}
return result;
}
@Override
public void channelDevByUserId(UserDevParam param) {
LambdaQueryWrapper<CsDeviceUserPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CsDeviceUserPO::getPrimaryUserId,param.getUserId())
.in(CsDeviceUserPO::getDeviceId,param.getList());
this.remove(queryWrapper);
}
} }

View File

@@ -2,17 +2,20 @@ package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.Query; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsDeviceUserFeignClient;
import com.njcn.csdevice.api.CsLedgerFeignClient;
import com.njcn.csdevice.enums.AlgorithmResponseEnum; import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.mapper.CsEngineeringMapper; import com.njcn.csdevice.mapper.CsEngineeringMapper;
import com.njcn.csdevice.mapper.CsEngineeringUserMapper; import com.njcn.csdevice.mapper.CsEngineeringUserMapper;
import com.njcn.csdevice.mapper.CsLedgerMapper; import com.njcn.csdevice.mapper.CsLedgerMapper;
import com.njcn.csdevice.mapper.CsMarketDataMapper; import com.njcn.csdevice.mapper.CsMarketDataMapper;
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
import com.njcn.csdevice.pojo.param.CsEngineeringAddParm; import com.njcn.csdevice.pojo.param.CsEngineeringAddParm;
import com.njcn.csdevice.pojo.param.CsEngineeringAuditParm; import com.njcn.csdevice.pojo.param.CsEngineeringAuditParm;
import com.njcn.csdevice.pojo.param.CsEngineeringQueryPageParm; import com.njcn.csdevice.pojo.param.CsEngineeringQueryPageParm;
@@ -20,7 +23,6 @@ import com.njcn.csdevice.pojo.param.CsEngineeringQueryParm;
import com.njcn.csdevice.pojo.po.*; import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.vo.CsEngineeringVO; import com.njcn.csdevice.pojo.vo.CsEngineeringVO;
import com.njcn.csdevice.service.CsEngineeringService; import com.njcn.csdevice.service.CsEngineeringService;
import com.njcn.csdevice.service.CsMarketDataService;
import com.njcn.csdevice.service.CsTouristDataPOService; import com.njcn.csdevice.service.CsTouristDataPOService;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.AreaFeignClient; import com.njcn.system.api.AreaFeignClient;
@@ -34,10 +36,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.function.Function;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -58,12 +58,10 @@ public class CsEngineeringServiceImpl extends ServiceImpl<CsEngineeringMapper, C
private final CsLedgerMapper csLedgerMapper; private final CsLedgerMapper csLedgerMapper;
private final CsEngineeringUserMapper csEngineeringUserMapper; private final CsEngineeringUserMapper csEngineeringUserMapper;
private final RoleEngineerDevServiceImpl roleEngineerDevService; private final RoleEngineerDevServiceImpl roleEngineerDevService;
private final CsMarketDataMapper csMarketDataMapper; private final CsMarketDataMapper csMarketDataMapper;
private final CsTouristDataPOService csTouristDataPOService; private final CsTouristDataPOService csTouristDataPOService;
private final CsLedgerFeignClient csLedgerFeignClient;
private final CsDeviceUserFeignClient csDeviceUserFeignClient;
@Override @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
@@ -217,6 +215,50 @@ public class CsEngineeringServiceImpl extends ServiceImpl<CsEngineeringMapper, C
return this.lambdaQuery().in(CsEngineeringPO::getId,list).eq(CsEngineeringPO::getStatus,"1").list(); return this.lambdaQuery().in(CsEngineeringPO::getId,list).eq(CsEngineeringPO::getStatus,"1").list();
} }
@Override
public CsEngineeringPO queryEngineeringById(String id) {
return this.lambdaQuery().eq(CsEngineeringPO::getId,id).eq(CsEngineeringPO::getStatus,"1").one();
}
@Override
public List<CsEngineeringPO> getUnlinkedEngineering(String userId) {
List<CsEngineeringPO> result = new ArrayList<>();
List<String> list1 = new ArrayList<>();
//根据用户信息获取设备信息
List<String> devList = csDeviceUserFeignClient.findDevByUserId(userId).getData();
//根据设备查询工程信息
if (CollectionUtil.isNotEmpty(devList)) {
List<DevDetailDTO> ledger = csLedgerFeignClient.getInfoByIds(devList).getData();
ledger.forEach(item->{
if (!Objects.equals(item.getEngineeringid(),"/")) {
list1.add(item.getEngineeringid());
}
});
}
//获取有设备的工程信息
LambdaQueryWrapper<CsEngineeringPO> queryWrapper2 = new LambdaQueryWrapper<>();
queryWrapper2.eq(CsEngineeringPO::getStatus,"1");
if (CollectionUtil.isNotEmpty(list1)) {
queryWrapper2.notIn(CsEngineeringPO::getId,list1);
}
List<CsEngineeringPO> list = this.baseMapper.selectList(queryWrapper2);
//剔除没有设备的工程
if (CollectionUtil.isNotEmpty(list)) {
Map<String, CsEngineeringPO> map = list.stream().collect(Collectors.toMap(CsEngineeringPO::getId, Function.identity()));
List<String> list2 = list.stream().map(CsEngineeringPO::getId).collect(Collectors.toList());
List<DevDetailDTO> ledger = csLedgerFeignClient.getEngineeringHaveDevs(list2).getData();
if (CollectionUtil.isNotEmpty(ledger)) {
ledger.forEach(item->{
CsEngineeringPO po = new CsEngineeringPO();
po.setId(item.getEngineeringid());
po.setName(map.get(item.getEngineeringid()).getName());
result.add(po);
});
}
}
return result;
}
public String getAreaById(String id){ public String getAreaById(String id){

View File

@@ -26,7 +26,9 @@ import com.njcn.csdevice.api.CsLogsFeignClient;
import com.njcn.csdevice.constant.DataParam; import com.njcn.csdevice.constant.DataParam;
import com.njcn.csdevice.enums.AlgorithmResponseEnum; import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper; import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper;
import com.njcn.csdevice.mapper.CsLedgerMapper;
import com.njcn.csdevice.mapper.CsSoftInfoMapper; import com.njcn.csdevice.mapper.CsSoftInfoMapper;
import com.njcn.csdevice.mapper.CsTerminalLogsMapper;
import com.njcn.csdevice.pojo.param.*; import com.njcn.csdevice.pojo.param.*;
import com.njcn.csdevice.pojo.po.*; import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO; import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
@@ -46,6 +48,7 @@ import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.enums.DicTreeEnum; import com.njcn.system.enums.DicTreeEnum;
import com.njcn.system.pojo.po.SysDicTreePO; import com.njcn.system.pojo.po.SysDicTreePO;
import com.njcn.system.pojo.vo.DictTreeVO;
import com.njcn.user.enums.AppRoleEnum; import com.njcn.user.enums.AppRoleEnum;
import com.njcn.web.utils.RequestUtil; import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -66,7 +69,6 @@ import java.io.InputStream;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* *
* Description: * Description:
@@ -79,7 +81,6 @@ import java.util.stream.Collectors;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliveryMapper, CsEquipmentDeliveryPO> implements CsEquipmentDeliveryService{ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliveryMapper, CsEquipmentDeliveryPO> implements CsEquipmentDeliveryService{
private final CsDevModelRelationService csDevModelRelationService; private final CsDevModelRelationService csDevModelRelationService;
private final ICsDataSetService csDataSetService; private final ICsDataSetService csDataSetService;
private final ICsLedgerService csLedgerService; private final ICsLedgerService csLedgerService;
@@ -98,6 +99,11 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
private final IMqttUserService mqttUserService; private final IMqttUserService mqttUserService;
private final MqttUtil mqttUtil; private final MqttUtil mqttUtil;
private final CsLogsFeignClient csLogsFeignClient; private final CsLogsFeignClient csLogsFeignClient;
private final INodeService nodeService;
private final CsDevModelService csDevModelService;
private final CsLedgerMapper csLedgerMapper;
private final CsTerminalLogsMapper csTerminalLogsMapper;
@Override @Override
public void refreshDeviceDataCache() { public void refreshDeviceDataCache() {
@@ -143,7 +149,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
csEquipmentProcess.setStartTime(LocalDateTime.now()); csEquipmentProcess.setStartTime(LocalDateTime.now());
csEquipmentProcess.setProcess(1); csEquipmentProcess.setProcess(1);
csEquipmentProcess.setStatus (1); csEquipmentProcess.setStatus (1);
csEquipmentProcessPOService.save(csEquipmentProcess); csEquipmentProcessPOService.save(csEquipmentProcess);
result = this.save (csEquipmentDeliveryPo); result = this.save (csEquipmentDeliveryPo);
if (result) { if (result) {
@@ -153,8 +158,8 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
} }
@Override @Override
// @Transactional(rollbackFor = {Exception.class}, propagation = Propagation.REQUIRED)
public Boolean AuditEquipmentDelivery(String id) { public Boolean AuditEquipmentDelivery(String id) {
CsEquipmentDeliveryPO one = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, id).one();
//物理删除 //物理删除
QueryWrapper<CsEquipmentDeliveryPO> wrapper = new QueryWrapper(); QueryWrapper<CsEquipmentDeliveryPO> wrapper = new QueryWrapper();
wrapper.eq ("id", id); wrapper.eq ("id", id);
@@ -186,8 +191,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
/*后续徐那边做处理*/ /*后续徐那边做处理*/
// CsEquipmentDeliveryPO csEquipmentDeliveryPO = this.getBaseMapper().selectById(id); // CsEquipmentDeliveryPO csEquipmentDeliveryPO = this.getBaseMapper().selectById(id);
// mqttUserService.deleteUser(csEquipmentDeliveryPO.getNdid()); // mqttUserService.deleteUser(csEquipmentDeliveryPO.getNdid());
csDevModelRelationService.lambdaUpdate().eq(CsDevModelRelationPO::getDevId,id).set(CsDevModelRelationPO::getStatus,0).update(); csDevModelRelationService.lambdaUpdate().eq(CsDevModelRelationPO::getDevId,id).set(CsDevModelRelationPO::getStatus,0).update();
if (update) { if (update) {
refreshDeviceDataCache(); refreshDeviceDataCache();
@@ -205,6 +208,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
BeanUtils.copyProperties (csEquipmentDeliveryPO,result); BeanUtils.copyProperties (csEquipmentDeliveryPO,result);
return result; return result;
} }
public CsEquipmentDeliveryPO queryEquipmentPOByndid(String ndid) { public CsEquipmentDeliveryPO queryEquipmentPOByndid(String ndid) {
QueryWrapper<CsEquipmentDeliveryPO> wrapper = new QueryWrapper(); QueryWrapper<CsEquipmentDeliveryPO> wrapper = new QueryWrapper();
wrapper.eq ("ndid", ndid); wrapper.eq ("ndid", ndid);
@@ -220,7 +224,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
if(CollectionUtils.isEmpty(device)){ if(CollectionUtils.isEmpty(device)){
return returnpage; return returnpage;
} }
Page<ProjectEquipmentVO> list = this.baseMapper.queryProjectEquipmentVO(returnpage,projectEquipmentQueryParm,device); Page<ProjectEquipmentVO> list = this.baseMapper.queryProjectEquipmentVO(returnpage,projectEquipmentQueryParm,device);
list.getRecords().stream().forEach(temp->{ list.getRecords().stream().forEach(temp->{
temp.setIsPrimaryUser(csDeviceUserPOService.isPrimaryUser(temp.getEquipmentId())); temp.setIsPrimaryUser(csDeviceUserPOService.isPrimaryUser(temp.getEquipmentId()));
@@ -235,18 +238,16 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
boolean result; boolean result;
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNdid,csEquipmentDeliveryAuditParm.getNdid()) lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNdid,csEquipmentDeliveryAuditParm.getNdid())
.in(CsEquipmentDeliveryPO::getStatus,Arrays.asList(1,2,3)) .in(CsEquipmentDeliveryPO::getStatus,Arrays.asList(1,2,3))
.ne(CsEquipmentDeliveryPO::getId, csEquipmentDeliveryAuditParm.getId()); .ne(CsEquipmentDeliveryPO::getId, csEquipmentDeliveryAuditParm.getId());
int countByAccount = this.count(lambdaQueryWrapper); int countByAccount = this.count(lambdaQueryWrapper);
//大于等于1个则表示重复 //大于等于1个则表示重复
if (countByAccount >= 1) { if (countByAccount >= 1) {
throw new BusinessException(AlgorithmResponseEnum.NDID_ERROR); throw new BusinessException(AlgorithmResponseEnum.NDID_ERROR);
} }
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper2 = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.eq(CsEquipmentDeliveryPO::getId, csEquipmentDeliveryAuditParm.getId()); lambdaQueryWrapper2.eq(CsEquipmentDeliveryPO::getId, csEquipmentDeliveryAuditParm.getId());
CsEquipmentDeliveryPO po = this.baseMapper.selectOne(lambdaQueryWrapper2); CsEquipmentDeliveryPO po = this.baseMapper.selectOne(lambdaQueryWrapper2);
List<CsEquipmentDeliveryPO> list = this.lambdaQuery() List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
.ne(CsEquipmentDeliveryPO::getId, csEquipmentDeliveryAuditParm.getId()) .ne(CsEquipmentDeliveryPO::getId, csEquipmentDeliveryAuditParm.getId())
.ne(CsEquipmentDeliveryPO::getNdid, csEquipmentDeliveryAuditParm.getNdid()) .ne(CsEquipmentDeliveryPO::getNdid, csEquipmentDeliveryAuditParm.getNdid())
@@ -264,7 +265,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
BeanUtils.copyProperties (csLedger, csLedgerParam); BeanUtils.copyProperties (csLedger, csLedgerParam);
csLedgerParam.setName(csEquipmentDeliveryAuditParm.getName()); csLedgerParam.setName(csEquipmentDeliveryAuditParm.getName());
csLedgerService.updateLedgerTree(csLedgerParam); csLedgerService.updateLedgerTree(csLedgerParam);
if (result) { if (result) {
refreshDeviceDataCache(); refreshDeviceDataCache();
if (!Objects.equals(po.getUsageStatus(),csEquipmentDeliveryAuditParm.getUsageStatus())) { if (!Objects.equals(po.getUsageStatus(),csEquipmentDeliveryAuditParm.getUsageStatus())) {
@@ -328,75 +328,8 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
return page; return page;
} }
// @Override
// public Page<CsEquipmentDeliveryVO> list(CsEquipmentDeliveryQueryParm queryParam) {
// QueryWrapper<CsEquipmentDeliveryPO> queryWrapper = new QueryWrapper<CsEquipmentDeliveryPO>();
// if (ObjectUtil.isNotNull(queryParam)) {
// //查询参数不为空,进行条件填充
// if (StrUtil.isNotBlank(queryParam.getSearchValue())) {
// //部门根据名称模糊查询
// queryWrapper
// .and(param -> param.like("cs_equipment_delivery.name", queryParam.getSearchValue())
// .or().like("cs_equipment_delivery.ndid", queryParam.getSearchValue())
// .or().like("cs_equipment_delivery.mac", queryParam.getSearchValue()));
// }
// //排序
// if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) {
// queryWrapper.orderBy(true, queryParam.getOrderBy().equalsIgnoreCase(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy()));
// } else {
// //默认根据创建时间排序
// queryWrapper.orderBy(true, false, "create_time");
// }
// }
// if (StrUtil.isNotBlank(queryParam.getDevType()) && !Objects.isNull(queryParam.getDevType())){
// queryWrapper.eq("cs_equipment_delivery.dev_type", queryParam.getDevType());
// }
// if (StrUtil.isNotBlank(queryParam.getDevModel()) && !Objects.isNull(queryParam.getDevModel())){
// queryWrapper.eq("cs_equipment_delivery.dev_model", queryParam.getDevModel());
// }
// if (StrUtil.isNotBlank(queryParam.getDevAccessMethod()) && !Objects.isNull(queryParam.getDevAccessMethod())){
// queryWrapper.eq("cs_equipment_delivery.dev_access_method", queryParam.getDevAccessMethod());
// }
// if (!Objects.isNull(queryParam.getStatus())){
// queryWrapper.eq("cs_equipment_delivery.status", queryParam.getStatus());
// } else {
// queryWrapper.in("cs_equipment_delivery.status", Arrays.asList(1,2,3));
// }
// if (!Objects.isNull(queryParam.getRunStatus())){
// queryWrapper.eq("cs_equipment_delivery.run_status", queryParam.getRunStatus());
// } else {
// queryWrapper.in("cs_equipment_delivery.run_status", Arrays.asList(1,2));
// }
// if (!Objects.isNull(queryParam.getProcess())){
// queryWrapper.eq("cs_equipment_delivery.process", queryParam.getProcess());
// }
// Page<CsEquipmentDeliveryVO> page = this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper);
// page.getRecords().forEach(item->{
// if (!Objects.isNull(item.getQrPath())){
// item.setQrPath(item.getQrPath());
// }
// });
// //新增逻辑(只针对便携式设备):修改设备中的未注册状态(status = 1)改为5(前端定义的字典也即未接入)
// for(CsEquipmentDeliveryVO csEquipmentDeliveryVO : page.getRecords()){
// if(DataParam.portableDevType.equals(csEquipmentDeliveryVO.getDevType()) && csEquipmentDeliveryVO.getStatus() == 1){
// csEquipmentDeliveryVO.setStatus(5);
// } else if (DataParam.portableDevType.equals(csEquipmentDeliveryVO.getDevType()) && csEquipmentDeliveryVO.getStatus() == 2) {
// csEquipmentDeliveryVO.setStatus(6);
// }
// //判断装置是否已经连接上mqtt服务器
// String clientName = "NJCN-" + csEquipmentDeliveryVO.getNdid().substring(csEquipmentDeliveryVO.getNdid().length() - 6);
// boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
// if (mqttClient) {
// csEquipmentDeliveryVO.setConnectStatus("已连接");
// } else {
// csEquipmentDeliveryVO.setConnectStatus("未连接");
// }
// }
// return page;
// }
@Override @Override
public DeviceManagerVO getDeviceData(String deviceId, String type, String lineId) { public DeviceManagerVO getDeviceData(String deviceId, String type, String lineId) {
DeviceManagerVO deviceManagerVo = new DeviceManagerVO(); DeviceManagerVO deviceManagerVo = new DeviceManagerVO();
List<DeviceManagerVO.DataSetVO> dataSetList = new ArrayList<>(); List<DeviceManagerVO.DataSetVO> dataSetList = new ArrayList<>();
CsEquipmentDeliveryPO csEquipmentDeliveryPo = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, deviceId).one(); CsEquipmentDeliveryPO csEquipmentDeliveryPo = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, deviceId).one();
@@ -443,7 +376,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
dataSet = csDataSetService.findDataSetByModelId(modelId,2); dataSet = csDataSetService.findDataSetByModelId(modelId,2);
} }
setDataSetValues(csEquipmentDeliveryPo, dataSet, dataSetList, type, deviceManagerVo); setDataSetValues(csEquipmentDeliveryPo, dataSet, dataSetList, type, deviceManagerVo);
}else if(Objects.equals(devTypeCode, DicDataEnum.PORTABLE.getCode())){ } else if(Objects.equals(devTypeCode, DicDataEnum.PORTABLE.getCode()) || Objects.equals(devTypeCode, DicDataEnum.DEV_CLD.getCode())){
List<CsDataSet> dataSet = new ArrayList<>(); List<CsDataSet> dataSet = new ArrayList<>();
List<CsDevModelRelationPO> modelId = csDevModelRelationService.findModelByDevId(deviceId); List<CsDevModelRelationPO> modelId = csDevModelRelationService.findModelByDevId(deviceId);
if (CollUtil.isNotEmpty(modelId)){ if (CollUtil.isNotEmpty(modelId)){
@@ -472,6 +405,8 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
} else { } else {
CsDataSet item = dataSet.get(0); CsDataSet item = dataSet.get(0);
boolean isPortableDevice = DataParam.portableDevType.equals(csEquipmentDeliveryPo.getDevType()); boolean isPortableDevice = DataParam.portableDevType.equals(csEquipmentDeliveryPo.getDevType());
boolean isCLdDevice = DicDataEnum.DEV_CLD.getCode().equals(dictTreeFeignClient.queryById(csEquipmentDeliveryPo.getDevType()).getData().getCode());
addDataSet(dataSetList, item, "最新数据", "rt"); addDataSet(dataSetList, item, "最新数据", "rt");
addDataSet(dataSetList, item, "历史统计数据", "history"); addDataSet(dataSetList, item, "历史统计数据", "history");
addDataSet(dataSetList, item, "历史趋势", "trenddata"); addDataSet(dataSetList, item, "历史趋势", "trenddata");
@@ -491,6 +426,11 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
addDataSet(dataSetList, item, "暂态事件", "event"); addDataSet(dataSetList, item, "暂态事件", "event");
addDataSet(dataSetList, item, "测试项日志", "items"); addDataSet(dataSetList, item, "测试项日志", "items");
} }
if (isCLdDevice) {
// 云前置数据集
addDataSet(dataSetList, item, "实时数据", "realtimedata");
addDataSet(dataSetList, item, "暂态事件", "event");
}
deviceManagerVo.setDataLevel(item.getDataLevel()); deviceManagerVo.setDataLevel(item.getDataLevel());
} }
deviceManagerVo.setDataSetList(dataSetList); deviceManagerVo.setDataSetList(dataSetList);
@@ -540,10 +480,8 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
//如果存在非法数据,将不合格的数据导出 //如果存在非法数据,将不合格的数据导出
List<DeviceExcelTemplete> trueCollect = new ArrayList<> ( ); List<DeviceExcelTemplete> trueCollect = new ArrayList<> ( );
List<DeviceExcelTemplete.IllegalityDeviceExcelTemplete> falseCollect = new ArrayList<> ( ); List<DeviceExcelTemplete.IllegalityDeviceExcelTemplete> falseCollect = new ArrayList<> ( );
for (int i = 0; i < terminalBaseList.getList ( ).size ( ); i++) { for (int i = 0; i < terminalBaseList.getList ( ).size ( ); i++) {
DeviceExcelTemplete deviceExcelTemplete = terminalBaseList.getList ( ).get (i); DeviceExcelTemplete deviceExcelTemplete = terminalBaseList.getList ( ).get (i);
if(!deviceExcelTemplete.getNdid().matches(regex)){ if(!deviceExcelTemplete.getNdid().matches(regex)){
DeviceExcelTemplete.IllegalityDeviceExcelTemplete idlegalityDeviceException = new DeviceExcelTemplete.IllegalityDeviceExcelTemplete(); DeviceExcelTemplete.IllegalityDeviceExcelTemplete idlegalityDeviceException = new DeviceExcelTemplete.IllegalityDeviceExcelTemplete();
BeanUtils.copyProperties(deviceExcelTemplete,idlegalityDeviceException); BeanUtils.copyProperties(deviceExcelTemplete,idlegalityDeviceException);
@@ -551,7 +489,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
falseCollect.add(idlegalityDeviceException); falseCollect.add(idlegalityDeviceException);
continue; continue;
} }
CsEquipmentDeliveryPO po = this.queryEquipmentPOByndid (deviceExcelTemplete.getNdid ( )); CsEquipmentDeliveryPO po = this.queryEquipmentPOByndid (deviceExcelTemplete.getNdid ( ));
if(!Objects.isNull (po)){ if(!Objects.isNull (po)){
DeviceExcelTemplete.IllegalityDeviceExcelTemplete idlegalityDeviceException = new DeviceExcelTemplete.IllegalityDeviceExcelTemplete(); DeviceExcelTemplete.IllegalityDeviceExcelTemplete idlegalityDeviceException = new DeviceExcelTemplete.IllegalityDeviceExcelTemplete();
@@ -572,7 +509,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
//设备类型 //设备类型
List<SysDicTreePO> children = deviceType.get(0).getChildren(); List<SysDicTreePO> children = deviceType.get(0).getChildren();
Map<String, SysDicTreePO> map = children.stream().collect(Collectors.toMap(SysDicTreePO::getName, dictTreeVO -> dictTreeVO)); Map<String, SysDicTreePO> map = children.stream().collect(Collectors.toMap(SysDicTreePO::getName, dictTreeVO -> dictTreeVO));
List<SysDicTreePO> collect = children.stream().filter(temp -> Objects.equals(temp.getName(), deviceExcelTemplete.getDevType())).collect(Collectors.toList()); List<SysDicTreePO> collect = children.stream().filter(temp -> Objects.equals(temp.getName(), deviceExcelTemplete.getDevType())).collect(Collectors.toList());
SysDicTreePO sysDicTreePO = map.get(deviceExcelTemplete.getDevType()); SysDicTreePO sysDicTreePO = map.get(deviceExcelTemplete.getDevType());
if(CollectionUtils.isEmpty(collect)){ if(CollectionUtils.isEmpty(collect)){
@@ -583,15 +519,11 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
continue; continue;
}else { }else {
deviceExcelTemplete.setDevType(map.get(deviceExcelTemplete.getDevType()).getId()); deviceExcelTemplete.setDevType(map.get(deviceExcelTemplete.getDevType()).getId());
} }
//设备型号 //设备型号
List<SysDicTreePO> children1 = sysDicTreePO.getChildren(); List<SysDicTreePO> children1 = sysDicTreePO.getChildren();
Map<String, SysDicTreePO> map2 = children1.stream().collect(Collectors.toMap(SysDicTreePO::getName, dictTreeVO -> dictTreeVO)); Map<String, SysDicTreePO> map2 = children1.stream().collect(Collectors.toMap(SysDicTreePO::getName, dictTreeVO -> dictTreeVO));
List<SysDicTreePO> collect2 = children1.stream().filter(temp -> Objects.equals(temp.getName(), deviceExcelTemplete.getDevModel())).collect(Collectors.toList()); List<SysDicTreePO> collect2 = children1.stream().filter(temp -> Objects.equals(temp.getName(), deviceExcelTemplete.getDevModel())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(collect2)){ if(CollectionUtils.isEmpty(collect2)){
DeviceExcelTemplete.IllegalityDeviceExcelTemplete idlegalityDeviceException = new DeviceExcelTemplete.IllegalityDeviceExcelTemplete(); DeviceExcelTemplete.IllegalityDeviceExcelTemplete idlegalityDeviceException = new DeviceExcelTemplete.IllegalityDeviceExcelTemplete();
BeanUtils.copyProperties(deviceExcelTemplete,idlegalityDeviceException); BeanUtils.copyProperties(deviceExcelTemplete,idlegalityDeviceException);
@@ -602,8 +534,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
deviceExcelTemplete.setDevModel(map2.get(deviceExcelTemplete.getDevModel()).getId()); deviceExcelTemplete.setDevModel(map2.get(deviceExcelTemplete.getDevModel()).getId());
trueCollect.add(deviceExcelTemplete); trueCollect.add(deviceExcelTemplete);
} }
} }
if (!CollectionUtils.isEmpty (trueCollect)) { if (!CollectionUtils.isEmpty (trueCollect)) {
List<CsEquipmentProcessPO> collect1 = new ArrayList<>(); List<CsEquipmentProcessPO> collect1 = new ArrayList<>();
@@ -618,7 +548,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
csEquipmentDeliveryPO.setStatus(1); csEquipmentDeliveryPO.setStatus(1);
csEquipmentDeliveryPO.setProcess(2); csEquipmentDeliveryPO.setProcess(2);
csEquipmentDeliveryPO.setSort(100); csEquipmentDeliveryPO.setSort(100);
CsEquipmentProcessPO csEquipmentProcess = new CsEquipmentProcessPO(); CsEquipmentProcessPO csEquipmentProcess = new CsEquipmentProcessPO();
csEquipmentProcess.setDevId(csEquipmentDeliveryPO.getNdid()); csEquipmentProcess.setDevId(csEquipmentDeliveryPO.getNdid());
csEquipmentProcess.setOperator(RequestUtil.getUserIndex()); csEquipmentProcess.setOperator(RequestUtil.getUserIndex());
@@ -630,7 +559,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
}).collect (Collectors.toList ( )); }).collect (Collectors.toList ( ));
csEquipmentProcessPOService.saveBatch(collect1,500); csEquipmentProcessPOService.saveBatch(collect1,500);
this.saveOrUpdateBatch (collect, 500); this.saveOrUpdateBatch (collect, 500);
return collect; return collect;
} }
if (!CollectionUtils.isEmpty (falseCollect)) { if (!CollectionUtils.isEmpty (falseCollect)) {
@@ -639,21 +567,21 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
ExcelStyleUtil.exportFileByWorkbook (workbook, "非法设备信息.xlsx", response); ExcelStyleUtil.exportFileByWorkbook (workbook, "非法设备信息.xlsx", response);
return null; return null;
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace ( ); e.printStackTrace ( );
} }
return null; return null;
} }
/* /*
* 物理删除设备相关数据 * 物理删除设备相关数据
* *
* 2.删除cs_ledger * 2.删除cs_ledger
* 3.删除cs_dev_model_relation * 3.删除cs_dev_model_relation
* 4.删除cs_line * 4.删除cs_line
* 5.删除cs_line_topology_diagram * 5.删除cs_line_topology_diagram
* 6.删除cs_device_user * 6.删除cs_device_user
* */ * */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(String devId) { public void delete(String devId) {
@@ -713,11 +641,10 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
@Override @Override
public void deleteTest(String deviceId, Integer type ,String remark) { public void deleteTest(String deviceId, Integer type ,String remark) {
CsEquipmentDeliveryPO one = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, deviceId).one(); CsEquipmentDeliveryPO one = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, deviceId).one();
this.lambdaUpdate().eq(CsEquipmentDeliveryPO::getId,deviceId). this.lambdaUpdate().eq(CsEquipmentDeliveryPO::getId,deviceId).
// set(CsEquipmentDeliveryPO::getStatus,1). // set(CsEquipmentDeliveryPO::getStatus,1).
// set(CsEquipmentDeliveryPO::getRunStatus,1). // set(CsEquipmentDeliveryPO::getRunStatus,1).
set(CsEquipmentDeliveryPO::getProcess,type).update(); set(CsEquipmentDeliveryPO::getProcess,type).update();
this.delete(deviceId); this.delete(deviceId);
List<CsEquipmentProcessPO> list = csEquipmentProcessPOService.lambdaQuery().eq(CsEquipmentProcessPO::getDevId, one.getNdid()). List<CsEquipmentProcessPO> list = csEquipmentProcessPOService.lambdaQuery().eq(CsEquipmentProcessPO::getDevId, one.getNdid()).
eq(CsEquipmentProcessPO::getProcess, type).orderByDesc(CsEquipmentProcessPO::getStartTime).list(); eq(CsEquipmentProcessPO::getProcess, type).orderByDesc(CsEquipmentProcessPO::getStartTime).list();
@@ -735,8 +662,8 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
boolean result; boolean result;
LambdaUpdateWrapper<CsEquipmentDeliveryPO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<CsEquipmentDeliveryPO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(CsEquipmentDeliveryPO::getNdid,nDid) lambdaUpdateWrapper.eq(CsEquipmentDeliveryPO::getNdid,nDid)
.ne(CsEquipmentDeliveryPO::getRunStatus,0) .ne(CsEquipmentDeliveryPO::getRunStatus,0)
.set(CsEquipmentDeliveryPO::getSoftinfoId,id); .set(CsEquipmentDeliveryPO::getSoftinfoId,id);
result = this.update(lambdaUpdateWrapper); result = this.update(lambdaUpdateWrapper);
if (result) { if (result) {
refreshDeviceDataCache(); refreshDeviceDataCache();
@@ -781,6 +708,15 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
return this.lambdaQuery().ne(CsEquipmentDeliveryPO::getRunStatus,0).list(); return this.lambdaQuery().ne(CsEquipmentDeliveryPO::getRunStatus,0).list();
} }
@Override
public List<CsEquipmentDeliveryPO> getAllOnline() {
return this.lambdaQuery()
.ne(CsEquipmentDeliveryPO::getRunStatus,0)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
.isNotNull(CsEquipmentDeliveryPO::getNodeId)
.list();
}
@Override @Override
public boolean judgeDevModel(String nDid) { public boolean judgeDevModel(String nDid) {
boolean result = false; boolean result = false;
@@ -800,6 +736,296 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
return this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId,linePO.getDeviceId()).ne(CsEquipmentDeliveryPO::getRunStatus,0).one(); return this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId,linePO.getDeviceId()).ne(CsEquipmentDeliveryPO::getRunStatus,0).one();
} }
@Override
@Transactional(rollbackFor = Exception.class)
public CsEquipmentDeliveryPO saveCld(CsEquipmentDeliveryAddParm param) {
boolean result;
CsEquipmentDeliveryPO one = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getName, param.getName()).ne(CsEquipmentDeliveryPO::getRunStatus, 0).one();
if(Objects.nonNull (one)){
throw new BusinessException ("设备名称不能重复");
}
StringUtil.containsSpecialCharacters(param.getNdid());
CsEquipmentDeliveryPO po = this.queryEquipmentPOByndid (param.getNdid());
if(!Objects.isNull (po)){
throw new BusinessException (AlgorithmResponseEnum.NDID_ERROR);
}
CsEquipmentDeliveryPO csEquipmentDeliveryPo = new CsEquipmentDeliveryPO();
BeanUtils.copyProperties (param,csEquipmentDeliveryPo);
csEquipmentDeliveryPo.setStatus(3);
csEquipmentDeliveryPo.setRunStatus(1);
csEquipmentDeliveryPo.setUsageStatus(1);
csEquipmentDeliveryPo.setProcess(4);
csEquipmentDeliveryPo.setMac(param.getMac());
//这边自动分配前置机进程号,需要做判断 1.新增装置时判断是否已经是最大装置数量2.根据进程号,选择最少的分配
csEquipmentDeliveryPo.setNodeId(param.getNodeId());
//判断1
Node node = nodeService.getNodeById(param.getNodeId());
List<CsEquipmentDeliveryPO> devList = getListByNodeId(param.getNodeId());
if (ObjectUtil.isNotEmpty(devList) && devList.size() >= node.getNodeDevNum()) {
throw new BusinessException (AlgorithmResponseEnum.OVER_MAX_DEV_COUNT);
}
//判断2
int process = findLeastFrequentProcess(devList,node.getMaxProcessNum());
csEquipmentDeliveryPo.setNodeProcess(process);
result = this.save(csEquipmentDeliveryPo);
//新增设备与模板之间的关系 获取云前置模板
CsDevModelPO csDevModelPO = csDevModelService.getCldModel();
CsDevModelRelationAddParm relationAddParam = new CsDevModelRelationAddParm();
relationAddParam.setDevId(csEquipmentDeliveryPo.getId());
relationAddParam.setModelId(csDevModelPO.getId());
relationAddParam.setDid(1);
CsDevModelRelationPO relation = csDevModelRelationService.addDevModelRelation(relationAddParam);
//新增台账数据
CsLedger csLedger = new CsLedger();
csLedger.setId(csEquipmentDeliveryPo.getId());
csLedger.setPid(param.getProjectId());
csLedger.setPids("0," + param.getEngineeringId() + "," + param.getProjectId());
csLedger.setLevel(2);
csLedger.setName(param.getName());
csLedger.setState(1);
csLedger.setSort(0);
int addLedger = csLedgerMapper.insert(csLedger);
if (result && ObjectUtil.isNotNull(relation) && addLedger > 0) {
refreshDeviceDataCache();
}
return csEquipmentDeliveryPo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean delCldDev(String id) {
CsEquipmentDeliveryPO one = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, id).one();
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getId,id);
boolean update = this.remove(lambdaQueryWrapper);
List<CsLedger> list = csLedgerService.lambdaQuery().eq(CsLedger::getPid, id).list();
if(!CollectionUtils.isEmpty(list)){
List<String> collect = list.stream().map(CsLedger::getId).collect(Collectors.toList());
LambdaQueryWrapper<CsLinePO> csLinePOLambdaQueryWrapper = new LambdaQueryWrapper<>();
csLinePOLambdaQueryWrapper.in(CsLinePO::getLineId,collect);
csLinePOService.remove(csLinePOLambdaQueryWrapper);
}
LambdaQueryWrapper<CsLedger> csLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
csLedgerLambdaQueryWrapper.clear();
csLedgerLambdaQueryWrapper.eq(CsLedger::getId,id);
csLedgerService.remove(csLedgerLambdaQueryWrapper);
csLedgerLambdaQueryWrapper.clear();
csLedgerLambdaQueryWrapper.eq(CsLedger::getPid,id);
csLedgerService.remove(csLedgerLambdaQueryWrapper);
csDevModelRelationService.lambdaUpdate().eq(CsDevModelRelationPO::getDevId,id).set(CsDevModelRelationPO::getStatus,0).update();
if (update) {
refreshDeviceDataCache();
}
//新增操作日志
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
csTerminalLogs.setDeviceId(id);
csTerminalLogs.setOperateType(2);
csTerminalLogs.setIsPush(0);
csTerminalLogs.setNodeId(one.getNodeId());
csTerminalLogs.setNodeProcess(one.getNodeProcess());
csTerminalLogs.setDeviceName(one.getName());
csTerminalLogsMapper.insert(csTerminalLogs);
return true;
}
@Override
public Boolean updateCldDev(CsEquipmentDeliveryAuditParm param) {
// //云前置设备判断,修改云前置判断设备是否达到上限
// if(ObjectUtil.isNotNull(param.getNodeId())){
// Node node = nodeService.getNodeById(param.getNodeId());
// List<CsEquipmentDeliveryPO> devList = getListByNodeId(param.getNodeId());
// if (ObjectUtil.isNotEmpty(devList) && devList.size() >= node.getNodeDevNum()) {
// throw new BusinessException (AlgorithmResponseEnum.OVER_MAX_DEV_COUNT);
// }
// //自动分配进程号
// int process = findLeastFrequentProcess(devList,node.getMaxProcessNum());
// param.setNodeProcess(process);
// }
StringUtil.containsSpecialCharacters(param.getNdid());
boolean result;
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNdid,param.getNdid())
.in(CsEquipmentDeliveryPO::getStatus,Arrays.asList(1,2,3))
.ne(CsEquipmentDeliveryPO::getId, param.getId());
int countByAccount = this.count(lambdaQueryWrapper);
//大于等于1个则表示重复
if (countByAccount >= 1) {
throw new BusinessException(AlgorithmResponseEnum.NDID_ERROR);
}
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.eq(CsEquipmentDeliveryPO::getId, param.getId());
CsEquipmentDeliveryPO po = this.baseMapper.selectOne(lambdaQueryWrapper2);
List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
.ne(CsEquipmentDeliveryPO::getId, param.getId())
.ne(CsEquipmentDeliveryPO::getNdid, param.getNdid())
.eq(CsEquipmentDeliveryPO::getName, param.getName())
.ne(CsEquipmentDeliveryPO::getRunStatus, 0).list();
if(!CollectionUtils.isEmpty (list)){
throw new BusinessException ("设备名称不能重复");
}
CsEquipmentDeliveryPO csEquipmentDeliveryPo = new CsEquipmentDeliveryPO();
BeanUtils.copyProperties (param, csEquipmentDeliveryPo);
String path = this.createPath(param.getNdid());
csEquipmentDeliveryPo.setMac(path);
result = this.updateById(csEquipmentDeliveryPo);
//修改台账树中的设备名称
CsLedger csLedger = csLedgerService.findDataById(param.getId());
if (!Objects.isNull(csLedger)) {
CsLedgerParam.Update csLedgerParam = new CsLedgerParam.Update();
BeanUtils.copyProperties (csLedger, csLedgerParam);
csLedgerParam.setName(param.getName());
csLedgerService.updateLedgerTree(csLedgerParam);
}
if (result) {
refreshDeviceDataCache();
if (!Objects.equals(po.getUsageStatus(),param.getUsageStatus())) {
DeviceLogDTO dto = new DeviceLogDTO();
dto.setUserName(RequestUtil.getUsername());
dto.setOperate("设备使用状态被修改");
dto.setResult(1);
dto.setLoginName(RequestUtil.getLoginName());
csLogsFeignClient.addUserLog(dto);
}
}
//新增台账日志
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
csTerminalLogs.setDeviceId(csEquipmentDeliveryPo.getId());
csTerminalLogs.setOperateType(1);
csTerminalLogs.setIsPush(0);
csTerminalLogsMapper.insert(csTerminalLogs);
return result;
}
@Override
public List<CsEquipmentDeliveryPO> getCldDevByIp(String id, List<Integer> runFlag) {
//运行状态转换
List<Integer> state = new ArrayList<>();
if (CollectionUtil.isNotEmpty(runFlag)) {
if (runFlag.contains(0)) {
state.add(1);
}
if (runFlag.contains(2)) {
state.add(0);
}
//fixme 目前治理设备只有启用和停用,没有那么多状态,如果前置传递其他状态,先设置一个不存在的状态
state.add(9);
}
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeId,id)
.in(ObjectUtil.isNotEmpty(state),CsEquipmentDeliveryPO::getUsageStatus,state);
return this.list(lambdaQueryWrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCldDevStatus(String nodeId, Integer processNo) {
//获取需要修改的设备信息
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeId,nodeId)
.eq(CsEquipmentDeliveryPO::getNodeProcess,processNo)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
.eq(CsEquipmentDeliveryPO::getRunStatus,2);
List<CsEquipmentDeliveryPO> devList = this.list(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(devList)) {
//修改设备运行状态
devList.forEach(item->{item.setRunStatus(1);});
this.updateBatchById(devList);
//修改监测点运行状态
List<String> devIdList = devList.stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
List<CsLinePO> lineList = csLinePOService.getLinesByDevList(devIdList);
csLinePOService.updateCldLineStatus(lineList,2);
}
}
@Override
public void flipCldDevStatus(String devId, Integer status) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getId,devId)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
.ne(CsEquipmentDeliveryPO::getUsageStatus,0);
CsEquipmentDeliveryPO po = this.getOne(lambdaQueryWrapper);
if (ObjectUtil.isNotNull(po)) {
po.setRunStatus(status);
this.updateById(po);
//修改监测点运行状态
List<CsLinePO> lineList = csLinePOService.getLinesByDevList(Collections.singletonList(po.getId()));
csLinePOService.updateCldLineStatus(lineList,status==1?2:0);
}
}
@Override
public List<CsEquipmentDeliveryPO> getDevListByProjectId(String projectId) {
QueryWrapper<CsLedger> csLedgerQueryWrapper = new QueryWrapper();
csLedgerQueryWrapper.lambda().eq(CsLedger::getPid, projectId).eq(CsLedger::getState,1);
List<CsLedger> csLedgers = csLedgerMapper.selectList(csLedgerQueryWrapper);
if (CollectionUtil.isEmpty(csLedgers)) {
return new ArrayList<>();
}
List<String> collect = csLedgers.stream().map(CsLedger::getId).collect(Collectors.toList());
return this.lambdaQuery().in(CsEquipmentDeliveryPO::getId,collect).list();
}
@Override
public List<CsEquipmentDeliveryPO> getDataByNodeIdAndProcessNo(String nodeId, Integer processNo) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeId,nodeId)
.ne(CsEquipmentDeliveryPO::getRunStatus,0)
.eq(CsEquipmentDeliveryPO::getDevAccessMethod,"CLD");
if (ObjectUtil.isNotNull(processNo)) {
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeProcess,processNo);
}
return this.list(lambdaQueryWrapper);
}
@Override
public List<CsEquipmentDeliveryPO> getListByIds(List<String> devList) {
return this.lambdaQuery().in(CsEquipmentDeliveryPO::getId,devList).list();
}
@Override
public List<CsEquipmentDeliveryPO> getRunPortableDev(String userId) {
List<CsEquipmentDeliveryPO> result = new ArrayList<>();
DictTreeVO vo = dictTreeFeignClient.queryByCode(DicDataEnum.PORTABLE.getCode()).getData();
if (ObjectUtil.isNotNull(vo)) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getDevType,vo.getId())
.ne(CsEquipmentDeliveryPO::getRunStatus,0)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1);
//获取用户已经绑定的便携式设备
List<String> devList = csDeviceUserPOService.findDevByUserId(userId);
if (CollectionUtil.isNotEmpty(devList)) {
lambdaQueryWrapper.notIn(CsEquipmentDeliveryPO::getId,devList);
}
result = this.list(lambdaQueryWrapper);
}
return result;
}
//根据前置机id获取装置数量
public List<CsEquipmentDeliveryPO> getListByNodeId(String nodeId) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeId,nodeId)
.in(CsEquipmentDeliveryPO::getRunStatus,Arrays.asList(1,2));
return this.list(lambdaQueryWrapper);
}
public int findLeastFrequentProcess(List<CsEquipmentDeliveryPO> items, Integer process) {
Map<Integer, Long> processCounts = items.stream()
.collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeProcess, Collectors.counting()));
for (int i = 1; i <= process; i++) {
processCounts.putIfAbsent(i, 0L);
}
//如果列表为空默认返回1
return processCounts.entrySet().stream()
.min(Comparator.comparingLong(Map.Entry::getValue))
.map(Map.Entry::getKey)
.orElse(1);
}
/** /**
* 根据ndid生成二维码 * 根据ndid生成二维码
* @param ndid * @param ndid
@@ -819,7 +1045,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
e.printStackTrace(); e.printStackTrace();
} }
return filePath; return filePath;
} }
public InputStream bufferedImageToInputStream(BufferedImage image) { public InputStream bufferedImageToInputStream(BufferedImage image) {
@@ -833,6 +1058,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
} }
return null; return null;
} }
/*将ndid转成mac地址*/ /*将ndid转成mac地址*/
public String createPath(String nDid) { public String createPath(String nDid) {
// 使用StringBuilder来构建新的字符串 // 使用StringBuilder来构建新的字符串

View File

@@ -1,11 +1,14 @@
package com.njcn.csdevice.service.impl; package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -31,8 +34,7 @@ import com.njcn.csdevice.util.InfluxDbParamUtil;
import com.njcn.csdevice.utils.DataChangeUtil; import com.njcn.csdevice.utils.DataChangeUtil;
import com.njcn.csharmonic.api.EventFeignClient; import com.njcn.csharmonic.api.EventFeignClient;
import com.njcn.csharmonic.constant.HarmonicConstant; import com.njcn.csharmonic.constant.HarmonicConstant;
import com.njcn.csharmonic.param.CommonStatisticalQueryParam; import com.njcn.csharmonic.param.*;
import com.njcn.csharmonic.param.CsEventUserQueryPage;
import com.njcn.csharmonic.pojo.vo.ThdDataTdVO; import com.njcn.csharmonic.pojo.vo.ThdDataTdVO;
import com.njcn.csharmonic.pojo.vo.ThdDataVO; import com.njcn.csharmonic.pojo.vo.ThdDataVO;
import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.pojo.po.Overlimit;
@@ -41,10 +43,8 @@ import com.njcn.influx.pojo.dto.EventDataSetDTO;
import com.njcn.influx.pojo.dto.StatisticalDataDTO; import com.njcn.influx.pojo.dto.StatisticalDataDTO;
import com.njcn.influx.service.CommonService; import com.njcn.influx.service.CommonService;
import com.njcn.influx.service.EvtDataService; import com.njcn.influx.service.EvtDataService;
import com.njcn.system.api.CsStatisticalSetFeignClient; import com.njcn.system.api.*;
import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.pojo.po.DictData;
import com.njcn.system.api.EleEvtFeignClient;
import com.njcn.system.api.EpdFeignClient;
import com.njcn.system.pojo.po.EleEpdPqd; import com.njcn.system.pojo.po.EleEpdPqd;
import com.njcn.system.pojo.po.EleEvtParm; import com.njcn.system.pojo.po.EleEvtParm;
import com.njcn.system.pojo.vo.CsStatisticalSetVO; import com.njcn.system.pojo.vo.CsStatisticalSetVO;
@@ -59,6 +59,7 @@ import java.lang.reflect.Field;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.time.Instant;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function; import java.util.function.Function;
@@ -85,7 +86,6 @@ public class CsGroupServiceImpl extends ServiceImpl<CsGroupMapper, CsGroup> impl
private final EpdFeignClient epdFeignClient; private final EpdFeignClient epdFeignClient;
private final CsLineFeignClient csLineFeignClient; private final CsLineFeignClient csLineFeignClient;
private final ICsLedgerService iCsLedgerService; private final ICsLedgerService iCsLedgerService;
private final DicDataFeignClient dicDataFeignClient;
private final EquipmentFeignClient equipmentFeignClient; private final EquipmentFeignClient equipmentFeignClient;
private final CsStatisticalSetFeignClient csStatisticalSetFeignClient; private final CsStatisticalSetFeignClient csStatisticalSetFeignClient;
private final EvtDataService evtDataService; private final EvtDataService evtDataService;
@@ -95,6 +95,11 @@ public class CsGroupServiceImpl extends ServiceImpl<CsGroupMapper, CsGroup> impl
private final CsDataSetMapper csDataSetMapper; private final CsDataSetMapper csDataSetMapper;
private final EventFeignClient eventFeignClient; private final EventFeignClient eventFeignClient;
private final InfluxDbParamUtil influxDbParamUtil; private final InfluxDbParamUtil influxDbParamUtil;
private final DictTreeFeignClient dictTreeFeignClient;
private final DicDataFeignClient dicDataFeignClient;
private final String GRID_SIDE_DICT_CODE = "Grid_Side";
private final String LOAD_SIDE_DICT_CODE = "Load_Side";
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -784,6 +789,387 @@ public class CsGroupServiceImpl extends ServiceImpl<CsGroupMapper, CsGroup> impl
} }
} }
@Override
public List<ThdDataVO> trendData(TrendDataQueryParam trendDataQueryParam) {
List<ThdDataVO> result = new ArrayList<>();
CsLinePO finalCsLinePO = csLineFeignClient.getById(trendDataQueryParam.getLineId()).getData();
CsDataSet csDataSet = csDataSetMapper.selectOne(new LambdaQueryWrapper<CsDataSet>().eq(CsDataSet::getId,finalCsLinePO.getDataSetId()));
if(Objects.isNull(csDataSet) || StrUtil.isBlank(csDataSet.getDataLevel())){
throw new BusinessException("当前测点数据集主要信息缺失,请联系管理员排查(测点表里面数据集id缺失)");
}
Double ct = finalCsLinePO.getCtRatio();
Double pt = finalCsLinePO.getPtRatio();
if(CollectionUtil.isNotEmpty(trendDataQueryParam.getList())) {
for (TrendDataQueryParam param : trendDataQueryParam.getList()) {
List<EleEpdPqd> eleEpdPqds = csStatisticalSetFeignClient.queryStatisticalSelect(param.getStatisticalId()).getData();
for (EleEpdPqd epdPqd : eleEpdPqds) {
CommonQueryParam commonQueryParam = new CommonQueryParam();
commonQueryParam.setLineId(finalCsLinePO.getLineId());
commonQueryParam.setTableName(influxDbParamUtil.getTableNameByClassId(epdPqd.getClassId()));
commonQueryParam.setColumnName(epdPqd.getName() + (StringUtils.isEmpty(param.getFrequency()) ? "" : "_" + param.getFrequency()));
commonQueryParam.setPhasic(epdPqd.getPhase());
commonQueryParam.setStartTime(DateUtil.format(DateUtil.parse(trendDataQueryParam.getSearchBeginTime(), DatePattern.NORM_DATE_PATTERN), DatePattern.NORM_DATETIME_PATTERN));
commonQueryParam.setEndTime(DateUtil.format(DateUtil.endOfDay(DateUtil.parse(trendDataQueryParam.getSearchEndTime(), DatePattern.NORM_DATE_PATTERN)), DatePattern.NORM_DATETIME_PATTERN));
commonQueryParam.setDataType(trendDataQueryParam.getValueType());
commonQueryParam.setClDid(influxDbParamUtil.getClDidByLineId(finalCsLinePO.getLineId()));
List<StatisticalDataDTO> deviceRtData = commonService.getNewDeviceRtDataByTime(Collections.singletonList(commonQueryParam));
List<ThdDataVO> collect1 = deviceRtData.stream().map(temp -> {
String unit;
ThdDataVO vo = new ThdDataVO();
vo.setLineId(temp.getLineId());
vo.setPhase(Objects.equals("M", temp.getPhaseType()) ? null : temp.getPhaseType());
String position = finalCsLinePO.getPosition();
vo.setPosition(position);
vo.setTime(temp.getTime());
vo.setStatMethod(temp.getValueType());
vo.setStatisticalData(Double.valueOf(df.format(temp.getValue())));
if (temp.getValue() != null) {
double re = 0;
if (Objects.equals("Primary", trendDataQueryParam.getDataLevel())) {
if (Objects.equals("Primary", csDataSet.getDataLevel())) {
if (HarmonicConstant.POWER_LIST.contains(epdPqd.getShowName())) {
re = Objects.isNull(temp.getValue()) ? 3.14159 : Double.parseDouble(df.format(temp.getValue() / 1000));
vo.setStatisticalData(re);
unit = "k" + epdPqd.getUnit();
} else {
vo.setStatisticalData(Objects.isNull(temp.getValue()) ? 3.14159 : Double.parseDouble(df.format(temp.getValue())));
unit = epdPqd.getUnit();
}
} else {
if (Objects.nonNull(epdPqd.getPrimaryFormula())) {
switch (epdPqd.getPrimaryFormula()) {
case "*PT":
re = temp.getValue() * pt / 1000;
unit = "k" + epdPqd.getUnit();
break;
case "*CT":
re = temp.getValue() * ct;
unit = epdPqd.getUnit();
break;
case "*PT*CT":
re = temp.getValue() * pt * ct / 1000;
unit = "k" + epdPqd.getUnit();
break;
default:
re = temp.getValue();
unit = epdPqd.getUnit();
break;
}
vo.setStatisticalData(Double.valueOf(df.format(re)));
} else {
re = temp.getValue();
unit = epdPqd.getUnit();
vo.setStatisticalData(Double.valueOf(df.format(re)));
}
}
} else {
if (Objects.equals("Primary", csDataSet.getDataLevel())) {
if (Objects.nonNull(epdPqd.getPrimaryFormula())) {
switch (epdPqd.getPrimaryFormula()) {
case "*PT":
re = temp.getValue() / pt;
break;
case "*CT":
re = temp.getValue() / ct;
break;
case "*PT*CT":
re = temp.getValue() / pt / ct;
break;
default:
re = temp.getValue();
break;
}
vo.setStatisticalData(Double.valueOf(df.format(re)));
} else {
re = temp.getValue();
vo.setStatisticalData(Double.valueOf(df.format(re)));
}
} else {
vo.setStatisticalData(Double.valueOf(df.format(temp.getValue())));
}
unit = epdPqd.getUnit();
}
} else {
vo.setStatisticalData(null);
if (Objects.equals("Primary", trendDataQueryParam.getDataLevel())) {
if (Objects.equals("Primary", csDataSet.getDataLevel())) {
unit = epdPqd.getUnit();
} else {
if (Objects.nonNull(epdPqd.getPrimaryFormula())) {
switch (epdPqd.getPrimaryFormula()) {
case "*PT":
unit = "k" + epdPqd.getUnit();
break;
case "*CT":
unit = epdPqd.getUnit();
break;
case "*PT*CT":
unit = "k" + epdPqd.getUnit();
break;
default:
unit = epdPqd.getUnit();
break;
}
} else {
unit = epdPqd.getUnit();
}
}
} else {
unit = epdPqd.getUnit();
}
}
vo.setUnit(unit);
vo.setStatisticalIndex(epdPqd.getId());
vo.setStatisticalName(epdPqd.getName());
vo.setAnotherName(epdPqd.getShowName());
return vo;
}).collect(Collectors.toList());
result.addAll(collect1);
}
}
}
return result;
}
@Override
public List<ThdDataVO> fittingData(FittingDataQueryParam fittingDataQueryParam) {
List<ThdDataVO> result = new ArrayList<>();
CsLinePO finalCsLinePO = csLineFeignClient.getById(fittingDataQueryParam.getLineId()).getData();
CsDataSet csDataSet = csDataSetMapper.selectOne(new LambdaQueryWrapper<CsDataSet>().eq(CsDataSet::getId,finalCsLinePO.getDataSetId()));
if(Objects.isNull(csDataSet) || StrUtil.isBlank(csDataSet.getDataLevel())){
throw new BusinessException("当前测点数据集主要信息缺失,请联系管理员排查(测点表里面数据集id缺失)");
}
Double ct = finalCsLinePO.getCtRatio();
Double pt = finalCsLinePO.getPtRatio();
// String position = finalCsLinePO.getPosition();
Overlimit overlimit = overlimitMapper.selectById(finalCsLinePO.getLineId());
JSONObject entries = JSONUtil.parseObj(overlimit);
if(CollectionUtil.isNotEmpty(fittingDataQueryParam.getList())) {
for (FittingDataQueryParam param : fittingDataQueryParam.getList()) {
String dictCode = dictTreeFeignClient.queryById(param.getStatisticalId()).getData().getCode();
List<EleEpdPqd> eleEpdPqds = csStatisticalSetFeignClient.queryStatisticalSelect(param.getStatisticalId()).getData();
List<ThdDataVO> dataList = new ArrayList<>();
for (EleEpdPqd epdPqd : eleEpdPqds) {
CommonQueryParam commonQueryParam = new CommonQueryParam();
commonQueryParam.setLineId(finalCsLinePO.getLineId());
commonQueryParam.setTableName(influxDbParamUtil.getTableNameByClassId(epdPqd.getClassId()));
commonQueryParam.setColumnName(epdPqd.getName() + (StringUtils.isEmpty(param.getFrequency()) ? "" : "_" + param.getFrequency()));
commonQueryParam.setPhasic(epdPqd.getPhase());
commonQueryParam.setStartTime(DateUtil.format(DateUtil.parse(fittingDataQueryParam.getSearchBeginTime(), DatePattern.NORM_DATE_PATTERN), DatePattern.NORM_DATETIME_PATTERN));
commonQueryParam.setEndTime(DateUtil.format(DateUtil.endOfDay(DateUtil.parse(fittingDataQueryParam.getSearchEndTime(), DatePattern.NORM_DATE_PATTERN)), DatePattern.NORM_DATETIME_PATTERN));
// 兼容用户功率需要该参数过滤
String dataType = param.getValueType();
if (StrUtil.isEmpty(dataType)) {
// 电能质量指标,取限值计算类型,判断是否越限
dataType = epdPqd.getFormula();
}
commonQueryParam.setDataType(dataType);
commonQueryParam.setClDid(influxDbParamUtil.getClDidByLineId(finalCsLinePO.getLineId()));
List<StatisticalDataDTO> deviceRtData = commonService.getNewDeviceRtDataByTime(Collections.singletonList(commonQueryParam));
dataList = deviceRtData.stream().map(temp -> {
String unit;
ThdDataVO vo = new ThdDataVO();
vo.setLineId(temp.getLineId());
// vo.setLineName(finalCsLinePO.getName());
vo.setPhase(Objects.equals("M", temp.getPhaseType()) ? null : temp.getPhaseType());
// vo.setPosition(position);
vo.setTime(temp.getTime());
vo.setStatMethod(commonQueryParam.getDataType());
vo.setStatisticalData(Double.valueOf(df.format(temp.getValue())));
if (temp.getValue() != null) {
double re;
if (Objects.equals("Primary", fittingDataQueryParam.getDataLevel())) {
if (Objects.equals("Primary", csDataSet.getDataLevel())) {
if (HarmonicConstant.POWER_LIST.contains(epdPqd.getShowName())) {
re = Objects.isNull(temp.getValue()) ? 3.14159 : Double.parseDouble(df.format(temp.getValue() / 1000));
vo.setStatisticalData(re);
unit = "k" + epdPqd.getUnit();
} else {
vo.setStatisticalData(Objects.isNull(temp.getValue()) ? 3.14159 : Double.parseDouble(df.format(temp.getValue())));
unit = epdPqd.getUnit();
}
} else {
if (Objects.nonNull(epdPqd.getPrimaryFormula())) {
switch (epdPqd.getPrimaryFormula()) {
case "*PT":
re = temp.getValue() * pt / 1000;
unit = "k" + epdPqd.getUnit();
break;
case "*CT":
re = temp.getValue() * ct;
unit = epdPqd.getUnit();
break;
case "*PT*CT":
re = temp.getValue() * pt * ct / 1000;
unit = "k" + epdPqd.getUnit();
break;
default:
re = temp.getValue();
unit = epdPqd.getUnit();
break;
}
vo.setStatisticalData(Double.valueOf(df.format(re)));
} else {
re = temp.getValue();
unit = epdPqd.getUnit();
vo.setStatisticalData(Double.valueOf(df.format(re)));
}
}
} else {
if (Objects.equals("Primary", csDataSet.getDataLevel())) {
if (Objects.nonNull(epdPqd.getPrimaryFormula())) {
switch (epdPqd.getPrimaryFormula()) {
case "*PT":
re = temp.getValue() / pt;
break;
case "*CT":
re = temp.getValue() / ct;
break;
case "*PT*CT":
re = temp.getValue() / pt / ct;
break;
default:
re = temp.getValue();
break;
}
vo.setStatisticalData(Double.valueOf(df.format(re)));
} else {
re = temp.getValue();
vo.setStatisticalData(Double.valueOf(df.format(re)));
}
} else {
vo.setStatisticalData(Double.valueOf(df.format(temp.getValue())));
}
unit = epdPqd.getUnit();
}
} else {
vo.setStatisticalData(null);
if (Objects.equals("Primary", fittingDataQueryParam.getDataLevel())) {
if (Objects.equals("Primary", csDataSet.getDataLevel())) {
unit = epdPqd.getUnit();
} else {
if (Objects.nonNull(epdPqd.getPrimaryFormula())) {
switch (epdPqd.getPrimaryFormula()) {
case "*PT":
unit = "k" + epdPqd.getUnit();
break;
case "*CT":
unit = epdPqd.getUnit();
break;
case "*PT*CT":
unit = "k" + epdPqd.getUnit();
break;
default:
unit = epdPqd.getUnit();
break;
}
} else {
unit = epdPqd.getUnit();
}
}
} else {
unit = epdPqd.getUnit();
}
}
vo.setUnit(unit);
// vo.setStatisticalIndex(epdPqd.getId());
// vo.setStatisticalName(epdPqd.getName());
vo.setStatisticalIndex(param.getStatisticalId());
vo.setAnotherName(epdPqd.getShowName());
return vo;
}).collect(Collectors.toList());
}
// 电能质量指标越限为1不越限为0
List<String> hasKeys = entries.keySet().stream().filter(key -> key.startsWith(dictCode)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(hasKeys)) {
List<ThdDataVO> limitDataList = new ArrayList<>();
Map<Instant, List<ThdDataVO>> timeMap = dataList.stream().collect(Collectors.groupingBy(ThdDataVO::getTime));
// 限值
ThdDataVO data;
for (Map.Entry<Instant, List<ThdDataVO>> entry: timeMap.entrySet()) {
data = new ThdDataVO();
List<ThdDataVO> list = entry.getValue();
if (CollUtil.isNotEmpty(list)) {
ThdDataVO thdDataVO = list.get(0);
// data.setPosition(thdDataVO.getPosition());
data.setLineId(thdDataVO.getLineId());
// data.setLineName(thdDataVO.getLineName());
data.setFrequency(param.getFrequency());
data.setStatMethod(thdDataVO.getStatMethod());
data.setUnit(thdDataVO.getUnit());
data.setAnotherName(thdDataVO.getAnotherName());
data.setStatisticalIndex(param.getStatisticalId());
}
Instant time = entry.getKey();
data.setTime(time);
double limitValue = entries.getDouble(dictCode + (StringUtils.isEmpty(param.getFrequency()) ? "" : param.getFrequency()));
double maxValue = list.stream().filter(v -> ObjectUtil.isNotEmpty(v.getStatisticalData())).mapToDouble(ThdDataVO::getStatisticalData).max().orElse(0.0);
// 越限为1不越限为0
data.setStatisticalData(maxValue > limitValue ? 1.0 : 0.0);
limitDataList.add(data);
}
limitDataList.sort(Comparator.comparing(ThdDataVO::getTime));
result.addAll(limitDataList);
} else {
result.addAll(dataList);
}
}
}
return result;
}
@Override
public Map<String, List<ThdDataVO>> sensitiveUserTrendData(SensitiveUserTrendDataQueryParam param) {
Map<String, List<ThdDataVO>> result = new HashMap<>();
result.put("before", new ArrayList<>());
result.put("after", new ArrayList<>());
String sensitiveUserId = param.getSensitiveUserId();
List<CsLinePO> linePOList = csLineFeignClient.getLineBySensitiveUser(Collections.singletonList(sensitiveUserId)).getData();
if (CollUtil.isEmpty(linePOList)) {
return result;
}
DictData loadSideDictData = dicDataFeignClient.getDicDataByCode(LOAD_SIDE_DICT_CODE).getData();
DictData gridSideDictData = dicDataFeignClient.getDicDataByCode(GRID_SIDE_DICT_CODE).getData();
CsLinePO gridSideLine = linePOList.stream().filter(linePO -> linePO.getPosition().equals(gridSideDictData.getId())).findFirst().orElse(null);
CsLinePO loadSideLine = linePOList.stream().filter(linePO -> linePO.getPosition().equals(loadSideDictData.getId())).findFirst().orElse(null);
TrendDataQueryParam trendDataQueryParam = new TrendDataQueryParam();
trendDataQueryParam.setSearchBeginTime(param.getSearchBeginTime());
trendDataQueryParam.setSearchEndTime(param.getSearchEndTime());
trendDataQueryParam.setValueType(param.getValueType());
trendDataQueryParam.setDataLevel(param.getDataLevel());
List<SensitiveUserTrendDataQueryParam> paramList = param.getList();
List<TrendDataQueryParam> indexList = paramList.stream().map(item -> {
TrendDataQueryParam queryParam = new TrendDataQueryParam();
queryParam.setFrequency(item.getFrequency());
queryParam.setStatisticalId(item.getStatisticalId());
return queryParam;
}).collect(Collectors.toList());
trendDataQueryParam.setList(indexList);
if (loadSideLine != null) {
trendDataQueryParam.setLineId(loadSideLine.getLineId());
List<ThdDataVO> thdDataList = this.trendData(trendDataQueryParam);
result.put("before", thdDataList);
}
if (gridSideLine != null) {
trendDataQueryParam.setLineId(gridSideLine.getLineId());
List<ThdDataVO> thdDataList = this.trendData(trendDataQueryParam);
result.put("after", thdDataList);
}
return result;
}
private List<EnergyTemplateVO> getChildren(String tabId, List<EnergyTemplateVO> all) { private List<EnergyTemplateVO> getChildren(String tabId, List<EnergyTemplateVO> all) {
return all.stream().filter(item -> item.getPid().equals(tabId)).collect(Collectors.toList()); return all.stream().filter(item -> item.getPid().equals(tabId)).collect(Collectors.toList());
} }

View File

@@ -4,10 +4,12 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csdevice.constant.DataParam; import com.njcn.csdevice.constant.DataParam;
import com.njcn.csdevice.controller.project.EngineeringController;
import com.njcn.csdevice.enums.LineBaseEnum; import com.njcn.csdevice.enums.LineBaseEnum;
import com.njcn.csdevice.mapper.*; import com.njcn.csdevice.mapper.*;
import com.njcn.csdevice.pojo.dto.DevDetailDTO; import com.njcn.csdevice.pojo.dto.DevDetailDTO;
@@ -18,7 +20,12 @@ import com.njcn.csdevice.pojo.vo.CsLedgerVO;
import com.njcn.csdevice.service.*; import com.njcn.csdevice.service.*;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.AreaFeignClient; import com.njcn.system.api.AreaFeignClient;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.Area; import com.njcn.system.pojo.po.Area;
import com.njcn.system.pojo.vo.DictTreeVO;
import com.njcn.user.enums.AppRoleEnum;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -49,6 +56,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
private final CsDevModelRelationService csDevModelRelationService; private final CsDevModelRelationService csDevModelRelationService;
private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper; private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper;
private final ICsDataSetService csDataSetService; private final ICsDataSetService csDataSetService;
private final DictTreeFeignClient dictTreeFeignClient;
private final EngineeringController engineeringController;
private final CsDeviceUserPOMapper csDeviceUserPOMapper;
@Override @Override
public List<CsLedgerVO> getLedgerTree() { public List<CsLedgerVO> getLedgerTree() {
@@ -72,6 +82,28 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
/*获取用户工程,设备信息过滤*/ /*获取用户工程,设备信息过滤*/
List<String> roleengineer = roleEngineerDevService.getRoleengineer(); List<String> roleengineer = roleEngineerDevService.getRoleengineer();
List<String> device = roleEngineerDevService.getDevice(); List<String> device = roleEngineerDevService.getDevice();
//区分治理装置和云前置装置
List<String> zhiLianDevice = new ArrayList<>();
List<String> cldDevice = new ArrayList<>();
if (CollectionUtil.isNotEmpty(device)) {
List<CsEquipmentDeliveryPO> csEquipmentDeliveryPOS = csEquipmentDeliveryMapper.selectBatchIds(device);
DictTreeVO vo1 = dictTreeFeignClient.queryByCode(DicDataEnum.DEV_CLD.getCode()).getData();
Optional.ofNullable(vo1)
.map(DictTreeVO::getId)
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
.filter(item -> Objects.equals(item.getDevType(), id))
.map(CsEquipmentDeliveryPO::getId)
.forEach(cldDevice::add)
);
DictTreeVO vo2 = dictTreeFeignClient.queryByCode(DicDataEnum.CONNECT_DEV.getCode()).getData();
Optional.ofNullable(vo2)
.map(DictTreeVO::getId)
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
.filter(item -> Objects.equals(item.getDevType(), id))
.map(CsEquipmentDeliveryPO::getId)
.forEach(zhiLianDevice::add)
);
}
engineeringList = allList.stream().filter(item->roleengineer.contains(item.getId())).collect(Collectors.toList()); engineeringList = allList.stream().filter(item->roleengineer.contains(item.getId())).collect(Collectors.toList());
List<CsLedgerVO> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList()); List<CsLedgerVO> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
@@ -85,7 +117,20 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
)); ));
List<CsLedgerVO> deviceList = allList.stream() List<CsLedgerVO> deviceList = allList.stream()
.filter(item -> device.contains(item.getId()) && !Objects.equals(item.getPid(), "0")) .filter(item -> zhiLianDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
.peek(item -> {
CsEquipmentDeliveryPO po = poMap.get(item.getId());
item.setComFlag(po.getRunStatus());
item.setNDId(po.getNdid());
item.setType("device");
item.setProcess(po.getProcess());
})
.filter(item -> Objects.equals(poMap.get(item.getId()).getUsageStatus(), 1))
.sorted(Comparator.comparing(CsLedgerVO::getSort))
.collect(Collectors.toList());
List<CsLedgerVO> cldDeviceList = allList.stream()
.filter(item -> cldDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
.peek(item -> { .peek(item -> {
CsEquipmentDeliveryPO po = poMap.get(item.getId()); CsEquipmentDeliveryPO po = poMap.get(item.getId());
item.setComFlag(po.getRunStatus()); item.setComFlag(po.getRunStatus());
@@ -116,21 +161,64 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
} }
) )
.collect(Collectors.toList()); .collect(Collectors.toList());
checkDevSetData(deviceList); checkDevSetData(deviceList);
deviceList.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList))); List<CsLedgerVO> engineeringList1 = new ArrayList<>();
projectList.forEach(pro -> pro.setChildren(getChildren(pro, deviceList))); List<CsLedgerVO> projectList1 = new ArrayList<>();
engineeringList.forEach(eng -> eng.setChildren(getChildren(eng, projectList))); List<String> dev = deviceList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
engineeringList = engineeringList.stream().sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList()); List<CsLedgerVO> ledger1 = getProAndEngineer(dev);
if (CollectionUtil.isNotEmpty(ledger1)) {
deviceList.forEach(dev1 -> dev1.setChildren(getChildren(dev1, finalLineList)));
engineeringList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList1.forEach(pro -> pro.setChildren(getChildren(pro, deviceList)));
List<CsLedgerVO> finalProjectList = projectList1;
engineeringList1.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
}
checkDevSetData(cldDeviceList);
List<CsLedgerVO> engineeringList2 = new ArrayList<>();
List<CsLedgerVO> projectList2 = new ArrayList<>();
List<String> dev2 = cldDeviceList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
List<CsLedgerVO> ledger2 = getProAndEngineer(dev2);
if (CollectionUtil.isNotEmpty(ledger2)) {
cldDeviceList.forEach(dev1 -> dev1.setChildren(getChildren(dev1, finalLineList)));
engineeringList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList2.forEach(pro -> pro.setChildren(getChildren(pro, cldDeviceList)));
List<CsLedgerVO> finalProjectList = projectList2;
engineeringList2.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
}
//获取便携式设备树 //获取便携式设备树
CsLedgerVO portable = new CsLedgerVO(); CsLedgerVO portable = new CsLedgerVO();
portable.setLevel(0); portable.setLevel(0);
portable.setName(DataParam.portableDev); portable.setName(DataParam.portableDev);
portable.setPid("0"); portable.setPid("0");
portable.setId(IdUtil.simpleUUID()); portable.setId(IdUtil.simpleUUID());
//针对未启用的装置判断
List<CsLedgerVO> ledger = allList.stream() //根据当前用户获取便携式设备
.filter(item -> Objects.equals(item.getLevel(), 2) && Objects.equals(item.getPid(), "0")) List<CsLedgerVO> ledger;
.collect(Collectors.toList()); String role = RequestUtil.getUserRole();
List<String> roles = JSONArray.parseArray(role, String.class);
if(roles.contains(AppRoleEnum.ROOT.getCode()) || roles.contains(AppRoleEnum.OPERATION_MANAGER.getCode())){
ledger = allList.stream()
.filter(item -> Objects.equals(item.getLevel(), 2) && Objects.equals(item.getPid(), "0"))
.collect(Collectors.toList());
} else {
LambdaQueryWrapper<CsDeviceUserPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CsDeviceUserPO::getPrimaryUserId,RequestUtil.getUserIndex());
List<CsDeviceUserPO> list1 = csDeviceUserPOMapper.selectList(queryWrapper);
List<String> result = new ArrayList<>();
if (CollectionUtil.isNotEmpty(list1)){
result = list1.stream().map(CsDeviceUserPO::getDeviceId).collect(Collectors.toList());
}
//针对未启用的装置判断
List<String> finalResult = result;
ledger = allList.stream()
.filter(item -> Objects.equals(item.getLevel(), 2) && Objects.equals(item.getPid(), "0") && finalResult.contains(item.getId()))
.collect(Collectors.toList());
}
Map<String, CsEquipmentDeliveryPO> poMap2 = ledger.stream() Map<String, CsEquipmentDeliveryPO> poMap2 = ledger.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
CsLedgerVO::getId, CsLedgerVO::getId,
@@ -150,7 +238,7 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
.filter(c -> poMap2.get(c.getId()).getUsageStatus() == 1) .filter(c -> poMap2.get(c.getId()).getUsageStatus() == 1)
.collect(Collectors.toList()); .collect(Collectors.toList());
portables = portables.stream().sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList()); portables = portables.stream().sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
portables.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList))); portables.forEach(dev3 -> dev3.setChildren(getChildren(dev3, finalLineList)));
checkDevSetData(portables); checkDevSetData(portables);
portable.setChildren(portables); portable.setChildren(portables);
@@ -159,7 +247,16 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
government.setName(DataParam.governmentDev); government.setName(DataParam.governmentDev);
government.setPid("0"); government.setPid("0");
government.setId(IdUtil.simpleUUID()); government.setId(IdUtil.simpleUUID());
government.setChildren(engineeringList); government.setChildren(engineeringList1);
//获取云前置设备树
CsLedgerVO cld = new CsLedgerVO();
cld.setLevel(0);
cld.setName(DataParam.cldDev);
cld.setPid("0");
cld.setId(IdUtil.simpleUUID());
cld.setChildren(engineeringList2);
List<CsLedgerVO> tree = new ArrayList<>(); List<CsLedgerVO> tree = new ArrayList<>();
if (CollUtil.isNotEmpty(portables)) { if (CollUtil.isNotEmpty(portables)) {
tree.add(portable); tree.add(portable);
@@ -167,6 +264,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
if (CollUtil.isNotEmpty(deviceList)) { if (CollUtil.isNotEmpty(deviceList)) {
tree.add(government); tree.add(government);
} }
if (CollUtil.isNotEmpty(cldDeviceList)) {
tree.add(cld);
}
return tree; return tree;
} }
//剔除未接入的设备(根据status判断不太稳,所有这里直接判断该设备有没有对应的模板指标) //剔除未接入的设备(根据status判断不太稳,所有这里直接判断该设备有没有对应的模板指标)
@@ -205,6 +305,29 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
/*获取用户工程,设备信息过滤*/ /*获取用户工程,设备信息过滤*/
List<String> roleengineer = roleEngineerDevService.getRoleengineer(); List<String> roleengineer = roleEngineerDevService.getRoleengineer();
List<String> device = roleEngineerDevService.getDevice(); List<String> device = roleEngineerDevService.getDevice();
List<String> zhiLianDevice = new ArrayList<>();
List<String> cldDevice = new ArrayList<>();
if (CollectionUtil.isNotEmpty(device)) {
List<CsEquipmentDeliveryPO> csEquipmentDeliveryPOS = csEquipmentDeliveryMapper.selectBatchIds(device);
DictTreeVO vo1 = dictTreeFeignClient.queryByCode(DicDataEnum.DEV_CLD.getCode()).getData();
Optional.ofNullable(vo1)
.map(DictTreeVO::getId)
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
.filter(item -> Objects.equals(item.getDevType(), id))
.map(CsEquipmentDeliveryPO::getId)
.forEach(cldDevice::add)
);
DictTreeVO vo2 = dictTreeFeignClient.queryByCode(DicDataEnum.CONNECT_DEV.getCode()).getData();
Optional.ofNullable(vo2)
.map(DictTreeVO::getId)
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
.filter(item -> Objects.equals(item.getDevType(), id))
.map(CsEquipmentDeliveryPO::getId)
.forEach(zhiLianDevice::add)
);
}
engineeringList = allList.stream().filter(item->roleengineer.contains(item.getId())).collect(Collectors.toList()); engineeringList = allList.stream().filter(item->roleengineer.contains(item.getId())).collect(Collectors.toList());
List<CsLedgerVO> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList()); List<CsLedgerVO> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
@@ -217,8 +340,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
csEquipmentDeliveryMapper::selectById csEquipmentDeliveryMapper::selectById
)); ));
//获取治理设备
List<CsLedgerVO> deviceList = allList.stream() List<CsLedgerVO> deviceList = allList.stream()
.filter(item -> device.contains(item.getId()) && !Objects.equals(item.getPid(), "0")) .filter(item -> zhiLianDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
.peek(item -> { .peek(item -> {
CsEquipmentDeliveryPO po = poMap.get(item.getId()); CsEquipmentDeliveryPO po = poMap.get(item.getId());
item.setComFlag(po.getRunStatus()); item.setComFlag(po.getRunStatus());
@@ -230,9 +354,45 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
.sorted(Comparator.comparing(CsLedgerVO::getSort)) .sorted(Comparator.comparing(CsLedgerVO::getSort))
.collect(Collectors.toList()); .collect(Collectors.toList());
List<CsLedgerVO> engineeringList1 = new ArrayList<>();
List<CsLedgerVO> projectList1 = new ArrayList<>();
checkDevSetData(deviceList); checkDevSetData(deviceList);
projectList.forEach(pro -> pro.setChildren(getChildren(pro, deviceList))); List<String> dev = deviceList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
engineeringList.forEach(eng -> eng.setChildren(getChildren(eng, projectList))); List<CsLedgerVO> ledger1 = getProAndEngineer(dev);
if (CollectionUtil.isNotEmpty(ledger1)) {
engineeringList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList1.forEach(pro -> pro.setChildren(getChildren(pro, deviceList)));
List<CsLedgerVO> finalProjectList = projectList1;
engineeringList1.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
}
//获取云前置设备
List<CsLedgerVO> cldDevList = allList.stream()
.filter(item -> cldDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
.peek(item -> {
CsEquipmentDeliveryPO po = poMap.get(item.getId());
item.setComFlag(po.getRunStatus());
item.setNDId(po.getNdid());
item.setType("device");
item.setProcess(po.getProcess());
})
.filter(item -> Objects.equals(poMap.get(item.getId()).getUsageStatus(), 1))
.sorted(Comparator.comparing(CsLedgerVO::getSort))
.collect(Collectors.toList());
checkDevSetData(cldDevList);
List<CsLedgerVO> engineeringList2 = new ArrayList<>();
List<CsLedgerVO> projectList2 = new ArrayList<>();
List<String> dev2 = cldDevList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
List<CsLedgerVO> ledger2 = getProAndEngineer(dev2);
if (CollectionUtil.isNotEmpty(ledger2)) {
engineeringList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
projectList2.forEach(pro -> pro.setChildren(getChildren(pro, cldDevList)));
List<CsLedgerVO> finalProjectList = projectList2;
engineeringList2.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
}
//获取便携式设备树 //获取便携式设备树
CsLedgerVO portable = new CsLedgerVO(); CsLedgerVO portable = new CsLedgerVO();
@@ -241,10 +401,28 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
portable.setPid("0"); portable.setPid("0");
portable.setId(IdUtil.simpleUUID()); portable.setId(IdUtil.simpleUUID());
//针对未启用的装置判断 List<CsLedgerVO> ledger;
List<CsLedgerVO> ledger = allList.stream() String role = RequestUtil.getUserRole();
.filter(item -> Objects.equals(item.getLevel(), 2) && Objects.equals(item.getPid(), "0")) List<String> roles = JSONArray.parseArray(role, String.class);
.collect(Collectors.toList()); if(roles.contains(AppRoleEnum.ROOT.getCode()) || roles.contains(AppRoleEnum.OPERATION_MANAGER.getCode())){
ledger = allList.stream()
.filter(item -> Objects.equals(item.getLevel(), 2) && Objects.equals(item.getPid(), "0"))
.collect(Collectors.toList());
} else {
LambdaQueryWrapper<CsDeviceUserPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CsDeviceUserPO::getPrimaryUserId,RequestUtil.getUserIndex());
List<CsDeviceUserPO> list1 = csDeviceUserPOMapper.selectList(queryWrapper);
List<String> result = new ArrayList<>();
if (CollectionUtil.isNotEmpty(list1)){
result = list1.stream().map(CsDeviceUserPO::getDeviceId).collect(Collectors.toList());
}
//针对未启用的装置判断
List<String> finalResult = result;
ledger = allList.stream()
.filter(item -> Objects.equals(item.getLevel(), 2) && Objects.equals(item.getPid(), "0") && finalResult.contains(item.getId()))
.collect(Collectors.toList());
}
Map<String, CsEquipmentDeliveryPO> poMap2 = ledger.stream() Map<String, CsEquipmentDeliveryPO> poMap2 = ledger.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
CsLedgerVO::getId, CsLedgerVO::getId,
@@ -272,7 +450,16 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
government.setName(DataParam.governmentDev); government.setName(DataParam.governmentDev);
government.setPid("0"); government.setPid("0");
government.setId(IdUtil.simpleUUID()); government.setId(IdUtil.simpleUUID());
government.setChildren(engineeringList); government.setChildren(engineeringList1);
//获取云前置设备树
CsLedgerVO cld = new CsLedgerVO();
cld.setLevel(0);
cld.setName(DataParam.cldDev);
cld.setPid("0");
cld.setId(IdUtil.simpleUUID());
cld.setChildren(engineeringList2);
List<CsLedgerVO> tree = new ArrayList<>(); List<CsLedgerVO> tree = new ArrayList<>();
if (CollUtil.isNotEmpty(portables)) { if (CollUtil.isNotEmpty(portables)) {
tree.add(portable); tree.add(portable);
@@ -280,6 +467,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
if (CollUtil.isNotEmpty(deviceList)) { if (CollUtil.isNotEmpty(deviceList)) {
tree.add(government); tree.add(government);
} }
if (CollUtil.isNotEmpty(cldDevList)) {
tree.add(cld);
}
return tree; return tree;
} }
@@ -474,6 +664,200 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
return tree; return tree;
} }
@Override
public List<CsLedgerVO> getProAndEngineer(List<String> id) {
List<CsLedgerVO> result = new ArrayList<>();
List<CsLedgerVO> allList = this.baseMapper.getAll();
Set<String> idSet = new HashSet<>(id);
if (CollectionUtil.isNotEmpty(id)) {
id.forEach(item->{
allList.forEach(item2->{
if (Objects.equals(item2.getId(),item)) {
idSet.addAll(Arrays.asList(item2.getPids().split( ",")));
}
});
});
}
if (CollectionUtil.isNotEmpty(idSet)) {
idSet.forEach(item->{
allList.forEach(item2->{
if (Objects.equals(item2.getId(),item)) {
result.add(item2);
}
});
});
}
return result;
}
@Override
public CsLedgerVO cldTree() {
List<CsLedgerVO> engineerTree = new ArrayList<>();
List<CsLedgerVO> projectTree = new ArrayList<>();
List<CsLedgerVO> deviceTree = new ArrayList<>();
List<CsLedgerVO> lineTree = new ArrayList<>();
List<CsLedgerVO> allList = this.baseMapper.getAll();
if (CollectionUtil.isNotEmpty(allList)) {
//工程集合
List<CsLedgerVO> tree1 = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).collect(Collectors.toList());
//项目集合
List<CsLedgerVO> tree2 = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).collect(Collectors.toList());
//设备集合
List<CsLedgerVO> tree3 = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.DEVICE_LEVEL.getCode())).collect(Collectors.toList());
//监测点集合
List<CsLedgerVO> tree4 = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode())).collect(Collectors.toList());
//筛选出云前置设备
if (CollectionUtil.isNotEmpty(tree3)) {
Set<String> list1 = new HashSet<>();
List<String> devList = tree3.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
List<CsEquipmentDeliveryPO> devs = csEquipmentDeliveryMapper.selectBatchIds(devList);
Map<String, CsEquipmentDeliveryPO> devsMap = devs.stream().collect(Collectors.toMap(CsEquipmentDeliveryPO::getId, Function.identity()));
DictTreeVO vo1 = dictTreeFeignClient.queryByCode(DicDataEnum.DEV_CLD.getCode()).getData();
//list1是 cld设备
devs.forEach(item->{
if (item.getDevType().equals(vo1.getId())) {
list1.add(item.getId());
}
});
//list2是 非cld设备
Set<String> list2 = devList.stream().filter(item -> !list1.contains(item)).collect(Collectors.toSet());
List<CsLedgerVO> tree5 = tree3.stream().filter(vo -> list2.contains(vo.getId())).collect(Collectors.toList());
Set<String> list3 = tree5.stream().map(CsLedgerVO::getPid).collect(Collectors.toSet());
projectTree = tree2.stream().filter(vo -> !list3.contains(vo.getId())).collect(Collectors.toList());
List<CsLedgerVO> tree6 = tree2.stream().filter(vo -> list3.contains(vo.getId())).collect(Collectors.toList());
Set<String> proList = tree6.stream().map(CsLedgerVO::getPid).collect(Collectors.toSet());
engineerTree = tree1.stream().filter(vo -> !proList.contains(vo.getId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(list1)) {
deviceTree = tree3.stream()
.filter(vo -> list1.contains(vo.getId()))
.peek(item -> {
CsEquipmentDeliveryPO dev = devsMap.get(item.getId());
if (dev != null) {
item.setComFlag(dev.getRunStatus());
}
})
.collect(Collectors.toList());
lineTree = tree4.stream()
.filter(vo -> list1.contains(vo.getPid()))
.peek(item -> {
CsEquipmentDeliveryPO dev = devsMap.get(item.getId());
if (dev != null) {
item.setComFlag(dev.getRunStatus());
}
})
.collect(Collectors.toList());
}
}
}
if (CollectionUtil.isNotEmpty(deviceTree)) {
List<CsLedgerVO> finalLineTree = lineTree;
deviceTree.forEach(item->{
item.setChildren(getChildren(item, finalLineTree));
});
}
if (CollectionUtil.isNotEmpty(projectTree)) {
List<CsLedgerVO> finalDeviceTree = deviceTree;
projectTree.forEach(item->{
item.setChildren(getChildren(item, finalDeviceTree));
});
}
if (CollectionUtil.isNotEmpty(engineerTree)) {
List<CsLedgerVO> finalProjectTree = projectTree;
engineerTree.forEach(item->{
item.setChildren(getChildren(item, finalProjectTree));
});
}
CsLedgerVO government = new CsLedgerVO();
government.setLevel(0);
government.setName(DataParam.cldDev);
government.setPid("0");
government.setId(IdUtil.simpleUUID());
government.setChildren(engineerTree);
return government;
}
@Override
public List<DevDetailDTO> getInfoByIds(List<String> list) {
List<DevDetailDTO> details = new ArrayList<>();
List<CsLedger> ledgers = this.listByIds(list);
Set<String> enginingeringIds = new HashSet<>();
ledgers.forEach(item->{
DevDetailDTO device = new DevDetailDTO();
if(Objects.equals(item.getPid(),"0")){
device.setEquipmentName(item.getName());
device.setEquipmentId(item.getId());
device.setProjectId("/");
device.setProjectName("/");
device.setEngineeringid("/");
device.setEngineeringName("/");
details.add(device);
} else {
enginingeringIds.add(item.getPids().split(",")[1]);
}
});
if (CollectionUtil.isNotEmpty(enginingeringIds)) {
List<CsLedger> engineer = this.listByIds(enginingeringIds);
engineer.forEach(item->{
DevDetailDTO detail = new DevDetailDTO();
detail.setEngineeringid(item.getId());
detail.setEngineeringName(item.getName());
details.add(detail);
});
}
return details;
}
@Override
public List<DevDetailDTO> getDevInfoByEngineerIds(List<String> list) {
List<DevDetailDTO> details = new ArrayList<>();
LambdaQueryWrapper<CsLedger> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(CsLedger::getPid, list);
List<CsLedger> project = this.list(queryWrapper);
//工程id
List<String> projectIds = project.stream().map(CsLedger::getId).collect(Collectors.toList());
LambdaQueryWrapper<CsLedger> queryWrapper2 = new LambdaQueryWrapper<>();
queryWrapper2.in(CsLedger::getPid, projectIds);
List<CsLedger> dev = this.list(queryWrapper2);
dev.forEach(item->{
DevDetailDTO detail = new DevDetailDTO();
detail.setEquipmentName(item.getName());
detail.setEquipmentId(item.getId());
details.add(detail);
});
return details;
}
@Override
public List<DevDetailDTO> getEngineeringHaveDevs(List<String> list) {
List<DevDetailDTO> result = new ArrayList<>();
list.forEach(item->{
LambdaQueryWrapper<CsLedger> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CsLedger::getPid, item);
List<CsLedger> project = this.list(queryWrapper);
//工程id
List<String> projectIds = project.stream().map(CsLedger::getId).collect(Collectors.toList());
LambdaQueryWrapper<CsLedger> queryWrapper2 = new LambdaQueryWrapper<>();
queryWrapper2.in(CsLedger::getPid, projectIds);
List<CsLedger> dev = this.list(queryWrapper2);
if (CollectionUtil.isNotEmpty(dev)) {
DevDetailDTO dto = new DevDetailDTO();
dto.setEngineeringid(item);
result.add(dto);
}
});
return result;
}
/** /**
* 获取子节点 * 获取子节点
*/ */

View File

@@ -1,21 +1,50 @@
package com.njcn.csdevice.service.impl; package com.njcn.csdevice.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csdevice.mapper.CsLedgerMapper; import com.njcn.access.api.CsLineLatestDataFeignClient;
import com.njcn.csdevice.mapper.CsLinePOMapper; import com.njcn.access.pojo.po.CsLineLatestData;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.mapper.*;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLedger; import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO;
import com.njcn.csdevice.service.CsLinePOService; import com.njcn.csdevice.service.*;
import com.njcn.csharmonic.api.PqSensitiveUserFeignClient;
import com.njcn.csharmonic.pojo.po.PqSensitiveUser;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.oss.constant.OssPath;
import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.UserFeignClient;
import com.njcn.user.pojo.constant.UserType;
import com.njcn.user.pojo.vo.UserVO;
import com.njcn.web.pojo.param.BaseParam;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -29,7 +58,21 @@ import java.util.stream.Collectors;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> implements CsLinePOService{ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> implements CsLinePOService{
private final CsLedgerMapper csLedgerMapper; private final CsLedgerMapper csLedgerMapper;
private final CsDevModelService csDevModelService;
private final ICsDataSetService csDataSetService;
private final DicDataFeignClient dicDataFeignClient;
private final CsTerminalLogsMapper csTerminalLogsMapper;
private final CsLineLatestDataFeignClient csLineLatestDataFeignClient;
private final PqSensitiveUserFeignClient pqSensitiveUserFeignClient;
private final FileStorageUtil fileStorageUtil;
private final UserFeignClient userFeignClient;
private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper;
private final CsDeviceUserPOMapper csDeviceUserPOMapper;
@Override @Override
public List<CsLinePO> getLineByDev(List<String> list) { public List<CsLinePO> getLineByDev(List<String> list) {
@@ -88,6 +131,272 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
return this.lambdaQuery().in(CsLinePO::getDeviceId,list).eq(CsLinePO::getStatus,1).list(); return this.lambdaQuery().in(CsLinePO::getDeviceId,list).eq(CsLinePO::getStatus,1).list();
} }
@Override
@Transactional(rollbackFor = Exception.class)
public CsLinePO addCldLine(CsLineParam param) {
String lineId = param.getDevMac().replace(":","") + param.getLineNo();
CsLinePO po = new CsLinePO();
//1.新增监测点信息
BeanUtils.copyProperties(param,po);
po.setStatus(1);
po.setRunStatus(2);
po.setLineId(param.getDevMac().replace(":","") + param.getLineNo());
//模板id
CsDevModelPO po1 = csDevModelService.getCldModel();
po.setDataModelId(po1.getId());
//设备id
po.setDeviceId(param.getDevId());
//数据集id
List<CsDataSet> list = csDataSetService.findDataSetByModelId(po1.getId());
if (CollectionUtil.isNotEmpty(list)) {
po.setDataSetId(list.get(0).getId());
po.setClDid(list.get(0).getClDev());
}
//监测位置
DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.GRID_SIDE.getCode()).getData();
po.setPosition(data.getId());
this.save(po);
//2.新增台账树信息
CsLedger csLedger = new CsLedger();
csLedger.setId(lineId);
csLedger.setPid(param.getDevId());
csLedger.setPids("0," + param.getEngineeringId() + "," + param.getProjectId() + "," + param.getDevId());
csLedger.setName(param.getName());
csLedger.setLevel(3);
csLedger.setState(1);
csLedger.setSort(0);
csLedgerMapper.insert(csLedger);
return po;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCldLine(CsLineParam param) {
LambdaQueryWrapper<CsLinePO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CsLinePO::getDeviceId,param.getDevId())
.ne(CsLinePO::getLineId,param.getLineId())
.eq(CsLinePO::getLineNo,param.getLineNo())
.eq(CsLinePO::getStatus,1);
List<CsLinePO> lineList = this.list(wrapper);
if (CollectionUtil.isNotEmpty(lineList)) {
throw new BusinessException("监测点线路号重复,请调整!");
}
LambdaUpdateWrapper<CsLinePO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(CsLinePO::getLineId,param.getLineId())
.eq(CsLinePO::getStatus,1)
.set(CsLinePO::getName,param.getName())
.set(CsLinePO::getLineNo,param.getLineNo())
.set(CsLinePO::getConType,param.getConType())
.set(CsLinePO::getLineInterval,param.getLineInterval())
.set(CsLinePO::getPtRatio,param.getPtRatio())
.set(CsLinePO::getPt2Ratio,param.getPt2Ratio())
.set(CsLinePO::getCtRatio,param.getCtRatio())
.set(CsLinePO::getCt2Ratio,param.getCt2Ratio())
.set(CsLinePO::getVolGrade,param.getVolGrade())
.set(CsLinePO::getRunStatus,param.getRunStatus());
this.update(lambdaUpdateWrapper);
//修改台账树中监测点的名称
QueryWrapper<CsLedger> queryWrapper = new QueryWrapper();
queryWrapper.eq("state",1).eq("id",param.getLineId());
CsLedger csLedger = csLedgerMapper.selectOne(queryWrapper);
csLedger.setName(param.getName());
csLedgerMapper.updateById(csLedger);
//新增台账日志
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
csTerminalLogs.setDeviceId(param.getDevId());
csTerminalLogs.setOperateType(1);
csTerminalLogs.setIsPush(0);
csTerminalLogsMapper.insert(csTerminalLogs);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteCldLine(String id) {
CsLinePO po = this.getById(id);
this.removeById(id);
csLedgerMapper.deleteById(id);
//新增台账日志
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
csTerminalLogs.setDeviceId(po.getDeviceId());
csTerminalLogs.setOperateType(1);
csTerminalLogs.setIsPush(0);
csTerminalLogsMapper.insert(csTerminalLogs);
}
@Override
public void updateCldLineStatus(List<CsLinePO> lineList, Integer status) {
lineList.forEach(item->{item.setRunStatus(status);});
this.updateBatchById(lineList);
}
@Override
public void updateLineDataByList(List<String> list, String id, String setId) {
LambdaUpdateWrapper<CsLinePO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(CsLinePO::getDeviceId,list).set(CsLinePO::getDataModelId,id).set(CsLinePO::getDataSetId,setId);
this.update(updateWrapper);
}
@Override
public List<CsLinePO> getLineByName(String lineName) {
return this.lambdaQuery().eq(CsLinePO::getStatus, 1).like(CsLinePO::getName,lineName).list();
}
@Override
public List<String> getAllLine() {
return this.lambdaQuery()
.eq(CsLinePO::getStatus, 1)
.list()
.stream()
.map(CsLinePO::getLineId)
.collect(Collectors.toList());
}
@Override
public List<CsLinePO> getSimpleLine() {
List<String> devIds = commGetDevIds(RequestUtil.getUserIndex());
if(CollUtil.isNotEmpty(devIds)){
List<CsLinePO> poList = this.lambdaQuery().select(CsLinePO::getLineId,CsLinePO::getName).in(CsLinePO::getDeviceId,devIds)
.eq(CsLinePO::getStatus, DataStateEnum.ENABLE.getCode()).list();
return poList;
}else {
return Collections.emptyList();
}
}
private List<String> commGetDevIds(String userId){
UserVO userVO = userFeignClient.getUserById(userId).getData();
List<String> devIds;
if(userVO.getType().equals(UserType.SUPER_ADMINISTRATOR ) || userVO.getType().equals(UserType.ADMINISTRATOR )){
devIds = csEquipmentDeliveryMapper.selectList(new LambdaQueryWrapper<CsEquipmentDeliveryPO>().eq(CsEquipmentDeliveryPO::getStatus,DataStateEnum.ENABLE)).stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
}else {
LambdaQueryWrapper<CsDeviceUserPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(CsDeviceUserPO::getDeviceId)
.and(w->w.eq(CsDeviceUserPO::getPrimaryUserId,userId).or().eq(CsDeviceUserPO::getSubUserId,userId))
.eq(CsDeviceUserPO::getStatus, DataStateEnum.ENABLE.getCode());
List<CsDeviceUserPO> devList = this.csDeviceUserPOMapper.selectList(lambdaQueryWrapper);
devIds = devList.stream().map(CsDeviceUserPO::getDeviceId).distinct().collect(Collectors.toList());
}
return devIds;
}
@Override
public List<CsLinePO> getLineBySensitiveUser(List<String> list) {
return this.lambdaQuery()
.in(CsLinePO::getMonitorUser,list)
.eq(CsLinePO::getStatus, 1)
.list();
}
@Override
public Page<PqSensitiveUserLineVO> getSensitiveUserLineList(BaseParam param) {
Page<PqSensitiveUserLineVO> result = new Page<>();
result.setCurrent(param.getPageNum());
result.setSize(param.getPageSize());
Page<CsLinePO> linePage = this.page(new Page<>(param.getPageNum(), param.getPageSize()),
new LambdaQueryWrapper<CsLinePO>()
.eq(CsLinePO::getStatus, 1)
// 关联敏感用户
.isNotNull(CsLinePO::getMonitorUser)
.orderByAsc(CsLinePO::getMonitorUser)
);
BeanUtil.copyProperties(linePage, result);
List<CsLinePO> records = linePage.getRecords();
if (CollUtil.isEmpty(records)) {
return result;
}
List<PqSensitiveUserLineVO> list = new ArrayList<>();
List<String> sensitiveUserIds = list.stream().map(PqSensitiveUserLineVO::getSensitiveUser).distinct().collect(Collectors.toList());
Map<String, String> sensitiveUserNameMap = pqSensitiveUserFeignClient.getListByIds(sensitiveUserIds).getData()
.stream().collect(Collectors.toMap(PqSensitiveUser::getId, PqSensitiveUser::getName));
PqSensitiveUserLineVO sensitiveUserLineVO;
for (CsLinePO record : records) {
sensitiveUserLineVO = new PqSensitiveUserLineVO();
// 治理对象
sensitiveUserLineVO.setSensitiveUser(sensitiveUserNameMap.getOrDefault(record.getMonitorUser(), null));
// 测点名称
sensitiveUserLineVO.setLineId(record.getLineId());
sensitiveUserLineVO.setLineName(record.getName());
// 是否治理
if (ObjectUtil.isNotEmpty(record.getGovern())) {
if (record.getGovern().equals(0)) {
sensitiveUserLineVO.setGovern("未治理");
}
if (record.getGovern().equals(1)) {
sensitiveUserLineVO.setGovern("已治理");
}
}
// 监测类型
sensitiveUserLineVO.setPosition(record.getPosition());
DictData positionDictData = dicDataFeignClient.getDicDataById(record.getPosition()).getData();
if (positionDictData != null) {
sensitiveUserLineVO.setPosition(positionDictData.getName());
}
// 电压等级
sensitiveUserLineVO.setVolGrade(record.getVolGrade());
// 运行状态
sensitiveUserLineVO.setRunStatus(getRunStatusDescription(record.getRunStatus()));
// 报告文件
sensitiveUserLineVO.setReportFilePath(record.getReportFilePath());
// 最新数据时间
List<CsLineLatestData> lineLatestDataList = csLineLatestDataFeignClient.listData().getData();
if (CollUtil.isNotEmpty(lineLatestDataList)) {
sensitiveUserLineVO.setLatestTime(lineLatestDataList.stream()
.filter(item -> item.getLineId().equals(record.getLineId()))
.map(CsLineLatestData::getTimeId)
.max(LocalDateTime::compareTo)
.orElse(null));
}
list.add(sensitiveUserLineVO);
}
result.setRecords(list);
return result;
}
@Override
public boolean uploadReport(MultipartFile file, String lineId) {
String filePath = fileStorageUtil.uploadMultipart(file, OssPath.GOVERN_HARMONIC_FILE);
return this.update(new LambdaUpdateWrapper<CsLinePO>().eq(CsLinePO::getLineId, lineId).set(CsLinePO::getReportFilePath, filePath));
}
@Override
public String getReportUrl(String lineId) {
CsLinePO linePO = this.getById(lineId);
if (linePO != null) {
String reportFilePath = linePO.getReportFilePath();
if (StrUtil.isNotBlank(reportFilePath)) {
return fileStorageUtil.getFileUrl(reportFilePath);
}
}
return "";
}
private String getRunStatusDescription(Integer runStatus) {
// 0运行1检修2停运3调试4退运
switch (runStatus) {
case 0:
return "运行";
case 1:
return "检修";
case 2:
return "停运";
case 3:
return "调试";
case 4:
return "退运";
default:
return "未知";
}
}
// /** // /**
// * 1.平台端默认配置拓扑图模板,包含拓扑图信息(cs_topology_diagram_template)和拓扑图上监测点的点位信息(cs_line_topology_template) // * 1.平台端默认配置拓扑图模板,包含拓扑图信息(cs_topology_diagram_template)和拓扑图上监测点的点位信息(cs_line_topology_template)
// * // *

View File

@@ -0,0 +1,290 @@
package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csdevice.mapper.CsTerminalLogsMapper;
import com.njcn.csdevice.mapper.CsTerminalReplyMapper;
import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.service.CsEquipmentDeliveryService;
import com.njcn.csdevice.service.CsLinePOService;
import com.njcn.csdevice.service.ICsTerminalLogsService;
import com.njcn.csdevice.service.INodeService;
import com.njcn.mq.message.CldControlMessage;
import com.njcn.mq.message.CldUpdateLedgerMessage;
import com.njcn.mq.template.CldControlMessageTemplate;
import com.njcn.mq.template.CldUpdateLedgerMessageTemplate;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
* 服务实现类
* </p>
*
* @author xy
* @since 2025-09-26
*/
@Service
@RequiredArgsConstructor
public class CsTerminalLogsServiceImpl extends ServiceImpl<CsTerminalLogsMapper, CsTerminalLogs> implements ICsTerminalLogsService {
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
private final CsLinePOService csLinePOService;
private final DictTreeFeignClient dictTreeFeignClient;
private final INodeService nodeService;
private final CldUpdateLedgerMessageTemplate template;
private final CldControlMessageTemplate controlMessageTemplate;
private final RedisUtil redisUtil;
private final CsTerminalReplyMapper csTerminalReplyMapper;
@Override
public void updateLogs(String id, Integer code) {
LambdaUpdateWrapper<CsTerminalLogs> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(CsTerminalLogs::getIsPush, 0)
.eq(CsTerminalLogs::getDeviceId, id);
this.update(wrapper);
}
@Override
@Transactional(rollbackFor = {Exception.class})
public String pushCldInfo() {
LambdaQueryWrapper<CsTerminalLogs> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CsTerminalLogs::getIsPush, 0);
List<CsTerminalLogs> list = this.list(wrapper);
if (CollectionUtil.isNotEmpty(list)) {
//新增台账集合
List<String> addList = new ArrayList<>();
//修改台账集合
List<String> updateList = new ArrayList<>();
//删除台账集合
List<String> deleteList = new ArrayList<>();
//根据设备分组,判断设备的操作,整合
Map<String,List<CsTerminalLogs>> map = list.stream().collect(Collectors.groupingBy(CsTerminalLogs::getDeviceId));
map.forEach((k,v)->{
List<Integer> operateTypeList = v.stream().map(CsTerminalLogs::getOperateType).distinct().collect(Collectors.toList());
if (operateTypeList.size() == 3) {
//啥也不用干
//deleteList.add(k);
} else if (operateTypeList.size() == 2 && operateTypeList.contains(0) && operateTypeList.contains(1)) {
addList.add(k);
} else if (operateTypeList.size() == 2 && operateTypeList.contains(0) && operateTypeList.contains(2)) {
//啥也不用干
} else if (operateTypeList.size() == 2 && operateTypeList.contains(1) && operateTypeList.contains(2)) {
deleteList.add(k);
} else if (operateTypeList.size() == 1 && operateTypeList.contains(0)) {
addList.add(k);
} else if (operateTypeList.size() == 1 && operateTypeList.contains(1)) {
updateList.add(k);
} else if (operateTypeList.size() == 1 && operateTypeList.contains(2)) {
deleteList.add(k);
}
});
//整合后 所有设备的id
List<String> devList = Stream.of(addList, updateList, deleteList).flatMap(List::stream).collect(Collectors.toList());
//获取设备集合
List<CsEquipmentDeliveryPO> deviceList = csEquipmentDeliveryService.listByIds(devList);
//按照前置机id分组
Map<String,List<CsEquipmentDeliveryPO>> nodeMap = deviceList.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
nodeMap.forEach((k,v)->{
int maxProcessNum = nodeService.getNodeById(k).getMaxProcessNum();
//按照进程号分组
Map<Integer,List<CsEquipmentDeliveryPO>> nodeProcessMap = v.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeProcess));
nodeProcessMap.forEach((k1,v1)->{
if (v1.size() > 10) {
//一个进程下修改的设备数量超过10台重启该进程号下的前置
CldControlMessage cldControlMessage = new CldControlMessage();
cldControlMessage.setGuid(IdUtil.simpleUUID());
cldControlMessage.setCode("set_process");
cldControlMessage.setProcessNo(k1);
cldControlMessage.setFun("delete");
cldControlMessage.setProcessNum(maxProcessNum);
controlMessageTemplate.sendMember(cldControlMessage,k);
}
});
});
if (CollectionUtil.isNotEmpty(addList)) {
sendMessage(addList, deviceList, "add_terminal");
}
if (CollectionUtil.isNotEmpty(updateList)) {
sendMessage(updateList, deviceList, "ledger_modify");
}
if (CollectionUtil.isNotEmpty(deleteList)) {
sendDeleteMessage(deleteList, list, "delete_terminal");
}
//推送完将数据改成推送
LambdaUpdateWrapper<CsTerminalLogs> wrapper2 = new LambdaUpdateWrapper<>();
wrapper2.set(CsTerminalLogs::getIsPush, 1);
this.update(wrapper2);
} else {
return "暂无需要推送的数据";
}
return "成功";
}
@Override
public void updateLaterData(String id, String code) {
int operateType;
if (Objects.equals(code, "add_terminal")) {
operateType = 0;
} else if (Objects.equals(code, "ledger_modify")) {
operateType = 1;
} else if (Objects.equals(code, "delete_terminal")){
operateType = 2;
} else {
operateType = 3;
}
//找出最新的数据,将状态改为未推送,下次可以再次推送
this.lambdaUpdate()
.eq(CsTerminalLogs::getDeviceId, id)
.eq(CsTerminalLogs::getOperateType, operateType)
.orderByDesc(CsTerminalLogs::getCreateTime)
.last("LIMIT 1")
.set(CsTerminalLogs::getIsPush, 0)
.update();
}
public void sendMessage(List<String> addList, List<CsEquipmentDeliveryPO> deviceList, String type) {
List<CsEquipmentDeliveryPO> filteredList = deviceList.stream().filter(device -> addList.contains(device.getId())).collect(Collectors.toList());
//获取监测点信息
List<CsLinePO> lineList = csLinePOService.getLinesByDevList(addList);
Map<String,List<CsEquipmentDeliveryPO>> nodeMap1 = filteredList.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
nodeMap1.forEach((k,v)->{
CldUpdateLedgerMessage message = new CldUpdateLedgerMessage();
message.setCode(type);
//按照进程号分组
Map<Integer,List<CsEquipmentDeliveryPO>> nodeProcessMap1 = v.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeProcess));
for (Map.Entry<Integer, List<CsEquipmentDeliveryPO>> entry : nodeProcessMap1.entrySet()) {
Integer k1 = entry.getKey();
List<CsEquipmentDeliveryPO> v1 = entry.getValue();
String guid = IdUtil.simpleUUID();
message.setGuid(guid);
message.setProcessNo(k1);
List<CldUpdateLedgerMessage.CldDeviceDto> list1 = new ArrayList<>();
v1.forEach(item -> {
CldUpdateLedgerMessage.CldDeviceDto deviceDto = new CldUpdateLedgerMessage.CldDeviceDto();
deviceDto.setId(item.getId());
deviceDto.setNode(item.getNodeProcess());
deviceDto.setName(item.getName());
deviceDto.setIp(item.getMac());
deviceDto.setDevType(dictTreeFeignClient.queryById(item.getDevModel()).getData().getName());
Node node = nodeService.getNodeById(item.getNodeId());
if (node != null) {
deviceDto.setMaxProcessNum(node.getMaxProcessNum());
}
if (CollectionUtil.isNotEmpty(lineList)) {
List<CldUpdateLedgerMessage.CldMonitorDto> list2 = new ArrayList<>();
lineList.forEach(item2 -> {
if (Objects.equals(item.getId(), item2.getDeviceId())) {
CldUpdateLedgerMessage.CldMonitorDto cldLineDto = new CldUpdateLedgerMessage.CldMonitorDto();
cldLineDto.setId(item2.getLineId());
cldLineDto.setName(item.getName());
cldLineDto.setLineNo(String.valueOf(item2.getLineNo()));
cldLineDto.setVoltageLevel(item2.getVolGrade() + "kV");
cldLineDto.setStatus(item.getRunStatus());
cldLineDto.setPtType(String.valueOf(item2.getConType()));
cldLineDto.setDeviceId(item2.getDeviceId());
cldLineDto.setPt1(item2.getPtRatio());
cldLineDto.setPt2(item2.getPt2Ratio());
cldLineDto.setCt1(item2.getCtRatio());
cldLineDto.setCt2(item2.getCt2Ratio());
list2.add(cldLineDto);
}
});
deviceDto.setMonitorData(list2);
}
list1.add(deviceDto);
//存储发送的数据记录,用于后面响应校验
CsTerminalReply csFmTerminalReply = new CsTerminalReply();
csFmTerminalReply.setReplyId(guid);
csFmTerminalReply.setCode(type);
csFmTerminalReply.setNodeId(k);
csFmTerminalReply.setProcessNo(k1);
csFmTerminalReply.setDeviceId(item.getId());
csFmTerminalReply.setIsReceived(0);
csTerminalReplyMapper.insert(csFmTerminalReply);
});
message.setData(list1);
template.sendMember(message, k);
//缓存本次发送数据GUID的集合用于查询数据
Object object = redisUtil.getObjectByKey(RequestUtil.getUserIndex()+"reply");
if (object != null) {
String value = object + "," + guid;
redisUtil.saveByKeyWithExpire(RequestUtil.getUserIndex()+"reply", value, 60L);
} else {
redisUtil.saveByKeyWithExpire(RequestUtil.getUserIndex()+"reply", guid, 60L);
}
}
});
}
public void sendDeleteMessage(List<String> list, List<CsTerminalLogs> csTerminalLogs, String type) {
List<CsTerminalLogs> filteredList = csTerminalLogs.stream().filter(device -> list.contains(device.getDeviceId()) && Objects.equals(device.getOperateType(),2)).collect(Collectors.toList());
Map<String,List<CsTerminalLogs>> nodeMap1 = filteredList.stream().collect(Collectors.groupingBy(CsTerminalLogs::getNodeId));
nodeMap1.forEach((k,v)->{
CldUpdateLedgerMessage message = new CldUpdateLedgerMessage();
message.setCode(type);
//按照进程号分组
Map<Integer,List<CsTerminalLogs>> nodeProcessMap1 = v.stream().collect(Collectors.groupingBy(CsTerminalLogs::getNodeProcess));
nodeProcessMap1.forEach((k1,v1)->{
String guid = IdUtil.simpleUUID();
message.setGuid(guid);
message.setProcessNo(k1);
List<CldUpdateLedgerMessage.CldDeviceDto> list1 = new ArrayList<>();
v1.forEach(item->{
CldUpdateLedgerMessage.CldDeviceDto deviceDto = new CldUpdateLedgerMessage.CldDeviceDto();
deviceDto.setId(item.getDeviceId());
deviceDto.setNode(item.getNodeProcess());
Node node = nodeService.getNodeById(item.getNodeId());
if (node != null) {
deviceDto.setMaxProcessNum(node.getMaxProcessNum());
}
list1.add(deviceDto);
//存储发送的数据记录,用于后面响应校验
CsTerminalReply csFmTerminalReply = new CsTerminalReply();
csFmTerminalReply.setReplyId(guid);
csFmTerminalReply.setCode(type);
csFmTerminalReply.setNodeId(k);
csFmTerminalReply.setProcessNo(k1);
csFmTerminalReply.setDeviceId(item.getDeviceId());
csFmTerminalReply.setDeviceName(item.getDeviceName());
csFmTerminalReply.setIsReceived(0);
csTerminalReplyMapper.insert(csFmTerminalReply);
});
message.setData(list1);
template.sendMember(message,k);
//缓存本次发送数据GUID的集合用于查询数据
Object object = redisUtil.getObjectByKey(RequestUtil.getUserIndex()+"reply");
if (object != null) {
String value = object + "," + guid;
redisUtil.saveByKeyWithExpire(RequestUtil.getUserIndex()+"reply", value, 60L);
} else {
redisUtil.saveByKeyWithExpire(RequestUtil.getUserIndex()+"reply", guid, 60L);
}
});
});
}
}

View File

@@ -0,0 +1,241 @@
package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csdevice.api.CsLedgerFeignClient;
import com.njcn.csdevice.mapper.CsTerminalReplyMapper;
import com.njcn.csdevice.param.IcdBzReplyParam;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.CsTerminalReply;
import com.njcn.csdevice.pojo.vo.CldLogsVo;
import com.njcn.csdevice.pojo.vo.CsLedgerVO;
import com.njcn.csdevice.service.CsEquipmentDeliveryService;
import com.njcn.csdevice.service.ICsTerminalLogsService;
import com.njcn.csdevice.service.ICsTerminalReplyService;
import com.njcn.csdevice.service.INodeService;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.BaseParam;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
* 服务实现类
* </p>
*
* @author xy
* @since 2025-10-09
*/
@Service
@RequiredArgsConstructor
public class CsTerminalReplyServiceImpl extends ServiceImpl<CsTerminalReplyMapper, CsTerminalReply> implements ICsTerminalReplyService {
private final RedisUtil redisUtil;
private final INodeService nodeService;
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
private final ICsTerminalLogsService csTerminalLogsService;
private final CsLedgerFeignClient csLedgerFeignClient;
@Override
public List<String> queryReplyData() {
List<String> result = new ArrayList<>();
Object object = redisUtil.getObjectByKey(RequestUtil.getUserIndex()+"reply");
if (object != null) {
List<String> redisList = Stream.of(object.toString().split(",")).collect(Collectors.toList());
List<CsTerminalReply> list = this.lambdaQuery().in(CsTerminalReply::getReplyId,redisList).orderByAsc(CsTerminalReply::getCreateTime).list();
if (CollectionUtil.isNotEmpty(list)) {
Map<Integer,List<CsTerminalReply>> map = list.stream().collect(Collectors.groupingBy(CsTerminalReply::getIsReceived));
List<CsTerminalReply> list1 = map.get(1);
if (CollectionUtil.isEmpty(list1)) {
String key = "更新失败,未收到前置应答,请查看应答报文是否发送";
result.add(key);
//将cs_terminal_logs数据置为未发送
list.forEach(item->{
csTerminalLogsService.updateLaterData(item.getDeviceId(),item.getCode());
});
} else {
list.forEach(item->{
String key;
String code = "";
if (Objects.equals(item.getCode(), "add_terminal")) {
code = "新增";
} else if (Objects.equals(item.getCode(), "ledger_modify")) {
code = "修改";
} else if (Objects.equals(item.getCode(), "delete_terminal")){
code = "删除";
}
String nodeName = nodeService.getNodeById(item.getNodeId()).getName();
List<CsEquipmentDeliveryPO> devList1 = csEquipmentDeliveryService.getAll();
List<CsEquipmentDeliveryPO> devList2 = devList1.stream().filter(item1 -> Objects.equals(item1.getId(), item.getDeviceId())).collect(Collectors.toList());
List<String> devNameList = devList2.stream().map(CsEquipmentDeliveryPO::getName).collect(Collectors.toList());
String devNameListString;
if (CollectionUtil.isNotEmpty(devNameList)) {
devNameListString = devNameList.toString();
} else {
devNameListString = "[" + item.getDeviceName() + "]";
}
if (item.getIsReceived() == 0) {
key = nodeName + item.getProcessNo() + "号进程下," + devNameListString + "设备未收到应答";
//将cs_terminal_logs数据置为未发送
csTerminalLogsService.updateLaterData(item.getDeviceId(),item.getCode());
} else if (item.getIsReceived() == 1){
key = nodeName + item.getProcessNo() + "号进程下," + devNameListString + "设备" + code + "数据成功";
} else {
key = nodeName + item.getProcessNo() + "号进程下," + devNameListString + "设备" + code + "数据失败";
}
result.add(key);
});
}
}
}
return result;
}
@Override
public void updateReplyData(IcdBzReplyParam param) {
LambdaUpdateWrapper<CsTerminalReply> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(CsTerminalReply::getIsReceived,param.getState())
.set(CsTerminalReply::getReceivedCode,param.getCode())
.set(CsTerminalReply::getReceivedMsg,param.getMsg())
.eq(CsTerminalReply::getReplyId,param.getId())
.eq(CsTerminalReply::getDeviceId,param.getDeviceId());
this.update(wrapper);
}
@Override
public List<CsTerminalReply> getBzReplyData(String lineId) {
LambdaQueryWrapper<CsTerminalReply> wrapper = new LambdaQueryWrapper<>();
wrapper.in(CsTerminalReply::getCode,Arrays.asList("allFile","allEvent","oneFile"))
.orderByDesc(CsTerminalReply::getCreateTime);
if (!Objects.isNull(lineId) && StringUtils.isNotBlank(lineId)) {
wrapper.like(CsTerminalReply::getLineId,lineId);
}
return this.list(wrapper);
}
@Override
public Page<CldLogsVo> getBzLogs(BaseParam param) {
Page<CldLogsVo> page = new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param));
QueryWrapper<CsTerminalReply> queryWrapper = new QueryWrapper<>();
if (StrUtil.isNotBlank(param.getSearchValue())) {
queryWrapper.like("cs_terminal_reply.line_id", param.getSearchValue());
// //获取监测点id
// List<CsLinePO> list = csLinePOService.getLineByName(param.getSearchValue());
// if (CollectionUtil.isEmpty(list)) {
// return page;
// } else {
// queryWrapper.and(pr -> {
// // 获取所有 lineId
// List<String> lineIds = list.stream()
// .map(CsLinePO::getLineId)
// .collect(Collectors.toList());
// // 使用 OR 条件连接多个 lineId
// for (int i = 0; i < lineIds.size(); i++) {
// if (i == 0) {
// pr.like("cs_terminal_reply.line_id", lineIds.get(i));
// } else {
// pr.or().like("cs_terminal_reply.line_id", lineIds.get(i));
// }
// }
// });
// }
}
//排序
queryWrapper.orderBy(true, false, "cs_terminal_reply.create_time");
queryWrapper.in("cs_terminal_reply.code", Arrays.asList("allFile", "allEvent", "oneFile"));
Page<CsTerminalReply> csTerminalReplyPage = this.baseMapper.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), queryWrapper);
List<CsTerminalReply> records = csTerminalReplyPage.getRecords();
if (CollectionUtil.isNotEmpty(records)) {
List<CsLedgerVO> data = csLedgerFeignClient.getAllLedger().getData();
Map<String, CsLedgerVO> ledgerMap = data.stream().collect(Collectors.toMap(CsLedgerVO::getId, Function.identity()));
List<CldLogsVo> cldLogsVos = new ArrayList<>();
records.forEach(item->{
String pids = ledgerMap.get(item.getDeviceId()).getPids();
String[] split = pids.split(",");
CldLogsVo cldLogsVo = new CldLogsVo();
cldLogsVo.setEngineeringName(ledgerMap.get(split[1]).getName());
cldLogsVo.setProjectName(ledgerMap.get(split[2]).getName());
cldLogsVo.setDeviceName(ledgerMap.get(item.getDeviceId()).getName());
// String lineId = item.getLineId();
// String[] lineSplit = lineId.split(",");
// String result;
// if (lineSplit.length == 1) {
// result = ledgerMap.get(lineSplit[0]).getName();
// } else {
// result = Arrays.stream(lineSplit)
// .map(ledgerMap::get)
// .filter(Objects::nonNull)
// .map(CsLedgerVO::getName)
// .collect(Collectors.joining(","));
// }
// cldLogsVo.setLineName(result);
cldLogsVo.setLineName(ledgerMap.get(param.getSearchValue()).getName());
cldLogsVo.setLog(getLogDescription(item.getCode()));
cldLogsVo.setLogTime(item.getCreateTime());
if (Objects.equals(item.getIsReceived(),0)) {
cldLogsVo.setStatus("补召已下发");
cldLogsVo.setResult("/");
} else {
if (item.getReceivedCode() == 200) {
cldLogsVo.setStatus("补召成功");
cldLogsVo.setResult(item.getReceivedMsg());
} else {
cldLogsVo.setStatus("补召失败");
cldLogsVo.setResult(item.getReceivedMsg());
}
}
cldLogsVos.add(cldLogsVo);
});
page.setRecords(cldLogsVos);
}
page.setTotal(csTerminalReplyPage.getTotal());
page.setPages(csTerminalReplyPage.getPages());
return page;
}
@Override
public void updateBzData(IcdBzReplyParam param) {
LambdaUpdateWrapper<CsTerminalReply> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(CsTerminalReply::getIsReceived,param.getState())
.set(CsTerminalReply::getReceivedCode,param.getCode())
.set(CsTerminalReply::getReceivedMsg,param.getMsg())
.eq(CsTerminalReply::getReplyId,param.getId())
.eq(CsTerminalReply::getDeviceId,param.getDeviceId());
if (Objects.nonNull(param.getLineId()) && StringUtils.isNotBlank(param.getLineId())) {
wrapper.eq(CsTerminalReply::getLineId,param.getLineId());
}
this.update(wrapper);
}
public String getLogDescription(String code) {
String result;
switch (code) {
case "allFile":
result = "补召缺失波形文件";
break;
case "allEvent":
result = "补召事件";
break;
case "oneFile":
result = "补召单事件波形";
break;
default:
result = "未知";
}
return result;
}
}

View File

@@ -0,0 +1,698 @@
package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.access.utils.ChannelObjectUtil;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.mapper.OverlimitMapper;
import com.njcn.csdevice.param.IcdBzParam;
import com.njcn.csdevice.param.IcdLedgerParam;
import com.njcn.csdevice.param.IcdParam;
import com.njcn.csdevice.pojo.param.AppProjectAddParm;
import com.njcn.csdevice.pojo.param.CsEquipmentDeliveryAddParm;
import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.vo.CldLedgerVo;
import com.njcn.csdevice.pojo.vo.DeviceInfo;
import com.njcn.csdevice.service.*;
import com.njcn.csharmonic.api.EventFeignClient;
import com.njcn.csharmonic.pojo.po.CsEventPO;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.biz.utils.COverlimitUtil;
import com.njcn.mq.message.BZEventMessage;
import com.njcn.mq.template.BZEventMessageTemplate;
import com.njcn.redis.pojo.enums.AppRedisKey;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.SysDicTreePO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
class IcdServiceImpl implements IcdService {
private final INodeService nodeService;
private final ChannelObjectUtil channelObjectUtil;
private final RedisUtil redisUtil;
private final CsEngineeringService csEngineeringService;
private final AppProjectService appProjectService;
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
private final CsLinePOService csLinePOService;
private final ICsLedgerService csLedgerService;
private final BZEventMessageTemplate bzEventMessageTemplate;
private final EventFeignClient eventFeignClient;
private final ICsTerminalLogsService csTerminalLogsService;
private final ICsTerminalReplyService csTerminalReplyService;
private final OverlimitMapper overlimitMapper;
private final DateTimeFormatter microsecondFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
@Override
public List<DeviceInfo> getLedgerInfo(IcdParam param) {
//获取装置型号
Map<String,SysDicTreePO> sysDicTreeMap = new HashMap<>();
List<SysDicTreePO> dictTreeList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(AppRedisKey.DICT_TREE),SysDicTreePO.class);
SysDicTreePO po = dictTreeList.stream().filter(item -> Objects.equals(item.getCode(), DicDataEnum.DEV_CLD.getCode())).findFirst().orElse(null);
if (ObjectUtil.isNotNull(po)) {
String id = po.getId();
List<SysDicTreePO> cldDevType = dictTreeList.stream().filter(item->Objects.equals(item.getPid(),id)).collect(Collectors.toList());
sysDicTreeMap = cldDevType.stream().collect(Collectors.toMap(SysDicTreePO::getId, Function.identity()));
}
List<DeviceInfo> result = new ArrayList<>();
//根据ip获取前置机信息
Node node = nodeService.getNodeById(param.getId());
if (ObjectUtil.isNotNull(node)) {
//根据前置机ip获取装置信息
List<CsEquipmentDeliveryPO> poList = csEquipmentDeliveryService.getCldDevByIp(node.getId(),param.getRunFlag());
if (CollectionUtil.isNotEmpty(poList)) {
//获取监测点集合
List<String> devList = poList.stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
List<CsLinePO> lineList = csLinePOService.getLinesByDevList(devList);
Map<String,List<CsLinePO>> lineMap = lineList.stream().collect(Collectors.groupingBy(CsLinePO::getDeviceId));
//组装返回结构体
Map<String, SysDicTreePO> finalSysDicTreeMap = sysDicTreeMap;
poList.forEach(dev->{
DeviceInfo detail = new DeviceInfo();
detail.setId(dev.getId());
detail.setName(dev.getName());
detail.setIp(dev.getMac());
detail.setDevType(Objects.isNull(finalSysDicTreeMap.get(dev.getDevModel())) ? "/":finalSysDicTreeMap.get(dev.getDevModel()).getCode());
detail.setNode(dev.getNodeProcess());
detail.setMaxProcessNum(node.getMaxProcessNum());
// 只获取当前设备的监测点数据
List<CsLinePO> lines = lineMap.get(dev.getId());
if (CollectionUtil.isNotEmpty(lines)) {
List<DeviceInfo.MonitorInfo> monitorInfos = new ArrayList<>();
lines.forEach(line->{
DeviceInfo.MonitorInfo monitorInfo = new DeviceInfo.MonitorInfo();
monitorInfo.setDeviceId(dev.getId());
monitorInfo.setId(line.getLineId());
monitorInfo.setName(line.getName());
monitorInfo.setLineNo(String.valueOf(line.getLineNo()));
monitorInfo.setVoltageLevel(line.getVolGrade() + "kV");
monitorInfo.setStatus(line.getRunStatus());
monitorInfo.setPtType(String.valueOf(line.getConType()));
monitorInfo.setPt1(line.getPtRatio());
monitorInfo.setPt2(line.getPt2Ratio());
monitorInfo.setCt1(line.getCtRatio());
monitorInfo.setCt2(line.getCt2Ratio());
monitorInfos.add(monitorInfo);
});
detail.setMonitorData(monitorInfos);
}
result.add(detail);
});
}
}
return result;
}
@Override
public void addLedgerInfo(IcdLedgerParam param) {
// 第一种:全流程创建
if (isAllIndicesNull(param)) {
handleFullProcessCreation(param);
}
// 第二种:从工程创建
else if (ObjectUtil.isNotNull(param.getEngineeringIndex())) {
handleFromEngineeringCreation(param);
}
// 第三种:从项目创建
else if (ObjectUtil.isNotNull(param.getProjectIndex())) {
handleFromProjectCreation(param);
}
// 第四种:从设备创建
else if (ObjectUtil.isNotNull(param.getDevIndex())) {
handleFromDeviceCreation(param);
}
}
@Override
public CldLedgerVo getLedgerById(String id) {
CldLedgerVo vo = new CldLedgerVo();
CsLedger csLedger = csLedgerService.findDataById(id);
if (ObjectUtil.isNull(csLedger)) {
return vo;
}
Integer level = csLedger.getLevel();
String[] pids = csLedger.getPids().split(StrUtil.COMMA);
// 设置工程信息(所有级别都需要)
setEngineeringInfo(vo, level, pids, id);
// 根据级别设置不同的业务数据
switch (level) {
case 0:
handleLevel0(vo, id);
break;
case 1:
handleLevel1(vo, id, pids);
break;
case 2:
handleLevel2(vo, id, pids);
break;
case 3:
handleLevel3(vo, id, pids);
break;
default:
log.warn("Unknown ledger level: {}", level);
}
return vo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void bzFileByEventId(String eventId) {
CsEventPO po = eventFeignClient.queryById(eventId).getData();
if (ObjectUtil.isNull(po)) {
throw new BusinessException("事件缺失");
}
//获取设备信息
CsEquipmentDeliveryPO dev = csEquipmentDeliveryService.getDevByLineId(po.getLineId());
BZEventMessage.Event file = new BZEventMessage.Event();
file.setGuid(po.getId());
file.setTerminalId(po.getDeviceId());
file.setMonitorIdList(Collections.singletonList(po.getLineId()));
file.setTimeInterval(Collections.singletonList(po.getStartTime().format(microsecondFormatter)));
file.setDataType(2);
//记录发送日志
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
csTerminalLogs.setId(po.getId());
csTerminalLogs.setDeviceId(dev.getId());
csTerminalLogs.setLineId(po.getLineId());
csTerminalLogs.setOperateType(3);
csTerminalLogs.setNodeId(dev.getNodeId());
csTerminalLogs.setNodeProcess(dev.getNodeProcess());
csTerminalLogs.setIsPush(1);
csTerminalLogsService.saveOrUpdate(csTerminalLogs);
//记录响应日志
CsTerminalReply csTerminalReply = new CsTerminalReply();
csTerminalReply.setId(IdUtil.simpleUUID());
csTerminalReply.setReplyId(po.getId());
csTerminalReply.setNodeId(dev.getNodeId());
csTerminalReply.setProcessNo(dev.getNodeProcess());
csTerminalReply.setDeviceId(dev.getId());
csTerminalReply.setLineId(po.getLineId());
csTerminalReply.setIsReceived(0);
csTerminalReply.setCode("oneFile");
csTerminalReplyService.saveOrUpdate(csTerminalReply);
//发送消息
bzEventMessageTemplate.sendMember(Collections.singletonList(file),dev.getNodeId());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void bzEvent(IcdBzParam param) {
// 参数校验
if (StrUtil.isBlank(param.getStartTime()) || StrUtil.isBlank(param.getEndTime())) {
throw new BusinessException("开始时间和结束时间不能为空");
}
LocalDateTime startLocalDate;
LocalDateTime endLocalDate;
try {
startLocalDate = LocalDateTimeUtil.parse(param.getStartTime(), DatePattern.NORM_DATE_PATTERN);
endLocalDate = LocalDateTimeUtil.parse(param.getEndTime(), DatePattern.NORM_DATE_PATTERN);
} catch (Exception e) {
throw new BusinessException("时间格式不正确,请使用 yyyy-MM-dd 格式");
}
String beginDay = LocalDateTimeUtil.format(
LocalDateTimeUtil.beginOfDay(startLocalDate),
DatePattern.NORM_DATETIME_PATTERN
);
String endDay = LocalDateTimeUtil.format(
LocalDateTimeUtil.endOfDay(endLocalDate),
DatePattern.NORM_DATETIME_PATTERN
);
if (CollectionUtil.isNotEmpty(param.getLineList())) {
processWithLineIds(param.getLineList(), beginDay, endDay);
} else {
processWithoutLineIds(beginDay, endDay);
}
}
private void processWithLineIds(List<String> lineList, String beginDay, String endDay) {
List<CsLinePO> csLineList = csLinePOService.listByIds(lineList);
List<String> deviceIdList = csLineList.stream()
.map(CsLinePO::getDeviceId)
.distinct()
.collect(Collectors.toList());
List<CsEquipmentDeliveryPO> equipmentList = csEquipmentDeliveryService.listByIds(deviceIdList);
Map<String, List<CsEquipmentDeliveryPO>> devMap = equipmentList.stream()
.collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
handleEventsAndLogs(devMap, csLineList, beginDay, endDay);
}
private void processWithoutLineIds(String beginDay, String endDay) {
List<CsEquipmentDeliveryPO> devList = csEquipmentDeliveryService.getAllOnline();
if (CollectionUtil.isEmpty(devList)) return;
List<String> deviceIds = devList.stream()
.map(CsEquipmentDeliveryPO::getId)
.collect(Collectors.toList());
List<CsLinePO> csLineList = csLinePOService.getLinesByDevList(deviceIds);
Map<String, List<CsEquipmentDeliveryPO>> devMap = devList.stream()
.collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
handleEventsAndLogs(devMap, csLineList, beginDay, endDay);
}
private void handleEventsAndLogs(
Map<String, List<CsEquipmentDeliveryPO>> devMap,
List<CsLinePO> csLineList,
String beginDay,
String endDay
) {
devMap.forEach((nodeId, devices) -> {
List<BZEventMessage.Event> events = new ArrayList<>();
List<CsTerminalLogs> logsToSave = new ArrayList<>();
List<CsTerminalReply> repliesToSave = new ArrayList<>();
for (CsEquipmentDeliveryPO device : devices) {
String uuid = IdUtil.simpleUUID();
BZEventMessage.Event event = buildEvent(uuid, device, csLineList, beginDay, endDay);
events.add(event);
CsTerminalLogs log = buildTerminalLog(uuid, device, csLineList);
logsToSave.add(log);
List<CsTerminalReply> reply = buildTerminalReply(uuid, device, csLineList);
repliesToSave.addAll(reply);
}
csTerminalLogsService.saveBatch(logsToSave);
csTerminalReplyService.saveBatch(repliesToSave);
bzEventMessageTemplate.sendMember(events, nodeId);
});
}
private BZEventMessage.Event buildEvent(String guid, CsEquipmentDeliveryPO device,
List<CsLinePO> csLineList, String beginDay, String endDay) {
BZEventMessage.Event event = new BZEventMessage.Event();
event.setGuid(guid);
event.setTerminalId(device.getId());
List<String> monitorIds = csLineList.stream()
.filter(line -> Objects.equals(line.getDeviceId(), device.getId()))
.map(CsLinePO::getLineId)
.collect(Collectors.toList());
event.setMonitorIdList(monitorIds);
event.setDataType(1);
event.setTimeInterval(Collections.singletonList(beginDay + "~" + endDay));
return event;
}
private CsTerminalLogs buildTerminalLog(String id, CsEquipmentDeliveryPO device,
List<CsLinePO> csLineList) {
List<String> lineIds = csLineList.stream()
.filter(line -> Objects.equals(line.getDeviceId(), device.getId()))
.map(CsLinePO::getLineId)
.collect(Collectors.toList());
CsTerminalLogs log = new CsTerminalLogs();
log.setId(id);
log.setDeviceId(device.getId());
log.setLineId(String.join(",", lineIds));
log.setOperateType(3);
log.setNodeId(device.getNodeId());
log.setNodeProcess(device.getNodeProcess());
log.setIsPush(1);
return log;
}
private List<CsTerminalReply> buildTerminalReply(String replyId, CsEquipmentDeliveryPO device,
List<CsLinePO> csLineList) {
List<CsTerminalReply> replies = new ArrayList<>();
List<String> lineIds = csLineList.stream()
.filter(line -> Objects.equals(line.getDeviceId(), device.getId()))
.map(CsLinePO::getLineId)
.collect(Collectors.toList());
lineIds.forEach(lineId -> {
CsTerminalReply reply = new CsTerminalReply();
reply.setId(IdUtil.simpleUUID());
reply.setReplyId(replyId);
reply.setNodeId(device.getNodeId());
reply.setProcessNo(device.getNodeProcess());
reply.setDeviceId(device.getId());
reply.setLineId(lineId);
reply.setIsReceived(0);
reply.setCode("allEvent");
replies.add(reply);
});
return replies;
}
// private CsTerminalReply buildTerminalReply(String replyId, CsEquipmentDeliveryPO device,
// List<CsLinePO> csLineList) {
// List<String> lineIds = csLineList.stream()
// .filter(line -> Objects.equals(line.getDeviceId(), device.getId()))
// .map(CsLinePO::getLineId)
// .collect(Collectors.toList());
//
// CsTerminalReply reply = new CsTerminalReply();
// reply.setId(IdUtil.simpleUUID());
// reply.setReplyId(replyId);
// reply.setNodeId(device.getNodeId());
// reply.setProcessNo(device.getNodeProcess());
// reply.setDeviceId(device.getId());
// reply.setLineId(String.join(",", lineIds));
// reply.setIsReceived(0);
// reply.setCode("allEvent");
// return reply;
// }
@Override
@Transactional(rollbackFor = Exception.class)
public void bzFile(IcdBzParam param) {
String beginDay = LocalDateTimeUtil.format(
LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(param.getStartTime(), DatePattern.NORM_DATE_PATTERN)),
DatePattern.NORM_DATETIME_PATTERN
);
String endDay = LocalDateTimeUtil.format(
LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(param.getEndTime(), DatePattern.NORM_DATE_PATTERN)),
DatePattern.NORM_DATETIME_PATTERN
);
// 获取监测点没有波形的事件信息
List<CsEventPO> eventList = eventFeignClient.getEventByTime(param.getLineList(), beginDay, endDay).getData();
if (CollUtil.isEmpty(eventList)) {
return;
}
// 获取装置信息,用于区分不同服务器
List<String> deviceIds = eventList.stream()
.map(CsEventPO::getDeviceId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (CollUtil.isEmpty(deviceIds)) {
return;
}
List<CsEquipmentDeliveryPO> equipmentList = csEquipmentDeliveryService.listByIds(deviceIds);
if (CollUtil.isEmpty(equipmentList)) {
return;
}
Map<String, List<CsEquipmentDeliveryPO>> nodeToDeviceMap = equipmentList.stream()
.collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
// 构建 deviceId -> CsEventPO 映射,避免重复 filter
Map<String, List<CsEventPO>> deviceToEventMap = eventList.stream()
.filter(event -> event.getDeviceId() != null)
.collect(Collectors.groupingBy(CsEventPO::getDeviceId));
nodeToDeviceMap.forEach((nodeId, deviceList) -> {
List<BZEventMessage.Event> msgList = new ArrayList<>();
List<CsTerminalLogs> logList = new ArrayList<>();
List<CsTerminalReply> replyList = new ArrayList<>();
for (CsEquipmentDeliveryPO device : deviceList) {
String deviceId = device.getId();
List<CsEventPO> eventsForDevice = deviceToEventMap.getOrDefault(deviceId, Collections.emptyList());
Map<String, List<CsEventPO>> lineToEventMap = eventsForDevice.stream()
.filter(event -> event.getLineId() != null)
.collect(Collectors.groupingBy(CsEventPO::getLineId));
lineToEventMap.forEach((lineId, eventGroup) -> {
BZEventMessage.Event event = new BZEventMessage.Event();
String guid = IdUtil.simpleUUID();
event.setGuid(guid);
event.setTerminalId(deviceId);
event.setMonitorIdList(Collections.singletonList(lineId));
event.setDataType(2);
List<String> timeList = eventGroup.stream()
.map(CsEventPO::getStartTime)
.filter(Objects::nonNull)
.map(dt -> dt.format(microsecondFormatter))
.collect(Collectors.toList());
event.setTimeInterval(timeList);
msgList.add(event);
// 记录发送日志
CsTerminalLogs log = new CsTerminalLogs();
log.setId(guid);
log.setDeviceId(deviceId);
log.setLineId(lineId);
log.setOperateType(3);
log.setNodeId(device.getNodeId());
log.setNodeProcess(device.getNodeProcess());
log.setIsPush(1);
logList.add(log);
// 记录响应日志
CsTerminalReply reply = new CsTerminalReply();
reply.setId(IdUtil.simpleUUID());
reply.setReplyId(guid);
reply.setNodeId(device.getNodeId());
reply.setProcessNo(device.getNodeProcess());
reply.setDeviceId(deviceId);
reply.setLineId(lineId);
reply.setIsReceived(0);
reply.setCode("allFile");
replyList.add(reply);
});
}
if (CollUtil.isNotEmpty(logList)) {
csTerminalLogsService.saveBatch(logList);
}
if (CollUtil.isNotEmpty(replyList)) {
csTerminalReplyService.saveBatch(replyList);
}
if (CollUtil.isNotEmpty(msgList)) {
bzEventMessageTemplate.sendMember(msgList, nodeId);
}
});
}
/**
* 设置工程信息
*/
private void setEngineeringInfo(CldLedgerVo vo, Integer level, String[] pids, String id) {
String engineeringId;
if (level == 0) {
// 0级本身就是工程
engineeringId = id;
} else if (level >= 1 && pids.length > 1) {
// 1-3级的工程ID在pids[1]位置
engineeringId = pids[1];
} else {
return;
}
CsEngineeringPO po = csEngineeringService.queryEngineeringById(engineeringId);
if (po != null) {
vo.setEngineeringId(po.getId());
vo.setEngineeringName(po.getName());
vo.setProvince(po.getProvince());
vo.setCity(po.getCity());
vo.setEngineeringDescription(po.getDescription());
}
}
/**
* 处理0级数据工程级别
*/
private void handleLevel0(CldLedgerVo vo, String id) {
List<AppProjectPO> projectInfoList = appProjectService.getProjectByEngineering(Collections.singletonList(id));
vo.setProjectInfoList(projectInfoList);
}
/**
* 处理1级数据项目级别
*/
private void handleLevel1(CldLedgerVo vo, String id, String[] pids) {
// 设置项目信息
List<AppProjectPO> appProjectPOS = appProjectService.listByIds(Collections.singletonList(id));
vo.setProjectInfoList(appProjectPOS);
// 设置设备信息
List<CsEquipmentDeliveryPO> devList = csEquipmentDeliveryService.getDevListByProjectId(id);
if (CollectionUtil.isNotEmpty(devList)) {
vo.setDeviceInfoList(devList);
}
}
/**
* 处理2级数据设备级别
*/
private void handleLevel2(CldLedgerVo vo, String id, String[] pids) {
// 设置项目信息项目ID在pids[2]位置)
if (pids.length > 2) {
String projectId = pids[2];
List<AppProjectPO> project = appProjectService.listByIds(Collections.singletonList(projectId));
vo.setProjectInfoList(project);
}
// 设置设备信息
List<CsEquipmentDeliveryPO> csEquipmentDeliveryPOS = csEquipmentDeliveryService.listByIds(Collections.singletonList(id));
vo.setDeviceInfoList(csEquipmentDeliveryPOS);
// 设置线路信息
List<CsLinePO> list = csLinePOService.queryByDevId(id);
vo.setLineInfoList(list);
}
/**
* 处理3级数据线路级别
*/
private void handleLevel3(CldLedgerVo vo, String id, String[] pids) {
// 设置项目信息项目ID在pids[2]位置)
if (pids.length > 2) {
String projectId = pids[2];
List<AppProjectPO> appProjectPOS = appProjectService.listByIds(Collections.singletonList(projectId));
vo.setProjectInfoList(appProjectPOS);
}
// 设置设备信息设备ID在pids[3]位置)
if (pids.length > 3) {
String deviceId = pids[3];
List<CsEquipmentDeliveryPO> csEquipmentDeliveryPOS = csEquipmentDeliveryService.listByIds(Collections.singletonList(deviceId));
vo.setDeviceInfoList(csEquipmentDeliveryPOS);
}
// 设置线路信息
List<CsLinePO> line = csLinePOService.listByIds(Collections.singletonList(id));
vo.setLineInfoList(line);
}
private boolean isAllIndicesNull(IcdLedgerParam param) {
return ObjectUtil.isNull(param.getEngineeringIndex())
&& ObjectUtil.isNull(param.getProjectIndex())
&& ObjectUtil.isNull(param.getDevIndex());
}
@Transactional(rollbackFor = Exception.class)
public void handleFullProcessCreation(@NotNull IcdLedgerParam param) {
if (ObjectUtil.isNotNull(param.getEngineering())) {
CsEngineeringPO po1 = csEngineeringService.addEngineering(param.getEngineering());
param.setEngineeringIndex(po1.getId());
createProjectAndDevices(param);
}
}
@Transactional(rollbackFor = Exception.class)
public void handleFromEngineeringCreation(IcdLedgerParam param) {
createProjectAndDevices(param);
}
@Transactional(rollbackFor = Exception.class)
public void handleFromProjectCreation(IcdLedgerParam param) {
saveDevicesAndLines(param);
}
@Transactional(rollbackFor = Exception.class)
public void handleFromDeviceCreation(IcdLedgerParam param) {
saveLines(param);
}
private void createProjectAndDevices(IcdLedgerParam param) {
AppProjectAddParm project = param.getProject();
if (ObjectUtil.isNotNull(project)) {
project.setEngineeringId(param.getEngineeringIndex());
project.setIcdEngineeringId(param.getEngineeringIndex());
AppProjectPO po2 = appProjectService.addAppProject(project);
param.setProjectIndex(po2.getId());
}
saveDevicesAndLines(param);
}
private void saveDevicesAndLines(IcdLedgerParam param) {
List<CsEquipmentDeliveryAddParm> devList = param.getDevice();
if (CollectionUtil.isNotEmpty(devList)) {
Map<String,String> devMacMap = new HashMap<>();
Map<String, CsEquipmentDeliveryPO> devMap = new HashMap<>();
for (CsEquipmentDeliveryAddParm dev : devList) {
dev.setEngineeringId(param.getEngineeringIndex());
dev.setProjectId(param.getProjectIndex());
CsEquipmentDeliveryPO po3 = csEquipmentDeliveryService.saveCld(dev);
devMacMap.put(dev.getMac(),po3.getId());
devMap.put(dev.getMac(),po3);
}
param.setDevMacMap(devMacMap);
param.setDevMap(devMap);
}
saveLines(param);
}
@Transactional(rollbackFor = Exception.class)
public void saveLines(IcdLedgerParam param) {
List<CsLineParam> lineList = param.getLine();
if (CollectionUtil.isNotEmpty(lineList)) {
boolean result = checkAndAlertDuplicates(lineList);
if (result) {
throw new BusinessException("监测点线路号重复,请调整!");
}
for (CsLineParam line : lineList) {
line.setEngineeringId(param.getEngineeringIndex());
line.setProjectId(param.getProjectIndex());
if (Objects.isNull(param.getDevIndex())) {
line.setDevId(param.getDevMacMap().get(line.getDevMac()));
} else {
LambdaQueryWrapper<CsLinePO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CsLinePO::getDeviceId,param.getDevIndex()).eq(CsLinePO::getLineNo,line.getLineNo()).eq(CsLinePO::getStatus,1);
CsLinePO po4 = csLinePOService.getOne(wrapper);
if (ObjectUtil.isNotNull(po4)) {
throw new BusinessException("监测点线路号重复,请调整!");
}
line.setDevId(param.getDevIndex());
}
CsLinePO po = csLinePOService.addCldLine(line);
//新增监测点限值
Overlimit overlimit = COverlimitUtil.globalAssemble(line.getVolGrade().floatValue(), line.getProtocolCapacity().floatValue(),line.getDevCapacity().floatValue(),line.getShortCircuitCapacity().floatValue(),0,0);
overlimit.setId(po.getLineId());
overlimitMapper.insert(overlimit);
}
//新增台账日志
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
if (ObjectUtil.isNotNull(param.getDevIndex()) && StringUtil.isNotBlank(param.getDevIndex())) {
csTerminalLogs.setDeviceId(param.getDevIndex());
} else {
csTerminalLogs.setDeviceId(param.getDevMacMap().get(lineList.get(0).getDevMac()));
}
csTerminalLogs.setOperateType(0);
csTerminalLogs.setIsPush(0);
csTerminalLogsService.save(csTerminalLogs);
}
}
//判断相同设备不能存在相同的线路号监测点
public boolean checkAndAlertDuplicates(List<CsLineParam> devices) {
// 使用Set来记录已经出现过的devMac+clDid组合
Set<String> seenCombinations = new HashSet<>();
List<CsLineParam> duplicates = new ArrayList<>();
for (CsLineParam device : devices) {
String combination = device.getDevMac() + "-" + device.getLineNo();
if (seenCombinations.contains(combination)) {
// 发现重复,添加到重复列表
duplicates.add(device);
} else {
seenCombinations.add(combination);
}
}
return !duplicates.isEmpty();
}
}

Some files were not shown because too many files have changed in this diff Show More