[add] 新增查看设施坐标接口 [update] 修改进度计划相关逻辑

This commit is contained in:
lcj
2025-05-30 19:35:12 +08:00
parent 96a04b520f
commit 034e5b87a7
12 changed files with 453 additions and 37 deletions

View File

@ -0,0 +1,31 @@
package org.dromara.test;
import jakarta.annotation.Resource;
import org.dromara.facility.service.IFacPhotovoltaicPanelPartsService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
import java.util.List;
/**
* @author lcj
* @date 2025/5/30 9:48
*/
@SpringBootTest
public class DemoTest {
@Resource
private IFacPhotovoltaicPanelPartsService photovoltaicPanelPartsService;
@Test
void test() {
Boolean result = photovoltaicPanelPartsService
.updatePartsFinishStatus(
new Date(),
1897160897167638529L,
1927270270872109058L,
List.of("G01.01.01", "G01.08.06")
);
}
}

View File

@ -7,6 +7,7 @@ import org.dromara.facility.domain.dto.photovoltaicpanelparts.FacPhotovoltaicPan
import org.dromara.facility.domain.dto.photovoltaicpanelparts.FacPhotovoltaicPanelPartsCreateReq;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
@ -73,6 +74,15 @@ public interface IFacPhotovoltaicPanelPartsService {
*/
Boolean validPartsExistByPhotovoltaicPanel(Long projectId, Collection<String> photovoltaicPanelNames);
/**
* 更新光伏板点完成状态
*
* @param finishDate 完成时间
* @param projectId 项目id
* @param matrixId 方阵id
* @param photovoltaicPanelNameList 光伏板名称列表
* @return 是否更新成功
*/
Boolean updatePartsFinishStatus(Date finishDate, Long projectId, Long matrixId, List<String> photovoltaicPanelNameList);
}

View File

