From 2e40c3ac6d757bd72f970d96d3e28df8c2abf9a8 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Tue, 26 Aug 2025 21:15:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=9B=E5=BA=A6=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E3=80=81=E6=96=BD=E5=B7=A5=E4=BA=A7=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/org/dromara/test/DemoTest.java | 10 + .../IncSyncPlanDetail2ConstructionValue.java | 38 ++++ .../out/domain/OutConstructionValue.java | 12 +- .../impl/OutConstructionValueServiceImpl.java | 34 +-- .../constant/PgsProgressCategoryConstant.java | 4 + .../PgsProgressCategoryController.java | 24 ++- ...PgsProgressCategoryTemplateController.java | 24 ++- .../domain/PgsProgressPlanDetail.java | 4 +- .../PgsProgressCategoryQueryReq.java | 5 + .../PgsProgressCategoryTemplateCreateReq.java | 6 + .../PgsProgressCategoryTemplateUpdateReq.java | 5 + .../PgsProgressPlanDetailCreateDto.java | 6 +- ...sProgressCategoryMatrixStructureTopVo.java | 41 ++++ .../PgsProgressCategoryTopVo.java | 38 ++++ .../PgsProgressPlanDetailDateVo.java | 6 +- .../PgsProgressPlanDetailVo.java | 6 +- .../service/IPgsProgressCategoryService.java | 18 +- .../IPgsProgressCategoryTemplateService.java | 11 +- .../IPgsProgressPlanDetailService.java | 10 + .../impl/PgsProgressCategoryServiceImpl.java | 198 +++++++++++++++--- ...gsProgressCategoryTemplateServiceImpl.java | 56 ++++- .../PgsProgressPlanDetailServiceImpl.java | 77 ++++++- .../impl/PgsProgressPlanServiceImpl.java | 10 +- .../service/impl/BusProjectServiceImpl.java | 25 ++- 24 files changed, 563 insertions(+), 105 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncPlanDetail2ConstructionValue.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryMatrixStructureTopVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryTopVo.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 1da365a8..627b732d 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 @@ -8,6 +8,7 @@ import org.dromara.facility.domain.FacMatrix; import org.dromara.facility.service.IFacMatrixService; import org.dromara.facility.service.IFacPhotovoltaicPanelPartsService; import org.dromara.progress.service.IPgsProgressCategoryService; +import org.dromara.progress.service.IPgsProgressCategoryTemplateService; import org.dromara.project.service.IBusProjectService; import org.dromara.system.service.ISysDeptService; import org.junit.jupiter.api.Test; @@ -30,6 +31,9 @@ public class DemoTest { @Resource private IPgsProgressCategoryService progressCategoryService; + @Resource + private IPgsProgressCategoryTemplateService progressCategoryTemplateService; + @Resource private IFacMatrixService matrixService; @@ -84,6 +88,12 @@ public class DemoTest { Boolean result = progressCategoryService.insertByTemplate(1906557369562726402L, matrixList, null); } + @Test + void testProject() { + // 初始化施工类型模版 + Boolean init = progressCategoryTemplateService.initTemplateByProject(1958935730389606402L); + } + /* @Test void testDeptProject() { deptService.selectProjectIdById(100L); 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 new file mode 100644 index 00000000..fa0b7fe3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncPlanDetail2ConstructionValue.java @@ -0,0 +1,38 @@ +package org.dromara.job.cycle; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.dromara.progress.service.IPgsProgressPlanDetailService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; + +/** + * 同步计划详情到施工产值 + * + * @author lilemy + * @date 2025-08-26 19:21 + */ +@Slf4j +@Component +public class IncSyncPlanDetail2ConstructionValue { + + @Resource + private IPgsProgressPlanDetailService progressPlanDetailService; + + /** + * 同步计划详情到施工产值(每天 1 点执行) + */ + @Scheduled(cron = "0 0 1 * * ?") + public void run() { + LocalDate yesterday = LocalDate.now().minusDays(1); + log.info("执行定时任务:同步 {} 计划详情到施工产值", yesterday); + Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(yesterday, null); + if (synced) { + log.info("同步计划详情到施工产值成功"); + } else { + log.info("暂无计划详情需要同步"); + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java index 7f3bb8b9..95cc205f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java @@ -1,16 +1,14 @@ package org.dromara.out.domain; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; +import java.math.BigDecimal; +import java.time.LocalDate; /** * 施工产值对象 out_construction_value diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java index abf4f9bb..263e0f2b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java @@ -15,7 +15,7 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.facility.domain.vo.matrix.FacMatrixVo; +import org.dromara.facility.domain.FacMatrix; import org.dromara.facility.service.IFacMatrixService; import org.dromara.out.domain.OutConstructionValue; import org.dromara.out.domain.bo.OutConstructionValueBo; @@ -178,11 +178,11 @@ public class OutConstructionValueServiceImpl extends ServiceImpl> listByParent(@NotNull(message = "项目id不能为空") + @PathVariable Long parentId) { + List list = pgsProgressCategoryService.queryListByParent(parentId); + return R.ok(list); + } + /** * 根据子项目获取进度类别模版顶级目录列表 */ @SaCheckPermission("progress:progressCategory:listTopBySubProjectId") @GetMapping("/listTopBySubProjectId/{subProjectId}") - public R> listTopBySubProjectId(@NotNull(message = "项目id不能为空") - @PathVariable Long subProjectId) { - List list = pgsProgressCategoryService.getTopListByProjectId(subProjectId); + public R> listTopBySubProjectId(@NotNull(message = "项目id不能为空") + @PathVariable Long subProjectId) { + List list = pgsProgressCategoryService.getTopListByProjectId(subProjectId); return R.ok(list); } @@ -112,7 +120,7 @@ public class PgsProgressCategoryController extends BaseController { @SaCheckPermission("progress:progressCategory:import") @Log(title = "进度类别导入", businessType = BusinessType.IMPORT) @PostMapping("/import") - public R importData(@RequestParam("file") MultipartFile file) throws Exception { + public R importData(@RequestParam("file") MultipartFile file) { // 检查文件是否为空 if (file == null || file.isEmpty()) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryTemplateController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryTemplateController.java index 18388b7d..d7d5ac6f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryTemplateController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryTemplateController.java @@ -6,8 +6,6 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; @@ -58,13 +56,25 @@ public class PgsProgressCategoryTemplateController extends BaseController { return R.ok(list); } + /** + * 根据进度父级查询进度类别模版列表 + */ + @SaCheckPermission("progress:progressCategoryTemplate:listByParent") + @GetMapping("/listByParent/{parentId}") + public R> listByParent(@NotNull(message = "父级类别主键不能为空") + @PathVariable Long parentId) { + List list = pgsProgressCategoryTemplateService.queryListByParent(parentId); + return R.ok(list); + } + /** * 获取系统顶级进度类别模版列表 */ @SaCheckPermission("progress:progressCategoryTemplate:listSystemTop") - @GetMapping("/listSystemTop") - public R> listSystemTop() { - return R.ok(pgsProgressCategoryTemplateService.listSystemTop()); + @GetMapping("/listSystemTop/{projectId}") + public R> listSystemTop(@NotNull(message = "项目主键不能为空") + @PathVariable Long projectId) { + return R.ok(pgsProgressCategoryTemplateService.listSystemTop(projectId)); } /** @@ -97,7 +107,7 @@ public class PgsProgressCategoryTemplateController extends BaseController { @Log(title = "进度类别模版", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody PgsProgressCategoryTemplateCreateReq req) { + public R add(@Validated @RequestBody PgsProgressCategoryTemplateCreateReq req) { return R.ok(pgsProgressCategoryTemplateService.insertByBo(req)); } @@ -108,7 +118,7 @@ public class PgsProgressCategoryTemplateController extends BaseController { @Log(title = "进度类别模版", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody PgsProgressCategoryTemplateUpdateReq req) { + public R edit(@Validated @RequestBody PgsProgressCategoryTemplateUpdateReq req) { return toAjax(pgsProgressCategoryTemplateService.updateByBo(req)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressPlanDetail.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressPlanDetail.java index 1248b167..08471778 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressPlanDetail.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressPlanDetail.java @@ -8,7 +8,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; import java.math.BigDecimal; -import java.util.Date; +import java.time.LocalDate; /** * 进度计划详情对象 pgs_progress_plan_detail @@ -48,7 +48,7 @@ public class PgsProgressPlanDetail extends BaseEntity { /** * 计划时间 */ - private Date date; + private LocalDate date; /** * 计划数量/百分比 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryQueryReq.java index f4972464..2e37801e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryQueryReq.java @@ -19,6 +19,11 @@ public class PgsProgressCategoryQueryReq { */ private Long matrixId; + /** + * 父类别id + */ + private Long parentId; + /** * 关联结构(1子项目 2方阵) */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateCreateReq.java index 92a5cdd1..61cd425c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateCreateReq.java @@ -51,6 +51,12 @@ public class PgsProgressCategoryTemplateCreateReq implements Serializable { */ private String constructionType; + /** + * 关联结构(1子项目 2方阵) + */ + @NotBlank(message = "关联结构不能为空") + private String relevancyStructure; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateUpdateReq.java index bd509a41..a25bad92 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateUpdateReq.java @@ -54,6 +54,11 @@ public class PgsProgressCategoryTemplateUpdateReq implements Serializable { */ private String constructionType; + /** + * 关联结构(1子项目 2方阵) + */ + private String relevancyStructure; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailCreateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailCreateDto.java index d154bb3f..525d72cf 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailCreateDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailCreateDto.java @@ -1,12 +1,11 @@ package org.dromara.progress.domain.dto.progressplandetail; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; -import java.util.Date; +import java.time.LocalDate; /** * @author lilemy @@ -20,8 +19,7 @@ public class PgsProgressPlanDetailCreateDto { /** * 计划时间 */ - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") - private Date date; + private LocalDate date; /** * 计划数量/百分比 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryMatrixStructureTopVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryMatrixStructureTopVo.java new file mode 100644 index 00000000..f3813deb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryMatrixStructureTopVo.java @@ -0,0 +1,41 @@ +package org.dromara.progress.domain.vo.progresscategory; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lilemy + * @date 2025-08-26 16:52 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PgsProgressCategoryMatrixStructureTopVo { + + /** + * 关联结构(1子项目 2方阵) + */ + private String relevancyStructure; + + /** + * 主键id + */ + private Long id; + + /** + * 类别名称 + */ + private String name; + + /** + * 方阵id + */ + private Long matrixId; + + /** + * 方阵名称 + */ + private String matrixName; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryTopVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryTopVo.java new file mode 100644 index 00000000..b3445b90 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryTopVo.java @@ -0,0 +1,38 @@ +package org.dromara.progress.domain.vo.progresscategory; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author lilemy + * @date 2025-08-26 16:49 + */ +@Data +public class PgsProgressCategoryTopVo implements Serializable { + + @Serial + private static final long serialVersionUID = -8638109773596974231L; + + /** + * 关联结构(1子项目 2方阵) + */ + private String relevancyStructure; + + /** + * 主键id + */ + private Long id; + + /** + * 类别名称 + */ + private String name; + + /** + * 关联方阵结构列表 + */ + private List matrixStructureList; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailDateVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailDateVo.java index 7f5e00aa..27247665 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailDateVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailDateVo.java @@ -1,6 +1,5 @@ package org.dromara.progress.domain.vo.progressplandetail; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.AllArgsConstructor; import lombok.Data; @@ -8,7 +7,7 @@ import lombok.NoArgsConstructor; import org.dromara.common.json.handler.BigDecimalToIntegerSerializer; import java.math.BigDecimal; -import java.util.Date; +import java.time.LocalDate; import java.util.List; /** @@ -28,8 +27,7 @@ public class PgsProgressPlanDetailDateVo { /** * 计划时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date date; + private LocalDate date; /** * 已完成数量 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailVo.java index dcb005e6..293c3562 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailVo.java @@ -2,7 +2,6 @@ package org.dromara.progress.domain.vo.progressplandetail; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.fasterxml.jackson.annotation.JsonFormat; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.progress.domain.PgsProgressPlanDetail; @@ -10,7 +9,7 @@ import org.dromara.progress.domain.PgsProgressPlanDetail; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; -import java.util.Date; +import java.time.LocalDate; /** @@ -49,8 +48,7 @@ public class PgsProgressPlanDetailVo implements Serializable { * 计划时间 */ @ExcelProperty(value = "计划时间") - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date date; + private LocalDate date; /** * 计划数量/百分比 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java index 8e9bd6cd..58ca5ebe 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java @@ -8,10 +8,7 @@ import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreat 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.PgsProgressCategoryProjectVo; -import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo; +import org.dromara.progress.domain.vo.progresscategory.*; import java.util.Collection; import java.util.List; @@ -34,13 +31,21 @@ public interface IPgsProgressCategoryService extends IService queryList(PgsProgressCategoryQueryReq req); + /** + * 根据进度父级id查询符合条件的进度类别列表 + * + * @param parentId 父级id + * @return 进度类别列表 + */ + List queryListByParent(Long parentId); + /** * 查询设施剩余数量 * @@ -55,7 +60,7 @@ public interface IPgsProgressCategoryService extends IService getTopListByProjectId(Long subProjectId); + List getTopListByProjectId(Long subProjectId); /** * 新增进度类别 @@ -146,7 +151,6 @@ public interface IPgsProgressCategoryService extends IService queryListByProjectIds(List projectIds); - /*** * 获取方阵id及对应数量 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryTemplateService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryTemplateService.java index b5db9cbe..16d7694a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryTemplateService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryTemplateService.java @@ -47,6 +47,14 @@ public interface IPgsProgressCategoryTemplateService extends IService queryList(PgsProgressCategoryTemplateQueryReq req); + /** + * 根据父级id获取进度类别模版列表 + * + * @param parentId 父级id + * @return 类别模版列表 + */ + List queryListByParent(Long parentId); + /** * 新增进度类别模版 * @@ -83,9 +91,10 @@ public interface IPgsProgressCategoryTemplateService extends IService listSystemTop(); + List listSystemTop(Long projectId); /** * 获取进度类别模版视图对象 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java index ea7c507a..6b2968cb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java @@ -15,6 +15,7 @@ import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailNu import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailUnFinishVo; import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailVo; +import java.time.LocalDate; import java.util.List; /** @@ -113,4 +114,13 @@ public interface IPgsProgressPlanDetailService extends IService queryListByProjectIds(List projectIds); + /** + * 同步计划详情到施工产值 + * + * @param localDate 计划日期 + * @param projectId 项目id,为空同步所有项目进度计划详情 + * @return 是否成功 + */ + Boolean syncPlanDetail2ConstructionValue(LocalDate localDate, Long projectId); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java index 83e0c950..2070a9de 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java @@ -4,9 +4,11 @@ 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.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; @@ -56,6 +58,7 @@ import java.util.stream.Collectors; * @author lilemy * @date 2025-05-26 */ +@Slf4j @Service public class PgsProgressCategoryServiceImpl extends ServiceImpl implements IPgsProgressCategoryService { @@ -121,21 +124,28 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl queryList(PgsProgressCategoryQueryReq req) { - Long matrixId = req.getMatrixId(); - if (matrixService.getById(matrixId) == null) { - return List.of(); - } - List list = this.lambdaQuery() - .eq(PgsProgressCategory::getMatrixId, matrixId) - .list(); - return this.getVoList(list); + LambdaQueryWrapper lqw = this.buildQueryWrapper(req); + return this.getVoList(this.list(lqw)); + } + + /** + * 根据进度父级id查询符合条件的进度类别列表 + * + * @param parentId 父级id + * @return 进度类别列表 + */ + @Override + public List queryListByParent(Long parentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.apply("FIND_IN_SET({0}, ancestors)", parentId); + return this.getVoList(this.list(queryWrapper)); } /** @@ -182,7 +192,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl getTopListByProjectId(Long subProjectId) { + public List getTopListByProjectId(Long subProjectId) { List list = this.lambdaQuery() .eq(PgsProgressCategory::getProjectId, subProjectId) .eq(PgsProgressCategory::getParentId, PgsProgressCategoryConstant.TOP_PARENT_ID) @@ -190,9 +200,43 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl topList = new ArrayList<>(); + // 获取关联子项的数据 + List subList = list.stream() + .filter(category -> + category.getRelevancyStructure().equals(PgsRelevancyStructureEnum.SUB_PROJECT.getValue())) + .toList(); + if (CollUtil.isNotEmpty(subList)) { + List subVoList = subList.stream().map(category -> { + PgsProgressCategoryTopVo vo = new PgsProgressCategoryTopVo(); + BeanUtils.copyProperties(category, vo); + return vo; + }).toList(); + topList.addAll(subVoList); + } + // 获取关联方阵数据 + List matrixList = list.stream() + .filter(category -> + category.getRelevancyStructure().equals(PgsRelevancyStructureEnum.MATRIX.getValue())) + .toList(); + if (CollUtil.isNotEmpty(matrixList)) { + Map> matrixMap = matrixList.stream() + .collect(Collectors.groupingBy(PgsProgressCategory::getName)); + for (Map.Entry> entry : matrixMap.entrySet()) { + PgsProgressCategoryTopVo topVo = new PgsProgressCategoryTopVo(); + topVo.setName(entry.getKey()); + topVo.setRelevancyStructure(PgsRelevancyStructureEnum.MATRIX.getValue()); + List value = entry.getValue(); + List matrixVoList = value.stream().map(category -> { + PgsProgressCategoryMatrixStructureTopVo vo = new PgsProgressCategoryMatrixStructureTopVo(); + BeanUtils.copyProperties(category, vo); + return vo; + }).toList(); + topVo.setMatrixStructureList(matrixVoList); + topList.add(topVo); + } + } + return topList; } /** @@ -220,7 +264,11 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl PgsProgressCategoryConstant.MAX_LEVEL) { + throw new ServiceException("超过最大层级", HttpStatus.BAD_REQUEST); + } + progressCategory.setAncestors(ancestors + StringUtils.SEPARATOR + progressCategory.getParentId()); } // 计算产值 if (ownerPrice != null && total != null && ownerPrice.compareTo(BigDecimal.ZERO) >= 0 && total.compareTo(BigDecimal.ZERO) >= 0) { @@ -365,7 +413,11 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl PgsProgressCategoryConstant.MAX_LEVEL) { + throw new ServiceException("超过最大层级", HttpStatus.BAD_REQUEST); + } + progressCategory.setAncestors(ancestors + StringUtils.SEPARATOR + progressCategory.getParentId()); } // 写入数据库 boolean result = this.updateById(progressCategory); @@ -470,9 +522,11 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl children = parentIdToChildrenMap.getOrDefault(progressCategory.getId(), Collections.emptyList()); // 获取父节点状态 - String pidStatus = getPidStatus(children); + String parentStatus = getParentStatus(children); // 累加子节点数据 BigDecimal total = children.stream().map(PgsProgressCategory::getTotal).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal completed = BigDecimal.ZERO; @@ -526,7 +580,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl> oldPercentageCategoryMap = new HashMap<>(); Map> oldPlanMap = new HashMap<>(); @@ -606,34 +661,39 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl newPlanDetailList = new ArrayList<>(); // 获取关联子项目的进度 List subTemplateList = categoryTemplateList.stream() - .filter(template -> template.getConstructionType().equals(PgsRelevancyStructureEnum.SUB_PROJECT.getValue())) + .filter(template -> template.getRelevancyStructure().equals(PgsRelevancyStructureEnum.SUB_PROJECT.getValue())) .toList(); + log.info("subTemplateList:{}", subTemplateList); List matrixTemplateList = categoryTemplateList.stream() - .filter(template -> template.getConstructionType().equals(PgsRelevancyStructureEnum.MATRIX.getValue())) + .filter(template -> template.getRelevancyStructure().equals(PgsRelevancyStructureEnum.MATRIX.getValue())) .toList(); + log.info("matrixTemplateList:{}", matrixTemplateList); // 每个 matrixId 对应一套新的 ID 映射 for (FacMatrix matrix : matrixList) { // templateId -> newId Map localIdMap = new HashMap<>(); List localList = new ArrayList<>(); - for (PgsProgressCategoryTemplate template : matrixTemplateList) { + for (PgsProgressCategoryTemplate matrixTemplate : matrixTemplateList) { Long newId = IdWorker.getId(); - localIdMap.put(template.getId(), newId); + localIdMap.put(matrixTemplate.getId(), newId); PgsProgressCategory newCategory = new PgsProgressCategory(); newCategory.setId(newId); - newCategory.setName(template.getName()); - newCategory.setUnitType(template.getUnitType()); - newCategory.setWorkType(template.getWorkType()); + newCategory.setName(matrixTemplate.getName()); + newCategory.setUnitType(matrixTemplate.getUnitType()); + newCategory.setWorkType(matrixTemplate.getWorkType()); newCategory.setProjectId(projectId); newCategory.setMatrixId(matrix.getId()); newCategory.setMatrixName(matrix.getMatrixName()); - newCategory.setRemark(template.getRemark()); + newCategory.setRelevancyStructure(PgsRelevancyStructureEnum.MATRIX.getValue()); + newCategory.setRemark(matrixTemplate.getRemark()); // 先临时设置旧 pid - newCategory.setParentId(template.getParentId()); + newCategory.setParentId(matrixTemplate.getParentId()); + // 临时保存旧 ancestors(不转换) + newCategory.setAncestors(matrixTemplate.getAncestors()); localList.add(newCategory); // 创建百分比设施 - if (template.getParentId() != 0 && template.getUnitType().equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue())) { - String mapKey = matrix.getMatrixName() + "_" + template.getWorkType(); + if (matrixTemplate.getParentId() != 0 && matrixTemplate.getUnitType().equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue())) { + String mapKey = matrix.getMatrixName() + "_" + matrixTemplate.getWorkType(); // 填充数据 if (CollUtil.isNotEmpty(oldPercentageCategoryMap) && oldPercentageCategoryMap.containsKey(mapKey)) { PgsProgressCategory oldPercentageCategory = oldPercentageCategoryMap.get(mapKey).getFirst(); @@ -669,23 +729,95 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl newAncestorsList = new ArrayList<>(); + for (String part : parts) { + if (PgsProgressCategoryConstant.TOP_PARENT_ID.toString().equals(part)) { + newAncestorsList.add(PgsProgressCategoryConstant.TOP_PARENT_ID.toString()); + } else { + Long oldId = Long.valueOf(part); + Long mappedId = localIdMap.getOrDefault(oldId, null); + if (mappedId != null) { + newAncestorsList.add(String.valueOf(mappedId)); + } else { + // 如果没映射,说明是别的 matrix 的节点,可以选择跳过或者保留原值 + // 建议保留原值,避免断链 + newAncestorsList.add(part); + } + } + } + category.setAncestors(String.join(StringUtils.SEPARATOR, newAncestorsList)); + } else { + category.setAncestors(PgsProgressCategoryConstant.TOP_PARENT_ID.toString()); + } } newList.addAll(localList); } // 新增关联子项目进度的数据 - for (PgsProgressCategoryTemplate template : subTemplateList) { - + // templateId -> newId + Map subLocalIdMap = new HashMap<>(); + List subLocalList = new ArrayList<>(); + for (PgsProgressCategoryTemplate subProjectTemplate : subTemplateList) { + Long newId = IdWorker.getId(); + subLocalIdMap.put(subProjectTemplate.getId(), newId); + PgsProgressCategory newCategory = new PgsProgressCategory(); + newCategory.setId(newId); + newCategory.setName(subProjectTemplate.getName()); + newCategory.setUnitType(subProjectTemplate.getUnitType()); + newCategory.setWorkType(subProjectTemplate.getWorkType()); + newCategory.setProjectId(projectId); + newCategory.setMatrixId(0L); + newCategory.setRelevancyStructure(PgsRelevancyStructureEnum.SUB_PROJECT.getValue()); + newCategory.setRemark(subProjectTemplate.getRemark()); + // 先临时设置旧 pid + newCategory.setParentId(subProjectTemplate.getParentId()); + newCategory.setAncestors(subProjectTemplate.getAncestors()); + subLocalList.add(newCategory); } + // 修正本 matrix 的 pid + for (PgsProgressCategory category : subLocalList) { + Long oldPid = category.getParentId(); + if (oldPid != 0) { + category.setParentId(subLocalIdMap.getOrDefault(oldPid, 0L)); + } + String oldAncestors = category.getAncestors(); + if (StringUtils.isNotBlank(oldAncestors)) { + String[] parts = oldAncestors.split(StringUtils.SEPARATOR); + List newAncestorsList = new ArrayList<>(); + for (String part : parts) { + if (PgsProgressCategoryConstant.TOP_PARENT_ID.toString().equals(part)) { + newAncestorsList.add(PgsProgressCategoryConstant.TOP_PARENT_ID.toString()); + } else { + Long oldId = Long.valueOf(part); + Long mappedId = subLocalIdMap.getOrDefault(oldId, null); + if (mappedId != null) { + newAncestorsList.add(String.valueOf(mappedId)); + } else { + // 如果没映射,说明是别的 matrix 的节点,可以选择跳过或者保留原值 + // 建议保留原值,避免断链 + newAncestorsList.add(part); + } + } + } + category.setAncestors(String.join(StringUtils.SEPARATOR, newAncestorsList)); + } else { + category.setAncestors(PgsProgressCategoryConstant.TOP_PARENT_ID.toString()); + } + } + newList.addAll(subLocalList); // 删除旧进度类别 LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(PgsProgressCategory::getProjectId, projectId); @@ -959,7 +1091,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl children) { + public String getParentStatus(List children) { if (CollUtil.isEmpty(children)) { return PgsFinishStatusEnum.UNFINISH.getValue(); // 为空视为未开始 } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryTemplateServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryTemplateServiceImpl.java index 7e599ab3..0bb512a7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryTemplateServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryTemplateServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.progress.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -85,6 +86,19 @@ public class PgsProgressCategoryTemplateServiceImpl extends ServiceImpl queryListByParent(Long parentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.apply("FIND_IN_SET({0}, ancestors)", parentId); + return this.list(queryWrapper).stream().map(this::getVo).toList(); + } + /** * 新增进度类别模版 * @@ -98,6 +112,7 @@ public class PgsProgressCategoryTemplateServiceImpl extends ServiceImpl PgsProgressCategoryConstant.MAX_LEVEL) { + throw new ServiceException("超过最大层级", HttpStatus.BAD_REQUEST); + } + progressCategoryTemplate.setAncestors(ancestors + StringUtils.SEPARATOR + progressCategoryTemplate.getParentId()); + // 子级根据父级关联项目结构进行关联 + progressCategoryTemplate.setRelevancyStructure(parent.getRelevancyStructure()); } // 写入数据库 boolean result = this.save(progressCategoryTemplate); @@ -150,7 +173,11 @@ public class PgsProgressCategoryTemplateServiceImpl extends ServiceImpl PgsProgressCategoryConstant.MAX_LEVEL) { + throw new ServiceException("超过最大层级", HttpStatus.BAD_REQUEST); + } + progressCategoryTemplate.setAncestors(ancestors + StringUtils.SEPARATOR + progressCategoryTemplate.getParentId()); } // 写入数据库 boolean result = this.updateById(progressCategoryTemplate); @@ -239,6 +266,7 @@ public class PgsProgressCategoryTemplateServiceImpl extends ServiceImpl newId Map localIdMap = new HashMap<>(); List localList = new ArrayList<>(); @@ -252,9 +280,28 @@ public class PgsProgressCategoryTemplateServiceImpl extends ServiceImpl newAncestorsList = new ArrayList<>(); + for (String part : parts) { + if (PgsProgressCategoryConstant.TOP_PARENT_ID.toString().equals(part)) { + newAncestorsList.add(PgsProgressCategoryConstant.TOP_PARENT_ID.toString()); + } else { + Long oldId = Long.valueOf(part); + Long mappedId = localIdMap.getOrDefault(oldId, oldId); + newAncestorsList.add(String.valueOf(mappedId)); + } + } + newTemp.setAncestors(String.join(StringUtils.SEPARATOR, newAncestorsList)); + } else { + newTemp.setAncestors(PgsProgressCategoryConstant.TOP_PARENT_ID.toString()); + } localList.add(newTemp); } // 修正本 matrix 的 pid @@ -275,12 +322,13 @@ public class PgsProgressCategoryTemplateServiceImpl extends ServiceImpl listSystemTop() { + public List listSystemTop(Long projectId) { List list = this.lambdaQuery() - .eq(PgsProgressCategoryTemplate::getProjectId, PgsProgressCategoryConstant.TOP_PARENT_ID) + .eq(PgsProgressCategoryTemplate::getProjectId, projectId) .eq(PgsProgressCategoryTemplate::getParentId, PgsProgressCategoryConstant.TOP_PARENT_ID) .list(); if (CollUtil.isEmpty(list)) { 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 4866258d..8019a425 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 @@ -20,6 +20,8 @@ import org.dromara.facility.domain.*; import org.dromara.facility.domain.enums.FacFinishStatusEnum; import org.dromara.facility.domain.enums.FacFinishTypeEnum; import org.dromara.facility.service.*; +import org.dromara.out.domain.OutConstructionValue; +import org.dromara.out.service.IOutConstructionValueService; import org.dromara.progress.constant.PgsProgressCategoryConstant; import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressPlan; @@ -48,6 +50,8 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 进度计划详情Service业务层处理 @@ -87,6 +91,9 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl planDetailList = this.lambdaQuery() + .eq(ObjectUtils.isNotEmpty(projectId), PgsProgressPlanDetail::getProjectId, projectId) + .eq(PgsProgressPlanDetail::getDate, localDate) + .list(); + if (CollUtil.isEmpty(planDetailList)) { + return false; + } + // 获取进度类别 + List categoryIds = planDetailList.stream() + .map(PgsProgressPlanDetail::getProgressCategoryId) + .distinct() + .toList(); + List categoryList = progressCategoryService.lambdaQuery() + .in(CollUtil.isNotEmpty(categoryIds), PgsProgressCategory::getId, categoryIds) + .list(); + Map categoryMap = categoryList.stream() + .collect( + Collectors.toMap(PgsProgressCategory::getId, + Function.identity(), + (v1, v2) -> v1) + ); + List saveList = new ArrayList<>(); + for (PgsProgressPlanDetail planDetail : planDetailList) { + OutConstructionValue value = new OutConstructionValue(); + Long progressCategoryId = planDetail.getProgressCategoryId(); + PgsProgressCategory category = categoryMap.get(progressCategoryId); + if (category == null) { + continue; + } + value.setProjectId(planDetail.getProjectId()); + value.setMatrixId(category.getMatrixId()); + value.setProgressCategoryId(progressCategoryId); + int artificialNum = planDetail.getFinishedNumber().intValue(); + value.setArtificialNum(artificialNum); + int uavNum = planDetail.getAiFill().intValue(); + value.setUavNum(uavNum); + value.setPlanNum(planDetail.getPlanNumber().intValue()); + value.setReportDate(LocalDate.now()); + value.setPlanDate(planDetail.getDate()); + // 计算产值 + BigDecimal constructionPrice = category.getConstructionPrice(); + BigDecimal ownerPrice = category.getOwnerPrice(); + value.setOutValue(constructionPrice.multiply(BigDecimal.valueOf(artificialNum)).add(constructionPrice.multiply(BigDecimal.valueOf(uavNum)))); + value.setOwnerValue(ownerPrice.multiply(BigDecimal.valueOf(artificialNum)).add(ownerPrice.multiply(BigDecimal.valueOf(uavNum)))); + saveList.add(value); + } + // 保存数据 + if (CollUtil.isNotEmpty(saveList)) { + boolean saved = constructionValueService.saveBatch(saveList); + if (!saved) { + throw new ServiceException("同步计划详情到施工产值失败,数据库异常", HttpStatus.ERROR); + } + } + return true; + } + /** * 分页 * @@ -803,7 +876,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl finishedDetailIdList, - Date finishDate, + LocalDate finishDate, IService service, SFunction getIdFunc, SFunction getNameFunc, diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java index 2899ba69..727f11d9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java @@ -131,8 +131,9 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl progressCategoryList = progressCategoryService.lambdaQuery() .in(PgsProgressCategory::getMatrixId, matrixIds) .list(); + List subProgressCategoryList = progressCategoryService.lambdaQuery() + .eq(PgsProgressCategory::getRelevancyStructure, PgsRelevancyStructureEnum.SUB_PROJECT.getValue()) + .in(PgsProgressCategory::getProjectId, subProjectIds) + .list(); // 构造子项目结构 List subProjectStructures = subProjects.stream().map(subProject -> { @@ -960,6 +966,18 @@ public class BusProjectServiceImpl extends ServiceImpl subCategory = subProgressCategoryList.stream() + .filter(c -> Objects.equals(c.getProjectId(), subProject.getId())) + .toList(); + + List structureVoList = subCategory.stream() + .map(category -> { + FacMatrixStructureVo matrixVo = new FacMatrixStructureVo(); + matrixVo.setId(category.getId()); + matrixVo.setName(category.getName()); + return matrixVo; + }).toList(); + // 找到该子项目下的方阵 List matrices = matrixMap.getOrDefault(subProject.getId(), new ArrayList<>()); List matrixVos = matrices.stream().map(matrix -> { @@ -977,8 +995,11 @@ public class BusProjectServiceImpl extends ServiceImpl resultList = Stream.concat( + structureVoList.stream(), + matrixVos.stream() + ).toList(); + subProjectVo.setChildren(resultList); return subProjectVo; }).toList();