检测计划相关功能代码

This commit is contained in:
caozehui
2025-07-18 10:04:43 +08:00
parent c9ac33864a
commit 55793dcecd
32 changed files with 1150 additions and 328 deletions

View File

@@ -47,6 +47,7 @@ public class PreDetectionController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
/**
* 程控源-源通讯校验
*

View File

@@ -10,9 +10,11 @@ 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.common.utils.LogUtil;
import com.njcn.gather.device.pojo.enums.CommonEnum;
import com.njcn.gather.device.pojo.param.PqDevParam;
import com.njcn.gather.device.pojo.vo.PqDevVO;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.type.pojo.po.DevType;
import com.njcn.gather.type.service.IDevTypeService;
import com.njcn.web.controller.BaseController;
@@ -138,14 +140,17 @@ public class PqDevController extends BaseController {
@ApiImplicitParam(name = "file", value = "被检设备数据文件", required = true),
@ApiImplicitParam(name = "patternId", value = "模式id", required = true)
})
public HttpResult<Boolean> importDev(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, HttpServletResponse response) {
public HttpResult<Boolean> importDev(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, @RequestParam("planId") String planId, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("importDev");
LogUtil.njcnDebug(log, "{},上传文件为:{}", methodDescribe, file.getOriginalFilename());
boolean fileType = FileUtil.judgeFileIsExcel(file.getOriginalFilename());
if (!fileType) {
throw new BusinessException(CommonResponseEnum.FILE_XLSX_ERROR);
}
Boolean result = pqDevService.importDev(file, patternId, null, response);
if("null".equals(planId)){
planId = null;
}
Boolean result = pqDevService.importDev(file, patternId, planId, response);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
@@ -164,21 +169,12 @@ public class PqDevController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/listByPlanId")
@ApiOperation("查询出所有已绑定的设备")
@ApiImplicitParam(name = "planId", value = "计划id", required = true)
public HttpResult<List<PqDevVO>> listByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) {
String methodDescribe = getMethodDescribe("listByPlanId");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param);
List<PqDevVO> pqDevVOList = pqDevService.listByPlanId(param);
pqDevVOList.forEach(pqDevVO -> {
DevType devType = devTypeService.getById(pqDevVO.getDevType());
if (ObjectUtil.isNotNull(devType)) {
pqDevVO.setDevChns(devType.getDevChns());
}
});
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, methodDescribe);
@OperateInfo
@GetMapping("/getSelectOptions")
@ApiOperation("根据历史记录信息来获取下拉框内容")
public HttpResult<Map<String, List<String>>> getSelectOptions(@RequestParam("pattern") String pattern) {
String methodDescribe = getMethodDescribe("getSelectOptions");
Map<String, List<String>> result = pqDevService.listSelectOptions(pattern);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
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.DataStateEnum;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
@@ -138,5 +139,27 @@ public class PqStandardDevController extends BaseController {
pqStandardDevService.importData(file, response);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo
@GetMapping("/getAll")
@ApiOperation("获取所有标准设备")
public HttpResult<List<PqStandardDev>> getAll() {
String methodDescribe = getMethodDescribe("getAll");
LogUtil.njcnDebug(log, "{},查询所有数据", methodDescribe);
List<PqStandardDev> result = pqStandardDevService.lambdaQuery().eq(PqStandardDev::getState, DataStateEnum.ENABLE.getCode()).list();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/listByPlanId")
@ApiOperation("查询出指定计划已关联的标准设备")
@ApiImplicitParam(name = "planId", value = "计划id", required = true)
public HttpResult<List<PqStandardDev>> listByPlanId(@RequestParam("planId") String planId) {
String methodDescribe = getMethodDescribe("listByPlanId");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, planId);
List<PqStandardDev> pqDevVOList = pqStandardDevService.listByPlanId(planId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, methodDescribe);
}
}

View File

@@ -85,8 +85,11 @@
left JOIN pq_dev_sub dev_sub ON dev.Id = dev_sub.Dev_Id
<where>
dev.state = 1
<if test="planId!= null and planId!= ''">
AND dev.Plan_Id = #{planId}
<if test="planIdList!= null and planIdList.size!=0">
AND dev.Plan_Id in
<foreach collection="planIdList" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="name!= null and name!= ''">
AND dev.Name LIKE CONCAT('%',#{name},'%')

View File

@@ -166,7 +166,7 @@ public class PqDevParam {
private String manufacturer;
@ApiModelProperty("检测计划ID")
private String planId;
private List<String> planIdList;
@ApiModelProperty("检测状态列表")
private List<
@@ -191,6 +191,12 @@ public class PqDevParam {
@ApiModelProperty("所属电站名称")
private String subName;
@ApiModelProperty("地市")
private String region;
@ApiModelProperty("是否分配")
private Integer assign;
}
@Data
@@ -213,6 +219,6 @@ public class PqDevParam {
@ApiModelProperty("被检设备ID列表")
@NotNull(message = DetectionValidMessage.PQ_DEV_IDS_NOT_NULL)
private List<String> pqDevIds;
private List<String> devIds;
}
}

View File

@@ -6,7 +6,6 @@ import com.njcn.common.pojo.constant.PatternRegex;
import com.njcn.gather.monitor.pojo.vo.PqMonitorExcel;
import com.njcn.gather.pojo.constant.DetectionValidMessage;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
@@ -23,86 +22,79 @@ import java.util.List;
@Data
public class ContrastDevExcel implements Serializable {
@Excel(name = "所属地市*", width = 30, orderNum = "1")
private String id;
@Excel(name = "所属地市*", width = 30, needMerge = true, orderNum = "1")
private String cityName;
@Excel(name = "所属供电公司*", width = 30, orderNum = "2")
@Excel(name = "所属供电公司*", width = 30, needMerge = true, orderNum = "2")
private String gdName;
@Excel(name = "所属电站*", width = 30, orderNum = "3")
@Excel(name = "所属电站*", width = 30, needMerge = true, orderNum = "3")
private String subName;
@Excel(name = "设备名称*", width = 20, orderNum = "4")
@Excel(name = "设备名称*", width = 20, needMerge = true, orderNum = "4")
@NotBlank(message = DetectionValidMessage.NAME_NOT_BLANK)
@Pattern(regexp = PatternRegex.DEV_NAME_REGEX, message = DetectionValidMessage.NAME_FORMAT_ERROR)
private String name;
@Excel(name = "设备类型*", width = 20, orderNum = "6")
@Excel(name = "设备序列号*", width = 20, needMerge = true, orderNum = "5")
@NotBlank(message = DetectionValidMessage.FACTORYNO_NOT_BLANK)
private String createId;
@Excel(name = "设备类型*", width = 20, needMerge = true, orderNum = "6")
@NotBlank(message = DetectionValidMessage.DEV_TYPE_NOT_BLANK)
private String devType;
@Excel(name = "设备厂家*", width = 20, orderNum = "7")
@Excel(name = "设备厂家*", width = 20, needMerge = true, orderNum = "7")
@NotBlank(message = DetectionValidMessage.MANUFACTURER_NOT_BLANK)
private String manufacturer;
@Excel(name = "通讯协议*", width = 15, orderNum = "11")
@Excel(name = "被检通道", width = 20, needMerge = true, orderNum = "8")
private String inspectChannel;
@Excel(name = "固件版本", width = 15, needMerge = true, orderNum = "9")
private String hardwareVersion;
@Excel(name = "软件版本", width = 15, needMerge = true, orderNum = "10")
private String softwareVersion;
@Excel(name = "通讯协议*", width = 15, needMerge = true, orderNum = "11")
@NotBlank(message = DetectionValidMessage.PROTOCOL_NOT_BLANK)
private String protocol;
@Excel(name = "是否加密*", width = 20, replace = {"否_0", "是_1"}, orderNum = "12")
@Excel(name = "是否加密*", width = 20, needMerge = true, replace = {"否_0", "是_1"}, orderNum = "12")
@NotNull(message = DetectionValidMessage.ENCRYPTION_NOT_NULL)
private Integer encryptionFlag;
@Excel(name = "识别码(当加密时必填)", width = 30, orderNum = "13")
@Excel(name = "识别码(当加密时必填)", width = 30, needMerge = true, orderNum = "13")
private String series;
@Excel(name = "秘钥(当加密时必填)", width = 30, orderNum = "14")
@Excel(name = "秘钥(当加密时必填)", width = 30, needMerge = true, orderNum = "14")
private String devKey;
@Excel(name = "IP地址*", width = 20, orderNum = "15")
@Excel(name = "IP地址*", width = 20, needMerge = true, orderNum = "15")
@NotBlank(message = DetectionValidMessage.IP_NOT_BLANK)
@Pattern(regexp = PatternRegex.IP_REGEX, message = DetectionValidMessage.IP_FORMAT_ERROR)
private String ip;
@Excel(name = "端口号*", width = 15, orderNum = "16")
@Excel(name = "端口号*", width = 15, needMerge = true, orderNum = "16")
@NotNull(message = DetectionValidMessage.PORT_NOT_NULL)
@Range(min = 1, max = 65535, message = DetectionValidMessage.PORT_RANGE_ERROR)
private Integer port;
@Excel(name = "投运日期yyyy-MM-dd*", width = 30, orderNum = "17", format = "yyyy-MM-dd")
@Excel(name = "投运日期yyyy-MM-dd*", width = 30, needMerge = true, orderNum = "17", format = "yyyy-MM-dd")
@NotNull(message = DetectionValidMessage.CREATE_DATE_NOT_NULL)
private LocalDate createDate;
@Excel(name = "定检日期yyyy-MM-dd*", width = 30, orderNum = "18", format = "yyyy-MM-dd")
@Excel(name = "定检日期yyyy-MM-dd*", width = 30, needMerge = true, orderNum = "18", format = "yyyy-MM-dd")
@NotNull(message = DetectionValidMessage.INSPECT_DATE_NOT_NULL)
private LocalDate inspectDate;
@Excel(name = "谐波系统设备id*", width = 30, orderNum = "19")
@Excel(name = "谐波系统设备id*", width = 30, needMerge = true, orderNum = "19")
@NotBlank(message = DetectionValidMessage.HARM_SYS_ID_NOT_BLANK)
private String harmSysId;
@Data
@EqualsAndHashCode(callSuper = true)
public static class ImportExcel extends ContrastDevExcel {
@ExcelCollection(name = "监测点信息", orderNum = "22")
private List<PqMonitorExcel> pqMonitorExcelList;
}
@Data
@EqualsAndHashCode(callSuper = true)
public static class ExportExcel extends ContrastDevExcel {
@Excel(name = "设备序列号*", width = 20, orderNum = "5")
@NotBlank(message = DetectionValidMessage.FACTORYNO_NOT_BLANK)
private String createId;
@Excel(name = "被检通道", width = 20, orderNum = "8")
private String inspectChannel;
@Excel(name = "固件版本", width = 15, orderNum = "9")
private String hardwareVersion;
@Excel(name = "软件版本", width = 15, orderNum = "10")
private String softwareVersion;
}
@ExcelCollection(name = "监测点信息", orderNum = "22")
private List<PqMonitorExcel> pqMonitorExcelList;
}

View File

@@ -101,4 +101,14 @@ public class PqDevVO extends PqDev {
* 相对湿度
*/
private Float humidity;
/**
* 绑定的计划名称
*/
private String boundPlanName;
/**
* 是否已经分配。0-未分配、1-已分配、2-所有
*/
private Integer assign;
}

