设备台账
This commit is contained in:
@@ -116,6 +116,12 @@
|
|||||||
dev.Inspect_Date,
|
dev.Inspect_Date,
|
||||||
dev.Harm_Sys_Id,
|
dev.Harm_Sys_Id,
|
||||||
dev.Import_Flag,
|
dev.Import_Flag,
|
||||||
|
dev.Appearance,
|
||||||
|
dev.FunctionTest,
|
||||||
|
dev.Insulation,
|
||||||
|
dev.Communication,
|
||||||
|
dev.Delegate_Address,
|
||||||
|
dev.Engineering,
|
||||||
dev.State,
|
dev.State,
|
||||||
dev.Create_By,
|
dev.Create_By,
|
||||||
dev.Create_Time,
|
dev.Create_Time,
|
||||||
|
|||||||
@@ -137,6 +137,27 @@ public class PqDevParam {
|
|||||||
@ApiModelProperty("是否为导入设备")
|
@ApiModelProperty("是否为导入设备")
|
||||||
private Integer importFlag;
|
private Integer importFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty("外观检查")
|
||||||
|
private String appearance;
|
||||||
|
|
||||||
|
@ApiModelProperty("功能测试")
|
||||||
|
private String functionTest;
|
||||||
|
|
||||||
|
@ApiModelProperty("绝缘性实验")
|
||||||
|
private String insulation;
|
||||||
|
|
||||||
|
@ApiModelProperty("通讯功能测试")
|
||||||
|
private String communication;
|
||||||
|
|
||||||
|
@ApiModelProperty("委托方地址")
|
||||||
|
private String delegateAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("工程名称")
|
||||||
|
private String engineering;
|
||||||
|
|
||||||
|
@ApiModelProperty("检测人")
|
||||||
|
private String checkBy;
|
||||||
|
|
||||||
@ApiModelProperty("设备图片")
|
@ApiModelProperty("设备图片")
|
||||||
private List<MultipartFile> images;
|
private List<MultipartFile> images;
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,42 @@ public class PqDev extends BaseEntity implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Integer importFlag;
|
private Integer importFlag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 外观检查
|
||||||
|
*/
|
||||||
|
@TableField("Appearance")
|
||||||
|
private String appearance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能测试
|
||||||
|
*/
|
||||||
|
@TableField("FunctionTest")
|
||||||
|
private String functionTest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绝缘性实验
|
||||||
|
*/
|
||||||
|
@TableField("Insulation")
|
||||||
|
private String insulation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通讯功能测试
|
||||||
|
*/
|
||||||
|
@TableField("Communication")
|
||||||
|
private String communication;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 委托方地址
|
||||||
|
*/
|
||||||
|
@TableField("Delegate_Address")
|
||||||
|
private String delegateAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工程名称
|
||||||
|
*/
|
||||||
|
@TableField("Engineering")
|
||||||
|
private String engineering;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态:0-删除 1-正常
|
* 状态:0-删除 1-正常
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -14,4 +14,6 @@ public class PqDevImageVO {
|
|||||||
private String previewUrl;
|
private String previewUrl;
|
||||||
|
|
||||||
private String downloadUrl;
|
private String downloadUrl;
|
||||||
|
|
||||||
|
private String path;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class PqDevImageFileService {
|
|||||||
public static final int MAX_IMAGE_COUNT = 5;
|
public static final int MAX_IMAGE_COUNT = 5;
|
||||||
|
|
||||||
private static final Pattern UUID_JPG_FILE_NAME = Pattern.compile(
|
private static final Pattern UUID_JPG_FILE_NAME = Pattern.compile(
|
||||||
"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.jpg$"
|
"^([0-9a-f]{32}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\.jpg$"
|
||||||
);
|
);
|
||||||
private static final Pattern DEVICE_ID_PATTERN = Pattern.compile("^[A-Za-z0-9_-]{1,64}$");
|
private static final Pattern DEVICE_ID_PATTERN = Pattern.compile("^[A-Za-z0-9_-]{1,64}$");
|
||||||
private static final String INVALID_IMAGE_NAME = "图片文件名无效";
|
private static final String INVALID_IMAGE_NAME = "图片文件名无效";
|
||||||
@@ -114,7 +114,7 @@ public class PqDevImageFileService {
|
|||||||
if (image == null || image.isEmpty()) {
|
if (image == null || image.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String fileName = UUID.randomUUID().toString().toLowerCase(Locale.ROOT) + ".jpg";
|
String fileName = UUID.randomUUID().toString().replace("-", "").toLowerCase(Locale.ROOT) + ".jpg";
|
||||||
Path path = imagePath(devId, fileName);
|
Path path = imagePath(devId, fileName);
|
||||||
writeImage(path, PqDevImageSupport.processUploadToJpeg(image));
|
writeImage(path, PqDevImageSupport.processUploadToJpeg(image));
|
||||||
savedImages.add(buildImageVO(devId, fileName));
|
savedImages.add(buildImageVO(devId, fileName));
|
||||||
@@ -242,7 +242,8 @@ public class PqDevImageFileService {
|
|||||||
return new PqDevImageVO(
|
return new PqDevImageVO(
|
||||||
fileName,
|
fileName,
|
||||||
String.format(PREVIEW_URL, devId, fileName),
|
String.format(PREVIEW_URL, devId, fileName),
|
||||||
String.format(DOWNLOAD_URL, devId, fileName)
|
String.format(DOWNLOAD_URL, devId, fileName),
|
||||||
|
imagePath(devId, fileName).toString()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|||||||
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
||||||
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.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
import com.njcn.common.pojo.constant.PatternRegex;
|
import com.njcn.common.pojo.constant.PatternRegex;
|
||||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||||
@@ -101,6 +104,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
private final IPqDevCheckHistoryService pqDevCheckHistoryService;
|
private final IPqDevCheckHistoryService pqDevCheckHistoryService;
|
||||||
private final RestTemplateUtil restTemplateUtil;
|
private final RestTemplateUtil restTemplateUtil;
|
||||||
private final PqDevImageFileService pqDevImageFileService;
|
private final PqDevImageFileService pqDevImageFileService;
|
||||||
|
private final ObjectMapper objectMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<PqDevVO> listPqDevs(PqDevParam.QueryParam queryParam) {
|
public Page<PqDevVO> listPqDevs(PqDevParam.QueryParam queryParam) {
|
||||||
@@ -161,6 +165,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
pqDevSub.setCheckState(CheckStateEnum.UNCHECKED.getValue());
|
pqDevSub.setCheckState(CheckStateEnum.UNCHECKED.getValue());
|
||||||
pqDevSub.setReportState(DevReportStateEnum.UNCHECKED.getValue());
|
pqDevSub.setReportState(DevReportStateEnum.UNCHECKED.getValue());
|
||||||
pqDevSub.setCheckResult(CheckResultEnum.UNCHECKED.getValue());
|
pqDevSub.setCheckResult(CheckResultEnum.UNCHECKED.getValue());
|
||||||
|
pqDevSub.setCheckBy(pqDevParam.getCheckBy());
|
||||||
|
|
||||||
// 比对式设备添加监测点
|
// 比对式设备添加监测点
|
||||||
if (PatternEnum.CONTRAST.getValue().equals(dictDataService.getDictDataById(pqDevParam.getPattern()).getCode())) {
|
if (PatternEnum.CONTRAST.getValue().equals(dictDataService.getDictDataById(pqDevParam.getPattern()).getCode())) {
|
||||||
@@ -174,10 +179,47 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
boolean saved = this.save(pqDev);
|
boolean saved = this.save(pqDev);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
saveAddImages(id, pqDevParam.getImages());
|
saveAddImages(id, pqDevParam.getImages());
|
||||||
|
syncAppearanceSamplePhotos(id, pqDev);
|
||||||
}
|
}
|
||||||
return saved;
|
return saved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String rebuildAppearanceSamplePhotos(String appearanceJson, List<PqDevImageVO> images) {
|
||||||
|
Map<String, Object> appearance = new LinkedHashMap<>();
|
||||||
|
if (StrUtil.isNotBlank(appearanceJson)) {
|
||||||
|
try {
|
||||||
|
appearance.putAll(objectMapper.readValue(appearanceJson, new TypeReference<Map<String, Object>>() {
|
||||||
|
}));
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new BusinessException(CommonResponseEnum.FAIL, "Appearance JSON格式错误");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!appearance.containsKey("rows")) {
|
||||||
|
appearance.put("rows", Collections.emptyList());
|
||||||
|
}
|
||||||
|
List<Map<String, String>> samplePhotos = images.stream().map(image -> {
|
||||||
|
Map<String, String> samplePhoto = new LinkedHashMap<>();
|
||||||
|
samplePhoto.put("fileName", image.getFileName());
|
||||||
|
samplePhoto.put("path", image.getPath());
|
||||||
|
return samplePhoto;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
appearance.put("samplePhotos", samplePhotos);
|
||||||
|
try {
|
||||||
|
return objectMapper.writeValueAsString(appearance);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new BusinessException(CommonResponseEnum.FAIL, "Appearance JSON保存失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void syncAppearanceSamplePhotos(String devId, PqDev pqDev) {
|
||||||
|
List<PqDevImageVO> images = pqDevImageFileService.listImages(devId);
|
||||||
|
pqDev.setAppearance(rebuildAppearanceSamplePhotos(pqDev.getAppearance(), images));
|
||||||
|
this.lambdaUpdate()
|
||||||
|
.set(PqDev::getAppearance, pqDev.getAppearance())
|
||||||
|
.eq(PqDev::getId, devId)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
private void validateAddImages(List<MultipartFile> images) {
|
private void validateAddImages(List<MultipartFile> images) {
|
||||||
try {
|
try {
|
||||||
pqDevImageFileService.validateAddCount(images);
|
pqDevImageFileService.validateAddCount(images);
|
||||||
@@ -270,7 +312,12 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
}
|
}
|
||||||
boolean updated = this.updateById(pqDev);
|
boolean updated = this.updateById(pqDev);
|
||||||
if (updated) {
|
if (updated) {
|
||||||
|
pqDevSubService.lambdaUpdate()
|
||||||
|
.set(PqDevSub::getCheckBy, updateParam.getCheckBy())
|
||||||
|
.eq(PqDevSub::getDevId, updateParam.getId())
|
||||||
|
.update();
|
||||||
saveUpdateImages(updateParam);
|
saveUpdateImages(updateParam);
|
||||||
|
syncAppearanceSamplePhotos(updateParam.getId(), pqDev);
|
||||||
}
|
}
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
@@ -624,6 +671,8 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
if (CollUtil.isNotEmpty(ids)) {
|
if (CollUtil.isNotEmpty(ids)) {
|
||||||
list.addAll(this.baseMapper.listByDevIds(ids));
|
list.addAll(this.baseMapper.listByDevIds(ids));
|
||||||
}
|
}
|
||||||
|
SysUser user = StrUtil.isNotBlank(userId) ? userService.getById(userId) : null;
|
||||||
|
String checkByName = ObjectUtil.isNotNull(user) ? user.getName() : null;
|
||||||
|
|
||||||
for (PqDevVO pqDevVo : list) {
|
for (PqDevVO pqDevVo : list) {
|
||||||
if (result.containsKey(pqDevVo.getId())) {
|
if (result.containsKey(pqDevVo.getId())) {
|
||||||
@@ -631,7 +680,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
int i;
|
int i;
|
||||||
LambdaUpdateWrapper<PqDevSub> wrapper = new LambdaUpdateWrapper<PqDevSub>()
|
LambdaUpdateWrapper<PqDevSub> wrapper = new LambdaUpdateWrapper<PqDevSub>()
|
||||||
.set(PqDevSub::getCheckResult, result.get(pqDevVo.getId()))
|
.set(PqDevSub::getCheckResult, result.get(pqDevVo.getId()))
|
||||||
.set(StrUtil.isNotBlank(userId), PqDevSub::getCheckBy, userId)
|
.set(StrUtil.isBlank(pqDevVo.getCheckBy()) && StrUtil.isNotBlank(checkByName), PqDevSub::getCheckBy, checkByName)
|
||||||
.set(updateCheckNum && SourceOperateCodeEnum.ALL_TEST.getValue().equals(FormalTestManager.reCheckType), PqDevSub::getCheckEndTime, LocalDateTime.now())
|
.set(updateCheckNum && SourceOperateCodeEnum.ALL_TEST.getValue().equals(FormalTestManager.reCheckType), PqDevSub::getCheckEndTime, LocalDateTime.now())
|
||||||
.set(updateCheckNum && SourceOperateCodeEnum.ALL_TEST.getValue().equals(FormalTestManager.reCheckType) && ObjectUtil.isNotNull(FormalTestManager.checkStartTime), PqDevSub::getCheckStartTime, FormalTestManager.checkStartTime)
|
.set(updateCheckNum && SourceOperateCodeEnum.ALL_TEST.getValue().equals(FormalTestManager.reCheckType) && ObjectUtil.isNotNull(FormalTestManager.checkStartTime), PqDevSub::getCheckStartTime, FormalTestManager.checkStartTime)
|
||||||
.eq(PqDevSub::getDevId, pqDevVo.getId());
|
.eq(PqDevSub::getDevId, pqDevVo.getId());
|
||||||
@@ -738,7 +787,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
|||||||
w.set(ObjectUtil.isNotNull(FormalTestManager.checkStartTime), PqDevSub::getCheckStartTime, currentDevSub.getCheckStartTime());
|
w.set(ObjectUtil.isNotNull(FormalTestManager.checkStartTime), PqDevSub::getCheckStartTime, currentDevSub.getCheckStartTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotNull(user)) {
|
if (ObjectUtil.isNotNull(user) && (currentDevSub == null || StrUtil.isBlank(currentDevSub.getCheckBy()))) {
|
||||||
w.set(PqDevSub::getCheckBy, user.getName());
|
w.set(PqDevSub::getCheckBy, user.getName());
|
||||||
}
|
}
|
||||||
if (checkState.equals(CheckStateEnum.CHECKED.getValue())) {
|
if (checkState.equals(CheckStateEnum.CHECKED.getValue())) {
|
||||||
|
|||||||
Reference in New Issue
Block a user