@ -3,6 +3,7 @@ package org.dromara.facility.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.HttpStatus;
@ -20,6 +21,8 @@ import org.dromara.facility.domain.FacPhotovoltaicPanelSupport;
import org.dromara.facility.domain.dto.geojson.FacFeatureByPoint;
import org.dromara.facility.domain.dto.photovoltaicpanelparts.FacPhotovoltaicPanelPartsCreateByGeoJsonReq;
import org.dromara.facility.domain.dto.photovoltaicpanelparts.FacPhotovoltaicPanelPartsCreateReq;
import org.dromara.facility.domain.enums.FacFinishStatusEnum;
import org.dromara.facility.domain.enums.FacFinishTypeEnum;
import org.dromara.facility.service.*;
import org.dromara.progress.constant.PgsProgressCategoryConstant;
import org.dromara.progress.domain.PgsProgressCategory;
@ -34,10 +37,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -547,6 +547,84 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan
return photovoltaicPanelSupportService.count(supportWrapper) > 0;
}
/**
* 更新光伏板点完成状态
*
* @param finishDate 完成时间
* @param projectId 项目id
* @param matrixId 方阵id
* @param photovoltaicPanelNameList 光伏板名称列表
* @return 是否更新成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updatePartsFinishStatus(Date finishDate, Long projectId, Long matrixId, List<String> photovoltaicPanelNameList) {
if (CollUtil.isEmpty(photovoltaicPanelNameList)) {
return true;
}
LambdaUpdateWrapper<FacPhotovoltaicPanelPoint> pointWrapper = new LambdaUpdateWrapper<>();
pointWrapper.eq(FacPhotovoltaicPanelPoint::getProjectId, projectId);
pointWrapper.eq(FacPhotovoltaicPanelPoint::getMatrixId, matrixId);
pointWrapper.and(query -> {
for (int i = 0; i < photovoltaicPanelNameList.size(); i++) {
String prefix = photovoltaicPanelNameList.get(i) + ".";
if (i == 0) {
query.likeRight(FacPhotovoltaicPanelPoint::getName, prefix);
} else {
query.or().likeRight(FacPhotovoltaicPanelPoint::getName, prefix);
}
}
});
pointWrapper.set(FacPhotovoltaicPanelPoint::getFinishDate, finishDate);
pointWrapper.set(FacPhotovoltaicPanelPoint::getFinishType, FacFinishTypeEnum.HAND.getValue());
pointWrapper.set(FacPhotovoltaicPanelPoint::getStatus, FacFinishStatusEnum.FINISH.getValue());
boolean updatePoint = photovoltaicPanelPointService.update(pointWrapper);
if (!updatePoint) {
throw new ServiceException("桩点信息更新失败", HttpStatus.ERROR);
}
LambdaUpdateWrapper<FacPhotovoltaicPanelColumn> columnWrapper = new LambdaUpdateWrapper<>();
columnWrapper.eq(FacPhotovoltaicPanelColumn::getProjectId, projectId);
columnWrapper.eq(FacPhotovoltaicPanelColumn::getMatrixId, matrixId);
columnWrapper.and(query -> {
for (int i = 0; i < photovoltaicPanelNameList.size(); i++) {
String prefix = photovoltaicPanelNameList.get(i) + ".";
if (i == 0) {
query.likeRight(FacPhotovoltaicPanelColumn::getName, prefix);
} else {
query.or().likeRight(FacPhotovoltaicPanelColumn::getName, prefix);
}
}
});
columnWrapper.set(FacPhotovoltaicPanelColumn::getFinishDate, finishDate);
columnWrapper.set(FacPhotovoltaicPanelColumn::getFinishType, FacFinishTypeEnum.HAND.getValue());
columnWrapper.set(FacPhotovoltaicPanelColumn::getStatus, FacFinishStatusEnum.FINISH.getValue());
boolean updateColumn = photovoltaicPanelColumnService.update(columnWrapper);
if (!updateColumn) {
throw new ServiceException("立柱信息更新失败", HttpStatus.ERROR);
}
LambdaUpdateWrapper<FacPhotovoltaicPanelSupport> supportWrapper = new LambdaUpdateWrapper<>();
supportWrapper.eq(FacPhotovoltaicPanelSupport::getProjectId, projectId);
supportWrapper.eq(FacPhotovoltaicPanelSupport::getMatrixId, matrixId);
supportWrapper.and(query -> {
for (int i = 0; i < photovoltaicPanelNameList.size(); i++) {
String prefix = photovoltaicPanelNameList.get(i) + ".";
if (i == 0) {
query.likeRight(FacPhotovoltaicPanelSupport::getName, prefix);
} else {
query.or().likeRight(FacPhotovoltaicPanelSupport::getName, prefix);
}
}
});
supportWrapper.set(FacPhotovoltaicPanelSupport::getFinishDate, finishDate);
supportWrapper.set(FacPhotovoltaicPanelSupport::getFinishType, FacFinishTypeEnum.HAND.getValue());
supportWrapper.set(FacPhotovoltaicPanelSupport::getStatus, FacFinishStatusEnum.FINISH.getValue());
boolean updateSupport = photovoltaicPanelSupportService.update(supportWrapper);
if (!updateSupport) {
throw new ServiceException("支架信息更新失败", HttpStatus.ERROR);
}
return true;
}
/**
* 校验名称是否重复
*

View File

@ -16,6 +16,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryQueryReq;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryUpdateReq;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryCoordinateVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryLastTimeVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo;
import org.dromara.progress.service.IPgsProgressCategoryService;
@ -71,6 +72,18 @@ public class PgsProgressCategoryController extends BaseController {
return R.ok(pgsProgressCategoryService.queryById(id));
}
/**
* 获取进度类别坐标信息
*
* @param id 主键
*/
@SaCheckPermission("progress:progressCategory:query")
@GetMapping("/coordinate/{id}")
public R<PgsProgressCategoryCoordinateVo> getCoordinate(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(pgsProgressCategoryService.getCoordinate(id));
}
/**
* 获取进度类别最后一次进度信息
*

View File

@ -0,0 +1,34 @@
package org.dromara.progress.domain.enums;
import lombok.Getter;
/**
* @author lcj
* @date 2025/5/30 14:59
*/
@Getter
public enum PgsCoordinateTypeEnum {
POINT("Point", 1),
POLYGON("Polygon", 2);
private final String text;
private final int value;
PgsCoordinateTypeEnum(String text, int value) {
this.text = text;
this.value = value;
}
// 根据 value 获取对应的 text
public static String getTextByValue(int value) {
for (PgsCoordinateTypeEnum type : values()) {
if (type.getValue() == value) {
return type.getText();
}
}
return null;
}
}

View File

@ -0,0 +1,30 @@
package org.dromara.progress.domain.vo.progresscategory;
import lombok.Data;
import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailDateVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* @author lcj
* @date 2025/5/30 10:53
*/
@Data
public class PgsProgressCategoryCoordinateVo implements Serializable {
@Serial
private static final long serialVersionUID = 9161894407675118073L;
/**
* 设施列表
*/
private List<PgsProgressCategoryFacilityVo> facilityList;
/**
* 进度计划列表
*/
private List<PgsProgressPlanDetailDateVo> detailList;
}

View File

