From a1ba33c06d36438933f43b583bb3450e76cec3b3 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Mon, 29 Sep 2025 17:06:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E8=AE=A1=E5=88=92=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E3=80=81=E5=A4=A7=E5=B1=8F=E6=91=84=E5=83=8F=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/org/dromara/test/DemoTest.java | 17 +- .../ProjectBigScreenController.java | 46 +++- .../domain/dto/Ys7DeviceUpdateReq.java | 40 +++ .../IncSyncPlanDetail2ConstructionValue.java | 13 +- .../PgsProgressPlanDetailServiceImpl.java | 255 ++++++++++++------ 5 files changed, 281 insertions(+), 90 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/Ys7DeviceUpdateReq.java diff --git a/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/DemoTest.java b/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/DemoTest.java index 7b11819f..3ee8d430 100644 --- a/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/DemoTest.java +++ b/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/DemoTest.java @@ -34,9 +34,7 @@ import org.springframework.boot.test.context.SpringBootTest; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.DayOfWeek; import java.time.LocalDate; -import java.time.temporal.TemporalAdjusters; import java.util.Date; import java.util.List; import java.util.Map; @@ -91,7 +89,7 @@ public class DemoTest { @Test void testConstructionValue() { - LocalDate today = LocalDate.now(); +/* LocalDate today = LocalDate.now(); // 找到本周一 LocalDate thisMonday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 上周一 = 本周一 - 1 周 @@ -99,7 +97,18 @@ public class DemoTest { // 上周日 = 上周一 + 6 天 LocalDate lastSunday = lastMonday.plusDays(6); log.info("执行定时任务:同步 {}至{} 计划详情到施工产值", lastMonday, lastSunday); - Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(lastMonday, lastSunday, null); + Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(lastMonday, lastSunday, null);*/ + + LocalDate today = LocalDate.of(2025, 9, 16); + LocalDate localDate = today.minusDays(1); +/* // 找到本周一 + LocalDate thisMonday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + // 上周一 = 本周一 - 1 周 + LocalDate lastMonday = thisMonday.minusWeeks(1); + // 上周日 = 上周一 + 6 天 + LocalDate lastSunday = lastMonday.plusDays(6);*/ + log.info("执行定时任务:同步 {}至{} 计划详情到施工产值", localDate, localDate); + Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(localDate, localDate, null); } @Test diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java index e0f6119f..222812cd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java @@ -5,15 +5,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.dromara.bigscreen.domain.dto.Ys7DeviceUpdateReq; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectLandVo; import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; import org.dromara.bigscreen.domain.vo.ProjectSafetyInspectionVo; import org.dromara.bigscreen.service.ProjectBigScreenService; +import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.web.core.BaseController; import org.dromara.gps.domain.bo.GpsEquipmentBo; import org.dromara.gps.domain.vo.GpsEquipmentSonVo; import org.dromara.gps.service.IGpsEquipmentService; @@ -22,6 +26,7 @@ import org.dromara.land.domain.BusLandTransferLedger; import org.dromara.land.service.IBusLandBlockService; import org.dromara.land.service.IBusLandTransferLedgerService; import org.dromara.manager.weathermanager.vo.WeatherVo; +import org.dromara.manager.ys7manager.Ys7Manager; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.service.IOthYs7DeviceService; import org.dromara.project.domain.vo.project.BusProjectSafetyDayVo; @@ -34,6 +39,7 @@ import org.dromara.quality.service.IQltQualityInspectionService; import org.dromara.safety.domain.dto.safetyinspection.HseSafetyInspectionGisReq; import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionListGisVo; import org.dromara.safety.service.IHseSafetyInspectionService; +import org.springframework.beans.BeanUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -54,7 +60,7 @@ import java.util.stream.Collectors; @RestController @RequiredArgsConstructor @RequestMapping("/project/big/screen") -public class ProjectBigScreenController { +public class ProjectBigScreenController extends BaseController { @Resource private ProjectBigScreenService projectBigScreenService; @@ -75,6 +81,8 @@ public class ProjectBigScreenController { private final IHseSafetyInspectionService safetyInspectionService; + private final Ys7Manager ys7Manager; + /** * 查询项目土地统计 */ @@ -316,6 +324,7 @@ public class ProjectBigScreenController { sxt.put("lat", item.getLatitude()); sxt.put("lng", item.getLongitude()); sxt.put("alt", item.getAltitude()); + sxt.put("detail", item.getDetail()); sxtChildrenMap.add(sxt); } } @@ -341,6 +350,41 @@ public class ProjectBigScreenController { return R.ok(maps); } + /** + * 修改萤石摄像头 + */ + @RepeatSubmit() + @PutMapping("/device") + public R edit(@Validated @RequestBody Ys7DeviceUpdateReq req) { + OthYs7Device one = othYs7DeviceService.lambdaQuery() + .eq(OthYs7Device::getDeviceSerial, req.getDeviceSerial()) + .last("limit 1") + .one(); + if (one == null) { + throw new ServiceException("萤石摄像头信息不存在", HttpStatus.NOT_FOUND); + } + // 将实体类和 DTO 进行转换 + OthYs7Device ys7Device = new OthYs7Device(); + BeanUtils.copyProperties(req, ys7Device); + ys7Device.setId(one.getId()); + // 判断是否更新名称 + String deviceName = req.getDeviceName(); + if (deviceName != null && !deviceName.equals(one.getDeviceName())) { + Long count = othYs7DeviceService.lambdaQuery() + .eq(OthYs7Device::getDeviceName, req.getDeviceName()) + .count(); + if (count > 0) { + throw new ServiceException("已存在同名萤石摄像头", HttpStatus.CONFLICT); + } + // todo 更新云端名称 +/* Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName); + if (!result) { + throw new ServiceException("更新云端萤石摄像头名称异常", HttpStatus.ERROR); + }*/ + } + return toAjax(othYs7DeviceService.updateById(ys7Device)); + } + /** * 查询质量信息 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/Ys7DeviceUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/Ys7DeviceUpdateReq.java new file mode 100644 index 00000000..c3556c45 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/Ys7DeviceUpdateReq.java @@ -0,0 +1,40 @@ +package org.dromara.bigscreen.domain.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025/6/13 10:19 + */ +@Data +public class Ys7DeviceUpdateReq implements Serializable { + + @Serial + private static final long serialVersionUID = -3434796275594146484L; + + /** + * 设备序列号 + */ + @NotBlank(message = "设备序列号不能为空") + private String deviceSerial; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 设备详情 + */ + private String detail; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncPlanDetail2ConstructionValue.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncPlanDetail2ConstructionValue.java index 8787068a..9f3dbd8f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncPlanDetail2ConstructionValue.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncPlanDetail2ConstructionValue.java @@ -6,9 +6,7 @@ import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.time.DayOfWeek; import java.time.LocalDate; -import java.time.temporal.TemporalAdjusters; /** * 同步计划详情到施工产值 @@ -26,17 +24,18 @@ public class IncSyncPlanDetail2ConstructionValue { /** * 同步计划详情到施工产值(每天 1 点执行) */ - @Scheduled(cron = "0 0 2 ? * MON") + @Scheduled(cron = "0 0 1 * * ?") public void run() { LocalDate today = LocalDate.now(); - // 找到本周一 + LocalDate localDate = today.minusDays(1); +/* // 找到本周一 LocalDate thisMonday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 上周一 = 本周一 - 1 周 LocalDate lastMonday = thisMonday.minusWeeks(1); // 上周日 = 上周一 + 6 天 - LocalDate lastSunday = lastMonday.plusDays(6); - log.info("执行定时任务:同步 {}至{} 计划详情到施工产值", lastMonday, lastSunday); - Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(lastMonday, lastSunday, null); + LocalDate lastSunday = lastMonday.plusDays(6);*/ + log.info("执行定时任务:同步 {}至{} 计划详情到施工产值", localDate, localDate); + Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(localDate, localDate, null); if (synced) { log.info("同步计划详情到施工产值成功"); } else { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java index 60f0384a..cb64e2f0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java @@ -66,7 +66,9 @@ import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URISyntaxException; +import java.time.DayOfWeek; import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -893,93 +895,190 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl oldRangeList = constructionValueRangeService.lambdaQuery() + .eq(OutConstructionValueRange::getStartDate, monday) + .eq(OutConstructionValueRange::getEndDate, sunday) + .in(OutConstructionValueRange::getProjectId, allProjectIds) + .list(); + // 过滤出没有值的项目 + List haveProjectIds = oldRangeList.stream() + .map(OutConstructionValueRange::getProjectId) + .toList(); + List noValueProjectIds = allProjectIds.stream() + .filter(p -> !haveProjectIds.contains(p)) + .toList(); // 根据项目区分 Map> detailMap = planDetailList.stream() .collect(Collectors.groupingBy(PgsProgressPlanDetail::getProjectId)); List saveList = new ArrayList<>(); - LocalDate now = LocalDate.now(); List allUpdateList = new ArrayList<>(); - List ranges = allProjectIds.stream().map(id -> { - OutConstructionValueRange range = new OutConstructionValueRange(); - long rangeId = IdWorker.getId(range); - range.setId(rangeId); - range.setProjectId(id); - range.setStartDate(startDate); - range.setEndDate(endDate); - // 获取所有子项目 - List subProject = new ArrayList<>(projectList.stream() - .filter(project -> Objects.equals(project.getPId(), id)) - .map(BusProject::getId) - .distinct() - .toList()); - subProject.add(id); - List detailList = new ArrayList<>(); - for (Long p : subProject) { - List details = detailMap.getOrDefault(p, List.of()); - detailList.addAll(details); - } - if (CollUtil.isEmpty(detailList)) { - return null; - } - BigDecimal allConstructionValue = BigDecimal.ZERO; - BigDecimal allOwnerValue = BigDecimal.ZERO; - List updateList = new ArrayList<>(); - for (PgsProgressPlanDetail planDetail : detailList) { - OutConstructionValue value = new OutConstructionValue(); - Long progressCategoryId = planDetail.getProgressCategoryId(); - PgsProgressCategory category = categoryMap.get(progressCategoryId); - if (category == null) { - continue; + if (CollUtil.isNotEmpty(noValueProjectIds)) { + List ranges = noValueProjectIds.stream().map(id -> { + OutConstructionValueRange range = new OutConstructionValueRange(); + long rangeId = IdWorker.getId(range); + range.setId(rangeId); + range.setProjectId(id); + range.setStartDate(startDate); + range.setEndDate(endDate); + // 获取所有子项目 + List subProject = new ArrayList<>(projectList.stream() + .filter(project -> Objects.equals(project.getPId(), id)) + .map(BusProject::getId) + .distinct() + .toList()); + subProject.add(id); + List detailList = new ArrayList<>(); + for (Long p : subProject) { + List details = detailMap.getOrDefault(p, List.of()); + detailList.addAll(details); } - value.setProjectId(id); - value.setRangeId(rangeId); - value.setMatrixId(category.getMatrixId()); - value.setProgressCategoryId(progressCategoryId); - value.setDetailId(planDetail.getId()); - BigDecimal finishedNumber = planDetail.getFinishedNumber(); - BigDecimal aiFill = planDetail.getAiFill(); - // 如果完成数量为0, 则不保存 - if (finishedNumber.compareTo(BigDecimal.ZERO) == 0) { - continue; + if (CollUtil.isEmpty(detailList)) { + return null; + } + BigDecimal allConstructionValue = BigDecimal.ZERO; + BigDecimal allOwnerValue = BigDecimal.ZERO; + List updateList = new ArrayList<>(); + for (PgsProgressPlanDetail planDetail : detailList) { + OutConstructionValue value = new OutConstructionValue(); + Long progressCategoryId = planDetail.getProgressCategoryId(); + PgsProgressCategory category = categoryMap.get(progressCategoryId); + if (category == null) { + continue; + } + value.setProjectId(id); + value.setRangeId(rangeId); + value.setMatrixId(category.getMatrixId()); + value.setProgressCategoryId(progressCategoryId); + value.setDetailId(planDetail.getId()); + BigDecimal finishedNumber = planDetail.getFinishedNumber(); + BigDecimal aiFill = planDetail.getAiFill(); + // 如果完成数量为0, 则不保存 + if (finishedNumber.compareTo(BigDecimal.ZERO) == 0) { + continue; + } + value.setArtificialNum(finishedNumber.subtract(aiFill).intValue()); + value.setUavNum(aiFill.intValue()); + value.setPlanNum(planDetail.getPlanNumber().intValue()); + value.setReportDate(now.minusDays(1)); + value.setPlanDate(planDetail.getDate()); + // 计算产值 + BigDecimal constructionPrice = category.getConstructionPrice(); + BigDecimal ownerPrice = category.getOwnerPrice(); + BigDecimal constructionValue = constructionPrice.multiply(finishedNumber).setScale(4, RoundingMode.HALF_UP); + BigDecimal ownerValue = ownerPrice.multiply(finishedNumber).setScale(4, RoundingMode.HALF_UP); + value.setOutValue(constructionValue); + value.setOwnerValue(ownerValue); + // 统计总产值 + allConstructionValue = allConstructionValue.add(constructionValue).setScale(4, RoundingMode.HALF_UP); + allOwnerValue = allOwnerValue.add(ownerValue).setScale(4, RoundingMode.HALF_UP); + // 添加需要修改状态的计划详情 + PgsProgressPlanDetail update = new PgsProgressPlanDetail(); + update.setId(planDetail.getId()); + update.setStatus("2"); + updateList.add(update); + saveList.add(value); + } + range.setOutValue(allConstructionValue); + range.setOwnerValue(allOwnerValue); + // 如果产值都为0,则不保存 + if (allConstructionValue.compareTo(BigDecimal.ZERO) == 0 && allOwnerValue.compareTo(BigDecimal.ZERO) == 0) { + return null; + } + allUpdateList.addAll(updateList); + return range; + }).filter(Objects::nonNull).toList(); + // 保存数据 + if (CollUtil.isNotEmpty(ranges)) { + boolean saveBatch = constructionValueRangeService.saveBatch(ranges); + if (!saveBatch) { + throw new ServiceException("同步计划详情到施工产值失败,数据库异常", HttpStatus.ERROR); } - value.setArtificialNum(finishedNumber.subtract(aiFill).intValue()); - value.setUavNum(aiFill.intValue()); - value.setPlanNum(planDetail.getPlanNumber().intValue()); - value.setReportDate(now); - value.setPlanDate(planDetail.getDate()); - // 计算产值 - BigDecimal constructionPrice = category.getConstructionPrice(); - BigDecimal ownerPrice = category.getOwnerPrice(); - BigDecimal constructionValue = constructionPrice.multiply(finishedNumber).setScale(4, RoundingMode.HALF_UP); - BigDecimal ownerValue = ownerPrice.multiply(finishedNumber).setScale(4, RoundingMode.HALF_UP); - value.setOutValue(constructionValue); - value.setOwnerValue(ownerValue); - // 统计总产值 - allConstructionValue = allConstructionValue.add(constructionValue).setScale(4, RoundingMode.HALF_UP); - allOwnerValue = allOwnerValue.add(ownerValue).setScale(4, RoundingMode.HALF_UP); - // 添加需要修改状态的计划详情 - PgsProgressPlanDetail update = new PgsProgressPlanDetail(); - update.setId(planDetail.getId()); - update.setStatus("2"); - updateList.add(update); - saveList.add(value); - } - range.setOutValue(allConstructionValue); - range.setOwnerValue(allOwnerValue); - // 如果产值都为0,则不保存 - if (allConstructionValue.compareTo(BigDecimal.ZERO) == 0 && allOwnerValue.compareTo(BigDecimal.ZERO) == 0) { - return null; - } - allUpdateList.addAll(updateList); - return range; - }).filter(Objects::nonNull).toList(); - // 保存数据 - if (CollUtil.isNotEmpty(ranges)) { - boolean saveBatch = constructionValueRangeService.saveBatch(ranges); - if (!saveBatch) { - throw new ServiceException("同步计划详情到施工产值失败,数据库异常", HttpStatus.ERROR); } } + if (CollUtil.isNotEmpty(haveProjectIds)) { + List ranges = oldRangeList.stream().map(range -> { + // 获取所有子项目 + List subProject = new ArrayList<>(projectList.stream() + .filter(project -> Objects.equals(project.getPId(), range.getProjectId())) + .map(BusProject::getId) + .distinct() + .toList()); + subProject.add(range.getProjectId()); + List detailList = new ArrayList<>(); + for (Long p : subProject) { + List details = detailMap.getOrDefault(p, List.of()); + detailList.addAll(details); + } + if (CollUtil.isEmpty(detailList)) { + return null; + } + BigDecimal allConstructionValue = range.getOutValue(); + BigDecimal allOwnerValue = range.getOwnerValue(); + List updateList = new ArrayList<>(); + for (PgsProgressPlanDetail planDetail : detailList) { + OutConstructionValue value = new OutConstructionValue(); + Long progressCategoryId = planDetail.getProgressCategoryId(); + PgsProgressCategory category = categoryMap.get(progressCategoryId); + if (category == null) { + continue; + } + value.setProjectId(range.getProjectId()); + value.setRangeId(range.getId()); + value.setMatrixId(category.getMatrixId()); + value.setProgressCategoryId(progressCategoryId); + value.setDetailId(planDetail.getId()); + BigDecimal finishedNumber = planDetail.getFinishedNumber(); + BigDecimal aiFill = planDetail.getAiFill(); + // 如果完成数量为0, 则不保存 + if (finishedNumber.compareTo(BigDecimal.ZERO) == 0) { + continue; + } + value.setArtificialNum(finishedNumber.subtract(aiFill).intValue()); + value.setUavNum(aiFill.intValue()); + value.setPlanNum(planDetail.getPlanNumber().intValue()); + value.setReportDate(now.minusDays(1)); + value.setPlanDate(planDetail.getDate()); + // 计算产值 + BigDecimal constructionPrice = category.getConstructionPrice(); + BigDecimal ownerPrice = category.getOwnerPrice(); + BigDecimal constructionValue = constructionPrice.multiply(finishedNumber).setScale(4, RoundingMode.HALF_UP); + BigDecimal ownerValue = ownerPrice.multiply(finishedNumber).setScale(4, RoundingMode.HALF_UP); + value.setOutValue(constructionValue); + value.setOwnerValue(ownerValue); + // 统计总产值 + allConstructionValue = allConstructionValue.add(constructionValue).setScale(4, RoundingMode.HALF_UP); + allOwnerValue = allOwnerValue.add(ownerValue).setScale(4, RoundingMode.HALF_UP); + // 添加需要修改状态的计划详情 + PgsProgressPlanDetail update = new PgsProgressPlanDetail(); + update.setId(planDetail.getId()); + update.setStatus("2"); + updateList.add(update); + saveList.add(value); + } + range.setOutValue(allConstructionValue); + range.setOwnerValue(allOwnerValue); + // 如果产值都为0,则不修改 + if (allConstructionValue.compareTo(BigDecimal.ZERO) == 0 && allOwnerValue.compareTo(BigDecimal.ZERO) == 0) { + return null; + } + allUpdateList.addAll(updateList); + return range; + }).filter(Objects::nonNull).toList(); + // 修改数据 + if (CollUtil.isNotEmpty(ranges)) { + boolean updateBatchById = constructionValueRangeService.updateBatchById(ranges); + if (!updateBatchById) { + throw new ServiceException("同步计划详情到施工产值失败,数据库异常", HttpStatus.ERROR); + } + } + } + if (CollUtil.isNotEmpty(saveList)) { boolean saved = constructionValueService.saveBatch(saveList); if (!saved) {