View File

@@ -254,14 +254,29 @@ public interface IPqDevService extends IService<PqDev> {
* @param contrastDevExcelList
* @param patternId
*/
boolean importContrastDev(List<ContrastDevExcel.ImportExcel> contrastDevExcelList, String patternId);
boolean importContrastDev(List<ContrastDevExcel> contrastDevExcelList, String patternId, String planId);
/**
* 获取比对式设备导出、导出文件模板的下拉列表
*
* @param startCol
* @param isExport 是否是导出模板
* @return
*/
List<PullDown> getContrastDevPullDownList(int startCol, boolean isExport);
List<PullDown> getContrastDevPullDownList(int startCol);
/**
* 根据历史记录来获取下拉框内容
*
* @param pattern
* @return
*/
Map<String, List<String>> listSelectOptions(String pattern);
/**
* 获取比对式设备导出数据
*
* @param pqDevVOList 设备id列表
* @return
*/
List<ContrastDevExcel> getExportContrastDevData(List<PqDevVO> pqDevVOList);
}

View File

@@ -2,6 +2,7 @@ package com.njcn.gather.device.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.device.pojo.param.PqDevParam;
import com.njcn.gather.device.pojo.param.PqStandardDevParam;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import org.springframework.web.multipart.MultipartFile;
@@ -75,4 +76,12 @@ public interface IPqStandardDevService extends IService<PqStandardDev> {
* @return
*/
void importData(MultipartFile file, HttpServletResponse response);
/**
* 查询出指定计划以关联的标准设备列表
*
* @param planId
* @return
*/
List<PqStandardDev> listByPlanId(String planId);
}

View File

@@ -8,6 +8,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -30,9 +31,9 @@ import com.njcn.gather.device.pojo.vo.*;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.device.service.IPqDevSubService;
import com.njcn.gather.monitor.pojo.po.PqMonitor;
import com.njcn.gather.monitor.pojo.vo.PqMonitorExcel;
import com.njcn.gather.monitor.service.IPqMonitorService;
import com.njcn.gather.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.storage.mapper.TableGenMapper;
import com.njcn.gather.storage.service.DetectionDataDealService;
import com.njcn.gather.system.cfg.pojo.enums.SceneEnum;
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
@@ -78,7 +79,6 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
private final IDictTypeService dictTypeService;
private final ISysUserService userService;
private final IPqDevSubService pqDevSubService;
private final TableGenMapper tableGenMapper;
@Override
public Page<PqDevVO> listPqDevs(PqDevParam.QueryParam queryParam) {
@@ -97,6 +97,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
page2.getRecords().forEach(p -> {
DevType devType = devTypeService.getById(p.getDevType());
if (ObjectUtil.isNotNull(devType)) {
p.setDevType(devType.getName());
p.setDevChns(devType.getDevChns());
p.setDevVolt(devType.getDevVolt());
p.setDevCurr(devType.getDevCurr());
@@ -274,7 +275,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
@Override
public List<PqDevVO> listByPlanId(PqDevParam.QueryParam param) {
if (StrUtil.isBlank(param.getPlanId())) {
if (CollUtil.isEmpty(param.getPlanIdList())) {
return Collections.emptyList();
}
List<PqDevVO> pqDevList = this.baseMapper.selectByQueryParam(param);
@@ -381,7 +382,15 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
.eq(StrUtil.isNotBlank(queryParam.getCityName()), "pq_dev.City_Name", queryParam.getCityName())
.eq(StrUtil.isNotBlank(queryParam.getGdName()), "pq_dev.Gd_Name", queryParam.getGdName())
.eq(StrUtil.isNotBlank(queryParam.getSubName()), "pq_dev.Sub_Name", queryParam.getSubName())
.in(CollectionUtil.isNotEmpty(queryParam.getPlanIdList()), "pq_dev.Plan_Id", queryParam.getPlanIdList())
.isNotNull(DataStateEnum.ENABLE.getCode().equals(queryParam.getAssign()), "pq_dev.Plan_Id")
.isNull(DataStateEnum.DELETED.getCode().equals(queryParam.getAssign()), "pq_dev.Plan_Id")
.between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime());
if (StrUtil.isNotBlank(queryParam.getRegion())) {
queryWrapper.and(w -> w.like(StrUtil.isNotBlank(queryParam.getRegion()), "pq_dev.City_Name", queryParam.getRegion())
.or().like(StrUtil.isNotBlank(queryParam.getRegion()), "pq_dev.Gd_Name", queryParam.getRegion())
.or().like(StrUtil.isNotBlank(queryParam.getRegion()), "pq_dev.Sub_Name", queryParam.getRegion()));
}
//排序
if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) {
queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy()));
@@ -460,7 +469,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
pqDevSubService.update(wrapper);
PqDevParam.QueryParam param = new PqDevParam.QueryParam();
param.setPlanId(pqDevVo.getPlanId());
param.setPlanIdList(Arrays.asList(pqDevVo.getPlanId()));
List<PqDevVO> pqDevVOList = this.baseMapper.selectByQueryParam(param);
if (CollUtil.isNotEmpty(pqDevVOList)) {
Set<Integer> set = pqDevVOList.stream().map(PqDevVO::getCheckResult).collect(Collectors.toSet());
@@ -505,7 +514,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
public long countUnReportDev(String planId) {
// 查询该计划下所有设备的检测状态,是否有未生成的
PqDevParam.QueryParam param = new PqDevParam.QueryParam();
param.setPlanId(planId);
param.setPlanIdList(Arrays.asList(planId));
List<PqDevVO> devVOList = this.baseMapper.selectByQueryParam(param);
long count = devVOList.stream().filter(obj -> !DevReportStateEnum.GENERATED.getValue().equals(obj.getReportState())).count();
return count;
@@ -544,7 +553,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
public void downloadTemplate(String patternId) {
DictData dictData = dictDataService.getDictDataById(patternId);
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 2, this.getContrastDevPullDownList(0, false), ContrastDevExcel.ImportExcel.class, new ArrayList<>());
ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 2, this.getContrastDevPullDownList(0), ContrastDevExcel.class, new ArrayList<>());
} else {
String currrentScene = sysTestConfigService.getCurrrentScene();
SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene);
@@ -946,12 +955,9 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
pqDevVOList.addAll(this.baseMapper.listByDevIds(idList));
}
List<ContrastDevExcel.ExportExcel> contrastDevExcels = null;
if (ObjectUtil.isNotEmpty(pqDevVOList)) {
this.visualizeProvinceDev(pqDevVOList);
contrastDevExcels = BeanUtil.copyToList(pqDevVOList, ContrastDevExcel.ExportExcel.class);
}
ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备导出数据.xlsx", 1, this.getContrastDevPullDownList(0, true), ContrastDevExcel.ExportExcel.class, ObjectUtil.isEmpty(contrastDevExcels) ? new ArrayList<>() : contrastDevExcels);
List<ContrastDevExcel> contrastDevExcelList = this.getExportContrastDevData(pqDevVOList);
ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备导出数据.xlsx", 2, this.getContrastDevPullDownList(0), ContrastDevExcel.class, ObjectUtil.isEmpty(contrastDevExcelList) ? new ArrayList<>() : contrastDevExcelList);
}
/**
@@ -1112,9 +1118,9 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
params.setNeedVerify(true);
params.setHeadRows(2);
List<ContrastDevExcel.ImportExcel> contrastDevExcelList = null;
List<ContrastDevExcel> contrastDevExcelList = null;
try {
ExcelImportResult<ContrastDevExcel.ImportExcel> excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), ContrastDevExcel.ImportExcel.class, params);
ExcelImportResult<ContrastDevExcel> excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), ContrastDevExcel.class, params);
if (excelImportResult.isVerifyFail()) {
// 此处前端要做特殊处理,具体可以参考技术监督的数据导入
Workbook failWorkbook = excelImportResult.getFailWorkbook();
@@ -1125,12 +1131,12 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
} catch (Exception e) {
throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL);
}
return this.importContrastDev(contrastDevExcelList, patternId);
return this.importContrastDev(contrastDevExcelList, patternId, planId);
}
@Override
@Transactional
public boolean importContrastDev(List<ContrastDevExcel.ImportExcel> contrastDevExcelList, String patternId) {
public boolean importContrastDev(List<ContrastDevExcel> contrastDevExcelList, String patternId, String planId) {
if (CollUtil.isNotEmpty(contrastDevExcelList)) {
List<PqMonitor> monitorList = new ArrayList<>();
List<PqDev> oldDevList = contrastDevExcelList.stream().map(devExcel -> {
@@ -1199,6 +1205,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
&& (dev.getName().equals(pqDev.getName()) || dev.getCreateId().equals(pqDev.getCreateId())))
.count();
if (count == 0) {
pqDev.setPlanId(planId);
newDevList.add(pqDev);
}
});
@@ -1211,7 +1218,9 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
PqDev newDev = newDevList.stream().filter(dev -> dev.getHarmSysId().equals(oldDev.getHarmSysId())).findFirst().orElse(null);
if (ObjectUtil.isNotNull(newDev)) {
newDevList.remove(newDev);
monitorList.removeIf(monitor -> monitor.getDevId().equals(newDev.getId()));
monitorList.stream()
.filter(monitor -> monitor.getDevId().equals(newDev.getId()))
.forEach(monitor -> monitor.setDevId(oldDev.getId()));
BeanUtil.copyProperties(newDev, oldDev, "id");
}
});
@@ -1231,21 +1240,13 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
}
pqDevSubService.saveBatch(pqDevSubList);
List<String> devIdList = oldDevList1.stream().map(PqDev::getId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(devIdList)) {
QueryWrapper<PqMonitor> wrapper = new QueryWrapper<PqMonitor>()
.in("pq_monitor.Dev_Id", devIdList);
pqMonitorService.remove(wrapper);
}
monitorList.forEach(monitor -> {
DictData dictData = dictDataService.getDictDataByName(monitor.getConnection());
if (ObjectUtil.isNotNull(dictData)) {
monitor.setConnection(dictData.getId());
} else {
throw new BusinessException(DetectionResponseEnum.CONNECTION_NOT_EXIST);
}
});
pqMonitorService.reverseVisualizeMonitor(monitorList);
pqMonitorService.saveBatch(monitorList);
return true;
}
@@ -1253,7 +1254,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
}
@Override
public List<PullDown> getContrastDevPullDownList(int startCol, boolean isExport) {
public List<PullDown> getContrastDevPullDownList(int startCol) {
List<PullDown> pullDowns = new ArrayList<>();
List<DictData> dictDataList = null;
PullDown pullDown = null;
@@ -1261,13 +1262,10 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
// 设备类型
List<DevType> devTypeList = devTypeService.listAll();
pullDown = new PullDown();
if (isExport) {
pullDown.setFirstCol(startCol + 5);
pullDown.setLastCol(startCol + 5);
} else {
pullDown.setFirstCol(startCol + 4);
pullDown.setLastCol(startCol + 4);
}
pullDown.setFirstCol(startCol + 5);
pullDown.setLastCol(startCol + 5);
pullDown.setStrings(devTypeList.stream().map(DevType::getName).collect(Collectors.toList()));
pullDowns.add(pullDown);
@@ -1277,13 +1275,9 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
dictDataList = dictDataService.getDictDataByTypeId(dictType.getId());
pullDown = new PullDown();
if (isExport) {
pullDown.setFirstCol(startCol + 6);
pullDown.setLastCol(startCol + 6);
} else {
pullDown.setFirstCol(startCol + 5);
pullDown.setLastCol(startCol + 5);
}
pullDown.setFirstCol(startCol + 6);
pullDown.setLastCol(startCol + 6);
pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList()));
pullDowns.add(pullDown);
}
@@ -1294,13 +1288,8 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
dictDataList = dictDataService.getDictDataByTypeId(dictType.getId());
pullDown = new PullDown();
if (isExport) {
pullDown.setFirstCol(startCol + 10);
pullDown.setLastCol(startCol + 10);
} else {
pullDown.setFirstCol(startCol + 6);
pullDown.setLastCol(startCol + 6);
}
pullDown.setFirstCol(startCol + 10);
pullDown.setLastCol(startCol + 10);
pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList()));
pullDowns.add(pullDown);
@@ -1308,29 +1297,23 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
// 是否加密
pullDown = new PullDown();
if (isExport) {
pullDown.setFirstCol(startCol + 11);
pullDown.setLastCol(startCol + 11);
} else {
pullDown.setFirstCol(startCol + 7);
pullDown.setLastCol(startCol + 7);
}
pullDown.setFirstCol(startCol + 11);
pullDown.setLastCol(startCol + 11);
pullDown.setStrings(Arrays.asList("", ""));
pullDowns.add(pullDown);
// 接线方式
if (!isExport) {
dictType = dictTypeService.getByCode("Dev_Connect");
if (ObjectUtil.isNotNull(dictType)) {
dictDataList = dictDataService.getDictDataByTypeId(dictType.getId());
dictType = dictTypeService.getByCode("Dev_Connect");
if (ObjectUtil.isNotNull(dictType)) {
dictDataList = dictDataService.getDictDataByTypeId(dictType.getId());
pullDown = new PullDown();
pullDown.setFirstCol(startCol + 25);
pullDown.setLastCol(startCol + 25);
pullDown = new PullDown();
pullDown.setFirstCol(startCol + 21);
pullDown.setLastCol(startCol + 21);
pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList()));
pullDowns.add(pullDown);
}
pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList()));
pullDowns.add(pullDown);
}
return pullDowns;
@@ -1389,4 +1372,47 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
pqDev.setState(DataStateEnum.ENABLE.getCode());
});
}
@Override
public List<ContrastDevExcel> getExportContrastDevData(List<PqDevVO> pqDevVOList) {
List<ContrastDevExcel> contrastDevExcels = new ArrayList<>();
if (ObjectUtil.isNotEmpty(pqDevVOList)) {
this.visualizeProvinceDev(pqDevVOList);
contrastDevExcels.addAll(BeanUtil.copyToList(pqDevVOList, ContrastDevExcel.class));
contrastDevExcels.forEach(contrastDevExcel -> {
List<PqMonitor> monitorList = pqMonitorService.listPqMonitorByDevId(contrastDevExcel.getId());
pqMonitorService.visualizeMonitor(monitorList);
List<PqMonitorExcel> pqMonitorExcelList = BeanUtil.copyToList(monitorList, PqMonitorExcel.class);
contrastDevExcel.setPqMonitorExcelList(pqMonitorExcelList);
});
}
return contrastDevExcels;
}
@Override
public Map<String, List<String>> listSelectOptions(String pattern) {
List<PqDev> pqDevList = this.lambdaQuery().eq(PqDev::getPattern, pattern)
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
.list();
String[] devKeyArray = new String[]{"cityName", "gdName", "subName", "hardwareVersion", "softwareVersion"};
Map<String, List<String>> result = new HashMap<>();
for (String key : devKeyArray) {
List<String> value = pqDevList.stream().map(dev -> {
String fieldValue = (String) ReflectUtil.getFieldValue(dev, key);
return fieldValue;
}).distinct().filter(StrUtil::isNotBlank).collect(Collectors.toList());
result.put(key, value);
}
List<PqMonitor> pqMonitorList = pqMonitorService.list();
String[] monitorKeyArray = new String[]{"busbar", "pt", "ct"};
for (String key : monitorKeyArray) {
List<String> value = pqMonitorList.stream().map(monitor -> {
String fieldValue = (String) ReflectUtil.getFieldValue(monitor, key);
return fieldValue;
}).distinct().filter(StrUtil::isNotBlank).collect(Collectors.toList());
result.put(key, value);
}
return result;
}
}

View File

@@ -21,6 +21,7 @@ import com.njcn.gather.device.pojo.param.PqStandardDevParam;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.device.pojo.vo.PqStandardDevExcel;
import com.njcn.gather.device.service.IPqStandardDevService;
import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper;
import com.njcn.gather.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.system.dictionary.pojo.po.DictData;
import com.njcn.gather.system.dictionary.pojo.po.DictType;
@@ -55,6 +56,7 @@ public class PqStandardDevServiceImpl extends ServiceImpl<PqStandardDevMapper, P
private final IDevTypeService devTypeService;
private final IDictDataService dictDataService;
private final IDictTypeService dictTypeService;
private final AdPlanStandardDevMapper adPlanStandardDevMapper;
@Override
public Page<PqStandardDev> listPqStandardDevs(PqStandardDevParam.QueryParam queryParam) {
@@ -148,6 +150,11 @@ public class PqStandardDevServiceImpl extends ServiceImpl<PqStandardDevMapper, P
this.importData(contrastDevExcelList);
}
@Override
public List<PqStandardDev> listByPlanId(String planId) {
return adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId));
}
/**
* 导入数据
*

View File

@@ -45,16 +45,4 @@ public class PqMonitorExcel {
@Excel(name = "统计间隔*", width = 10, orderNum = "8")
@NotNull(message = DetectionValidMessage.STAT_INTERVAL_NOT_NULL)
private Integer statInterval;
// @Data
// @EqualsAndHashCode(callSuper = true)
// public static class ImportData extends PqMonitorExcel {
//
// }
//
// @Data
// @EqualsAndHashCode(callSuper = true)
// public static class ExportData extends PqMonitorExcel {
//
// }
}

View File

@@ -49,5 +49,17 @@ public interface IPqMonitorService extends IService<PqMonitor> {
*/
boolean deletePqMonitorByDevId(String devId);
/**
* 可视化监测点
*
* @param monitorList
*/
void visualizeMonitor(List<PqMonitor> monitorList);
/**
* 逆向可视化监测点
*
* @param monitorList
*/
void reverseVisualizeMonitor(List<PqMonitor> monitorList);
}