@ -0,0 +1,49 @@
package org.dromara.progress.domain.vo.progresscategory;
import cn.hutool.json.JSONArray;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
/**
* @author lcj
* @date 2025/5/30 11:26
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PgsProgressCategoryFacilityVo {
/**
* 主键
*/
private Long id;
/**
* 光伏板名称
*/
private String name;
/**
* 位置
*/
private JSONArray positions;
/**
* 坐标类型
*/
private String type;
/**
* 完成状态0未开始 1进行中 2完成
*/
private String status;
/**
* 完成时间
*/
private LocalDate finishDate;
}

View File

@ -0,0 +1,30 @@
package org.dromara.progress.domain.vo.progressplandetail;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author lcj
* @date 2025/5/30 11:01
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PgsProgressPlanDetailDateVo {
/**
* 主键id
*/
private Long id;
/**
* 计划时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date;
}

View File

@ -6,6 +6,7 @@ import org.dromara.progress.domain.PgsProgressCategory;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryQueryReq;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryUpdateReq;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryCoordinateVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryLastTimeVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo;
@ -102,4 +103,12 @@ public interface IPgsProgressCategoryService extends IService<PgsProgressCategor
*/
Boolean insertByTemplate(Long projectId, List<Long> matrixIds);
/**
* 根据id获取进度类别坐标信息
*
* @param id 进度类别id
* @return 进度类别坐标信息
*/
PgsProgressCategoryCoordinateVo getCoordinate(Long id);
}

View File

@ -1,33 +1,47 @@
package org.dromara.progress.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.facility.domain.FacBoxTransformer;
import org.dromara.facility.domain.FacInverter;
import org.dromara.facility.domain.FacPercentageFacility;
import org.dromara.facility.domain.FacPhotovoltaicPanel;
import org.dromara.facility.service.IFacBoxTransformerService;
import org.dromara.facility.service.IFacInverterService;
import org.dromara.facility.service.IFacPercentageFacilityService;
import org.dromara.facility.service.IFacPhotovoltaicPanelService;
import org.dromara.progress.constant.PgsProgressCategoryConstant;
import org.dromara.progress.domain.PgsProgressCategory;
import org.dromara.progress.domain.PgsProgressCategoryTemplate;
import org.dromara.progress.domain.PgsProgressPlan;
import org.dromara.progress.domain.PgsProgressPlanDetail;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryQueryReq;
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryUpdateReq;
import org.dromara.progress.domain.enums.PgsCoordinateTypeEnum;
import org.dromara.progress.domain.enums.PgsFinishStatusEnum;
import org.dromara.progress.domain.enums.PgsProgressUnitTypeEnum;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryCoordinateVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryFacilityVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryLastTimeVo;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo;
import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailDateVo;
import org.dromara.progress.mapper.PgsProgressCategoryMapper;
import org.dromara.progress.service.IPgsProgressCategoryService;
import org.dromara.progress.service.IPgsProgressCategoryTemplateService;
import org.dromara.progress.service.IPgsProgressPlanDetailService;
import org.dromara.progress.service.IPgsProgressPlanService;
import org.dromara.utils.BigDecimalUtil;
import org.dromara.utils.JsonDimensionUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@ -58,6 +72,22 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
@Resource
private IPgsProgressPlanService progressPlanService;
@Lazy
@Resource
private IPgsProgressPlanDetailService progressPlanDetailService;
@Lazy
@Resource
private IFacPhotovoltaicPanelService photovoltaicPanelService;
@Lazy
@Resource
private IFacBoxTransformerService boxTransformerService;
@Lazy
@Resource
private IFacInverterService inverterService;
/**
* 查询进度类别
*
@ -236,7 +266,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
*/
@Override
public LambdaQueryWrapper<PgsProgressCategory> buildQueryWrapper(PgsProgressCategoryQueryReq req) {
LambdaQueryWrapper<PgsProgressCategory> lqw = Wrappers.lambdaQuery();
LambdaQueryWrapper<PgsProgressCategory> lqw = new LambdaQueryWrapper<>();
if (req == null) {
return lqw;
}
@ -362,6 +392,91 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
return true;
}
/**
* 根据id获取进度类别坐标信息
*
* @param id 进度类别id
* @return 进度类别坐标信息
*/
@Override
public PgsProgressCategoryCoordinateVo getCoordinate(Long id) {
PgsProgressCategory progressCategory = this.getById(id);
if (progressCategory == null) {
throw new ServiceException("进度类别信息不存在", HttpStatus.NOT_FOUND);
}
String workType = progressCategory.getWorkType();
List<PgsProgressCategoryFacilityVo> facilityList;
PgsProgressCategoryCoordinateVo coordinateVo = new PgsProgressCategoryCoordinateVo();
if (PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_PROGRESS_CATEGORY_WORK_TYPE.contains(workType)) {
List<FacPhotovoltaicPanel> list = photovoltaicPanelService.lambdaQuery()
.eq(FacPhotovoltaicPanel::getProjectId, progressCategory.getProjectId())
.eq(FacPhotovoltaicPanel::getMatrixId, progressCategory.getMatrixId())
.eq(FacPhotovoltaicPanel::getProgressCategoryId, progressCategory.getId())
.list();
facilityList = list.stream().map(fac -> {
JSONArray jsonArray = JSONUtil.parseArray(fac.getPositions());
int depth = JsonDimensionUtil.getJsonArrayDepth(jsonArray);
return new PgsProgressCategoryFacilityVo(
fac.getId(),
fac.getName(),
jsonArray,
PgsCoordinateTypeEnum.getTextByValue(depth),
fac.getStatus(),
fac.getFinishDate()
);
}).toList();
} else if (PgsProgressCategoryConstant.INVERTER_PROGRESS_CATEGORY_WORK_TYPE.contains(workType)) {
List<FacInverter> list = inverterService.lambdaQuery()
.eq(FacInverter::getProjectId, progressCategory.getProjectId())
.eq(FacInverter::getMatrixId, progressCategory.getMatrixId())
.eq(FacInverter::getProgressCategoryId, progressCategory.getId())
.list();
facilityList = list.stream().map(fac -> {
JSONArray jsonArray = JSONUtil.parseArray(fac.getPositions());
int depth = JsonDimensionUtil.getJsonArrayDepth(jsonArray);
return new PgsProgressCategoryFacilityVo(
fac.getId(),
fac.getName(),
jsonArray,
PgsCoordinateTypeEnum.getTextByValue(depth),
fac.getStatus(),
fac.getFinishDate()
);
}).toList();
} else if (PgsProgressCategoryConstant.BOX_TRANSFORMER_PROGRESS_CATEGORY_WORK_TYPE.contains(workType)) {
List<FacBoxTransformer> list = boxTransformerService.lambdaQuery()
.eq(FacBoxTransformer::getProjectId, progressCategory.getProjectId())
.eq(FacBoxTransformer::getMatrixId, progressCategory.getMatrixId())
.eq(FacBoxTransformer::getProgressCategoryId, progressCategory.getId())
.list();
facilityList = list.stream().map(fac -> {
JSONArray jsonArray = JSONUtil.parseArray(fac.getPositions());
int depth = JsonDimensionUtil.getJsonArrayDepth(jsonArray);
return new PgsProgressCategoryFacilityVo(
fac.getId(),
fac.getName(),
jsonArray,
PgsCoordinateTypeEnum.getTextByValue(depth),
fac.getStatus(),
fac.getFinishDate()
);
}).toList();
} else {
return coordinateVo;
}
List<PgsProgressPlanDetailDateVo> detailList = progressPlanDetailService.lambdaQuery()
.select(PgsProgressPlanDetail::getId, PgsProgressPlanDetail::getDate)
.eq(PgsProgressPlanDetail::getProgressCategoryId, id)
.orderByAsc(PgsProgressPlanDetail::getDate)
.list()
.stream().map(detail ->
new PgsProgressPlanDetailDateVo(detail.getId(), detail.getDate()))
.toList();
coordinateVo.setDetailList(detailList);
coordinateVo.setFacilityList(facilityList);
return coordinateVo;
}
/**
* 根据子节点完成状态获取父节点完成状态
*

View File

@ -21,6 +21,7 @@ import org.dromara.facility.domain.enums.FacFinishStatusEnum;
import org.dromara.facility.domain.enums.FacFinishTypeEnum;
import org.dromara.facility.service.IFacBoxTransformerService;
import org.dromara.facility.service.IFacInverterService;
import org.dromara.facility.service.IFacPhotovoltaicPanelPartsService;
import org.dromara.facility.service.IFacPhotovoltaicPanelService;
import org.dromara.progress.constant.PgsProgressCategoryConstant;
import org.dromara.progress.domain.PgsProgressCategory;
@ -47,7 +48,6 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* 进度计划详情Service业务层处理
@ -75,6 +75,9 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
@Resource
private IPgsProgressCategoryService progressCategoryService;
@Resource
private IFacPhotovoltaicPanelPartsService photovoltaicPanelPartsService;
/**
* 插入进度计划详情设施
*
@ -94,6 +97,11 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
if (progressPlanDetail == null) {
throw new ServiceException("进度计划详情信息不存在", HttpStatus.NOT_FOUND);
}
// todo 判断完成时间是否大于当前时间
Date planDate = progressPlanDetail.getDate();
/* if (planDate.after(new Date())) {
throw new ServiceException("完成时间不能大于当前时间", HttpStatus.BAD_REQUEST);
}*/
Long projectId = progressPlanDetail.getProjectId();
Long progressCategoryId = progressPlanDetail.getProgressCategoryId();
PgsProgressCategory progressCategory = progressCategoryService.getById(progressCategoryId);
@ -115,7 +123,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
projectId,
progressCategoryId,
finishedDetailIdList,
progressPlanDetail.getDate(),
planDate,
photovoltaicPanelService,
FacPhotovoltaicPanel::getId,
FacPhotovoltaicPanel::getName,
@ -127,32 +135,17 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
FacPhotovoltaicPanel::getStatus
);
finishedDetailList.addAll(finishedVoList);
// 更新光伏板时,更新关联的钻孔、桩基、支架信息
if (PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_WORK_TYPE.equals(workType)) {
List<FacPhotovoltaicPanel> photovoltaicPanelList = photovoltaicPanelService.lambdaQuery()
.eq(FacPhotovoltaicPanel::getProjectId, projectId)
.eq(FacPhotovoltaicPanel::getMatrixId, progressCategory.getMatrixId())
.in(FacPhotovoltaicPanel::getProgressCategoryId, PgsProgressCategoryConstant.RELEVANCE_PHOTOVOLTAIC_PANEL_WORK_TYPE)
.list();
Map<Long, List<FacPhotovoltaicPanel>> map = photovoltaicPanelList
.stream().collect(Collectors.groupingBy(FacPhotovoltaicPanel::getProgressCategoryId));
// 批量更新关联的光伏板信息
boolean update = photovoltaicPanelService.lambdaUpdate()
.eq(FacPhotovoltaicPanel::getProjectId, projectId)
.in(FacPhotovoltaicPanel::getProgressCategoryId, PgsProgressCategoryConstant.RELEVANCE_PHOTOVOLTAIC_PANEL_WORK_TYPE)
.eq(FacPhotovoltaicPanel::getMatrixId, progressCategory.getMatrixId())
.set(FacPhotovoltaicPanel::getStatus, FacFinishStatusEnum.FINISH.getValue())
.set(FacPhotovoltaicPanel::getFinishType, FacFinishTypeEnum.HAND.getValue())
.set(FacPhotovoltaicPanel::getFinishDate, progressPlanDetail.getDate())
.update();
if (!update) {
throw new ServiceException("更新设施信息异常", HttpStatus.ERROR);
}
// todo
for (Map.Entry<Long, List<FacPhotovoltaicPanel>> entry : map.entrySet()) {
Long key = entry.getKey();
List<FacPhotovoltaicPanel> value = entry.getValue();
// 封装计划详情
// 如果是桩点、支柱、立架,则同步更新
if (PgsProgressCategoryConstant.RELEVANCE_PHOTOVOLTAIC_PANEL_WORK_TYPE.contains(workType)) {
Long matrixId = progressCategory.getMatrixId();
List<String> nameList = finishedDetailList.stream().map(PgsProgressPlanDetailFinishedVo::getName).toList();
Boolean result = photovoltaicPanelPartsService.updatePartsFinishStatus(
planDate,
projectId,
matrixId,
nameList);
if (!result) {
throw new ServiceException("同步更新设施失败", HttpStatus.ERROR);
}
}
} else if (PgsProgressCategoryConstant.INVERTER_PROGRESS_CATEGORY_WORK_TYPE.contains(workType)) {
@ -160,7 +153,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
projectId,
progressCategoryId,
finishedDetailIdList,
progressPlanDetail.getDate(),
planDate,
inverterService,
FacInverter::getId,
FacInverter::getName,
@ -177,7 +170,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
projectId,
progressCategoryId,
finishedDetailIdList,
progressPlanDetail.getDate(),
planDate,
boxTransformerService,
FacBoxTransformer::getId,
FacBoxTransformer::getName,

View File

@ -0,0 +1,24 @@
package org.dromara.utils;
import cn.hutool.json.JSONArray;
/**
* @author lcj
* @date 2025/5/30 14:55
*/
public class JsonDimensionUtil {
/**
* 判断 JSONArray 的嵌套维度
*
* @param array 需要判断的 JSONArray
* @return 返回维度层级1 表示一维2 表示二维3 表示三维 ...
*/
public static int getJsonArrayDepth(Object array) {
if (array instanceof JSONArray jsonArray && !jsonArray.isEmpty()) {
return 1 + getJsonArrayDepth(jsonArray.getFirst());
}
return 0;
}
}