View File

@@ -1,14 +1,17 @@
package com.njcn.gather.monitor.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.gather.monitor.mapper.PqMonitorMapper;
import com.njcn.gather.monitor.pojo.param.PqMonitorParam;
import com.njcn.gather.monitor.pojo.po.PqMonitor;
import com.njcn.gather.monitor.service.IPqMonitorService;
import com.njcn.web.factory.PageFactory;
import com.njcn.gather.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.system.dictionary.pojo.po.DictData;
import com.njcn.gather.system.dictionary.service.IDictDataService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -25,6 +28,7 @@ import java.util.List;
@RequiredArgsConstructor
public class PqMonitorServiceImpl extends ServiceImpl<PqMonitorMapper, PqMonitor> implements IPqMonitorService {
private final IDictDataService dictDataService;
@Override
public List<PqMonitor> listPqMonitorByDevId(String devId) {
@@ -57,25 +61,27 @@ public class PqMonitorServiceImpl extends ServiceImpl<PqMonitorMapper, PqMonitor
return this.remove(wrapper);
}
/**
* 检查是否重复
*
* @param pqMonitorParam
* @param isExcludeSelf
*/
// private void checkRepeat(PqMonitorParam pqMonitorParam, boolean isExcludeSelf) {
// QueryWrapper<PqMonitor> wrapper = new QueryWrapper<>();
// wrapper.eq("pq_monitor.Dev_Id", pqMonitorParam.getDevId())
// .eq("pq_monitor.Busbar", pqMonitorParam.getName())
// .eq("pq_monitor.Name", pqMonitorParam.getName());
// if (isExcludeSelf) {
// if (pqMonitorParam instanceof PqMonitorParam.UpdateParam) {
// wrapper.ne("pq_monitor.Id", ((PqMonitorParam.UpdateParam) pqMonitorParam).getId());
// }
// }
// int count = this.count(wrapper);
// if (count > 0) {
// throw new BusinessException(DetectionResponseEnum.MONITOR_REPEAT);
// }
// }
@Override
public void visualizeMonitor(List<PqMonitor> monitorList) {
monitorList.forEach(monitor -> {
DictData dictData = dictDataService.getDictDataById(monitor.getConnection());
if (ObjectUtil.isNotNull(dictData)) {
monitor.setConnection(dictData.getName());
} else {
throw new BusinessException(DetectionResponseEnum.CONNECTION_NOT_EXIST);
}
});
}
@Override
public void reverseVisualizeMonitor(List<PqMonitor> monitorList) {
monitorList.forEach(monitor -> {
DictData dictData = dictDataService.getDictDataByName(monitor.getConnection());
if (ObjectUtil.isNotNull(dictData)) {
monitor.setConnection(dictData.getId());
} else {
throw new BusinessException(DetectionResponseEnum.CONNECTION_NOT_EXIST);
}
});
}
}

View File

@@ -1,17 +1,27 @@
package com.njcn.gather.plan.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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.DataStateEnum;
import com.njcn.common.pojo.enums.common.LogEnum;
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.common.utils.LogUtil;
import com.njcn.gather.device.pojo.enums.CommonEnum;
import com.njcn.gather.device.pojo.param.PqDevParam;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.device.pojo.vo.PqDevVO;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.pojo.param.AdPlanParam;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.vo.AdPlanVO;
import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.type.pojo.po.DevType;
import com.njcn.gather.type.service.IDevTypeService;
import com.njcn.web.controller.BaseController;
import com.njcn.web.utils.FileUtil;
import com.njcn.web.utils.HttpResultUtil;
@@ -28,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -42,15 +53,17 @@ import java.util.Map;
public class AdPlanController extends BaseController {
private final IAdPlanService adPlanService;
private final IPqDevService pqDevService;
private final IDevTypeService devTypeService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/list")
@ApiOperation("分页查询检测计划")
@ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
public HttpResult<Page<AdPlanVO>> list(@RequestBody @Validated AdPlanParam.QueryParam queryParam) {
public HttpResult<List<AdPlanVO>> list(@RequestBody @Validated AdPlanParam.QueryParam queryParam) {
String methodDescribe = getMethodDescribe("list");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam);
Page<AdPlanVO> result = adPlanService.listAdPlan(queryParam);
List<AdPlanVO> result = adPlanService.listAdPlan(queryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@@ -77,6 +90,7 @@ public class AdPlanController extends BaseController {
String methodDescribe = getMethodDescribe("update");
LogUtil.njcnDebug(log, "{},修改数据为:{}", methodDescribe, updateParam);
boolean result = adPlanService.updateAdPlan(updateParam);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
@@ -87,11 +101,11 @@ public class AdPlanController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE)
@PostMapping("/delete")
@ApiOperation("删除检测计划")
@ApiImplicitParam(name = "ids", value = "检测计划id", required = true)
public HttpResult<Boolean> delete(@RequestBody List<String> ids) {
@ApiImplicitParam(name = "ids", value = "计划id列表", required = true)
public HttpResult<Boolean> delete(@RequestBody List<String> ids, @RequestParam("pattern") String pattern) {
String methodDescribe = getMethodDescribe("delete");
LogUtil.njcnDebug(log, "{}删除ID数据为{}", methodDescribe, String.join(StrUtil.COMMA, ids));
boolean result = adPlanService.deleteAdPlan(ids);
LogUtil.njcnDebug(log, "{}删除ID数据为{}", methodDescribe, String.join(StrUtil.COMMA, ids), pattern);
boolean result = adPlanService.deleteAdPlan(ids, pattern);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
@@ -146,7 +160,7 @@ public class AdPlanController extends BaseController {
boolean result = adPlanService.importPlan(file, patternId, response);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
}else{
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
@@ -172,19 +186,178 @@ public class AdPlanController extends BaseController {
adPlanService.analyse(ids);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/splitPlan")
@ApiOperation("拆分检测计划")
@ApiImplicitParam(name = "param", value = "检测计划", required = true)
public HttpResult<Boolean> splitPlan(@RequestBody @Validated AdPlanParam.SplitParam param) {
String methodDescribe = getMethodDescribe("splitPlan");
LogUtil.njcnDebug(log, "{}拆分数据为:{}", methodDescribe, param);
boolean result = adPlanService.splitPlan(param);
@PostMapping("/listByPlanId")
@ApiOperation("查询出所有已绑定的设备")
@ApiImplicitParam(name = "planId", value = "计划id", required = true)
public HttpResult<List<PqDevVO>> listByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) {
String methodDescribe = getMethodDescribe("listByPlanId");
LogUtil.njcnDebug(log, "{}查询数据为:{}", methodDescribe, param);
AdPlan plan = adPlanService.getById(param.getPlanIdList().get(0));
if (CommonEnum.FATHER_ID.getValue().equals(plan.getFatherPlanId())) {
List<AdPlan> planList = adPlanService.lambdaQuery().eq(AdPlan::getFatherPlanId, param.getPlanIdList().get(0)).list();
List<String> planIdList = planList.stream().map(AdPlan::getId).collect(Collectors.toList());
param.getPlanIdList().addAll(planIdList);
}
List<PqDevVO> pqDevVOList = pqDevService.listByPlanId(param);
List<AdPlan> planList = adPlanService.listByIds(param.getPlanIdList());
pqDevVOList.forEach(pqDevVO -> {
DevType devType = devTypeService.getById(pqDevVO.getDevType());
if (ObjectUtil.isNotNull(devType)) {
pqDevVO.setDevType(devType.getName());
pqDevVO.setDevVolt(devType.getDevVolt());
pqDevVO.setDevCurr(devType.getDevCurr());
pqDevVO.setDevChns(devType.getDevChns());
}
if (StrUtil.isNotBlank(pqDevVO.getPlanId())) {
AdPlan plan1 = planList.stream().filter(p -> p.getId().equals(pqDevVO.getPlanId())).findFirst().get();
if (ObjectUtil.isNotNull(plan1) && plan.getId().equals(plan1.getFatherPlanId())) {
pqDevVO.setBoundPlanName(plan1.getName());
pqDevVO.setAssign(DataStateEnum.ENABLE.getCode());
} else {
pqDevVO.setAssign(DataStateEnum.DELETED.getCode());
}
} else {
pqDevVO.setAssign(DataStateEnum.DELETED.getCode());
}
});
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/listDevByPlanId")
@ApiOperation("根据计划id分页查询被检设备")
@ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
public HttpResult<Page<PqDevVO>> listDevByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) {
String methodDescribe = getMethodDescribe("listDevByPlanId");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param);
AdPlan plan = adPlanService.getById(param.getPlanIdList().get(0));
if (CommonEnum.FATHER_ID.getValue().equals(plan.getFatherPlanId())) {
List<AdPlan> planList = adPlanService.lambdaQuery().eq(AdPlan::getFatherPlanId, param.getPlanIdList().get(0)).list();
List<String> planIdList = planList.stream().map(AdPlan::getId).collect(Collectors.toList());
param.getPlanIdList().addAll(planIdList);
}
Page<PqDevVO> pqDevVOPage = pqDevService.listPqDevs(param);
List<AdPlan> planList = adPlanService.listByIds(param.getPlanIdList());
for (PqDevVO pqDevVO : pqDevVOPage.getRecords()) {
if (StrUtil.isNotBlank(pqDevVO.getPlanId())) {
AdPlan plan1 = planList.stream().filter(p -> p.getId().equals(pqDevVO.getPlanId())).findFirst().get();
if (!ObjectUtil.isNotNull(plan1) && plan.getId().equals(plan1.getFatherPlanId())) {
pqDevVO.setBoundPlanName(plan1.getName());
pqDevVO.setAssign(DataStateEnum.ENABLE.getCode());
} else {
pqDevVO.setAssign(DataStateEnum.DELETED.getCode());
}
} else {
pqDevVO.setAssign(DataStateEnum.DELETED.getCode());
}
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOPage, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPDATE)
@GetMapping("/updateSubPlanName")
@ApiOperation("修改子计划名称")
@ApiImplicitParams({
@ApiImplicitParam(name = "planId", value = "计划id", required = true),
@ApiImplicitParam(name = "name", value = "计划名称", required = true)
})
public HttpResult<Boolean> updateSubPlanName(@RequestParam("planId") String planId, @RequestParam("name") String name) {
String methodDescribe = getMethodDescribe("updateSubPlanName");
LogUtil.njcnDebug(log, "{},修改数据为:{}", methodDescribe, planId, name);
boolean result = adPlanService.updateSubPlanName(planId, name);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getUnBoundStandardDev")
@ApiOperation("根据父计划ID获取未被子计划绑定的标准设备")
@ApiImplicitParam(name = "fatherPlanId", value = "父计划ID", required = true)
public HttpResult<List<PqStandardDev>> getUnBoundStandardDev(@RequestParam("fatherPlanId") String fatherPlanId) {
String methodDescribe = getMethodDescribe("getUnBoundStandardDev");
LogUtil.njcnDebug(log, "{}父计划ID为{}", methodDescribe, fatherPlanId);
List<PqStandardDev> result = adPlanService.getUnBoundStandardDev(fatherPlanId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getBoundStandardDev")
@ApiOperation("根据计划ID获取已绑定的标准设备")
@ApiImplicitParam(name = "planId", value = "计划ID", required = true)
public HttpResult<List<PqStandardDev>> getBoundStandardDev(@RequestParam("planId") String planId) {
String methodDescribe = getMethodDescribe("getUnBoundStandardDev");
LogUtil.njcnDebug(log, "{}计划ID为{}", methodDescribe, planId);
List<PqStandardDev> result = adPlanService.getBoundStandardDev(planId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateBindStandardDev")
@ApiOperation("子计划绑定/解绑标准设备")
@ApiImplicitParam(name = "param", value = "绑定/解绑参数", required = true)
public HttpResult<Boolean> updateBindStandardDev(@RequestBody @Validated PqDevParam.BindPlanParam param) {
String methodDescribe = getMethodDescribe("updateBindStandardDev");
LogUtil.njcnDebug(log, "{},绑定/解绑参数为:{}", methodDescribe, param);
boolean result = adPlanService.updateBindStandardDev(param.getPlanId(), param.getDevIds());
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateBindDev")
@ApiOperation("子计划绑定/解绑被检设备")
@ApiImplicitParam(name = "param", value = "绑定/解绑参数", required = true)
public HttpResult<Boolean> updateBindDev(@RequestBody @Validated PqDevParam.BindPlanParam param) {
String methodDescribe = getMethodDescribe("updateBindDev");
LogUtil.njcnDebug(log, "{},绑定/解绑参数为:{}", methodDescribe, param);
boolean result = adPlanService.updateBindDev(param.getPlanId(), param.getDevIds());
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
// @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE)
// @PostMapping("/deleteSubPlan")
// @ApiOperation("删除子计划")
// @ApiImplicitParam(name = "ids", value = "子计划id列表", required = true)
// public HttpResult<Boolean> deleteSubPlan(@RequestBody List<String> ids) {
// String methodDescribe = getMethodDescribe("deleteSubPlan");
// LogUtil.njcnDebug(log, "{}删除ID数据为{}", methodDescribe, String.join(StrUtil.COMMA, ids));
// boolean result = adPlanService.deleteAdPlan(ids);
// if (result) {
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
// } else {
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
// }
// }
@OperateInfo(operateType = OperateType.DOWNLOAD)
@PostMapping("/exportSubPlan")
@ApiOperation("导出子计划")
@ApiImplicitParam(name = "planId", value = "子计划id", required = true)
public void exportSubPlan(@RequestParam("planId") String planId, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("exportSubPlan");
LogUtil.njcnDebug(log, "{}导出ID数据为{}", methodDescribe, planId);
adPlanService.exportSubPlan(planId, response);
}
}

View File

@@ -0,0 +1,24 @@
package com.njcn.gather.plan.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.plan.pojo.po.AdPlanStandardDev;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author caozehui
* @date 2025-07-16
*/
public interface AdPlanStandardDevMapper extends MPJBaseMapper<AdPlanStandardDev> {
/**
* 根据计划id查询标准设备列表
*
* @param planIdList
* @return
*/
List<PqStandardDev> listByPlanId(@Param("planIdList") List<String> planIdList);
}

View File

@@ -0,0 +1,17 @@
<?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.gather.plan.mapper.AdPlanStandardDevMapper">
<select id="listByPlanId" resultType="com.njcn.gather.device.pojo.po.PqStandardDev">
select standard_dev.*
from ad_plan_standard_dev plan_std_dev left join pq_standard_dev standard_dev on plan_std_dev.Standard_Dev_Id = standard_dev.Id
<if test="planIdList!= null and planIdList.size() != 0">
where plan_std_dev.Plan_Id in
<foreach collection="planIdList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>

View File

@@ -27,12 +27,7 @@ public class AdPlanParam {
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PATTERN_FORMAT_ERROR)
private String pattern;
// @ApiModelProperty(value = "父计划ID")
// @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DeviceValidMessage.PATTERN_FORMAT_ERROR)
// private String fatherPlanId;
@ApiModelProperty(value = "检测源ID列表", required = true)
@NotEmpty(message = DetectionValidMessage.SOURCE_IDS_NOT_EMPTY)
private List<@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SOURCE_ID_FORMAT_ERROR) String> sourceIds;
@ApiModelProperty(value = "数据源ID列表", required = true)
@@ -40,8 +35,6 @@ public class AdPlanParam {
private List<String> datasourceIds;
@ApiModelProperty(value = "检测脚本ID", required = true)
@NotBlank(message = DetectionValidMessage.SCRIPT_ID_NOT_BLANK)
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SCRIPT_ID_FORMAT_ERROR)
private String scriptId;
@ApiModelProperty(value = "误差体系ID", required = true)
@@ -56,7 +49,6 @@ public class AdPlanParam {
private Integer timeCheck;
@ApiModelProperty("被检设备ID列表")
@NotNull(message = DetectionValidMessage.PQ_DEV_IDS_NOT_NULL)
private List<String> devIds;
@ApiModelProperty(value = "是否关联报告")
@@ -70,6 +62,16 @@ public class AdPlanParam {
@NotBlank(message = DetectionValidMessage.DATA_RULE_NOT_BLANK)
private String dataRule;
@ApiModelProperty(value = "父计划ID")
private String fatherPlanId;
@ApiModelProperty(value = "标准设备ID列表")
private List<String> standardDevIds;
@ApiModelProperty(value = "测试项ID列表")
private List<@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SOURCE_ID_FORMAT_ERROR)String> testItems;
/**
* 分页查询实体
*/
@@ -117,15 +119,4 @@ public class AdPlanParam {
private String planId;
private List<String> devIds;
}
@Data
public class SplitParam {
@ApiModelProperty(value = "id", required = true)
@NotBlank(message = DetectionValidMessage.ID_NOT_BLANK)
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PID_FORMAT_ERROR)
private String pId;
@ApiModelProperty(value = "拆分后的计划", required = true)
private List<AdPlanParam> splitPlans;
}
}

View File

@@ -90,14 +90,25 @@ public class AdPlan extends BaseEntity implements Serializable {
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String reportTemplateId;
/**
* 数据处理原则。任意值、部分值、所有值、cp95值、平均值
*/
private String dataRule;
/**
* 状态0-删除 1-正常
*/
private Integer state;
/**
* 数据处理原则。任意值、部分值、所有值、cp95值、平均值
* 检测项ID中间使用英文逗号分割
*/
private String dataRule;
private String testItem;
/**
* 来源
*/
private String origin;
}

View File

@@ -0,0 +1,28 @@
package com.njcn.gather.plan.pojo.po;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* @author caozehui
* @date 2025-07-16
*/
@Data
@TableName("ad_plan_standard_dev")
public class AdPlanStandardDev implements Serializable {
private static final long serialVersionUID = 153286652772158825L;
/**
* 检测计划id
*/
private String planId;
/**
* 标准设备id
*/
private String standardDevId;
}

View File

@@ -41,7 +41,7 @@ public class AdPlanExcel {
@NotNull(message = DetectionValidMessage.TIMECHECK_NOT_NULL)
private Integer timeCheck;
@Excel(name = "关联报告模*", width = 20, replace = {"否_0", "是_1"}, needMerge = true, orderNum = "7")
@Excel(name = "关联报告模*", width = 20, replace = {"否_0", "是_1"}, needMerge = true, orderNum = "7")
@NotNull(message = DetectionValidMessage.ASSOCIATE_REPORT_NOT_NULL)
private Integer associateReport;

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.plan.pojo.vo;
import com.njcn.gather.device.pojo.vo.PqDevVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -118,4 +119,34 @@ public class AdPlanVO {
* 检测进度
*/
private Float progress;
/**
* 标准设备ID列表
*/
private List<String> standardDevIds;
/**
* 标准设备名称
*/
private String standardDevNameStr;
/**
* 测试项id列表
*/
private List<String> testItems;
/**
* 测试项name列表
*/
private String testItemNameStr;
/**
* 计划绑定的被检设备列表
*/
private List<PqDevVO> pqDevVOList;
/**
* 来源
*/
private String origin;
}

View File

@@ -0,0 +1,43 @@
package com.njcn.gather.plan.pojo.vo;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
/**
* @author caozehui
* @data 2025-07-16
*/
@Data
public class ContrastPlanExcel {
private String id;
@Excel(name = "名称*", width = 30, orderNum = "1")
private String name;
@Excel(name = "标准设备*", width = 50, orderNum = "2")
private String standardDev;
@Excel(name = "数据源*", width = 50, orderNum = "3")
private String datasourceId;
@Excel(name = "检测项*", width = 50, orderNum = "4")
private String testItem;
@Excel(name = "误差体系*", width = 50, orderNum = "5")
private String errorSysId;
@Excel(name = "数据处理原则*", width = 20, orderNum = "6")
private String dataRule;
@Excel(name = "是否做守时检测*", width = 30, orderNum = "7")
private Integer timeCheck;
@Excel(name = "关联报告模板*", width = 30, orderNum = "8", replace = {"否_0", "是_1"})
private Integer associateReport;
@Excel(name = "报告模版(当关联报告模版为是时必填)", width = 40, orderNum = "9")
private String reportTemplateId;
}

View File

@@ -2,6 +2,8 @@ package com.njcn.gather.plan.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.device.pojo.param.PqDevParam;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.plan.pojo.param.AdPlanParam;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.vo.AdPlanExcel;
@@ -24,7 +26,7 @@ public interface IAdPlanService extends IService<AdPlan> {
* @param queryParam 分页查询参数
* @return 分页查询结果
*/
Page<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam);
List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam);
/**
* 新增检测计划
@@ -46,9 +48,11 @@ public interface IAdPlanService extends IService<AdPlan> {
* 删除检测计划
*
* @param ids 检测计划id列表
* @param pattern 模式Id
*
* @return 删除成功则返回true否则返回false
*/
boolean deleteAdPlan(List<String> ids);
boolean deleteAdPlan(List<String> ids,String pattern);
/**
* 根据模式查询检测计划
@@ -125,11 +129,56 @@ public interface IAdPlanService extends IService<AdPlan> {
*/
boolean importPlan(MultipartFile file, String patternId, HttpServletResponse response);
/**
* 拆分计划
* 根据父计划Id获取未被子计划绑定的标准设备
*
* @param param
* @param fatherPlanId
* @return
*/
boolean splitPlan(AdPlanParam.SplitParam param);
List<PqStandardDev> getUnBoundStandardDev(String fatherPlanId);
/**
* 根据计划Id获取已绑定标准设备
*
* @param planId
* @return
*/
List<PqStandardDev> getBoundStandardDev(String planId);
/**
* 修改子计划名称
*
* @param planId
* @param name
*
* @return
*/
boolean updateSubPlanName(String planId, String name);
/**
* 子计划绑定/解绑被检设备
*
* @param planId
* @param pqDevIds
* @return
*/
boolean updateBindDev(String planId, List<String> pqDevIds);
/**
* 子计划绑定/解绑标准设备
*
* @param planId
* @param standardDevIds
* @return
*/
boolean updateBindStandardDev(String planId, List<String> standardDevIds);
/**
* 根据计划Id导出子计划数据
*
* @param planId
* @param response
*/
void exportSubPlan(String planId, HttpServletResponse response);
}

View File

@@ -0,0 +1,65 @@
package com.njcn.gather.plan.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.plan.pojo.po.AdPlanStandardDev;
import java.util.List;
/**
* @author caozehui
* @date 2025-07-16
*/
public interface IAdPlanStandardDevService extends IService<AdPlanStandardDev> {
/**
* 添加检测计划-标准设备关联关系
*
* @param planId
* @param standardDevIds
* @return
*/
boolean addAdPlanStandardDev(String planId, List<String> standardDevIds);
/**
* 修改检测计划-标准设备关联关系
*
* @param planId
* @param standardDevIds
* @return
*/
boolean updateAdPlanStandardDev(String planId, List<String> standardDevIds);
/**
* 删除检测计划-标准设备关联关系
*
* @param planIds
* @return
*/
boolean deleteAdPlanStandardDev(List<String> planIds);
/**
* 删除检测计划-标准设备关联关系
*
* @param planId
* @param standardDevIds
* @return
*/
boolean deleteAdPlanStandardDev(String planId, List<String> standardDevIds);
/**
* 根据检测计划id获取标准设备名称字符串
*
* @param id
* @return
*/
String getStandardDevNameStrByPlanId(String id);
/**
* 根据检测计划id获取关联关系
*
* @param planIds
* @return
*/
List<AdPlanStandardDev> listByPlanId(List<String> planIds);
}

View File

@@ -6,13 +6,13 @@ import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
@@ -22,7 +22,9 @@ import com.njcn.gather.device.pojo.enums.*;
import com.njcn.gather.device.pojo.param.PqDevParam;
import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.pojo.po.PqDevSub;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.device.pojo.vo.CNDevExcel;
import com.njcn.gather.device.pojo.vo.ContrastDevExcel;
import com.njcn.gather.device.pojo.vo.PqDevVO;
import com.njcn.gather.device.pojo.vo.ProvinceDevExcel;
import com.njcn.gather.device.service.IPqDevService;
@@ -30,15 +32,19 @@ import com.njcn.gather.device.service.IPqDevSubService;
import com.njcn.gather.err.pojo.po.PqErrSys;
import com.njcn.gather.err.service.IPqErrSysService;
import com.njcn.gather.plan.mapper.AdPlanMapper;
import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper;
import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
import com.njcn.gather.plan.pojo.enums.PlanReportStateEnum;
import com.njcn.gather.plan.pojo.param.AdPlanParam;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.po.AdPlanStandardDev;
import com.njcn.gather.plan.pojo.vo.AdPlanVO;
import com.njcn.gather.plan.pojo.vo.CNPlanExcel;
import com.njcn.gather.plan.pojo.vo.ContrastPlanExcel;
import com.njcn.gather.plan.pojo.vo.ProvincePlanExcel;
import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.plan.service.IAdPlanSourceService;
import com.njcn.gather.plan.service.IAdPlanStandardDevService;
import com.njcn.gather.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.report.pojo.po.PqReport;
import com.njcn.gather.script.pojo.po.PqScript;
@@ -61,7 +67,6 @@ import com.njcn.gather.system.dictionary.service.IDictTreeService;
import com.njcn.gather.system.dictionary.service.IDictTypeService;
import com.njcn.gather.type.pojo.po.DevType;
import com.njcn.gather.type.service.IDevTypeService;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.utils.ExcelUtil;
import com.njcn.web.utils.HttpServletUtil;
import com.njcn.web.utils.PoiUtil;
@@ -109,63 +114,107 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
private final AdHarmonicService adHarmonicService;
private final PqDevMapper pqDevMapper;
private final IPqDevSubService pqDevSubService;
private final IAdPlanStandardDevService adPlanStandardDevService;
private final AdPlanStandardDevMapper adPlanStandardDevMapper;
private final IAdPlanStandardDevService adPlanContrastStandardDevService;
@Override
public Page<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) {
Page<AdPlan> page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), this.getQueryWrapper(queryParam));
List<AdPlan> adPlans = page1.getRecords();
List<AdPlanVO> adPlanVOList = adPlans.stream().map(adPlan -> {
public List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) {
// Page<AdPlan> page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), );
// List<AdPlan> adPlans = page1.getRecords();
// List<AdPlanVO> adPlanVOList = adPlans.stream().map(adPlan -> {
// AdPlanVO adPlanVO = new AdPlanVO();
// BeanUtil.copyProperties(adPlan, adPlanVO);
// this.setAdPlanVO(adPlanVO, adPlan);
// return adPlanVO;
// }).collect(Collectors.toList());
//
// Page<AdPlanVO> page2 = new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam));
// page2.setTotal(page1.getTotal());
// page2.setOrders(page1.orders());
// page2.setPages(page1.getPages());
// page2.setRecords(adPlanVOList);
List<AdPlan> adPlanList = this.list(this.getQueryWrapper(queryParam));
List<AdPlanVO> planVOList = adPlanList.stream().map(adPlan -> {
AdPlanVO adPlanVO = new AdPlanVO();
BeanUtil.copyProperties(adPlan, adPlanVO);
adPlanVO.setCreateTime(adPlanVO.getCreateTime().replace("T", " "));
adPlanVO.setDatasourceIds(Arrays.asList(adPlan.getDatasourceId().split(StrUtil.COMMA)));
if (StrUtil.isNotBlank(adPlan.getReportTemplateId())) {
PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId());
adPlanVO.setReportTemplateName(report.getName() + "_" + report.getVersion());
}
adPlanVO.setScriptName(pqScriptService.getPqScriptById(adPlanVO.getScriptId()).getName());
adPlanVO.setErrorSysName(pqErrSysService.getPqErrSysById(adPlanVO.getErrorSysId()).getName());
List<PqSource> pqSourceList = adPlanSourceService.listPqSourceByPlanId(adPlanVO.getId());
adPlanVO.setSourceIds(pqSourceList.stream().map(PqSource::getId).collect(Collectors.toList()));
adPlanVO.setSourceName(pqSourceList.stream().map(PqSource::getName).collect(Collectors.toList()));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanId(adPlanVO.getId());
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1);
if (CollUtil.isNotEmpty(pqDevVOList)) {
long count = pqDevVOList.stream().filter(pqDev -> CheckStateEnum.CHECKED.getValue().equals(pqDev.getCheckState())).count();
adPlanVO.setProgress((float) count / pqDevVOList.size());
} else {
adPlanVO.setProgress(0.0f);
}
this.setAdPlanVO(adPlanVO, adPlan);
return adPlanVO;
}).collect(Collectors.toList());
return planVOList;
}
Page<AdPlanVO> page2 = new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam));
page2.setTotal(page1.getTotal());
page2.setOrders(page1.orders());
page2.setPages(page1.getPages());
page2.setRecords(adPlanVOList);
return page2;
private void setAdPlanVO(AdPlanVO adPlanVO, AdPlan adPlan) {
adPlanVO.setCreateTime(adPlanVO.getCreateTime().replace("T", " "));
adPlanVO.setDatasourceIds(Arrays.asList(adPlan.getDatasourceId().split(StrUtil.COMMA)));
if (StrUtil.isNotBlank(adPlan.getReportTemplateId())) {
PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId());
adPlanVO.setReportTemplateName(report.getName() + "_" + report.getVersion());
}
if (StrUtil.isNotBlank(adPlanVO.getScriptId())) {
adPlanVO.setScriptName(pqScriptService.getPqScriptById(adPlanVO.getScriptId()).getName());
}
adPlanVO.setErrorSysName(pqErrSysService.getPqErrSysById(adPlanVO.getErrorSysId()).getName());
List<PqSource> pqSourceList = adPlanSourceService.listPqSourceByPlanId(adPlanVO.getId());
adPlanVO.setSourceIds(pqSourceList.stream().map(PqSource::getId).collect(Collectors.toList()));
adPlanVO.setSourceName(pqSourceList.stream().map(PqSource::getName).collect(Collectors.toList()));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanIdList(Arrays.asList(adPlan.getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1);
if (CollUtil.isNotEmpty(pqDevVOList)) {
long count = pqDevVOList.stream().filter(pqDev -> CheckStateEnum.CHECKED.getValue().equals(pqDev.getCheckState())).count();
adPlanVO.setProgress((float) count / pqDevVOList.size());
} else {
adPlanVO.setProgress(0.0f);
}
if (StrUtil.isNotBlank(adPlan.getTestItem())) {
adPlanVO.setTestItems(Arrays.asList(adPlan.getTestItem().split(StrUtil.COMMA)));
List<DictTree> dictTreeList = dictTreeService.listByIds(adPlanVO.getTestItems());
adPlanVO.setTestItemNameStr(dictTreeList.stream().map(DictTree::getName).reduce((a, b) -> a + "," + b).orElse(""));
}
List<String> planIdList = new ArrayList<>();
planIdList.add(adPlan.getId());
if (CommonEnum.FATHER_ID.getValue().equals(adPlan.getFatherPlanId())) {
List<AdPlan> childrenPlan = this.lambdaQuery().eq(AdPlan::getFatherPlanId, adPlan.getId()).eq(AdPlan::getState, DataStateEnum.ENABLE.getCode()).list();
List<String> childrenPlanIds = childrenPlan.stream().map(AdPlan::getId).collect(Collectors.toList());
planIdList.addAll(childrenPlanIds);
}
List<PqStandardDev> pqStandardDevs = adPlanStandardDevMapper.listByPlanId(planIdList);
adPlanVO.setStandardDevIds(pqStandardDevs.stream().map(PqStandardDev::getId).collect(Collectors.toList()));
adPlanVO.setStandardDevNameStr(pqStandardDevs.stream().map(PqStandardDev::getName).reduce((a, b) -> a + "," + b).orElse(""));
}
@Override
@Transactional
public boolean addAdPlan(AdPlanParam param) {
this.checkRepeat(param, false);
param.setName(param.getName().trim());
this.checkRepeat(param, false, CommonEnum.FATHER_ID.getValue());
AdPlan adPlan = new AdPlan();
BeanUtil.copyProperties(param, adPlan);
adPlan.setName(param.getName().trim());
String planId = UUID.randomUUID().toString().replaceAll("-", "");
adPlan.setId(planId);
adPlan.setDatasourceId(String.join(StrUtil.COMMA, param.getDatasourceIds()));
adPlan.setState(DataStateEnum.ENABLE.getCode());
// 默认为顶级检测计划
adPlan.setFatherPlanId(CommonEnum.FATHER_ID.getValue());
if (StrUtil.isBlank(param.getFatherPlanId())) {
// 默认为顶级检测计划
adPlan.setFatherPlanId(CommonEnum.FATHER_ID.getValue());
} else {
AdPlan plan = this.getById(param.getFatherPlanId());
adPlan.setFatherPlanId(param.getFatherPlanId());
adPlan.setOrigin(plan.getName());
}
adPlan.setTestState(CheckStateEnum.UNCHECKED.getValue());
adPlan.setReportState(PlanReportStateEnum.REPORT_STATE_NOT_GENERATED.getValue());
adPlan.setResult(CheckResultEnum.UNCHECKED.getValue());
@@ -179,9 +228,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
adPlan.setReportTemplateId(reportId);
}
}
// 新增检测计划、检测源关联
adPlanSourceService.addAdPlanSource(planId, param.getSourceIds());
// 绑定被检设备
if (ObjectUtil.isNotEmpty(param.getDevIds())) {
// 新增时,绑定设备
pqDevService.bind(planId, param.getDevIds());
@@ -190,10 +237,26 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
pqDevService.updatePqDevTimeCheckResult(param.getDevIds(), TimeCheckResultEnum.UNKNOWN);
}
//新增相关计划
//检测项
if (CollUtil.isNotEmpty(param.getTestItems())) {
adPlan.setTestItem(String.join(StrUtil.COMMA, param.getTestItems()));
}
this.save(adPlan);
tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString()));
tableGenService.genAdNonHarmonicTable(adPlan.getCode().toString());
DictData dictData = dictDataService.getDictDataById(param.getPattern());
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
// 关联标准设备
if (CollUtil.isNotEmpty(param.getStandardDevIds())) {
adPlanStandardDevService.deleteAdPlanStandardDev(param.getFatherPlanId(), param.getStandardDevIds());
adPlanStandardDevService.addAdPlanStandardDev(planId, param.getStandardDevIds());
}
} else {
// 关联检测源
adPlanSourceService.addAdPlanSource(planId, param.getSourceIds());
tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString()));
tableGenService.genAdNonHarmonicTable(adPlan.getCode().toString());
}
return true;
}
@@ -201,7 +264,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
@Transactional
public boolean updateAdPlan(AdPlanParam.UpdateParam param) {
param.setName(param.getName().trim());
this.checkRepeat(param, true);
this.checkRepeat(param, true, CommonEnum.FATHER_ID.getValue());
AdPlan plan1 = this.getById(param.getId());
AdPlan plan2 = new AdPlan();
@@ -210,11 +273,6 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
String reportTemplateName = param.getReportTemplateName();
String[] split = reportTemplateName.split("_");
String reportId = this.baseMapper.getReportIdByNameAndVersion(split[0], split[1]);
// if (plan1.getTestState() != CheckStateEnum.UNCHECKED.getValue()) {
// if (!reportId.equals(plan1.getReportTemplateId())) {
// throw new BusinessException(DetectionResponseEnum.CANNOT_CHANGE_REPORT_WHEN_CHECKING);
// }
// }
if (StrUtil.isNotBlank(reportId)) {
plan2.setReportTemplateId(reportId);
}
@@ -230,30 +288,67 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
if (!plan1.getErrorSysId().equals(param.getErrorSysId())) {
throw new BusinessException(DetectionResponseEnum.CANNOT_CHANGE_ERROR_SYS_WHEN_CHECKING);
}
// if (param.getAssociateReport() != null && param.getAssociateReport() != plan1.getAssociateReport()) {
// throw new BusinessException(DetectionResponseEnum.CANNOT_CHANGE_REPORT_WHEN_CHECKING);
// }
}
BeanUtil.copyProperties(param, plan2);
plan2.setDatasourceId(String.join(StrUtil.COMMA, param.getDatasourceIds()));
// 修改检测计划、检测源关联
adPlanSourceService.updateAdPlanSource(param.getId(), param.getSourceIds());
plan2.setTestState(pqDevService.bind(param.getId(), param.getDevIds()));
if (CollUtil.isNotEmpty(param.getTestItems())) {
plan2.setTestItem(String.join(StrUtil.COMMA, param.getTestItems()));
}
DictData dictData = dictDataService.getDictDataById(param.getPattern());
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
List<AdPlan> childrenPlan = this.lambdaQuery().eq(AdPlan::getFatherPlanId, param.getId()).list();
List<String> childrenPlanIds = childrenPlan.stream().map(AdPlan::getId).collect(Collectors.toList());
// 修改与标准设备的关联关系
List<AdPlanStandardDev> adPlanStandardDevList = adPlanStandardDevService.lambdaQuery().in(CollectionUtil.isNotEmpty(childrenPlanIds), AdPlanStandardDev::getPlanId, childrenPlanIds).list();
if (CollUtil.isNotEmpty(adPlanStandardDevList)) {
throw new BusinessException(DetectionResponseEnum.PLEASE_UNASSIGN_STANDARD_DEV);
}
//List<String> standardDevIds = adPlanStandardDevList.stream().map(AdPlanStandardDev::getStandardDevId).collect(Collectors.toList());
//param.getStandardDevIds().removeAll(standardDevIds);
adPlanStandardDevService.updateAdPlanStandardDev(param.getId(), param.getStandardDevIds());
// 修改与被检设备的关联关系
PqDevParam.QueryParam param1 = new PqDevParam.QueryParam();
param1.setPlanIdList(childrenPlanIds);
List<PqDevVO> pqDevVOList = pqDevService.listByPlanId(param1);
if (CollUtil.isNotEmpty(pqDevVOList)) {
throw new BusinessException(DetectionResponseEnum.PLEASE_UNASSIGN_DEVICE);
}
// List<String> devIds = pqDevVOList.stream().map(PqDevVO::getId).collect(Collectors.toList());
// param.getDevIds().removeAll(devIds);
plan2.setTestState(pqDevService.bind(param.getId(), param.getDevIds()));
} else {
// 修改检测计划、检测源关联
adPlanSourceService.updateAdPlanSource(param.getId(), param.getSourceIds());
}
return this.updateById(plan2);
}
@Override
@Transactional
public boolean deleteAdPlan(List<String> ids) {
public boolean deleteAdPlan(List<String> ids, String pattern) {
DictData dictData = dictDataService.getDictDataById(pattern);
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
List<AdPlan> planList = this.lambdaQuery().in(AdPlan::getFatherPlanId, ids).eq(AdPlan::getState, DataStateEnum.ENABLE.getCode()).list();
if (CollUtil.isNotEmpty(planList)) {
throw new BusinessException(DetectionResponseEnum.PLAN_HAS_CHILDREN);
}
// 删除检测计划、标准设备关联
adPlanStandardDevService.deleteAdPlanStandardDev(ids);
}
for (String id : ids) {
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(id);
queryParam.setPlanIdList(Arrays.asList(id));
if (ObjectUtils.isNotEmpty(pqDevService.listByPlanId(queryParam))) {
throw new BusinessException(DetectionResponseEnum.PLAN_HAS_DEVICE_BIND);
}
}
// 删除检测计划、检测源关联
adPlanSourceService.deleteAdPlanSourceByPlanIds(ids);
@@ -329,6 +424,12 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId());
adPlan.setReportTemplateId(report.getName() + "_" + report.getVersion());
}
if (StrUtil.isNotBlank(adPlan.getTestItem())) {
String[] split = adPlan.getTestItem().split(StrUtil.COMMA);
List<DictTree> dictTreeList = dictTreeService.list(new QueryWrapper<DictTree>().in("id", split).eq("state", DataStateEnum.DELETED.getCode()));
String testItemStr = dictTreeList.stream().map(dictTree -> dictTree.getName()).reduce((a, b) -> a + "," + b).orElse("");
adPlan.setTestItem(testItemStr);
}
});
}
@@ -419,7 +520,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
}
}
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(planId);
queryParam.setPlanIdList(Arrays.asList(planId));
List<PqDevVO> pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam);
List<PqDev> collect = pqDevVOList1.stream().filter(x -> !x.getCheckState().equals(CheckStateEnum.UNCHECKED.getValue())).collect(Collectors.toList());
if (CollUtil.isEmpty(collect)) {
@@ -466,7 +567,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
List<PqDevVO> allDevList = new ArrayList<>();
for (AdPlan plan : planList) {
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(plan.getId());
queryParam.setPlanIdList(Arrays.asList(plan.getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam);
pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
allDevList.addAll(pqDevVOList);
@@ -484,7 +585,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
} else {
AdPlan plan = planList.get(0);
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(plan.getId());
queryParam.setPlanIdList(Arrays.asList(plan.getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam);
pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
@@ -497,22 +598,62 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
@Override
public void exportPlan(AdPlanParam.QueryParam queryParam) {
String currrentScene = sysTestConfigService.getCurrrentScene();
SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene);
switch (sceneEnum) {
case PROVINCE_PLATFORM:
this.exportProvincePlan(queryParam);
break;
case LEAVE_FACTORY_TEST:
this.exportCNPlan(queryParam);
break;
case SELF_TEST:
break;
default:
break;
DictData dictData = dictDataService.getDictDataById(queryParam.getPatternId());
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
this.exportContrastPlan(queryParam);
} else {
String currrentScene = sysTestConfigService.getCurrrentScene();
SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene);
switch (sceneEnum) {
case PROVINCE_PLATFORM:
this.exportProvincePlan(queryParam);
break;
case LEAVE_FACTORY_TEST:
this.exportCNPlan(queryParam);
break;
case SELF_TEST:
break;
default:
break;
}
}
}
private void exportContrastPlan(AdPlanParam.QueryParam queryParam) {
List<AdPlan> planList = this.list(this.getQueryWrapper(queryParam));
this.visualize(planList);
List<ContrastPlanExcel> planExcelList = BeanUtil.copyToList(planList, ContrastPlanExcel.class);
List<Map<String, Object>> sheetsList = new ArrayList<>();
planExcelList.forEach(plan -> {
Map<String, Object> sheet = new HashMap<>();
ExportParams exportParams = new ExportParams();
exportParams.setSheetName(plan.getName());
sheet.put("title", exportParams);
sheet.put("entity", ContrastDevExcel.class);
PqDevParam.QueryParam param = new PqDevParam.QueryParam();
param.setPlanIdList(Arrays.asList(plan.getId()));
List<PqDevVO> pqDevVOList = pqDevService.listByPlanId(param);
List<ContrastDevExcel> exportContrastDevData = pqDevService.getExportContrastDevData(pqDevVOList);
sheet.put("data", exportContrastDevData);
sheetsList.add(sheet);
String standardDevNameStrByPlanId = adPlanContrastStandardDevService.getStandardDevNameStrByPlanId(plan.getId());
plan.setStandardDev(standardDevNameStrByPlanId);
});
Map<String, Object> sheet1 = new HashMap<>();
ExportParams exportParams1 = new ExportParams();
exportParams1.setSheetName("检测计划");
sheet1.put("title", exportParams1);
sheet1.put("entity", ContrastPlanExcel.class);
sheet1.put("data", planExcelList);
sheetsList.add(0, sheet1);
ExcelUtil.exportExcel("检测计划导出数据.xlsx", sheetsList);
}
@Override
public void downloadTemplate(String patternId) {
String currrentScene = sysTestConfigService.getCurrrentScene();
@@ -549,8 +690,73 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
}
@Override
public boolean splitPlan(AdPlanParam.SplitParam param) {
return false;
public List<PqStandardDev> getUnBoundStandardDev(String fatherPlanId) {
return adPlanStandardDevMapper.listByPlanId(Collections.singletonList(fatherPlanId));
}
@Override
public List<PqStandardDev> getBoundStandardDev(String planId) {
return adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId));
}
@Override
@Transactional
public boolean updateSubPlanName(String planId, String name) {
AdPlan plan = new AdPlan();
plan.setId(planId);
plan.setName(name);
return this.updateById(plan);
}
@Override
public boolean updateBindDev(String planId, List<String> pqDevIds) {
List<AdPlan> list = new ArrayList<>();
AdPlan plan = this.getById(planId);
plan.setTestState(pqDevService.bind(planId, pqDevIds));
list.add(plan);
// 同时修改父计划的绑定
AdPlan fatherPlan = this.getById(plan.getFatherPlanId());
if (ObjectUtil.isNotNull(fatherPlan)) {
fatherPlan.setTestState(pqDevService.bind(fatherPlan.getId(), pqDevIds));
list.add(fatherPlan);
}
return this.updateBatchById(list);
}
@Override
@Transactional
public boolean updateBindStandardDev(String planId, List<String> standardDevIds) {
// 处理已有的
List<AdPlanStandardDev> adPlanStandardDevs = adPlanStandardDevService.listByPlanId(Collections.singletonList(planId));
// 同时修改父计划的绑定
AdPlan plan = this.getById(planId);
List<String> standardDevIds1 = adPlanStandardDevs.stream().map(AdPlanStandardDev::getStandardDevId).collect(Collectors.toList());
adPlanStandardDevService.addAdPlanStandardDev(plan.getFatherPlanId(), standardDevIds1);
adPlanStandardDevService.deleteAdPlanStandardDev(plan.getFatherPlanId(), standardDevIds);
adPlanStandardDevService.updateAdPlanStandardDev(planId, standardDevIds);
return true;
}
@Override
public void exportSubPlan(String planId, HttpServletResponse response) {
// 子计划数据
AdPlan subPlan = this.getById(planId);
//子计划绑定的标准设备
List<PqStandardDev> pqStandardDevs = adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId));
// 子计划绑定的被检设备
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanIdList(Collections.singletonList(planId));
List<PqDev> pqDevList = pqDevService.list(new QueryWrapper<PqDev>().eq("Plan_Id", planId));
List<PqDevSub> pqDevSubList = new ArrayList<>();
if (CollUtil.isNotEmpty(pqDevList)) {
pqDevSubList.addAll(pqDevSubService.list(new QueryWrapper<PqDevSub>().in("dev_Id", pqDevList.stream().map(PqDev::getId).collect(Collectors.toList()))));
}
}
/**
@@ -567,7 +773,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA)));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanId(planList.get(i).getId());
queryParam1.setPlanIdList(Arrays.asList(planList.get(i).getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1);
pqDevService.visualizeProvinceDev(pqDevVOList);
List<ProvinceDevExcel> deviceExportData = BeanUtil.copyToList(pqDevVOList, ProvinceDevExcel.class);
@@ -590,7 +796,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA)));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanId(planList.get(i).getId());
queryParam1.setPlanIdList(Arrays.asList(planList.get(i).getId()));
List<PqDevVO> pqDevs = pqDevMapper.selectByQueryParam(queryParam1);
pqDevService.visualizeCNDev(pqDevs);
List<CNDevExcel> deviceExportData = BeanUtil.copyToList(pqDevs, CNDevExcel.class);
@@ -642,7 +848,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
AdPlanParam adPlanParam = new AdPlanParam();
adPlanParam.setName(planExcel.getName());
adPlanParam.setPattern(patternId);
checkRepeat(adPlanParam, false);
checkRepeat(adPlanParam, false, CommonEnum.FATHER_ID.getValue());
String planId = UUID.randomUUID().toString().replaceAll("-", "");
adPlans.get(i).setId(planId);
@@ -722,7 +928,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
AdPlanParam adPlanParam = new AdPlanParam();
adPlanParam.setName(planExcel.getName());
adPlanParam.setPattern(patternId);
checkRepeat(adPlanParam, false);
checkRepeat(adPlanParam, false, CommonEnum.FATHER_ID.getValue());
String planId = UUID.randomUUID().toString().replaceAll("-", "");
adPlans.get(i).setId(planId);
@@ -938,11 +1144,12 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
* @param param 计划参数
* @param isExcludeSelf 是否排除自己
*/
private void checkRepeat(AdPlanParam param, boolean isExcludeSelf) {
private void checkRepeat(AdPlanParam param, boolean isExcludeSelf, String fatherPlanId) {
QueryWrapper<AdPlan> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("state", DataStateEnum.ENABLE.getCode())
.eq("Name", param.getName())
.eq("Pattern", param.getPattern());
.eq("Pattern", param.getPattern())
.eq("Father_Plan_Id", fatherPlanId);
if (isExcludeSelf) {
if (param instanceof AdPlanParam.UpdateParam) {
queryWrapper.ne("id", ((AdPlanParam.UpdateParam) param).getId());
@@ -950,7 +1157,11 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
}
int count = this.count(queryWrapper);
if (count > 0) {
throw new BusinessException(DetectionResponseEnum.PLAN_REPEATED);
if (!CommonEnum.FATHER_ID.getValue().equals(fatherPlanId)) {
throw new BusinessException(DetectionResponseEnum.PLAN_REPEATED_IN_SAME_LEVEL);
} else {
throw new BusinessException(DetectionResponseEnum.PLAN_REPEATED);
}
}
}
@@ -1109,12 +1320,26 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
List<PullDown> pullDowns = new ArrayList<>();
PullDown pullDown = null;
List<Map<String, Object>> maps = pqSourceService.listAllPqSource(patternId);
if (ObjectUtil.isNotEmpty(maps)) {
DictData dictData = dictDataService.getDictDataById(patternId);
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
} else {
List<Map<String, Object>> maps = pqSourceService.listAllPqSource(patternId);
if (ObjectUtil.isNotEmpty(maps)) {
pullDown = new PullDown();
pullDown.setFirstCol(1);
pullDown.setLastCol(1);
pullDown.setStrings(maps.stream().map(m -> (String) m.get("name")).collect(Collectors.toList()));
pullDowns.add(pullDown);
}
// 检测脚本
List<Map<String, Object>> maps1 = pqScriptService.listAllPqScript(null);
List<String> scriptNameList = maps1.stream().map(m -> (String) m.get("name")).collect(Collectors.toList());
pullDown = new PullDown();
pullDown.setFirstCol(1);
pullDown.setLastCol(1);
pullDown.setStrings(maps.stream().map(m -> (String) m.get("name")).collect(Collectors.toList()));
pullDown.setFirstCol(3);
pullDown.setLastCol(3);
pullDown.setStrings(scriptNameList);
pullDowns.add(pullDown);
}
@@ -1130,14 +1355,6 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
pullDowns.add(pullDown);
}
// 检测脚本
List<Map<String, Object>> maps1 = pqScriptService.listAllPqScript(null);
List<String> scriptNameList = maps1.stream().map(m -> (String) m.get("name")).collect(Collectors.toList());
pullDown = new PullDown();
pullDown.setFirstCol(3);
pullDown.setLastCol(3);
pullDown.setStrings(scriptNameList);
pullDowns.add(pullDown);
// 误差体系
List<Map<String, Object>> maps2 = pqErrSysService.listAllPqErrSys();
List<String> errSysNameList = maps2.stream().map(m -> (String) m.get("name")).collect(Collectors.toList());
@@ -1181,30 +1398,14 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
pullDown.setStrings(strings);
pullDowns.add(pullDown);
// 检测状态
// pullDown = new PullDown();
// pullDown.setFirstCol(9);
// pullDown.setLastCol(9);
// pullDown.setStrings(Arrays.asList(CheckStateEnum.UNCHECKED.getMsg(), CheckStateEnum.CHECKING.getMsg(), CheckStateEnum.CHECKED.getMsg()));
// pullDowns.add(pullDown);
// 报告生成状态
// pullDown = new PullDown();
// pullDown.setFirstCol(10);
// pullDown.setLastCol(10);
// pullDown.setStrings(Arrays.asList(PlanReportStateEnum.REPORT_STATE_NOT_GENERATED.getMsg(), PlanReportStateEnum.REPORT_STATE_PARTIALLY_GENERATED.getMsg(), PlanReportStateEnum.REPORT_STATE_ALL_GENERATED.getMsg()));
// pullDowns.add(pullDown);
//检测结果
// pullDown = new PullDown();
// pullDown.setFirstCol(11);
// pullDown.setLastCol(11);
// pullDown.setStrings(Arrays.asList(CheckResultEnum.UNCHECKED.getMsg(), CheckResultEnum.ACCORD.getMsg(), CheckResultEnum.UNCHECKED.getMsg()));
// pullDowns.add(pullDown);
switch (scene) {
case PROVINCE_PLATFORM:
List<PullDown> provinceDevPullDownList = pqDevService.getProvinceDevPullDownList(9);
List<PullDown> provinceDevPullDownList = null;
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
provinceDevPullDownList = pqDevService.getContrastDevPullDownList(9);
} else {
provinceDevPullDownList = pqDevService.getProvinceDevPullDownList(9);
}
pullDowns.addAll(provinceDevPullDownList);
break;
case LEAVE_FACTORY_TEST:

View File

@@ -1,6 +1,7 @@
package com.njcn.gather.plan.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.gather.plan.mapper.AdPlanSourceMapper;
import com.njcn.gather.plan.pojo.po.AdPlanSource;
@@ -44,9 +45,12 @@ public class AdPlanSourceServiceImpl extends ServiceImpl<AdPlanSourceMapper, AdP
@Override
@Transactional
public boolean deleteAdPlanSourceByPlanIds(List<String> planIds) {
QueryWrapper<AdPlanSource> queryWrapper = new QueryWrapper<>();
queryWrapper.in("ad_plan_source.Plan_Id", planIds);
return this.remove(queryWrapper);
if(CollectionUtils.isNotEmpty(planIds)){
QueryWrapper<AdPlanSource> queryWrapper = new QueryWrapper<>();
queryWrapper.in("ad_plan_source.Plan_Id", planIds);
return this.remove(queryWrapper);
}
return false;
}
@Override

View File

@@ -0,0 +1,75 @@
package com.njcn.gather.plan.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper;
import com.njcn.gather.plan.pojo.po.AdPlanStandardDev;
import com.njcn.gather.plan.service.IAdPlanStandardDevService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author caozehui
* @date 2025-07-16
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AdPlanStandardDevServiceImpl extends ServiceImpl<AdPlanStandardDevMapper, AdPlanStandardDev> implements IAdPlanStandardDevService {
@Override
public boolean addAdPlanStandardDev(String planId, List<String> standardDevIds) {
List<AdPlanStandardDev> adPlanStandardDevList = new ArrayList<>();
for (String standardDevId : standardDevIds) {
AdPlanStandardDev adPlanStandardDev = new AdPlanStandardDev();
adPlanStandardDev.setPlanId(planId);
adPlanStandardDev.setStandardDevId(standardDevId);
adPlanStandardDevList.add(adPlanStandardDev);
}
return this.saveBatch(adPlanStandardDevList);
}
@Override
public boolean updateAdPlanStandardDev(String planId, List<String> standardDevIds) {
this.deleteAdPlanStandardDev(Collections.singletonList(planId));
return this.addAdPlanStandardDev(planId, standardDevIds);
}
@Override
public boolean deleteAdPlanStandardDev(List<String> planIds) {
if (CollectionUtil.isNotEmpty(planIds)) {
QueryWrapper<AdPlanStandardDev> queryWrapper = new QueryWrapper<>();
queryWrapper.in("Plan_Id", planIds);
return this.remove(queryWrapper);
}
return false;
}
@Override
public boolean deleteAdPlanStandardDev(String planId, List<String> standardDevIds) {
if (CollectionUtil.isNotEmpty(standardDevIds)) {
QueryWrapper<AdPlanStandardDev> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("Plan_Id", planId).in("Standard_Dev_Id", standardDevIds);
return this.remove(queryWrapper);
}
return false;
}
@Override
public String getStandardDevNameStrByPlanId(String id) {
List<PqStandardDev> pqStandardDevs = this.baseMapper.listByPlanId(Collections.singletonList(id));
return pqStandardDevs.stream().map(PqStandardDev::getName).reduce((a, b) -> a + "," + b).orElse("");
}
@Override
public List<AdPlanStandardDev> listByPlanId(List<String> planIds) {
return this.lambdaQuery().in(AdPlanStandardDev::getPlanId, planIds).list();
}
}

View File

@@ -195,4 +195,5 @@ public interface DetectionValidMessage {
String CREATE_DATE_NOT_NULL = "投运日期不能为空";
String INSPECT_DATE_NOT_NULL = "定检日期不能为空";
String HARM_SYS_ID_NOT_BLANK = "谐波系统设备id不能为空";
String FATHER_PLAN_ID_FORMAT_ERROR = "父计划ID格式错误";
}

View File

@@ -68,7 +68,11 @@ public enum DetectionResponseEnum {
IMPORT_FLAG_NOT_UPDATE("A02091", "从谐波系统导入的设备不支持修改"),
CONNECTION_NOT_EXIST("A02092", "该连接不存在,请先在\"接线方式\"字典中添加"),
MONITOR_NUM_OUT_OF_RANGE("A02093", "检测点线路号超出范围,请检查线路号"),
MONITOR_NUM_REPEAT("A02094", "改被检设备下存在相同线路号的监测点");
MONITOR_NUM_REPEAT("A02094", "改被检设备下存在相同线路号的监测点"),
PLAN_HAS_CHILDREN("A02095", "该计划下存在子计划,请先删除子计划"),
PLAN_REPEATED_IN_SAME_LEVEL("A02096", "该父计划下存在同名的子计划"),
PLEASE_UNASSIGN_STANDARD_DEV("A02097","存在已分配给子计划的标准设备,请先解除分配" ),
PLEASE_UNASSIGN_DEVICE("A02098", "存在已分配给计划的被检设备,请先解除分配");
private final String code;

View File

@@ -1376,7 +1376,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
// 判断计划下所有设备是否都已归档,如果是则将计划改为已完成
// 查询该计划下所有设备的检测状态,是否有不为归档的
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(tempPqDevVO.getPlanId());
queryParam.setPlanIdList(Arrays.asList(tempPqDevVO.getPlanId()));
List<PqDevVO> pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam);
long count = pqDevVOList1.stream().filter(obj -> !CheckStateEnum.DOCUMENTED.getValue().equals(obj.getCheckState())).count();

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
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.DataStateEnum;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
@@ -112,5 +113,15 @@ public class SysUserController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
@GetMapping("/getAll")
@ApiOperation("获取所有用户")
public HttpResult<List<SysUser>> getAll() {
String methodDescribe = getMethodDescribe("getAll");
LogUtil.njcnDebug(log, "{},查询所有用户", methodDescribe);
List<SysUser> result = sysUserService.lambdaQuery().eq(SysUser::getState, DataStateEnum.ENABLE.getCode()).list();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}