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 52b1b709..7b11819f 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 @@ -3,6 +3,7 @@ package org.dromara.test; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdcardUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -18,9 +19,12 @@ import org.dromara.facility.service.IFacMatrixService; import org.dromara.facility.service.IFacPhotovoltaicPanelPartsService; import org.dromara.facility.service.IFacPhotovoltaicPanelService; import org.dromara.manager.recognizermanager.vo.RecognizeConvertCoordinateResult; +import org.dromara.progress.domain.PgsProgressCategory; +import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq; import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.progress.service.IPgsProgressCategoryTemplateService; import org.dromara.progress.service.IPgsProgressPlanDetailService; +import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; import org.dromara.system.service.ISysDeptService; import org.dromara.tender.service.impl.TenderSupplierInputServiceImpl; @@ -28,9 +32,16 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; 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; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author lilemy @@ -80,7 +91,15 @@ public class DemoTest { @Test void testConstructionValue() { - progressPlanDetailService.syncPlanDetail2ConstructionValue(LocalDate.now().minusDays(1), null); + LocalDate today = LocalDate.now(); + // 找到本周一 + 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); } @Test @@ -176,9 +195,135 @@ public class DemoTest { } @Test - void testImport(){ + void testImport() { photovoltaicPanelService.updateFinishNumberByCoordinate(List.of(1968510961294921730L), - List.of(new RecognizeConvertCoordinateResult("107.124334530","23.830557974"))); + List.of(new RecognizeConvertCoordinateResult("107.124334530", "23.830557974"))); + } + + @Test + void testRemove() { + List projectIds = List.of( + 1968510961294921730L, + 1968511074637598722L, + 1968511192354934785L, + 1968514103508094977L, + 1968514270462365697L, + 1968515178185248770L, + 1968515232044306434L, + 1968515275153362945L, + 1968515323392053250L, + 1968515384058466306L, + 1968515428077686785L, + 1968515467575447554L, + 1968515518674653186L + ); + for (Long projectId : projectIds) { + PgsProgressCategory p = progressCategoryService.lambdaQuery() + .eq(PgsProgressCategory::getProjectId, projectId) + .eq(PgsProgressCategory::getMatrixId, "0") + .eq(PgsProgressCategory::getName, "地埋电缆") + .one(); + progressCategoryService.remove(new LambdaQueryWrapper<>(PgsProgressCategory.class) + .eq(PgsProgressCategory::getParentId, p.getId())); + progressCategoryService.removeById(p); + } + } + + @Test + void testProject1() { + List projects = projectService.lambdaQuery() + .eq(BusProject::getPId, 1897160897167638529L) + .list(); + List projectIds = projects.stream().map(BusProject::getId).toList(); + List t10101 = progressCategoryService.lambdaQuery() + .in(PgsProgressCategory::getProjectId, projectIds) + .ne(PgsProgressCategory::getMatrixId, "0") + .eq(PgsProgressCategory::getMatrixName, "T10101") + .list(); + log.info("t10101: {}", t10101); + Map name = t10101.stream() + .collect(Collectors.toMap(PgsProgressCategory::getName, Function.identity())); + List other = progressCategoryService.lambdaQuery() + .in(PgsProgressCategory::getProjectId, projectIds) + .ne(PgsProgressCategory::getMatrixId, "0") + .ne(PgsProgressCategory::getMatrixName, "T10101") + .ne(PgsProgressCategory::getParentId, 0) + .list(); + log.info("other: {}", other); + other.forEach(o -> { + o.setId(o.getId()); + PgsProgressCategory category = name.get(o.getName()); + if (StringUtils.isBlank(o.getWorkType())) { + o.setTotal(category.getTotal()); + } + o.setUnit(category.getUnit()); + o.setUnitType(category.getUnitType()); + BigDecimal ownerPrice = category.getOwnerPrice(); + o.setOwnerPrice(ownerPrice); + BigDecimal constructionPrice = category.getConstructionPrice(); + o.setConstructionPrice(constructionPrice); + // 计算产值 + try { + BigDecimal multiply = o.getOwnerPrice().multiply(o.getTotal()); + o.setOwnerOutputValue(multiply.setScale(4, RoundingMode.HALF_UP)); + BigDecimal multiply1 = o.getConstructionPrice().multiply(o.getTotal()); + o.setConstructionOutputValue(multiply1.setScale(4, RoundingMode.HALF_UP)); + } catch (Exception e) { + } + }); + progressCategoryService.updateBatchById(other); + } + + @Test + void testProject2() { + PgsProgressCategory p1 = progressCategoryService.lambdaQuery() + .eq(PgsProgressCategory::getProjectId, 1968510858786131970L) + .eq(PgsProgressCategory::getMatrixId, "0") + .eq(PgsProgressCategory::getName, "其他工程") + .one(); + List progressCategoryList = progressCategoryService.lambdaQuery() + .eq(PgsProgressCategory::getProjectId, 1968510858786131970L) + .eq(PgsProgressCategory::getMatrixId, "0") + .eq(PgsProgressCategory::getParentId, p1.getId()) + .list(); + List projectIds = List.of( + 1968510961294921730L, + 1968511074637598722L, + 1968511192354934785L, + 1968514103508094977L, + 1968514270462365697L, + 1968515178185248770L, + 1968515232044306434L, + 1968515275153362945L, + 1968515323392053250L, + 1968515384058466306L, + 1968515428077686785L, + 1968515467575447554L, + 1968515518674653186L + ); + for (Long projectId : projectIds) { + PgsProgressCategory p = progressCategoryService.lambdaQuery() + .eq(PgsProgressCategory::getProjectId, projectId) + .eq(PgsProgressCategory::getMatrixId, "0") + .eq(PgsProgressCategory::getName, "其他工程") + .one(); + progressCategoryService.remove(new LambdaQueryWrapper<>(PgsProgressCategory.class) + .eq(PgsProgressCategory::getParentId, p.getId())); + for (PgsProgressCategory category : progressCategoryList) { + PgsProgressCategoryCreateReq req = new PgsProgressCategoryCreateReq(); + req.setParentId(p.getId()); + req.setProjectId(p.getProjectId()); + req.setMatrixId(p.getMatrixId()); + req.setName(category.getName()); + req.setUnitType(category.getUnitType()); + req.setUnit(category.getUnit()); + req.setOwnerPrice(category.getOwnerPrice()); + req.setConstructionPrice(category.getConstructionPrice()); + req.setTotal(category.getTotal()); + + progressCategoryService.insertByReq(req); + } + } } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java index 2d27e118..ed8f529e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java @@ -8,22 +8,13 @@ import org.dromara.bigscreen.service.EnterpriseBigScreenService; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.utils.BigDecimalUtil; -import org.dromara.ctr.service.ICtrExpensesContractService; -import org.dromara.ctr.service.ICtrIncomeContractService; import org.dromara.manager.weathermanager.WeatherConstant; import org.dromara.manager.weathermanager.WeatherManager; import org.dromara.manager.weathermanager.vo.WeatherVo; -import org.dromara.out.domain.BusProcurement; -import org.dromara.out.domain.OutConstructionValue; -import org.dromara.out.domain.OutMonthPlanAudit; -import org.dromara.out.domain.OutValueAllocation; -import org.dromara.out.service.IBusProcurementService; -import org.dromara.out.service.IOutConstructionValueService; -import org.dromara.out.service.IOutMonthPlanAuditService; -import org.dromara.out.service.IOutValueAllocationService; +import org.dromara.out.domain.*; +import org.dromara.out.service.*; import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.service.IPgsProgressCategoryService; -import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; import org.dromara.safety.domain.HseRecognizeRecord; @@ -55,15 +46,6 @@ public class EnterpriseBigScreenServiceImpl implements EnterpriseBigScreenServic @Resource private IPgsProgressCategoryService progressCategoryService; - @Resource - private IPgsProgressPlanDetailService progressPlanDetailService; - - @Resource - private ICtrIncomeContractService incomeContractService; - - @Resource - private ICtrExpensesContractService expensesContractService; - @Resource private IOutValueAllocationService outValueAllocationService; @@ -73,6 +55,9 @@ public class EnterpriseBigScreenServiceImpl implements EnterpriseBigScreenServic @Resource private IOutConstructionValueService outConstructionValueService; + @Resource + private IOutConstructionValueRangeService outConstructionValueRangeService; + @Resource private IHseViolationRecordService hseViolationRecordService; @@ -240,9 +225,9 @@ public class EnterpriseBigScreenServiceImpl implements EnterpriseBigScreenServic .collect(Collectors.toMap(OutValueAllocation::getProjectId, OutValueAllocation::getOwnerTotalValue)); // 实际产值 // 施工产值 - List constructionValueList = outConstructionValueService.lambdaQuery() - .select(OutConstructionValue::getProjectId, OutConstructionValue::getOwnerValue) - .eq(OutConstructionValue::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) + List constructionValueRangeList = outConstructionValueRangeService.lambdaQuery() + .select(OutConstructionValueRange::getProjectId, OutConstructionValueRange::getOwnerValue) + .eq(OutConstructionValueRange::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) .list(); // 采购产值 List purchaseValueList = busProcurementService.lambdaQuery() @@ -272,13 +257,13 @@ public class EnterpriseBigScreenServiceImpl implements EnterpriseBigScreenServic actualValue = actualValue.add(dValue); } // 施工产值 - List constructionValue = constructionValueList.stream() + List constructionValue = constructionValueRangeList.stream() .filter(construction -> construction.getProjectId().equals(project.getId())) .toList(); if (CollUtil.isNotEmpty(constructionValue)) { BigDecimal cValue = constructionValue.stream() .filter(Objects::nonNull) - .map(OutConstructionValue::getOwnerValue) + .map(OutConstructionValueRange::getOwnerValue) .reduce(BigDecimal.ZERO, BigDecimal::add); actualValue = actualValue.add(cValue); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/ContractPaymentClauseController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/ContractPaymentClauseController.java new file mode 100644 index 00000000..63b478f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/ContractPaymentClauseController.java @@ -0,0 +1,106 @@ +package org.dromara.ctr.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.ctr.domain.bo.ContractPaymentClauseBo; +import org.dromara.ctr.domain.vo.ContractPaymentClauseVo; +import org.dromara.ctr.service.IContractPaymentClauseService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 支付条款 + * + * @author lilemy + * @date 2025-09-24 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/paymentClause") +public class ContractPaymentClauseController extends BaseController { + + private final IContractPaymentClauseService contractPaymentClauseService; + + /** + * 查询支付条款列表 + */ + @SaCheckPermission("ctr:paymentClause:list") + @GetMapping("/list") + public TableDataInfo list(ContractPaymentClauseBo bo, PageQuery pageQuery) { + return contractPaymentClauseService.queryPageList(bo, pageQuery); + } + + /** + * 导出支付条款列表 + */ + @SaCheckPermission("ctr:paymentClause:export") + @Log(title = "支付条款", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ContractPaymentClauseBo bo, HttpServletResponse response) { + List list = contractPaymentClauseService.queryList(bo); + ExcelUtil.exportExcel(list, "支付条款", ContractPaymentClauseVo.class, response); + } + + /** + * 获取支付条款详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:paymentClause:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(contractPaymentClauseService.queryById(id)); + } + + /** + * 新增支付条款 + */ + @SaCheckPermission("ctr:paymentClause:add") + @Log(title = "支付条款", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ContractPaymentClauseBo bo) { + return toAjax(contractPaymentClauseService.insertByBo(bo)); + } + + /** + * 修改支付条款 + */ + @SaCheckPermission("ctr:paymentClause:edit") + @Log(title = "支付条款", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ContractPaymentClauseBo bo) { + return toAjax(contractPaymentClauseService.updateByBo(bo)); + } + + /** + * 删除支付条款 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:paymentClause:remove") + @Log(title = "支付条款", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(contractPaymentClauseService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractAppointController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractAppointController.java new file mode 100644 index 00000000..1b9e49e6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractAppointController.java @@ -0,0 +1,106 @@ +package org.dromara.ctr.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.ctr.domain.bo.CtrContractAppointBo; +import org.dromara.ctr.domain.vo.CtrContractAppointVo; +import org.dromara.ctr.service.ICtrContractAppointService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 承包合同-主要条款约定 + * + * @author lilemy + * @date 2025-09-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/contractAppoint") +public class CtrContractAppointController extends BaseController { + + private final ICtrContractAppointService ctrContractAppointService; + + /** + * 查询承包合同-主要条款约定列表 + */ + @SaCheckPermission("ctr:contractAppoint:list") + @GetMapping("/list") + public TableDataInfo list(CtrContractAppointBo bo, PageQuery pageQuery) { + return ctrContractAppointService.queryPageList(bo, pageQuery); + } + + /** + * 导出承包合同-主要条款约定列表 + */ + @SaCheckPermission("ctr:contractAppoint:export") + @Log(title = "承包合同-主要条款约定", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CtrContractAppointBo bo, HttpServletResponse response) { + List list = ctrContractAppointService.queryList(bo); + ExcelUtil.exportExcel(list, "承包合同-主要条款约定", CtrContractAppointVo.class, response); + } + + /** + * 获取承包合同-主要条款约定详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:contractAppoint:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(ctrContractAppointService.queryById(id)); + } + + /** + * 新增承包合同-主要条款约定 + */ + @SaCheckPermission("ctr:contractAppoint:add") + @Log(title = "承包合同-主要条款约定", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CtrContractAppointBo bo) { + return toAjax(ctrContractAppointService.insertByBo(bo)); + } + + /** + * 修改承包合同-主要条款约定 + */ + @SaCheckPermission("ctr:contractAppoint:edit") + @Log(title = "承包合同-主要条款约定", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CtrContractAppointBo bo) { + return toAjax(ctrContractAppointService.updateByBo(bo)); + } + + /** + * 删除承包合同-主要条款约定 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:contractAppoint:remove") + @Log(title = "承包合同-主要条款约定", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(ctrContractAppointService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractBillItemController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractBillItemController.java new file mode 100644 index 00000000..53654e6c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractBillItemController.java @@ -0,0 +1,105 @@ +package org.dromara.ctr.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.ctr.domain.vo.CtrContractBillItemVo; +import org.dromara.ctr.domain.bo.CtrContractBillItemBo; +import org.dromara.ctr.service.ICtrContractBillItemService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 承包合同-工程量清单 + * + * @author lilemy + * @date 2025-09-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/contractBillItem") +public class CtrContractBillItemController extends BaseController { + + private final ICtrContractBillItemService ctrContractBillItemService; + + /** + * 查询承包合同-工程量清单列表 + */ + @SaCheckPermission("ctr:contractBillItem:list") + @GetMapping("/list") + public TableDataInfo list(CtrContractBillItemBo bo, PageQuery pageQuery) { + return ctrContractBillItemService.queryPageList(bo, pageQuery); + } + + /** + * 导出承包合同-工程量清单列表 + */ + @SaCheckPermission("ctr:contractBillItem:export") + @Log(title = "承包合同-工程量清单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CtrContractBillItemBo bo, HttpServletResponse response) { + List list = ctrContractBillItemService.queryList(bo); + ExcelUtil.exportExcel(list, "承包合同-工程量清单", CtrContractBillItemVo.class, response); + } + + /** + * 获取承包合同-工程量清单详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:contractBillItem:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(ctrContractBillItemService.queryById(id)); + } + + /** + * 新增承包合同-工程量清单 + */ + @SaCheckPermission("ctr:contractBillItem:add") + @Log(title = "承包合同-工程量清单", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CtrContractBillItemBo bo) { + return toAjax(ctrContractBillItemService.insertByBo(bo)); + } + + /** + * 修改承包合同-工程量清单 + */ + @SaCheckPermission("ctr:contractBillItem:edit") + @Log(title = "承包合同-工程量清单", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CtrContractBillItemBo bo) { + return toAjax(ctrContractBillItemService.updateByBo(bo)); + } + + /** + * 删除承包合同-工程量清单 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:contractBillItem:remove") + @Log(title = "承包合同-工程量清单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(ctrContractBillItemService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractMainController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractMainController.java new file mode 100644 index 00000000..99941bd6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrContractMainController.java @@ -0,0 +1,105 @@ +package org.dromara.ctr.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.ctr.domain.vo.CtrContractMainVo; +import org.dromara.ctr.domain.bo.CtrContractMainBo; +import org.dromara.ctr.service.ICtrContractMainService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 承包合同-基本信息 + * + * @author lilemy + * @date 2025-09-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/contractMain") +public class CtrContractMainController extends BaseController { + + private final ICtrContractMainService ctrContractMainService; + + /** + * 查询承包合同-基本信息列表 + */ + @SaCheckPermission("ctr:contractMain:list") + @GetMapping("/list") + public TableDataInfo list(CtrContractMainBo bo, PageQuery pageQuery) { + return ctrContractMainService.queryPageList(bo, pageQuery); + } + + /** + * 导出承包合同-基本信息列表 + */ + @SaCheckPermission("ctr:contractMain:export") + @Log(title = "承包合同-基本信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CtrContractMainBo bo, HttpServletResponse response) { + List list = ctrContractMainService.queryList(bo); + ExcelUtil.exportExcel(list, "承包合同-基本信息", CtrContractMainVo.class, response); + } + + /** + * 获取承包合同-基本信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:contractMain:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(ctrContractMainService.queryById(id)); + } + + /** + * 新增承包合同-基本信息 + */ + @SaCheckPermission("ctr:contractMain:add") + @Log(title = "承包合同-基本信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CtrContractMainBo bo) { + return toAjax(ctrContractMainService.insertByBo(bo)); + } + + /** + * 修改承包合同-基本信息 + */ + @SaCheckPermission("ctr:contractMain:edit") + @Log(title = "承包合同-基本信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CtrContractMainBo bo) { + return toAjax(ctrContractMainService.updateByBo(bo)); + } + + /** + * 删除承包合同-基本信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:contractMain:remove") + @Log(title = "承包合同-基本信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(ctrContractMainService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrCooperationAgreementController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrCooperationAgreementController.java new file mode 100644 index 00000000..cb1b78d7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrCooperationAgreementController.java @@ -0,0 +1,105 @@ +package org.dromara.ctr.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.ctr.domain.vo.CtrCooperationAgreementVo; +import org.dromara.ctr.domain.bo.CtrCooperationAgreementBo; +import org.dromara.ctr.service.ICtrCooperationAgreementService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 合作协议 + * + * @author lilemy + * @date 2025-09-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/cooperationAgreement") +public class CtrCooperationAgreementController extends BaseController { + + private final ICtrCooperationAgreementService ctrCooperationAgreementService; + + /** + * 查询合作协议列表 + */ + @SaCheckPermission("ctr:cooperationAgreement:list") + @GetMapping("/list") + public TableDataInfo list(CtrCooperationAgreementBo bo, PageQuery pageQuery) { + return ctrCooperationAgreementService.queryPageList(bo, pageQuery); + } + + /** + * 导出合作协议列表 + */ + @SaCheckPermission("ctr:cooperationAgreement:export") + @Log(title = "合作协议", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CtrCooperationAgreementBo bo, HttpServletResponse response) { + List list = ctrCooperationAgreementService.queryList(bo); + ExcelUtil.exportExcel(list, "合作协议", CtrCooperationAgreementVo.class, response); + } + + /** + * 获取合作协议详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:cooperationAgreement:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(ctrCooperationAgreementService.queryById(id)); + } + + /** + * 新增合作协议 + */ + @SaCheckPermission("ctr:cooperationAgreement:add") + @Log(title = "合作协议", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CtrCooperationAgreementBo bo) { + return toAjax(ctrCooperationAgreementService.insertByBo(bo)); + } + + /** + * 修改合作协议 + */ + @SaCheckPermission("ctr:cooperationAgreement:edit") + @Log(title = "合作协议", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CtrCooperationAgreementBo bo) { + return toAjax(ctrCooperationAgreementService.updateByBo(bo)); + } + + /** + * 删除合作协议 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:cooperationAgreement:remove") + @Log(title = "合作协议", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(ctrCooperationAgreementService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrSubcontractMainController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrSubcontractMainController.java new file mode 100644 index 00000000..8d70e644 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrSubcontractMainController.java @@ -0,0 +1,106 @@ +package org.dromara.ctr.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.ctr.domain.bo.CtrSubcontractMainBo; +import org.dromara.ctr.domain.vo.CtrSubcontractMainVo; +import org.dromara.ctr.service.ICtrSubcontractMainService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 主要信息 + * + * @author lilemy + * @date 2025-09-24 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/subcontractMain") +public class CtrSubcontractMainController extends BaseController { + + private final ICtrSubcontractMainService ctrSubcontractMainService; + + /** + * 查询主要信息列表 + */ + @SaCheckPermission("ctr:subcontractMain:list") + @GetMapping("/list") + public TableDataInfo list(CtrSubcontractMainBo bo, PageQuery pageQuery) { + return ctrSubcontractMainService.queryPageList(bo, pageQuery); + } + + /** + * 导出主要信息列表 + */ + @SaCheckPermission("ctr:subcontractMain:export") + @Log(title = "主要信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CtrSubcontractMainBo bo, HttpServletResponse response) { + List list = ctrSubcontractMainService.queryList(bo); + ExcelUtil.exportExcel(list, "主要信息", CtrSubcontractMainVo.class, response); + } + + /** + * 获取主要信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:subcontractMain:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(ctrSubcontractMainService.queryById(id)); + } + + /** + * 新增主要信息 + */ + @SaCheckPermission("ctr:subcontractMain:add") + @Log(title = "主要信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CtrSubcontractMainBo bo) { + return toAjax(ctrSubcontractMainService.insertByBo(bo)); + } + + /** + * 修改主要信息 + */ + @SaCheckPermission("ctr:subcontractMain:edit") + @Log(title = "主要信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CtrSubcontractMainBo bo) { + return toAjax(ctrSubcontractMainService.updateByBo(bo)); + } + + /** + * 删除主要信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:subcontractMain:remove") + @Log(title = "主要信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(ctrSubcontractMainService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrSubcontractSealController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrSubcontractSealController.java new file mode 100644 index 00000000..2e2e7acc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/controller/CtrSubcontractSealController.java @@ -0,0 +1,106 @@ +package org.dromara.ctr.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.ctr.domain.bo.CtrSubcontractSealBo; +import org.dromara.ctr.domain.vo.CtrSubcontractSealVo; +import org.dromara.ctr.service.ICtrSubcontractSealService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 印章信息 + * + * @author lilemy + * @date 2025-09-24 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ctr/subcontractSeal") +public class CtrSubcontractSealController extends BaseController { + + private final ICtrSubcontractSealService ctrSubcontractSealService; + + /** + * 查询印章信息列表 + */ + @SaCheckPermission("ctr:subcontractSeal:list") + @GetMapping("/list") + public TableDataInfo list(CtrSubcontractSealBo bo, PageQuery pageQuery) { + return ctrSubcontractSealService.queryPageList(bo, pageQuery); + } + + /** + * 导出印章信息列表 + */ + @SaCheckPermission("ctr:subcontractSeal:export") + @Log(title = "印章信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CtrSubcontractSealBo bo, HttpServletResponse response) { + List list = ctrSubcontractSealService.queryList(bo); + ExcelUtil.exportExcel(list, "印章信息", CtrSubcontractSealVo.class, response); + } + + /** + * 获取印章信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ctr:subcontractSeal:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(ctrSubcontractSealService.queryById(id)); + } + + /** + * 新增印章信息 + */ + @SaCheckPermission("ctr:subcontractSeal:add") + @Log(title = "印章信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CtrSubcontractSealBo bo) { + return toAjax(ctrSubcontractSealService.insertByBo(bo)); + } + + /** + * 修改印章信息 + */ + @SaCheckPermission("ctr:subcontractSeal:edit") + @Log(title = "印章信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CtrSubcontractSealBo bo) { + return toAjax(ctrSubcontractSealService.updateByBo(bo)); + } + + /** + * 删除印章信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("ctr:subcontractSeal:remove") + @Log(title = "印章信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(ctrSubcontractSealService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/ContractPaymentClause.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/ContractPaymentClause.java new file mode 100644 index 00000000..f34ed524 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/ContractPaymentClause.java @@ -0,0 +1,93 @@ +package org.dromara.ctr.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; + +/** + * 支付条款对象 contract_payment_clause + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("contract_payment_clause") +public class ContractPaymentClause extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 合同id + */ + private Long contractId; + + /** + * 类型 + */ + private String clauseType; + + /** + * 结算周期 + */ + private String settlementCycle; + + /** + * 结算账龄(天) + */ + private Integer settlementAgeDays; + + /** + * 里程碑节点 + */ + private String milestone; + + /** + * 选择值 + */ + private String selectValue; + + /** + * 比较符 + */ + private String comparator; + + /** + * 比较值 + */ + private String compareValue; + + /** + * 收款账龄(天) + */ + private Integer receiptAgeDays; + + /** + * 收款基数 + */ + private BigDecimal receiptBase; + + /** + * 收款比例(%) + */ + private BigDecimal receiptRatio; + + /** + * 备注/补充说明 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractAppoint.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractAppoint.java new file mode 100644 index 00000000..2b76e675 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractAppoint.java @@ -0,0 +1,93 @@ +package org.dromara.ctr.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; + +/** + * 承包合同-主要条款约定对象 ctr_contract_appoint + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ctr_contract_appoint") +public class CtrContractAppoint extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 合同id + */ + private Long contractId; + + /** + * 履约保证金形式 + */ + private String performanceBondType; + + /** + * 履约保证金比例(%) + */ + private BigDecimal performanceBondRatio; + + /** + * 履约保证金金额(元) + */ + private BigDecimal performanceBondAmount; + + /** + * 是否有预收款(0否 1 是) + */ + private String advancePaymentFlag; + + /** + * 预收款比例(%) + */ + private BigDecimal advancePaymentRatio; + + /** + * 预收款金额(元) + */ + private BigDecimal advancePaymentAmount; + + /** + * 质量保证金形式 + */ + private String qualityBondType; + + /** + * 质量保证金比例(%) + */ + private BigDecimal qualityBondRatio; + + /** + * 质量保证金金额(元) + */ + private BigDecimal qualityBondAmount; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractBillItem.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractBillItem.java new file mode 100644 index 00000000..21eeb5eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractBillItem.java @@ -0,0 +1,77 @@ +package org.dromara.ctr.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; + +/** + * 承包合同-工程量清单对象 ctr_contract_bill_item + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ctr_contract_bill_item") +public class CtrContractBillItem extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 编码 + */ + private String code; + + /** + * 合同id + */ + private Long contractId; + + /** + * 合同清单名称 + */ + private String itemName; + + /** + * 计量单位 + */ + private String unit; + + /** + * 数量 + */ + private BigDecimal quantity; + + /** + * 含税单价 + */ + private BigDecimal unitPriceTax; + + /** + * 价税合计 + */ + private BigDecimal totalPriceTax; + + /** + * 不含税金额 + */ + private BigDecimal amountExclTax; + + /** + * 税率(%) + */ + private BigDecimal taxRate; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractMain.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractMain.java new file mode 100644 index 00000000..83fe5ba3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrContractMain.java @@ -0,0 +1,164 @@ +package org.dromara.ctr.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 承包合同-基本信息对象 ctr_contract_main + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ctr_contract_main") +public class CtrContractMain extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 合同编码 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 单据日期 + */ + private LocalDate documentDate; + + /** + * 合同模式 + */ + private String contractMode; + + /** + * 签订日期 + */ + private LocalDate signDate; + + /** + * 客户性质 + */ + private String customerType; + + /** + * 甲方单位 + */ + private String partyA; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 开票单位 + */ + private String invoiceCompany; + + /** + * 乙方单位 + */ + private String partyB; + + /** + * 总投资额 + */ + private BigDecimal totalInvest; + + /** + * 预算分类 + */ + private String budgetCategory; + + /** + * 收票单位 + */ + private String receiptCompany; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 支付方式 + */ + private String paymentMethod; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 工程规模 + */ + private String projectScale; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 印章名称 + */ + private String sealName; + + /** + * 大写合同价税合计 + */ + private String amountUpper; + + /** + * 签约组织 + */ + private String signOrg; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 项目大类 + */ + private String projectCategory; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrCooperationAgreement.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrCooperationAgreement.java new file mode 100644 index 00000000..54979fa6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrCooperationAgreement.java @@ -0,0 +1,118 @@ +package org.dromara.ctr.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 合作协议对象 ctr_cooperation_agreement + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ctr_cooperation_agreement") +public class CtrCooperationAgreement extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 合同编码 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 单据日期 + */ + private LocalDate documentDate; + + /** + * 甲方单位 + */ + private String partyA; + + /** + * 乙方单位 + */ + private String partyB; + + /** + * 公司名称 + */ + private String companyName; + + /** + * 签订日期 + */ + private LocalDate signDate; + + /** + * 合同含税金额 + */ + private BigDecimal amount; + + /** + * 协议类型 + */ + private String agreementType; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrSubcontractMain.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrSubcontractMain.java new file mode 100644 index 00000000..4ccdc80e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrSubcontractMain.java @@ -0,0 +1,204 @@ +package org.dromara.ctr.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 主要信息对象 ctr_subcontract_main + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ctr_subcontract_main") +public class CtrSubcontractMain extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 合同编码 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 单据日期 + */ + private LocalDate documentDate; + + /** + * 合同类型 + */ + private String contractType; + + /** + * 经营模式 + */ + private String businessMode; + + /** + * 原合同造价 + */ + private Long originalAmount; + + /** + * 签订日期 + */ + private LocalDate signDate; + + /** + * 甲方单位 + */ + private String partyA; + + /** + * 乙方单位 + */ + private String partyB; + + /** + * 含税合同金额 + */ + private BigDecimal amountInclTax; + + /** + * 合同状态 + */ + private String contractStatus; + + /** + * 累计变更金额 + */ + private BigDecimal cumulativeChangeAmt; + + /** + * 管理组织 + */ + private String manageOrg; + + /** + * 执行项目经理 + */ + private String executiveManager; + + /** + * 开票单位 + */ + private String invoiceUnit; + + /** + * 收票单位 + */ + private String receiptUnit; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 目标成本 + */ + private BigDecimal targetCost; + + /** + * 可用目标成本 + */ + private BigDecimal availableTargetCost; + + /** + * 是否用印(0-否,1-是) + */ + private String hasSeal; + + /** + * 警示 + */ + private String warning; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 大写合同价税合计 + */ + private String amountInWords; + + /** + * 签约组织 + */ + private String signOrg; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 项目大项 + */ + private String projectCategory; + + /** + * 付款额不能超合同额(0-否,1-是) + */ + private String limitPay; + + /** + * 预结算/结算额不能超合同额(0-否,1-是) + */ + private String limitSettlement; + + /** + * 付款额不能超合同额比例 + */ + private BigDecimal limitPayRatio; + + /** + * 预结算/结算额不能超合同额比例 + */ + private BigDecimal limitSettlementRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrSubcontractSeal.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrSubcontractSeal.java new file mode 100644 index 00000000..17aa54c8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/CtrSubcontractSeal.java @@ -0,0 +1,52 @@ +package org.dromara.ctr.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 印章信息对象 ctr_subcontract_seal + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ctr_subcontract_seal") +public class CtrSubcontractSeal extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 分包合同id + */ + private Long subcontractId; + + /** + * 印章名称 + */ + private String sealName; + + /** + * 用印次数 + */ + private Integer sealCount; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/ContractPaymentClauseBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/ContractPaymentClauseBo.java new file mode 100644 index 00000000..6fa3e044 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/ContractPaymentClauseBo.java @@ -0,0 +1,93 @@ +package org.dromara.ctr.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.ctr.domain.ContractPaymentClause; + +import java.math.BigDecimal; + +/** + * 支付条款业务对象 contract_payment_clause + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ContractPaymentClause.class, reverseConvertGenerate = false) +public class ContractPaymentClauseBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 合同id + */ + @NotNull(message = "合同id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long contractId; + + /** + * 类型 + */ + private String clauseType; + + /** + * 结算周期 + */ + private String settlementCycle; + + /** + * 结算账龄(天) + */ + private Integer settlementAgeDays; + + /** + * 里程碑节点 + */ + private String milestone; + + /** + * 选择值 + */ + private String selectValue; + + /** + * 比较符 + */ + private String comparator; + + /** + * 比较值 + */ + private String compareValue; + + /** + * 收款账龄(天) + */ + private Integer receiptAgeDays; + + /** + * 收款基数 + */ + private BigDecimal receiptBase; + + /** + * 收款比例(%) + */ + private BigDecimal receiptRatio; + + /** + * 备注/补充说明 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractAppointBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractAppointBo.java new file mode 100644 index 00000000..4496432f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractAppointBo.java @@ -0,0 +1,97 @@ +package org.dromara.ctr.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.ctr.domain.CtrContractAppoint; + +import java.math.BigDecimal; + +/** + * 承包合同-主要条款约定业务对象 ctr_contract_appoint + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CtrContractAppoint.class, reverseConvertGenerate = false) +public class CtrContractAppointBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 合同id + */ + @NotNull(message = "合同id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long contractId; + + /** + * 履约保证金形式 + */ + @NotBlank(message = "履约保证金形式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String performanceBondType; + + /** + * 履约保证金比例(%) + */ + private BigDecimal performanceBondRatio; + + /** + * 履约保证金金额(元) + */ + private BigDecimal performanceBondAmount; + + /** + * 是否有预收款(0否 1 是) + */ + @NotBlank(message = "是否有预收款(0否 1 是)不能为空", groups = {AddGroup.class, EditGroup.class}) + private String advancePaymentFlag; + + /** + * 预收款比例(%) + */ + private BigDecimal advancePaymentRatio; + + /** + * 预收款金额(元) + */ + private BigDecimal advancePaymentAmount; + + /** + * 质量保证金形式 + */ + @NotBlank(message = "质量保证金形式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String qualityBondType; + + /** + * 质量保证金比例(%) + */ + private BigDecimal qualityBondRatio; + + /** + * 质量保证金金额(元) + */ + private BigDecimal qualityBondAmount; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractBillItemBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractBillItemBo.java new file mode 100644 index 00000000..e6006d64 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractBillItemBo.java @@ -0,0 +1,80 @@ +package org.dromara.ctr.domain.bo; + +import org.dromara.ctr.domain.CtrContractBillItem; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; + +/** + * 承包合同-工程量清单业务对象 ctr_contract_bill_item + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CtrContractBillItem.class, reverseConvertGenerate = false) +public class CtrContractBillItemBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 编码 + */ + @NotBlank(message = "编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String code; + + /** + * 合同id + */ + @NotNull(message = "合同id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long contractId; + + /** + * 合同清单名称 + */ + @NotBlank(message = "合同清单名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemName; + + /** + * 计量单位 + */ + @NotBlank(message = "计量单位不能为空", groups = { AddGroup.class, EditGroup.class }) + private String unit; + + /** + * 数量 + */ + private BigDecimal quantity; + + /** + * 含税单价 + */ + private BigDecimal unitPriceTax; + + /** + * 价税合计 + */ + private BigDecimal totalPriceTax; + + /** + * 不含税金额 + */ + private BigDecimal amountExclTax; + + /** + * 税率(%) + */ + private BigDecimal taxRate; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractMainBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractMainBo.java new file mode 100644 index 00000000..35c7c5a6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrContractMainBo.java @@ -0,0 +1,181 @@ +package org.dromara.ctr.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.ctr.domain.CtrContractMain; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 承包合同-基本信息业务对象 ctr_contract_main + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CtrContractMain.class, reverseConvertGenerate = false) +public class CtrContractMainBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 合同编码 + */ + @NotBlank(message = "合同编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractCode; + + /** + * 合同名称 + */ + @NotBlank(message = "合同名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractName; + + /** + * 单据日期 + */ + @NotNull(message = "单据日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate documentDate; + + /** + * 合同模式 + */ + @NotBlank(message = "合同模式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractMode; + + /** + * 签订日期 + */ + @NotNull(message = "签订日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate signDate; + + /** + * 客户性质 + */ + @NotBlank(message = "客户性质不能为空", groups = {AddGroup.class, EditGroup.class}) + private String customerType; + + /** + * 甲方单位 + */ + @NotBlank(message = "甲方单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String partyA; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 开票单位 + */ + @NotBlank(message = "开票单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String invoiceCompany; + + /** + * 乙方单位 + */ + @NotBlank(message = "乙方单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String partyB; + + /** + * 总投资额 + */ + @NotNull(message = "总投资额不能为空", groups = {AddGroup.class, EditGroup.class}) + private BigDecimal totalInvest; + + /** + * 预算分类 + */ + @NotBlank(message = "预算分类不能为空", groups = {AddGroup.class, EditGroup.class}) + private String budgetCategory; + + /** + * 收票单位 + */ + @NotBlank(message = "收票单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String receiptCompany; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 支付方式 + */ + @NotBlank(message = "支付方式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String paymentMethod; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 工程规模 + */ + private String projectScale; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + @NotBlank(message = "状态不能为空", groups = {AddGroup.class, EditGroup.class}) + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 印章名称 + */ + @NotBlank(message = "印章名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String sealName; + + /** + * 大写合同价税合计 + */ + private String amountUpper; + + /** + * 签约组织 + */ + @NotBlank(message = "签约组织不能为空", groups = {AddGroup.class, EditGroup.class}) + private String signOrg; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 项目大类 + */ + private String projectCategory; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrCooperationAgreementBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrCooperationAgreementBo.java new file mode 100644 index 00000000..96faaaa6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrCooperationAgreementBo.java @@ -0,0 +1,127 @@ +package org.dromara.ctr.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.ctr.domain.CtrCooperationAgreement; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 合作协议业务对象 ctr_cooperation_agreement + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CtrCooperationAgreement.class, reverseConvertGenerate = false) +public class CtrCooperationAgreementBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 合同编码 + */ + @NotBlank(message = "合同编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractCode; + + /** + * 合同名称 + */ + @NotBlank(message = "合同名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractName; + + /** + * 单据日期 + */ + @NotNull(message = "单据日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate documentDate; + + /** + * 甲方单位 + */ + @NotBlank(message = "甲方单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String partyA; + + /** + * 乙方单位 + */ + @NotBlank(message = "乙方单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String partyB; + + /** + * 公司名称 + */ + private String companyName; + + /** + * 签订日期 + */ + @NotNull(message = "签订日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate signDate; + + /** + * 合同含税金额 + */ + @NotNull(message = "合同含税金额不能为空", groups = {AddGroup.class, EditGroup.class}) + private BigDecimal amount; + + /** + * 协议类型 + */ + private String agreementType; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 状态 + */ + private String status; + + /** + * 文件id + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrSubcontractMainBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrSubcontractMainBo.java new file mode 100644 index 00000000..7c91db76 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrSubcontractMainBo.java @@ -0,0 +1,214 @@ +package org.dromara.ctr.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.ctr.domain.CtrSubcontractMain; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Date; + +/** + * 主要信息业务对象 ctr_subcontract_main + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CtrSubcontractMain.class, reverseConvertGenerate = false) +public class CtrSubcontractMainBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 合同编码 + */ + @NotBlank(message = "合同编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractCode; + + /** + * 合同名称 + */ + @NotBlank(message = "合同名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractName; + + /** + * 单据日期 + */ + @NotNull(message = "单据日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate documentDate; + + /** + * 合同类型 + */ + @NotBlank(message = "合同类型不能为空", groups = {AddGroup.class, EditGroup.class}) + private String contractType; + + /** + * 经营模式 + */ + private String businessMode; + + /** + * 原合同造价 + */ + private BigDecimal originalAmount; + + /** + * 签订日期 + */ + private LocalDate signDate; + + /** + * 甲方单位 + */ + @NotBlank(message = "甲方单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String partyA; + + /** + * 乙方单位 + */ + @NotBlank(message = "乙方单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String partyB; + + /** + * 含税合同金额 + */ + private BigDecimal amountInclTax; + + /** + * 合同状态 + */ + private String contractStatus; + + /** + * 累计变更金额 + */ + private BigDecimal cumulativeChangeAmt; + + /** + * 管理组织 + */ + private String manageOrg; + + /** + * 执行项目经理 + */ + private String executiveManager; + + /** + * 开票单位 + */ + @NotBlank(message = "开票单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String invoiceUnit; + + /** + * 收票单位 + */ + @NotBlank(message = "收票单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String receiptUnit; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 目标成本 + */ + private BigDecimal targetCost; + + /** + * 可用目标成本 + */ + private BigDecimal availableTargetCost; + + /** + * 是否用印(0-否,1-是) + */ + private String hasSeal; + + /** + * 警示 + */ + private String warning; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 大写合同价税合计 + */ + private String amountInWords; + + /** + * 签约组织 + */ + private String signOrg; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 项目大项 + */ + private String projectCategory; + + /** + * 付款额不能超合同额(0-否,1-是) + */ + private String limitPay; + + /** + * 预结算/结算额不能超合同额(0-否,1-是) + */ + private String limitSettlement; + + /** + * 付款额不能超合同额比例 + */ + private BigDecimal limitPayRatio; + + /** + * 预结算/结算额不能超合同额比例 + */ + private BigDecimal limitSettlementRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrSubcontractSealBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrSubcontractSealBo.java new file mode 100644 index 00000000..13559f61 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/bo/CtrSubcontractSealBo.java @@ -0,0 +1,54 @@ +package org.dromara.ctr.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.ctr.domain.CtrSubcontractSeal; + +/** + * 印章信息业务对象 ctr_subcontract_seal + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CtrSubcontractSeal.class, reverseConvertGenerate = false) +public class CtrSubcontractSealBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 分包合同id + */ + @NotNull(message = "分包合同id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long subcontractId; + + /** + * 印章名称 + */ + @NotBlank(message = "印章名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String sealName; + + /** + * 用印次数 + */ + @NotNull(message = "用印次数不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer sealCount; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/ContractPaymentClauseVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/ContractPaymentClauseVo.java new file mode 100644 index 00000000..c3d06b96 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/ContractPaymentClauseVo.java @@ -0,0 +1,112 @@ +package org.dromara.ctr.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.ctr.domain.ContractPaymentClause; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + + +/** + * 支付条款视图对象 contract_payment_clause + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ContractPaymentClause.class) +public class ContractPaymentClauseVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 合同id + */ + @ExcelProperty(value = "合同id") + private Long contractId; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String clauseType; + + /** + * 结算周期 + */ + @ExcelProperty(value = "结算周期") + private String settlementCycle; + + /** + * 结算账龄(天) + */ + @ExcelProperty(value = "结算账龄", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "天=") + private Integer settlementAgeDays; + + /** + * 里程碑节点 + */ + @ExcelProperty(value = "里程碑节点") + private String milestone; + + /** + * 选择值 + */ + @ExcelProperty(value = "选择值") + private String selectValue; + + /** + * 比较符 + */ + @ExcelProperty(value = "比较符") + private String comparator; + + /** + * 比较值 + */ + @ExcelProperty(value = "比较值") + private String compareValue; + + /** + * 收款账龄(天) + */ + @ExcelProperty(value = "收款账龄", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "天=") + private Integer receiptAgeDays; + + /** + * 收款基数 + */ + @ExcelProperty(value = "收款基数") + private BigDecimal receiptBase; + + /** + * 收款比例(%) + */ + @ExcelProperty(value = "收款比例", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "%=") + private BigDecimal receiptRatio; + + /** + * 备注/补充说明 + */ + @ExcelProperty(value = "备注/补充说明") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractAppointVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractAppointVo.java new file mode 100644 index 00000000..eaa8f34f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractAppointVo.java @@ -0,0 +1,107 @@ +package org.dromara.ctr.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.ctr.domain.CtrContractAppoint; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + + +/** + * 承包合同-主要条款约定视图对象 ctr_contract_appoint + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CtrContractAppoint.class) +public class CtrContractAppointVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 合同id + */ + @ExcelProperty(value = "合同id") + private Long contractId; + + /** + * 履约保证金形式 + */ + @ExcelProperty(value = "履约保证金形式") + private String performanceBondType; + + /** + * 履约保证金比例(%) + */ + @ExcelProperty(value = "履约保证金比例(%)") + private BigDecimal performanceBondRatio; + + /** + * 履约保证金金额(元) + */ + @ExcelProperty(value = "履约保证金金额(元)") + private BigDecimal performanceBondAmount; + + /** + * 是否有预收款(0否 1 是) + */ + @ExcelProperty(value = "是否有预收款(0否 1 是)") + private String advancePaymentFlag; + + /** + * 预收款比例(%) + */ + @ExcelProperty(value = "预收款比例(%)") + private BigDecimal advancePaymentRatio; + + /** + * 预收款金额(元) + */ + @ExcelProperty(value = "预收款金额(元)") + private BigDecimal advancePaymentAmount; + + /** + * 质量保证金形式 + */ + @ExcelProperty(value = "质量保证金形式") + private String qualityBondType; + + /** + * 质量保证金比例(%) + */ + @ExcelProperty(value = "质量保证金比例(%)") + private BigDecimal qualityBondRatio; + + /** + * 质量保证金金额(元) + */ + @ExcelProperty(value = "质量保证金金额(元)") + private BigDecimal qualityBondAmount; + + /** + * 文件id + */ + @ExcelProperty(value = "文件id") + private String fileId; + + /** + * 状态 + */ + @ExcelProperty(value = "状态") + private String status; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractBillItemVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractBillItemVo.java new file mode 100644 index 00000000..6d654c22 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractBillItemVo.java @@ -0,0 +1,75 @@ +package org.dromara.ctr.domain.vo; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.ctr.domain.CtrContractBillItem; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + + +/** + * 承包合同-工程量清单视图对象 ctr_contract_bill_item + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@AutoMapper(target = CtrContractBillItem.class) +public class CtrContractBillItemVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 编码 + */ + private String code; + + /** + * 合同id + */ + private Long contractId; + + /** + * 合同清单名称 + */ + private String itemName; + + /** + * 计量单位 + */ + private String unit; + + /** + * 数量 + */ + private BigDecimal quantity; + + /** + * 含税单价 + */ + private BigDecimal unitPriceTax; + + /** + * 价税合计 + */ + private BigDecimal totalPriceTax; + + /** + * 不含税金额 + */ + private BigDecimal amountExclTax; + + /** + * 税率(%) + */ + private BigDecimal taxRate; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractMainVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractMainVo.java new file mode 100644 index 00000000..7205f88e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrContractMainVo.java @@ -0,0 +1,163 @@ +package org.dromara.ctr.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.ctr.domain.CtrContractMain; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + + +/** + * 承包合同-基本信息视图对象 ctr_contract_main + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CtrContractMain.class) +public class CtrContractMainVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 合同编码 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 单据日期 + */ + private LocalDate documentDate; + + /** + * 合同模式 + */ + private String contractMode; + + /** + * 签订日期 + */ + private LocalDate signDate; + + /** + * 客户性质 + */ + private String customerType; + + /** + * 甲方单位 + */ + private String partyA; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 开票单位 + */ + private String invoiceCompany; + + /** + * 乙方单位 + */ + private String partyB; + + /** + * 总投资额 + */ + private BigDecimal totalInvest; + + /** + * 预算分类 + */ + private String budgetCategory; + + /** + * 收票单位 + */ + private String receiptCompany; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 支付方式 + */ + private String paymentMethod; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 工程规模 + */ + private String projectScale; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 印章名称 + */ + private String sealName; + + /** + * 大写合同价税合计 + */ + private String amountUpper; + + /** + * 签约组织 + */ + private String signOrg; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 项目大类 + */ + private String projectCategory; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrCooperationAgreementVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrCooperationAgreementVo.java new file mode 100644 index 00000000..0f7de0ae --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrCooperationAgreementVo.java @@ -0,0 +1,131 @@ +package org.dromara.ctr.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.ctr.domain.CtrCooperationAgreement; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + + +/** + * 合作协议视图对象 ctr_cooperation_agreement + * + * @author lilemy + * @date 2025-09-23 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CtrCooperationAgreement.class) +public class CtrCooperationAgreementVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 合同编码 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 单据日期 + */ + private LocalDate documentDate; + + /** + * 甲方单位 + */ + private String partyA; + + /** + * 乙方单位 + */ + private String partyB; + + /** + * 公司名称 + */ + private String companyName; + + /** + * 签订日期 + */ + private LocalDate signDate; + + /** + * 合同含税金额 + */ + private BigDecimal amount; + + /** + * 协议类型 + */ + private String agreementType; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 支付条款 + */ + private String paymentTerms; + + /** + * 文件id + */ + private String fileId; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 创建者姓名 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + private String createByName; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrSubcontractMainVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrSubcontractMainVo.java new file mode 100644 index 00000000..e2ae107f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrSubcontractMainVo.java @@ -0,0 +1,246 @@ +package org.dromara.ctr.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.ctr.domain.CtrSubcontractMain; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + + +/** + * 主要信息视图对象 ctr_subcontract_main + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CtrSubcontractMain.class) +public class CtrSubcontractMainVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 合同编码 + */ + @ExcelProperty(value = "合同编码") + private String contractCode; + + /** + * 合同名称 + */ + @ExcelProperty(value = "合同名称") + private String contractName; + + /** + * 单据日期 + */ + @ExcelProperty(value = "单据日期") + private LocalDate documentDate; + + /** + * 合同类型 + */ + @ExcelProperty(value = "合同类型") + private String contractType; + + /** + * 经营模式 + */ + @ExcelProperty(value = "经营模式") + private String businessMode; + + /** + * 原合同造价 + */ + @ExcelProperty(value = "原合同造价") + private BigDecimal originalAmount; + + /** + * 签订日期 + */ + @ExcelProperty(value = "签订日期") + private LocalDate signDate; + + /** + * 甲方单位 + */ + @ExcelProperty(value = "甲方单位") + private String partyA; + + /** + * 乙方单位 + */ + @ExcelProperty(value = "乙方单位") + private String partyB; + + /** + * 含税合同金额 + */ + @ExcelProperty(value = "含税合同金额") + private BigDecimal amountInclTax; + + /** + * 合同状态 + */ + @ExcelProperty(value = "合同状态") + private String contractStatus; + + /** + * 累计变更金额 + */ + @ExcelProperty(value = "累计变更金额") + private BigDecimal cumulativeChangeAmt; + + /** + * 管理组织 + */ + @ExcelProperty(value = "管理组织") + private String manageOrg; + + /** + * 执行项目经理 + */ + @ExcelProperty(value = "执行项目经理") + private String executiveManager; + + /** + * 开票单位 + */ + @ExcelProperty(value = "开票单位") + private String invoiceUnit; + + /** + * 收票单位 + */ + @ExcelProperty(value = "收票单位") + private String receiptUnit; + + /** + * 归档日期 + */ + @ExcelProperty(value = "归档日期") + private LocalDate archiveDate; + + /** + * 目标成本 + */ + @ExcelProperty(value = "目标成本") + private BigDecimal targetCost; + + /** + * 可用目标成本 + */ + @ExcelProperty(value = "可用目标成本") + private BigDecimal availableTargetCost; + + /** + * 是否用印(0-否,1-是) + */ + @ExcelProperty(value = "是否用印", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=-否,1-是") + private String hasSeal; + + /** + * 警示 + */ + @ExcelProperty(value = "警示") + private String warning; + + /** + * 支付条款 + */ + @ExcelProperty(value = "支付条款") + private String paymentTerms; + + /** + * 文件id + */ + @ExcelProperty(value = "文件id") + private String fileId; + + /** + * 状态 + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "wf_business_status") + private String status; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 大写合同价税合计 + */ + @ExcelProperty(value = "大写合同价税合计") + private String amountInWords; + + /** + * 签约组织 + */ + @ExcelProperty(value = "签约组织") + private String signOrg; + + /** + * 项目类型 + */ + @ExcelProperty(value = "项目类型") + private String projectType; + + /** + * 项目大项 + */ + @ExcelProperty(value = "项目大项") + private String projectCategory; + + /** + * 付款额不能超合同额(0-否,1-是) + */ + @ExcelProperty(value = "付款额不能超合同额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=-否,1-是") + private String limitPay; + + /** + * 预结算/结算额不能超合同额(0-否,1-是) + */ + @ExcelProperty(value = "预结算/结算额不能超合同额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=-否,1-是") + private String limitSettlement; + + /** + * 付款额不能超合同额比例 + */ + @ExcelProperty(value = "付款额不能超合同额比例") + private BigDecimal limitPayRatio; + + /** + * 预结算/结算额不能超合同额比例 + */ + @ExcelProperty(value = "预结算/结算额不能超合同额比例") + private BigDecimal limitSettlementRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrSubcontractSealVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrSubcontractSealVo.java new file mode 100644 index 00000000..a024ba49 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/domain/vo/CtrSubcontractSealVo.java @@ -0,0 +1,58 @@ +package org.dromara.ctr.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.ctr.domain.CtrSubcontractSeal; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 印章信息视图对象 ctr_subcontract_seal + * + * @author lilemy + * @date 2025-09-24 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CtrSubcontractSeal.class) +public class CtrSubcontractSealVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 分包合同id + */ + @ExcelProperty(value = "分包合同id") + private Long subcontractId; + + /** + * 印章名称 + */ + @ExcelProperty(value = "印章名称") + private String sealName; + + /** + * 用印次数 + */ + @ExcelProperty(value = "用印次数") + private Integer sealCount; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/ContractPaymentClauseMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/ContractPaymentClauseMapper.java new file mode 100644 index 00000000..e7225814 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/ContractPaymentClauseMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.ctr.domain.ContractPaymentClause; +import org.dromara.ctr.domain.vo.ContractPaymentClauseVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 支付条款Mapper接口 + * + * @author lilemy + * @date 2025-09-24 + */ +public interface ContractPaymentClauseMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractAppointMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractAppointMapper.java new file mode 100644 index 00000000..41f249ed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractAppointMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.ctr.domain.CtrContractAppoint; +import org.dromara.ctr.domain.vo.CtrContractAppointVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 承包合同-主要条款约定Mapper接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface CtrContractAppointMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractBillItemMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractBillItemMapper.java new file mode 100644 index 00000000..faf3babe --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractBillItemMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.ctr.domain.CtrContractBillItem; +import org.dromara.ctr.domain.vo.CtrContractBillItemVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 承包合同-工程量清单Mapper接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface CtrContractBillItemMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractMainMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractMainMapper.java new file mode 100644 index 00000000..7416fd9b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrContractMainMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.ctr.domain.CtrContractMain; +import org.dromara.ctr.domain.vo.CtrContractMainVo; + +/** + * 承包合同-基本信息Mapper接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface CtrContractMainMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrCooperationAgreementMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrCooperationAgreementMapper.java new file mode 100644 index 00000000..a0b9f1d3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrCooperationAgreementMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.ctr.domain.CtrCooperationAgreement; +import org.dromara.ctr.domain.vo.CtrCooperationAgreementVo; + +/** + * 合作协议Mapper接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface CtrCooperationAgreementMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrSubcontractMainMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrSubcontractMainMapper.java new file mode 100644 index 00000000..13115b7e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrSubcontractMainMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.ctr.domain.CtrSubcontractMain; +import org.dromara.ctr.domain.vo.CtrSubcontractMainVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 主要信息Mapper接口 + * + * @author lilemy + * @date 2025-09-24 + */ +public interface CtrSubcontractMainMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrSubcontractSealMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrSubcontractSealMapper.java new file mode 100644 index 00000000..b8144fe3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/mapper/CtrSubcontractSealMapper.java @@ -0,0 +1,15 @@ +package org.dromara.ctr.mapper; + +import org.dromara.ctr.domain.CtrSubcontractSeal; +import org.dromara.ctr.domain.vo.CtrSubcontractSealVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 印章信息Mapper接口 + * + * @author lilemy + * @date 2025-09-24 + */ +public interface CtrSubcontractSealMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/IContractPaymentClauseService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/IContractPaymentClauseService.java new file mode 100644 index 00000000..fe5dd2cb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/IContractPaymentClauseService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.ctr.domain.ContractPaymentClause; +import org.dromara.ctr.domain.bo.ContractPaymentClauseBo; +import org.dromara.ctr.domain.vo.ContractPaymentClauseVo; + +import java.util.Collection; +import java.util.List; + +/** + * 支付条款Service接口 + * + * @author lilemy + * @date 2025-09-24 + */ +public interface IContractPaymentClauseService extends IService { + + /** + * 查询支付条款 + * + * @param id 主键 + * @return 支付条款 + */ + ContractPaymentClauseVo queryById(Long id); + + /** + * 分页查询支付条款列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 支付条款分页列表 + */ + TableDataInfo queryPageList(ContractPaymentClauseBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的支付条款列表 + * + * @param bo 查询条件 + * @return 支付条款列表 + */ + List queryList(ContractPaymentClauseBo bo); + + /** + * 新增支付条款 + * + * @param bo 支付条款 + * @return 是否新增成功 + */ + Boolean insertByBo(ContractPaymentClauseBo bo); + + /** + * 修改支付条款 + * + * @param bo 支付条款 + * @return 是否修改成功 + */ + Boolean updateByBo(ContractPaymentClauseBo bo); + + /** + * 校验并批量删除支付条款信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractAppointService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractAppointService.java new file mode 100644 index 00000000..d57500f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractAppointService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import org.dromara.ctr.domain.vo.CtrContractAppointVo; +import org.dromara.ctr.domain.bo.CtrContractAppointBo; +import org.dromara.ctr.domain.CtrContractAppoint; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 承包合同-主要条款约定Service接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface ICtrContractAppointService extends IService{ + + /** + * 查询承包合同-主要条款约定 + * + * @param id 主键 + * @return 承包合同-主要条款约定 + */ + CtrContractAppointVo queryById(Long id); + + /** + * 分页查询承包合同-主要条款约定列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 承包合同-主要条款约定分页列表 + */ + TableDataInfo queryPageList(CtrContractAppointBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的承包合同-主要条款约定列表 + * + * @param bo 查询条件 + * @return 承包合同-主要条款约定列表 + */ + List queryList(CtrContractAppointBo bo); + + /** + * 新增承包合同-主要条款约定 + * + * @param bo 承包合同-主要条款约定 + * @return 是否新增成功 + */ + Boolean insertByBo(CtrContractAppointBo bo); + + /** + * 修改承包合同-主要条款约定 + * + * @param bo 承包合同-主要条款约定 + * @return 是否修改成功 + */ + Boolean updateByBo(CtrContractAppointBo bo); + + /** + * 校验并批量删除承包合同-主要条款约定信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractBillItemService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractBillItemService.java new file mode 100644 index 00000000..c098fcce --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractBillItemService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import org.dromara.ctr.domain.vo.CtrContractBillItemVo; +import org.dromara.ctr.domain.bo.CtrContractBillItemBo; +import org.dromara.ctr.domain.CtrContractBillItem; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 承包合同-工程量清单Service接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface ICtrContractBillItemService extends IService{ + + /** + * 查询承包合同-工程量清单 + * + * @param id 主键 + * @return 承包合同-工程量清单 + */ + CtrContractBillItemVo queryById(Long id); + + /** + * 分页查询承包合同-工程量清单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 承包合同-工程量清单分页列表 + */ + TableDataInfo queryPageList(CtrContractBillItemBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的承包合同-工程量清单列表 + * + * @param bo 查询条件 + * @return 承包合同-工程量清单列表 + */ + List queryList(CtrContractBillItemBo bo); + + /** + * 新增承包合同-工程量清单 + * + * @param bo 承包合同-工程量清单 + * @return 是否新增成功 + */ + Boolean insertByBo(CtrContractBillItemBo bo); + + /** + * 修改承包合同-工程量清单 + * + * @param bo 承包合同-工程量清单 + * @return 是否修改成功 + */ + Boolean updateByBo(CtrContractBillItemBo bo); + + /** + * 校验并批量删除承包合同-工程量清单信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractMainService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractMainService.java new file mode 100644 index 00000000..2ee4839b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrContractMainService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import org.dromara.ctr.domain.vo.CtrContractMainVo; +import org.dromara.ctr.domain.bo.CtrContractMainBo; +import org.dromara.ctr.domain.CtrContractMain; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 承包合同-基本信息Service接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface ICtrContractMainService extends IService{ + + /** + * 查询承包合同-基本信息 + * + * @param id 主键 + * @return 承包合同-基本信息 + */ + CtrContractMainVo queryById(Long id); + + /** + * 分页查询承包合同-基本信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 承包合同-基本信息分页列表 + */ + TableDataInfo queryPageList(CtrContractMainBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的承包合同-基本信息列表 + * + * @param bo 查询条件 + * @return 承包合同-基本信息列表 + */ + List queryList(CtrContractMainBo bo); + + /** + * 新增承包合同-基本信息 + * + * @param bo 承包合同-基本信息 + * @return 是否新增成功 + */ + Boolean insertByBo(CtrContractMainBo bo); + + /** + * 修改承包合同-基本信息 + * + * @param bo 承包合同-基本信息 + * @return 是否修改成功 + */ + Boolean updateByBo(CtrContractMainBo bo); + + /** + * 校验并批量删除承包合同-基本信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrCooperationAgreementService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrCooperationAgreementService.java new file mode 100644 index 00000000..b01b9574 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrCooperationAgreementService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import org.dromara.ctr.domain.vo.CtrCooperationAgreementVo; +import org.dromara.ctr.domain.bo.CtrCooperationAgreementBo; +import org.dromara.ctr.domain.CtrCooperationAgreement; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 合作协议Service接口 + * + * @author lilemy + * @date 2025-09-23 + */ +public interface ICtrCooperationAgreementService extends IService{ + + /** + * 查询合作协议 + * + * @param id 主键 + * @return 合作协议 + */ + CtrCooperationAgreementVo queryById(Long id); + + /** + * 分页查询合作协议列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合作协议分页列表 + */ + TableDataInfo queryPageList(CtrCooperationAgreementBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合作协议列表 + * + * @param bo 查询条件 + * @return 合作协议列表 + */ + List queryList(CtrCooperationAgreementBo bo); + + /** + * 新增合作协议 + * + * @param bo 合作协议 + * @return 是否新增成功 + */ + Boolean insertByBo(CtrCooperationAgreementBo bo); + + /** + * 修改合作协议 + * + * @param bo 合作协议 + * @return 是否修改成功 + */ + Boolean updateByBo(CtrCooperationAgreementBo bo); + + /** + * 校验并批量删除合作协议信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrSubcontractMainService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrSubcontractMainService.java new file mode 100644 index 00000000..e5927f4b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrSubcontractMainService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import org.dromara.ctr.domain.vo.CtrSubcontractMainVo; +import org.dromara.ctr.domain.bo.CtrSubcontractMainBo; +import org.dromara.ctr.domain.CtrSubcontractMain; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 主要信息Service接口 + * + * @author lilemy + * @date 2025-09-24 + */ +public interface ICtrSubcontractMainService extends IService{ + + /** + * 查询主要信息 + * + * @param id 主键 + * @return 主要信息 + */ + CtrSubcontractMainVo queryById(Long id); + + /** + * 分页查询主要信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 主要信息分页列表 + */ + TableDataInfo queryPageList(CtrSubcontractMainBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的主要信息列表 + * + * @param bo 查询条件 + * @return 主要信息列表 + */ + List queryList(CtrSubcontractMainBo bo); + + /** + * 新增主要信息 + * + * @param bo 主要信息 + * @return 是否新增成功 + */ + Boolean insertByBo(CtrSubcontractMainBo bo); + + /** + * 修改主要信息 + * + * @param bo 主要信息 + * @return 是否修改成功 + */ + Boolean updateByBo(CtrSubcontractMainBo bo); + + /** + * 校验并批量删除主要信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrSubcontractSealService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrSubcontractSealService.java new file mode 100644 index 00000000..1f444061 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/ICtrSubcontractSealService.java @@ -0,0 +1,70 @@ +package org.dromara.ctr.service; + +import org.dromara.ctr.domain.vo.CtrSubcontractSealVo; +import org.dromara.ctr.domain.bo.CtrSubcontractSealBo; +import org.dromara.ctr.domain.CtrSubcontractSeal; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 印章信息Service接口 + * + * @author lilemy + * @date 2025-09-24 + */ +public interface ICtrSubcontractSealService extends IService{ + + /** + * 查询印章信息 + * + * @param id 主键 + * @return 印章信息 + */ + CtrSubcontractSealVo queryById(Long id); + + /** + * 分页查询印章信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 印章信息分页列表 + */ + TableDataInfo queryPageList(CtrSubcontractSealBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的印章信息列表 + * + * @param bo 查询条件 + * @return 印章信息列表 + */ + List queryList(CtrSubcontractSealBo bo); + + /** + * 新增印章信息 + * + * @param bo 印章信息 + * @return 是否新增成功 + */ + Boolean insertByBo(CtrSubcontractSealBo bo); + + /** + * 修改印章信息 + * + * @param bo 印章信息 + * @return 是否修改成功 + */ + Boolean updateByBo(CtrSubcontractSealBo bo); + + /** + * 校验并批量删除印章信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/ContractPaymentClauseServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/ContractPaymentClauseServiceImpl.java new file mode 100644 index 00000000..c6d64ee7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/ContractPaymentClauseServiceImpl.java @@ -0,0 +1,140 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.ContractPaymentClause; +import org.dromara.ctr.domain.bo.ContractPaymentClauseBo; +import org.dromara.ctr.domain.vo.ContractPaymentClauseVo; +import org.dromara.ctr.mapper.ContractPaymentClauseMapper; +import org.dromara.ctr.service.IContractPaymentClauseService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 支付条款Service业务层处理 + * + * @author lilemy + * @date 2025-09-24 + */ +@RequiredArgsConstructor +@Service +public class ContractPaymentClauseServiceImpl extends ServiceImpl + implements IContractPaymentClauseService { + + /** + * 查询支付条款 + * + * @param id 主键 + * @return 支付条款 + */ + @Override + public ContractPaymentClauseVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询支付条款列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 支付条款分页列表 + */ + @Override + public TableDataInfo queryPageList(ContractPaymentClauseBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的支付条款列表 + * + * @param bo 查询条件 + * @return 支付条款列表 + */ + @Override + public List queryList(ContractPaymentClauseBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ContractPaymentClauseBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(ContractPaymentClause::getId); + lqw.eq(bo.getContractId() != null, ContractPaymentClause::getContractId, bo.getContractId()); + lqw.eq(StringUtils.isNotBlank(bo.getClauseType()), ContractPaymentClause::getClauseType, bo.getClauseType()); + lqw.eq(StringUtils.isNotBlank(bo.getSettlementCycle()), ContractPaymentClause::getSettlementCycle, bo.getSettlementCycle()); + lqw.eq(bo.getSettlementAgeDays() != null, ContractPaymentClause::getSettlementAgeDays, bo.getSettlementAgeDays()); + lqw.eq(StringUtils.isNotBlank(bo.getMilestone()), ContractPaymentClause::getMilestone, bo.getMilestone()); + lqw.eq(StringUtils.isNotBlank(bo.getSelectValue()), ContractPaymentClause::getSelectValue, bo.getSelectValue()); + lqw.eq(StringUtils.isNotBlank(bo.getComparator()), ContractPaymentClause::getComparator, bo.getComparator()); + lqw.eq(StringUtils.isNotBlank(bo.getCompareValue()), ContractPaymentClause::getCompareValue, bo.getCompareValue()); + lqw.eq(bo.getReceiptAgeDays() != null, ContractPaymentClause::getReceiptAgeDays, bo.getReceiptAgeDays()); + lqw.eq(bo.getReceiptBase() != null, ContractPaymentClause::getReceiptBase, bo.getReceiptBase()); + lqw.eq(bo.getReceiptRatio() != null, ContractPaymentClause::getReceiptRatio, bo.getReceiptRatio()); + return lqw; + } + + /** + * 新增支付条款 + * + * @param bo 支付条款 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ContractPaymentClauseBo bo) { + ContractPaymentClause add = MapstructUtils.convert(bo, ContractPaymentClause.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改支付条款 + * + * @param bo 支付条款 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ContractPaymentClauseBo bo) { + ContractPaymentClause update = MapstructUtils.convert(bo, ContractPaymentClause.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ContractPaymentClause entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除支付条款信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractAppointServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractAppointServiceImpl.java new file mode 100644 index 00000000..1cddce75 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractAppointServiceImpl.java @@ -0,0 +1,141 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.CtrContractAppoint; +import org.dromara.ctr.domain.bo.CtrContractAppointBo; +import org.dromara.ctr.domain.vo.CtrContractAppointVo; +import org.dromara.ctr.mapper.CtrContractAppointMapper; +import org.dromara.ctr.service.ICtrContractAppointService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 承包合同-主要条款约定Service业务层处理 + * + * @author lilemy + * @date 2025-09-23 + */ +@RequiredArgsConstructor +@Service +public class CtrContractAppointServiceImpl extends ServiceImpl + implements ICtrContractAppointService { + + /** + * 查询承包合同-主要条款约定 + * + * @param id 主键 + * @return 承包合同-主要条款约定 + */ + @Override + public CtrContractAppointVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询承包合同-主要条款约定列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 承包合同-主要条款约定分页列表 + */ + @Override + public TableDataInfo queryPageList(CtrContractAppointBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的承包合同-主要条款约定列表 + * + * @param bo 查询条件 + * @return 承包合同-主要条款约定列表 + */ + @Override + public List queryList(CtrContractAppointBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CtrContractAppointBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CtrContractAppoint::getId); + lqw.eq(bo.getContractId() != null, CtrContractAppoint::getContractId, bo.getContractId()); + lqw.eq(StringUtils.isNotBlank(bo.getPerformanceBondType()), CtrContractAppoint::getPerformanceBondType, bo.getPerformanceBondType()); + lqw.eq(bo.getPerformanceBondRatio() != null, CtrContractAppoint::getPerformanceBondRatio, bo.getPerformanceBondRatio()); + lqw.eq(bo.getPerformanceBondAmount() != null, CtrContractAppoint::getPerformanceBondAmount, bo.getPerformanceBondAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getAdvancePaymentFlag()), CtrContractAppoint::getAdvancePaymentFlag, bo.getAdvancePaymentFlag()); + lqw.eq(bo.getAdvancePaymentRatio() != null, CtrContractAppoint::getAdvancePaymentRatio, bo.getAdvancePaymentRatio()); + lqw.eq(bo.getAdvancePaymentAmount() != null, CtrContractAppoint::getAdvancePaymentAmount, bo.getAdvancePaymentAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getQualityBondType()), CtrContractAppoint::getQualityBondType, bo.getQualityBondType()); + lqw.eq(bo.getQualityBondRatio() != null, CtrContractAppoint::getQualityBondRatio, bo.getQualityBondRatio()); + lqw.eq(bo.getQualityBondAmount() != null, CtrContractAppoint::getQualityBondAmount, bo.getQualityBondAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), CtrContractAppoint::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CtrContractAppoint::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增承包合同-主要条款约定 + * + * @param bo 承包合同-主要条款约定 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CtrContractAppointBo bo) { + CtrContractAppoint add = MapstructUtils.convert(bo, CtrContractAppoint.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改承包合同-主要条款约定 + * + * @param bo 承包合同-主要条款约定 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CtrContractAppointBo bo) { + CtrContractAppoint update = MapstructUtils.convert(bo, CtrContractAppoint.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CtrContractAppoint entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除承包合同-主要条款约定信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractBillItemServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractBillItemServiceImpl.java new file mode 100644 index 00000000..6c976126 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractBillItemServiceImpl.java @@ -0,0 +1,138 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.CtrContractBillItem; +import org.dromara.ctr.domain.bo.CtrContractBillItemBo; +import org.dromara.ctr.domain.vo.CtrContractBillItemVo; +import org.dromara.ctr.mapper.CtrContractBillItemMapper; +import org.dromara.ctr.service.ICtrContractBillItemService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 承包合同-工程量清单Service业务层处理 + * + * @author lilemy + * @date 2025-09-23 + */ +@RequiredArgsConstructor +@Service +public class CtrContractBillItemServiceImpl extends ServiceImpl + implements ICtrContractBillItemService { + + /** + * 查询承包合同-工程量清单 + * + * @param id 主键 + * @return 承包合同-工程量清单 + */ + @Override + public CtrContractBillItemVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询承包合同-工程量清单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 承包合同-工程量清单分页列表 + */ + @Override + public TableDataInfo queryPageList(CtrContractBillItemBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的承包合同-工程量清单列表 + * + * @param bo 查询条件 + * @return 承包合同-工程量清单列表 + */ + @Override + public List queryList(CtrContractBillItemBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CtrContractBillItemBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CtrContractBillItem::getId); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), CtrContractBillItem::getCode, bo.getCode()); + lqw.eq(bo.getContractId() != null, CtrContractBillItem::getContractId, bo.getContractId()); + lqw.like(StringUtils.isNotBlank(bo.getItemName()), CtrContractBillItem::getItemName, bo.getItemName()); + lqw.eq(StringUtils.isNotBlank(bo.getUnit()), CtrContractBillItem::getUnit, bo.getUnit()); + lqw.eq(bo.getQuantity() != null, CtrContractBillItem::getQuantity, bo.getQuantity()); + lqw.eq(bo.getUnitPriceTax() != null, CtrContractBillItem::getUnitPriceTax, bo.getUnitPriceTax()); + lqw.eq(bo.getTotalPriceTax() != null, CtrContractBillItem::getTotalPriceTax, bo.getTotalPriceTax()); + lqw.eq(bo.getAmountExclTax() != null, CtrContractBillItem::getAmountExclTax, bo.getAmountExclTax()); + lqw.eq(bo.getTaxRate() != null, CtrContractBillItem::getTaxRate, bo.getTaxRate()); + return lqw; + } + + /** + * 新增承包合同-工程量清单 + * + * @param bo 承包合同-工程量清单 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CtrContractBillItemBo bo) { + CtrContractBillItem add = MapstructUtils.convert(bo, CtrContractBillItem.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改承包合同-工程量清单 + * + * @param bo 承包合同-工程量清单 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CtrContractBillItemBo bo) { + CtrContractBillItem update = MapstructUtils.convert(bo, CtrContractBillItem.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CtrContractBillItem entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除承包合同-工程量清单信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractMainServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractMainServiceImpl.java new file mode 100644 index 00000000..4dceb344 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrContractMainServiceImpl.java @@ -0,0 +1,137 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.CtrContractMain; +import org.dromara.ctr.domain.bo.CtrContractMainBo; +import org.dromara.ctr.domain.vo.CtrContractMainVo; +import org.dromara.ctr.mapper.CtrContractMainMapper; +import org.dromara.ctr.service.ICtrContractMainService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 承包合同-基本信息Service业务层处理 + * + * @author lilemy + * @date 2025-09-23 + */ +@RequiredArgsConstructor +@Service +public class CtrContractMainServiceImpl extends ServiceImpl + implements ICtrContractMainService { + + /** + * 查询承包合同-基本信息 + * + * @param id 主键 + * @return 承包合同-基本信息 + */ + @Override + public CtrContractMainVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询承包合同-基本信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 承包合同-基本信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CtrContractMainBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的承包合同-基本信息列表 + * + * @param bo 查询条件 + * @return 承包合同-基本信息列表 + */ + @Override + public List queryList(CtrContractMainBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CtrContractMainBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CtrContractMain::getId); + lqw.eq(bo.getProjectId() != null, CtrContractMain::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), CtrContractMain::getContractCode, bo.getContractCode()); + lqw.like(StringUtils.isNotBlank(bo.getContractName()), CtrContractMain::getContractName, bo.getContractName()); + lqw.eq(bo.getDocumentDate() != null, CtrContractMain::getDocumentDate, bo.getDocumentDate()); + lqw.eq(bo.getSignDate() != null, CtrContractMain::getSignDate, bo.getSignDate()); + lqw.eq(StringUtils.isNotBlank(bo.getPartyA()), CtrContractMain::getPartyA, bo.getPartyA()); + lqw.eq(StringUtils.isNotBlank(bo.getPartyB()), CtrContractMain::getPartyB, bo.getPartyB()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CtrContractMain::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增承包合同-基本信息 + * + * @param bo 承包合同-基本信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CtrContractMainBo bo) { + CtrContractMain add = MapstructUtils.convert(bo, CtrContractMain.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改承包合同-基本信息 + * + * @param bo 承包合同-基本信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CtrContractMainBo bo) { + CtrContractMain update = MapstructUtils.convert(bo, CtrContractMain.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CtrContractMain entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除承包合同-基本信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrCooperationAgreementServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrCooperationAgreementServiceImpl.java new file mode 100644 index 00000000..ca5e5728 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrCooperationAgreementServiceImpl.java @@ -0,0 +1,144 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.CtrCooperationAgreement; +import org.dromara.ctr.domain.bo.CtrCooperationAgreementBo; +import org.dromara.ctr.domain.vo.CtrCooperationAgreementVo; +import org.dromara.ctr.mapper.CtrCooperationAgreementMapper; +import org.dromara.ctr.service.ICtrCooperationAgreementService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 合作协议Service业务层处理 + * + * @author lilemy + * @date 2025-09-23 + */ +@RequiredArgsConstructor +@Service +public class CtrCooperationAgreementServiceImpl extends ServiceImpl + implements ICtrCooperationAgreementService { + + /** + * 查询合作协议 + * + * @param id 主键 + * @return 合作协议 + */ + @Override + public CtrCooperationAgreementVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询合作协议列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合作协议分页列表 + */ + @Override + public TableDataInfo queryPageList(CtrCooperationAgreementBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合作协议列表 + * + * @param bo 查询条件 + * @return 合作协议列表 + */ + @Override + public List queryList(CtrCooperationAgreementBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CtrCooperationAgreementBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CtrCooperationAgreement::getId); + lqw.eq(bo.getProjectId() != null, CtrCooperationAgreement::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), CtrCooperationAgreement::getContractCode, bo.getContractCode()); + lqw.like(StringUtils.isNotBlank(bo.getContractName()), CtrCooperationAgreement::getContractName, bo.getContractName()); + lqw.eq(bo.getDocumentDate() != null, CtrCooperationAgreement::getDocumentDate, bo.getDocumentDate()); + lqw.eq(StringUtils.isNotBlank(bo.getPartyA()), CtrCooperationAgreement::getPartyA, bo.getPartyA()); + lqw.eq(StringUtils.isNotBlank(bo.getPartyB()), CtrCooperationAgreement::getPartyB, bo.getPartyB()); + lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), CtrCooperationAgreement::getCompanyName, bo.getCompanyName()); + lqw.eq(bo.getSignDate() != null, CtrCooperationAgreement::getSignDate, bo.getSignDate()); + lqw.eq(bo.getAmount() != null, CtrCooperationAgreement::getAmount, bo.getAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getAgreementType()), CtrCooperationAgreement::getAgreementType, bo.getAgreementType()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectManager()), CtrCooperationAgreement::getProjectManager, bo.getProjectManager()); + lqw.eq(bo.getStartDate() != null, CtrCooperationAgreement::getStartDate, bo.getStartDate()); + lqw.eq(bo.getEndDate() != null, CtrCooperationAgreement::getEndDate, bo.getEndDate()); + lqw.eq(StringUtils.isNotBlank(bo.getPaymentTerms()), CtrCooperationAgreement::getPaymentTerms, bo.getPaymentTerms()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CtrCooperationAgreement::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增合作协议 + * + * @param bo 合作协议 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CtrCooperationAgreementBo bo) { + CtrCooperationAgreement add = MapstructUtils.convert(bo, CtrCooperationAgreement.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改合作协议 + * + * @param bo 合作协议 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CtrCooperationAgreementBo bo) { + CtrCooperationAgreement update = MapstructUtils.convert(bo, CtrCooperationAgreement.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CtrCooperationAgreement entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除合作协议信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrSubcontractMainServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrSubcontractMainServiceImpl.java new file mode 100644 index 00000000..fd1cfc37 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrSubcontractMainServiceImpl.java @@ -0,0 +1,162 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.CtrSubcontractMain; +import org.dromara.ctr.domain.bo.CtrSubcontractMainBo; +import org.dromara.ctr.domain.vo.CtrSubcontractMainVo; +import org.dromara.ctr.mapper.CtrSubcontractMainMapper; +import org.dromara.ctr.service.ICtrSubcontractMainService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 主要信息Service业务层处理 + * + * @author lilemy + * @date 2025-09-24 + */ +@RequiredArgsConstructor +@Service +public class CtrSubcontractMainServiceImpl extends ServiceImpl + implements ICtrSubcontractMainService { + + /** + * 查询主要信息 + * + * @param id 主键 + * @return 主要信息 + */ + @Override + public CtrSubcontractMainVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询主要信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 主要信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CtrSubcontractMainBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的主要信息列表 + * + * @param bo 查询条件 + * @return 主要信息列表 + */ + @Override + public List queryList(CtrSubcontractMainBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CtrSubcontractMainBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CtrSubcontractMain::getId); + lqw.eq(bo.getProjectId() != null, CtrSubcontractMain::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), CtrSubcontractMain::getContractCode, bo.getContractCode()); + lqw.like(StringUtils.isNotBlank(bo.getContractName()), CtrSubcontractMain::getContractName, bo.getContractName()); + lqw.eq(bo.getDocumentDate() != null, CtrSubcontractMain::getDocumentDate, bo.getDocumentDate()); + lqw.eq(StringUtils.isNotBlank(bo.getContractType()), CtrSubcontractMain::getContractType, bo.getContractType()); + lqw.eq(StringUtils.isNotBlank(bo.getBusinessMode()), CtrSubcontractMain::getBusinessMode, bo.getBusinessMode()); + lqw.eq(bo.getOriginalAmount() != null, CtrSubcontractMain::getOriginalAmount, bo.getOriginalAmount()); + lqw.eq(bo.getSignDate() != null, CtrSubcontractMain::getSignDate, bo.getSignDate()); + lqw.eq(StringUtils.isNotBlank(bo.getPartyA()), CtrSubcontractMain::getPartyA, bo.getPartyA()); + lqw.eq(StringUtils.isNotBlank(bo.getPartyB()), CtrSubcontractMain::getPartyB, bo.getPartyB()); + lqw.eq(bo.getAmountInclTax() != null, CtrSubcontractMain::getAmountInclTax, bo.getAmountInclTax()); + lqw.eq(StringUtils.isNotBlank(bo.getContractStatus()), CtrSubcontractMain::getContractStatus, bo.getContractStatus()); + lqw.eq(bo.getCumulativeChangeAmt() != null, CtrSubcontractMain::getCumulativeChangeAmt, bo.getCumulativeChangeAmt()); + lqw.eq(StringUtils.isNotBlank(bo.getManageOrg()), CtrSubcontractMain::getManageOrg, bo.getManageOrg()); + lqw.eq(StringUtils.isNotBlank(bo.getExecutiveManager()), CtrSubcontractMain::getExecutiveManager, bo.getExecutiveManager()); + lqw.eq(StringUtils.isNotBlank(bo.getInvoiceUnit()), CtrSubcontractMain::getInvoiceUnit, bo.getInvoiceUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getReceiptUnit()), CtrSubcontractMain::getReceiptUnit, bo.getReceiptUnit()); + lqw.eq(bo.getArchiveDate() != null, CtrSubcontractMain::getArchiveDate, bo.getArchiveDate()); + lqw.eq(bo.getTargetCost() != null, CtrSubcontractMain::getTargetCost, bo.getTargetCost()); + lqw.eq(bo.getAvailableTargetCost() != null, CtrSubcontractMain::getAvailableTargetCost, bo.getAvailableTargetCost()); + lqw.eq(StringUtils.isNotBlank(bo.getHasSeal()), CtrSubcontractMain::getHasSeal, bo.getHasSeal()); + lqw.eq(StringUtils.isNotBlank(bo.getWarning()), CtrSubcontractMain::getWarning, bo.getWarning()); + lqw.eq(StringUtils.isNotBlank(bo.getPaymentTerms()), CtrSubcontractMain::getPaymentTerms, bo.getPaymentTerms()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), CtrSubcontractMain::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CtrSubcontractMain::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getAmountInWords()), CtrSubcontractMain::getAmountInWords, bo.getAmountInWords()); + lqw.eq(StringUtils.isNotBlank(bo.getSignOrg()), CtrSubcontractMain::getSignOrg, bo.getSignOrg()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), CtrSubcontractMain::getProjectType, bo.getProjectType()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectCategory()), CtrSubcontractMain::getProjectCategory, bo.getProjectCategory()); + lqw.eq(StringUtils.isNotBlank(bo.getLimitPay()), CtrSubcontractMain::getLimitPay, bo.getLimitPay()); + lqw.eq(StringUtils.isNotBlank(bo.getLimitSettlement()), CtrSubcontractMain::getLimitSettlement, bo.getLimitSettlement()); + lqw.eq(bo.getLimitPayRatio() != null, CtrSubcontractMain::getLimitPayRatio, bo.getLimitPayRatio()); + lqw.eq(bo.getLimitSettlementRatio() != null, CtrSubcontractMain::getLimitSettlementRatio, bo.getLimitSettlementRatio()); + return lqw; + } + + /** + * 新增主要信息 + * + * @param bo 主要信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CtrSubcontractMainBo bo) { + CtrSubcontractMain add = MapstructUtils.convert(bo, CtrSubcontractMain.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改主要信息 + * + * @param bo 主要信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CtrSubcontractMainBo bo) { + CtrSubcontractMain update = MapstructUtils.convert(bo, CtrSubcontractMain.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CtrSubcontractMain entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除主要信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrSubcontractSealServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrSubcontractSealServiceImpl.java new file mode 100644 index 00000000..3e10b3cb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ctr/service/impl/CtrSubcontractSealServiceImpl.java @@ -0,0 +1,132 @@ +package org.dromara.ctr.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +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.ctr.domain.CtrSubcontractSeal; +import org.dromara.ctr.domain.bo.CtrSubcontractSealBo; +import org.dromara.ctr.domain.vo.CtrSubcontractSealVo; +import org.dromara.ctr.mapper.CtrSubcontractSealMapper; +import org.dromara.ctr.service.ICtrSubcontractSealService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 印章信息Service业务层处理 + * + * @author lilemy + * @date 2025-09-24 + */ +@RequiredArgsConstructor +@Service +public class CtrSubcontractSealServiceImpl extends ServiceImpl + implements ICtrSubcontractSealService { + + /** + * 查询印章信息 + * + * @param id 主键 + * @return 印章信息 + */ + @Override + public CtrSubcontractSealVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询印章信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 印章信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CtrSubcontractSealBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的印章信息列表 + * + * @param bo 查询条件 + * @return 印章信息列表 + */ + @Override + public List queryList(CtrSubcontractSealBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CtrSubcontractSealBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CtrSubcontractSeal::getId); + lqw.eq(bo.getSubcontractId() != null, CtrSubcontractSeal::getSubcontractId, bo.getSubcontractId()); + lqw.like(StringUtils.isNotBlank(bo.getSealName()), CtrSubcontractSeal::getSealName, bo.getSealName()); + lqw.eq(bo.getSealCount() != null, CtrSubcontractSeal::getSealCount, bo.getSealCount()); + return lqw; + } + + /** + * 新增印章信息 + * + * @param bo 印章信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CtrSubcontractSealBo bo) { + CtrSubcontractSeal add = MapstructUtils.convert(bo, CtrSubcontractSeal.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改印章信息 + * + * @param bo 印章信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CtrSubcontractSealBo bo) { + CtrSubcontractSeal update = MapstructUtils.convert(bo, CtrSubcontractSeal.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CtrSubcontractSeal entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除印章信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} 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 18653726..8787068a 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,7 +6,9 @@ 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; /** * 同步计划详情到施工产值 @@ -24,11 +26,17 @@ public class IncSyncPlanDetail2ConstructionValue { /** * 同步计划详情到施工产值(每天 1 点执行) */ - @Scheduled(cron = "0 0 1 * * ?") + @Scheduled(cron = "0 0 2 ? * MON") public void run() { - LocalDate yesterday = LocalDate.now().minusWeeks(1); - log.info("执行定时任务:同步 {} 计划详情到施工产值", yesterday); - Boolean synced = progressPlanDetailService.syncPlanDetail2ConstructionValue(yesterday, null); + LocalDate today = LocalDate.now(); + // 找到本周一 + 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); if (synced) { log.info("同步计划详情到施工产值成功"); } else { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java new file mode 100644 index 00000000..97968352 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java @@ -0,0 +1,119 @@ +package org.dromara.out.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.out.domain.bo.OutConstructionValueRangeBo; +import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.service.IOutConstructionValueRangeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 施工产值范围 + * + * @author lilemy + * @date 2025-09-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/out/constructionValueRange") +public class OutConstructionValueRangeController extends BaseController { + + private final IOutConstructionValueRangeService outConstructionValueRangeService; + + /** + * 查询施工产值范围列表 + */ + @SaCheckPermission("out:constructionValueRange:list") + @GetMapping("/list") + public TableDataInfo list(OutConstructionValueRangeBo bo, PageQuery pageQuery) { + return outConstructionValueRangeService.queryPageList(bo, pageQuery); + } + + /** + * 导出施工产值范围列表 + */ + @SaCheckPermission("out:constructionValueRange:export") + @Log(title = "施工产值范围", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OutConstructionValueRangeBo bo, HttpServletResponse response) { + List list = outConstructionValueRangeService.queryList(bo); + ExcelUtil.exportExcel(list, "施工产值范围", OutConstructionValueRangeVo.class, response); + } + + /** + * 获取施工产值范围详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("out:constructionValueRange:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(outConstructionValueRangeService.queryById(id, false)); + } + + /** + * 获取施工产值范围详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("out:constructionValueRange:query") + @GetMapping("/detail/{id}") + public R getDetailInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(outConstructionValueRangeService.queryById(id, true)); + } + + + /** + * 新增施工产值范围 + */ + @SaCheckPermission("out:constructionValueRange:add") + @Log(title = "施工产值范围", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OutConstructionValueRangeBo bo) { + return toAjax(outConstructionValueRangeService.insertByBo(bo)); + } + + /** + * 修改施工产值范围 + */ + @SaCheckPermission("out:constructionValueRange:edit") + @Log(title = "施工产值范围", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OutConstructionValueRangeBo bo) { + return toAjax(outConstructionValueRangeService.updateByBo(bo)); + } + + /** + * 删除施工产值范围 + * + * @param ids 主键串 + */ + @SaCheckPermission("out:constructionValueRange:remove") + @Log(title = "施工产值范围", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(outConstructionValueRangeService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutTableController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutTableController.java index bded799b..9a961487 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutTableController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutTableController.java @@ -1,9 +1,9 @@ package org.dromara.out.controller; +import cn.hutool.core.collection.CollUtil; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import org.dromara.cailiaoshebei.service.IBusMaterialsorderService; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.FormatsType; import org.dromara.common.core.utils.DateUtils; @@ -16,13 +16,13 @@ import org.dromara.out.domain.bo.OutTableBo; import org.dromara.out.domain.bo.PurchaseValueAReq; import org.dromara.out.domain.vo.*; import org.dromara.out.service.*; -import org.dromara.progress.service.IPgsProgressCategoryService; -import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.dto.project.BusProjectQueryReq; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.math.RoundingMode; @@ -48,12 +48,10 @@ public class OutTableController extends BaseController { private final IOutConstructionValueService constructionValueService; + private final IOutConstructionValueRangeService constructionValueRangeService; + private final IBusProjectService projectService; - private final IPgsProgressPlanDetailService progressPlanDetailService; - - private final IPgsProgressCategoryService progressCategoryService; - private final IOutMonthPlanAuditService outMonthPlanAuditService; private final IOutMonthPlanService monthPlanService; @@ -62,14 +60,12 @@ public class OutTableController extends BaseController { private final IOutSettlementValueOwnerService settlementValueOwnerService; - private final IBusMaterialsorderService busMaterialsorderService; - private final IOutValueAllocationService valueAllocationService; private final IOutMonthPlanService outMonthPlanService; - BigDecimal parseUnit = new BigDecimal("10000"); + BigDecimal parseUnit = new BigDecimal("10000"); /** * 施工产值报表(计划 VS 实际) @@ -112,7 +108,7 @@ public class OutTableController extends BaseController { List outMonthlyConstructionVos = new ArrayList<>(); - for (BusProjectVo busProjectVo : rows){ + for (BusProjectVo busProjectVo : rows) { OutMonthlyConstructionVo vo = new OutMonthlyConstructionVo(); vo.setProjectName(busProjectVo.getProjectName()); @@ -123,26 +119,31 @@ public class OutTableController extends BaseController { for (OutMonthPlanAudit planAudit : planAudits) { // totalValue = totalValue.add(planAudit.getConstructionValue()); YearMonth planMonth = YearMonth.parse(planAudit.getPlanMonth(), formatter); - if(!planMonth.isAfter(yearMonth)){ - estimatedTotalValue=estimatedTotalValue.add(planAudit.getConstructionValue()); + if (!planMonth.isAfter(yearMonth)) { + estimatedTotalValue = estimatedTotalValue.add(planAudit.getConstructionValue()); } - if(planMonth.equals(paramMonth)){ + if (planMonth.equals(paramMonth)) { monthlyEstimatedValue = planAudit.getConstructionValue(); } } - //转化单位为万元 查询总值 - BigDecimal totalValue = getTotal(type,busProjectVo.getId()); + //转化单位为万元 查询总值 + BigDecimal totalValue = getTotal(type, busProjectVo.getId()); vo.setTotalValue(totalValue.divide(parseUnit)); vo.setEstimatedAccumulatedValue(estimatedTotalValue.divide(parseUnit)); vo.setMonthlyEstimatedValue(monthlyEstimatedValue.divide(parseUnit)); //查询项目的审核通过的施工详细表 1.累计完成产值 2.完成产值月合计 3.各周完成产值 - List outConstructionValues = constructionValueService.lambdaQuery() - .eq(OutConstructionValue::getProjectId, busProjectVo.getId()) - .eq(OutConstructionValue::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) + List outConstructionValues = new ArrayList<>(); + List list = constructionValueRangeService.lambdaQuery() + .eq(OutConstructionValueRange::getProjectId, busProjectVo.getId()) + .eq(OutConstructionValueRange::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) .list(); - + if (CollUtil.isNotEmpty(list)) { + outConstructionValues = constructionValueService.lambdaQuery() + .in(OutConstructionValue::getRangeId, list.stream().map(OutConstructionValueRange::getId).toList()) + .list(); + } BigDecimal accumulatedCompletionValue = BigDecimal.ZERO; BigDecimal firstWeekCompletionValue = BigDecimal.ZERO; @@ -230,7 +231,6 @@ public class OutTableController extends BaseController { List rows = busProjectVoTableDataInfo.getRows(); - List outComparisonOfCompletionAndSettlementVos = new ArrayList<>(); for (BusProjectVo projectVo : rows) { @@ -242,15 +242,15 @@ public class OutTableController extends BaseController { vo.setProjectId(projectVoId); // BigDecimal bigDecimal = busMaterialsorderService.grossOutput(projectVoId, null); - if("1".equals(bo.getValueType())){ + if ("1".equals(bo.getValueType())) { //设计完工产值 - BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId,null,bo.getType()); - vo.setTotalCompletionOutputValue( designValue); + BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId, null, bo.getType()); + vo.setTotalCompletionOutputValue(designValue); } else if ("2".equals(bo.getValueType())) { //施工完工产值 - BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId,null,bo.getType()); + BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId, null, bo.getType()); vo.setTotalCompletionOutputValue(constructionValue); - }else if ("3".equals(bo.getValueType())) { + } else if ("3".equals(bo.getValueType())) { //采购完工产值 PurchaseValueAReq purchaseValueAReq = new PurchaseValueAReq(); purchaseValueAReq.setProjectId(projectVoId); @@ -258,7 +258,7 @@ public class OutTableController extends BaseController { List busProcurements = outMonthPlanService.purchaseValueA(purchaseValueAReq); BigDecimal purchaseValue = BigDecimal.ZERO; for (BusProcurement busProcurement : busProcurements) { - if(busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null){ + if (busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null) { purchaseValue = purchaseValue.add(busProcurement.getAcceptedQuantity().multiply(busProcurement.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); } @@ -268,11 +268,11 @@ public class OutTableController extends BaseController { //结算产值 BigDecimal settlementValue; - if("1".equals(bo.getType())){ + if ("1".equals(bo.getType())) { //业主结算产值 - settlementValue = settlementValueOwnerService.getValueByProjectId(projectVoId,bo.getValueType(),null); - }else { - settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId,bo.getValueType(),null); + settlementValue = settlementValueOwnerService.getValueByProjectId(projectVoId, bo.getValueType(), null); + } else { + settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId, bo.getValueType(), null); } vo.setTotalSettlementOutputValue(settlementValue); @@ -301,7 +301,7 @@ public class OutTableController extends BaseController { */ // @SaCheckPermission("out:table:list") @GetMapping("/comparisonOfOwnerAndSub") - public TableDataInfo comparisonOfOwnerAndSub(OutTableBo bo, PageQuery pageQuery){ + public TableDataInfo comparisonOfOwnerAndSub(OutTableBo bo, PageQuery pageQuery) { //分页查询所有父项目 BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq(); busProjectQueryReq.setPId(0L); @@ -319,9 +319,9 @@ public class OutTableController extends BaseController { vo.setProjectId(projectVoId); //设计完工产值 - BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId,bo.getMonth(),bo.getType()); + BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId, bo.getMonth(), bo.getType()); //施工完工产值 - BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId,bo.getMonth(),bo.getType()); + BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId, bo.getMonth(), bo.getType()); //采购完工产值 PurchaseValueAReq purchaseValueAReq = new PurchaseValueAReq(); purchaseValueAReq.setProjectId(projectVoId); @@ -330,27 +330,27 @@ public class OutTableController extends BaseController { List busProcurements = outMonthPlanService.purchaseValueA(purchaseValueAReq); BigDecimal purchaseValue = BigDecimal.ZERO; for (BusProcurement busProcurement : busProcurements) { - if(busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null){ + if (busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null) { purchaseValue = purchaseValue.add(busProcurement.getAcceptedQuantity().multiply(busProcurement.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); } } - vo.setTotalCompletionOutputValue( designValue.add(constructionValue).add(purchaseValue)); + vo.setTotalCompletionOutputValue(designValue.add(constructionValue).add(purchaseValue)); //分包结算产值 - BigDecimal settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId,null,bo.getMonth()); + BigDecimal settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId, null, bo.getMonth()); vo.setSubTotalSettlementOutputValue(settlementValue); //业主结算产值 - BigDecimal ownerSettlementValue = settlementValueOwnerService.getValueByProjectId(projectVoId,null,bo.getMonth()); + BigDecimal ownerSettlementValue = settlementValueOwnerService.getValueByProjectId(projectVoId, null, bo.getMonth()); vo.setOwnerTotalSettlementOutputValue(ownerSettlementValue); //转换成万元 - vo.setOwnerTotalSettlementOutputValue( ownerSettlementValue.divide(parseUnit)); - vo.setSubTotalSettlementOutputValue( settlementValue.divide(parseUnit)); - vo.setTotalCompletionOutputValue( vo.getTotalCompletionOutputValue().divide(parseUnit)); - vo.setDifferenceValue(vo.getOwnerTotalSettlementOutputValue().subtract(vo.getSubTotalSettlementOutputValue()) ); + vo.setOwnerTotalSettlementOutputValue(ownerSettlementValue.divide(parseUnit)); + vo.setSubTotalSettlementOutputValue(settlementValue.divide(parseUnit)); + vo.setTotalCompletionOutputValue(vo.getTotalCompletionOutputValue().divide(parseUnit)); + vo.setDifferenceValue(vo.getOwnerTotalSettlementOutputValue().subtract(vo.getSubTotalSettlementOutputValue())); vos.add(vo); } @@ -370,7 +370,7 @@ public class OutTableController extends BaseController { */ // @SaCheckPermission("out:table:list") @GetMapping("/monthlyPurchase") - public TableDataInfo monthlyPurchase(OutTableBo bo, PageQuery pageQuery){ + public TableDataInfo monthlyPurchase(OutTableBo bo, PageQuery pageQuery) { //分页查询所有父项目 BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq(); @@ -411,7 +411,7 @@ public class OutTableController extends BaseController { .eq(OutMonthPlan::getPlanMonth, bo.getMonth()) .eq(OutMonthPlan::getValueType, bo.getValueType()) .eq(OutMonthPlan::getPlanAuditStatus, BusinessStatusEnum.FINISH.getStatus()) - .eq(OutMonthPlan::getType,bo.getType()) + .eq(OutMonthPlan::getType, bo.getType()) ); // List matchedPlans = list.stream() // .filter(plan -> plan.getPlanMonth() != null @@ -419,10 +419,10 @@ public class OutTableController extends BaseController { // && plan.getPlanMonth().compareTo(bo.getMonth()) <= 0) // .toList(); - vo.setMonthEstimatedValue(plan == null? BigDecimal.ZERO :plan.getPlanValue()); + vo.setMonthEstimatedValue(plan == null ? BigDecimal.ZERO : plan.getPlanValue()); - if("1".equals(bo.getValueType())){ - vo.setMonthCompletionValue(complete == null? BigDecimal.ZERO :complete.getCompleteValue()); + if ("1".equals(bo.getValueType())) { + vo.setMonthCompletionValue(complete == null ? BigDecimal.ZERO : complete.getCompleteValue()); // 计算累计完成值 BigDecimal accumulatedCompleteValue = list.stream() @@ -431,7 +431,7 @@ public class OutTableController extends BaseController { .reduce(BigDecimal.ZERO, BigDecimal::add); vo.setAccumulatedCompletionValue(accumulatedCompleteValue); - }else if("2".equals(bo.getValueType())){ + } else if ("2".equals(bo.getValueType())) { //采购完工产值 PurchaseValueAReq purchaseValueAReq = new PurchaseValueAReq(); purchaseValueAReq.setProjectId(projectVo.getId()); @@ -439,7 +439,7 @@ public class OutTableController extends BaseController { List busProcurements = outMonthPlanService.purchaseValueA(purchaseValueAReq); BigDecimal accumulatedCompletionValue = BigDecimal.ZERO; for (BusProcurement busProcurement : busProcurements) { - if(busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null){ + if (busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null) { accumulatedCompletionValue = accumulatedCompletionValue.add(busProcurement.getAcceptedQuantity().multiply(busProcurement.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); } @@ -447,8 +447,6 @@ public class OutTableController extends BaseController { vo.setAccumulatedCompletionValue(accumulatedCompletionValue); - - purchaseValueAReq.setPlanMonth(bo.getMonth()); List busProcurements1 = outMonthPlanService.purchaseValueA(purchaseValueAReq); @@ -482,10 +480,10 @@ public class OutTableController extends BaseController { return rspData; } - public BigDecimal getTotal(String type,Long projectId){ + public BigDecimal getTotal(String type, Long projectId) { OutValueAllocation one = valueAllocationService.getOne(Wrappers.lambdaQuery(OutValueAllocation.class) - .eq(OutValueAllocation::getProjectId,projectId)); - if("1".equals(type)){ + .eq(OutValueAllocation::getProjectId, projectId)); + if ("1".equals(type)) { return one == null ? BigDecimal.ZERO : one.getOwnerTotalValue(); } return one == null ? BigDecimal.ZERO : one.getSubTotalValue(); @@ -497,7 +495,7 @@ public class OutTableController extends BaseController { */ // @SaCheckPermission("out:table:list") @GetMapping("/outCompare") - public TableDataInfo outCompare(OutTableBo bo, PageQuery pageQuery){ + public TableDataInfo outCompare(OutTableBo bo, PageQuery pageQuery) { //分页查询所有父项目 BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq(); @@ -521,8 +519,8 @@ public class OutTableController extends BaseController { List ownerPlan = outMonthPlanAuditService.queryListByProjectIdAndMonth(projectVo.getId(), bo.getMonth(), "1"); BigDecimal ownerPlanTotal = BigDecimal.ZERO; - if(ownerPlan != null && !ownerPlan.isEmpty()){ - ownerPlanTotal = ownerPlan.stream().map(OutMonthPlanAudit::getTotalValue).reduce(BigDecimal.ZERO, BigDecimal::add); + if (ownerPlan != null && !ownerPlan.isEmpty()) { + ownerPlanTotal = ownerPlan.stream().map(OutMonthPlanAudit::getTotalValue).reduce(BigDecimal.ZERO, BigDecimal::add); } vo.setOwnerPlanTotal(ownerPlanTotal.divide(parseUnit)); @@ -530,15 +528,15 @@ public class OutTableController extends BaseController { List subPlan = outMonthPlanAuditService.queryListByProjectIdAndMonth(projectVo.getId(), bo.getMonth(), "2"); BigDecimal subPlanTotal = BigDecimal.ZERO; - if(subPlan != null && !subPlan.isEmpty()){ + if (subPlan != null && !subPlan.isEmpty()) { subPlanTotal = subPlan.stream().map(OutMonthPlanAudit::getTotalValue).reduce(BigDecimal.ZERO, BigDecimal::add); } vo.setSubPlanTotal(subPlanTotal.divide(parseUnit)); //设计完工产值 - BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVo.getId(),bo.getMonth(),"1"); + BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVo.getId(), bo.getMonth(), "1"); //施工完工产值 - BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVo.getId(),bo.getMonth(),"1"); + BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVo.getId(), bo.getMonth(), "1"); //采购完工产值 PurchaseValueAReq purchaseValueAReq = new PurchaseValueAReq(); purchaseValueAReq.setProjectId(projectVo.getId()); @@ -547,28 +545,28 @@ public class OutTableController extends BaseController { List busProcurements = outMonthPlanService.purchaseValueA(purchaseValueAReq); BigDecimal purchaseValue = BigDecimal.ZERO; for (BusProcurement busProcurement : busProcurements) { - if(busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null){ + if (busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null) { purchaseValue = purchaseValue.add(busProcurement.getAcceptedQuantity().multiply(busProcurement.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); } } - vo.setOwnerActualTotal( designValue.add(constructionValue).add(purchaseValue).divide(parseUnit)); + vo.setOwnerActualTotal(designValue.add(constructionValue).add(purchaseValue).divide(parseUnit)); //设计完工产值 - BigDecimal subDesignValue = monthPlanService.getDesignValueByProjectId(projectVo.getId(),bo.getMonth(),"2"); + BigDecimal subDesignValue = monthPlanService.getDesignValueByProjectId(projectVo.getId(), bo.getMonth(), "2"); //施工完工产值 - BigDecimal subConstructionValue = constructionValueService.getCompleteValue(projectVo.getId(),bo.getMonth(),"2"); + BigDecimal subConstructionValue = constructionValueService.getCompleteValue(projectVo.getId(), bo.getMonth(), "2"); //采购完工产值 purchaseValueAReq.setType("2"); List busProcurements1 = outMonthPlanService.purchaseValueA(purchaseValueAReq); BigDecimal subPurchaseValue = BigDecimal.ZERO; for (BusProcurement busProcurement : busProcurements1) { - if(busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null){ + if (busProcurement != null && busProcurement.getAcceptedQuantity() != null && busProcurement.getUnitPrice() != null) { subPurchaseValue = subPurchaseValue.add(busProcurement.getAcceptedQuantity().multiply(busProcurement.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); } } - vo.setSubActualTotal( subDesignValue.add(subConstructionValue).add(subPurchaseValue).divide(parseUnit)); + vo.setSubActualTotal(subDesignValue.add(subConstructionValue).add(subPurchaseValue).divide(parseUnit)); vos.add(vo); } 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 95cc205f..64ce212d 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 @@ -30,6 +30,11 @@ public class OutConstructionValue extends BaseEntity { @TableId(value = "id") private Long id; + /** + * 范围ID + */ + private Long rangeId; + /** * 项目ID */ @@ -45,6 +50,11 @@ public class OutConstructionValue extends BaseEntity { */ private Long progressCategoryId; + /** + * 计划详情id + */ + private Long detailId; + /** * 人工填报数量 */ @@ -80,11 +90,6 @@ public class OutConstructionValue extends BaseEntity { */ private LocalDate planDate; - /** - * 审核状态 - */ - private String auditStatus; - /** * 对甲产值 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValueRange.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValueRange.java new file mode 100644 index 00000000..3ef9ea15 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValueRange.java @@ -0,0 +1,64 @@ +package org.dromara.out.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 施工产值范围对象 out_construction_value_range + * + * @author lilemy + * @date 2025-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("out_construction_value_range") +public class OutConstructionValueRange extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 対乙产值 + */ + private BigDecimal outValue; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; + + /** + * 审核状态 + */ + private String auditStatus; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java index 345e7f92..8851b6d8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java @@ -29,6 +29,11 @@ public class OutConstructionValueBo extends BaseEntity { @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) private Long id; + /** + * 范围ID + */ + private Long rangeId; + /** * 项目ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueRangeBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueRangeBo.java new file mode 100644 index 00000000..a3b6fe90 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueRangeBo.java @@ -0,0 +1,71 @@ +package org.dromara.out.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.out.domain.OutConstructionValueRange; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 施工产值范围业务对象 out_construction_value_range + * + * @author lilemy + * @date 2025-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = OutConstructionValueRange.class, reverseConvertGenerate = false) +public class OutConstructionValueRangeBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目ID + */ + @NotNull(message = "项目ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 开始日期 + */ + @NotNull(message = "开始日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate startDate; + + /** + * 结束日期 + */ + @NotNull(message = "结束日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private LocalDate endDate; + + /** + * 日期 + */ + private LocalDate date; + + /** + * 対乙产值 + */ + private BigDecimal outValue; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; + + /** + * 审核状态 + */ + private String auditStatus; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java new file mode 100644 index 00000000..9d97a343 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java @@ -0,0 +1,80 @@ +package org.dromara.out.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.out.domain.OutConstructionValueRange; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + + +/** + * 施工产值范围视图对象 out_construction_value_range + * + * @author lilemy + * @date 2025-09-25 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = OutConstructionValueRange.class) +public class OutConstructionValueRangeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 项目ID + */ + @ExcelProperty(value = "项目ID") + private Long projectId; + + /** + * 开始日期 + */ + @ExcelProperty(value = "开始日期") + private LocalDate startDate; + + /** + * 结束日期 + */ + @ExcelProperty(value = "结束日期") + private LocalDate endDate; + + /** + * 対乙产值 + */ + @ExcelProperty(value = "対乙产值") + private BigDecimal outValue; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "对甲产值") + private BigDecimal ownerValue; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "wf_business_status") + private String auditStatus; + + /** + * 子项列表 + */ + private List constructionValueVoList; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java index 3cdff8c5..a500d817 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java @@ -1,23 +1,17 @@ package org.dromara.out.domain.vo; -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import org.dromara.out.domain.OutConstructionValue; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.util.Date; - +import java.math.BigDecimal; +import java.time.LocalDate; /** @@ -40,6 +34,11 @@ public class OutConstructionValueVo implements Serializable { @ExcelProperty(value = "主键ID") private Long id; + /** + * 范围ID + */ + private Long rangeId; + /** * 项目ID */ @@ -100,6 +99,11 @@ public class OutConstructionValueVo implements Serializable { @ExcelProperty(value = "分项工程名称") private String progressCategoryName; + /** + * 计划详情id + */ + private Long detailId; + /** * 人工填报数量 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java new file mode 100644 index 00000000..12ad8a56 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.out.mapper; + +import org.dromara.out.domain.OutConstructionValueRange; +import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 施工产值范围Mapper接口 + * + * @author lilemy + * @date 2025-09-25 + */ +public interface OutConstructionValueRangeMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java new file mode 100644 index 00000000..0de70638 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java @@ -0,0 +1,71 @@ +package org.dromara.out.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.out.domain.OutConstructionValueRange; +import org.dromara.out.domain.bo.OutConstructionValueRangeBo; +import org.dromara.out.domain.vo.OutConstructionValueRangeVo; + +import java.util.Collection; +import java.util.List; + +/** + * 施工产值范围Service接口 + * + * @author lilemy + * @date 2025-09-25 + */ +public interface IOutConstructionValueRangeService extends IService { + + /** + * 查询施工产值范围 + * + * @param id 主键 + * @param hasDetail 是否包含详情 + * @return 施工产值范围 + */ + OutConstructionValueRangeVo queryById(Long id, Boolean hasDetail); + + /** + * 分页查询施工产值范围列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 施工产值范围分页列表 + */ + TableDataInfo queryPageList(OutConstructionValueRangeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的施工产值范围列表 + * + * @param bo 查询条件 + * @return 施工产值范围列表 + */ + List queryList(OutConstructionValueRangeBo bo); + + /** + * 新增施工产值范围 + * + * @param bo 施工产值范围 + * @return 是否新增成功 + */ + Boolean insertByBo(OutConstructionValueRangeBo bo); + + /** + * 修改施工产值范围 + * + * @param bo 施工产值范围 + * @return 是否修改成功 + */ + Boolean updateByBo(OutConstructionValueRangeBo bo); + + /** + * 校验并批量删除施工产值范围信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java new file mode 100644 index 00000000..162a0029 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java @@ -0,0 +1,228 @@ +package org.dromara.out.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.event.ProcessDeleteEvent; +import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; +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.out.domain.OutConstructionValue; +import org.dromara.out.domain.OutConstructionValueRange; +import org.dromara.out.domain.bo.OutConstructionValueBo; +import org.dromara.out.domain.bo.OutConstructionValueRangeBo; +import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.mapper.OutConstructionValueRangeMapper; +import org.dromara.out.service.IOutConstructionValueRangeService; +import org.dromara.out.service.IOutConstructionValueService; +import org.dromara.progress.domain.PgsProgressPlanDetail; +import org.dromara.progress.service.IPgsProgressPlanDetailService; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 施工产值范围Service业务层处理 + * + * @author lilemy + * @date 2025-09-25 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class OutConstructionValueRangeServiceImpl extends ServiceImpl + implements IOutConstructionValueRangeService { + + @Lazy + @Resource + private IOutConstructionValueService constructionValueService; + + @Lazy + @Resource + private IPgsProgressPlanDetailService progressPlanDetailService; + + /** + * 查询施工产值范围 + * + * @param id 主键 + * @return 施工产值范围 + */ + @Override + public OutConstructionValueRangeVo queryById(Long id, Boolean hasDetail) { + OutConstructionValueRangeVo vo = baseMapper.selectVoById(id); + OutConstructionValueBo bo = new OutConstructionValueBo(); + bo.setRangeId(id); + vo.setConstructionValueVoList(constructionValueService.queryList(bo)); + return vo; + } + + /** + * 分页查询施工产值范围列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 施工产值范围分页列表 + */ + @Override + public TableDataInfo queryPageList(OutConstructionValueRangeBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的施工产值范围列表 + * + * @param bo 查询条件 + * @return 施工产值范围列表 + */ + @Override + public List queryList(OutConstructionValueRangeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OutConstructionValueRangeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(OutConstructionValueRange::getId); + lqw.eq(bo.getProjectId() != null, OutConstructionValueRange::getProjectId, bo.getProjectId()); + // 日期范围过滤 + if (bo.getDate() != null) { + lqw.le(OutConstructionValueRange::getStartDate, bo.getDate()) // 开始时间 <= date + .ge(OutConstructionValueRange::getEndDate, bo.getDate()); // 结束时间 >= date + } + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), OutConstructionValueRange::getAuditStatus, bo.getAuditStatus()); + return lqw; + } + + /** + * 新增施工产值范围 + * + * @param bo 施工产值范围 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(OutConstructionValueRangeBo bo) { + OutConstructionValueRange add = MapstructUtils.convert(bo, OutConstructionValueRange.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改施工产值范围 + * + * @param bo 施工产值范围 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(OutConstructionValueRangeBo bo) { + OutConstructionValueRange update = MapstructUtils.convert(bo, OutConstructionValueRange.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OutConstructionValueRange entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除施工产值范围信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) + * 正常使用只需#processEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processEvent 参数 + */ + @EventListener(condition = "#processEvent.flowCode.endsWith('constructionValue')") + public void processHandler(ProcessEvent processEvent) { + log.info("施工产值审核任务执行了{}", processEvent.toString()); + OutConstructionValueRange byId = this.getById(Convert.toLong(processEvent.getBusinessId())); + byId.setAuditStatus(processEvent.getStatus()); + if (processEvent.getSubmit()) { + byId.setAuditStatus(BusinessStatusEnum.WAITING.getStatus()); + } + // 如果为完成状态,则锁定对应进度计划详情 + if (BusinessStatusEnum.FINISH.getStatus().equals(byId.getAuditStatus())) { + List valueList = constructionValueService.lambdaQuery() + .eq(OutConstructionValue::getRangeId, byId.getId()) + .list(); + if (CollUtil.isNotEmpty(valueList)) { + List details = valueList.stream().map(OutConstructionValue::getDetailId).distinct().toList(); + progressPlanDetailService.lambdaUpdate() + .in(PgsProgressPlanDetail::getId, details) + .set(PgsProgressPlanDetail::getStatus, "3") + .update(); + } + } + this.updateById(byId); + } + + /** + * 执行任务创建监听 + * 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断 + * 在方法中判断流程节点key + * if ("xxx".equals(processTaskEvent.getNodeCode())) { + * //执行业务逻辑 + * } + * + * @param processTaskEvent 参数 + */ + @EventListener(condition = "#processTaskEvent.flowCode.endsWith('constructionValue')") + public void processTaskHandler(ProcessTaskEvent processTaskEvent) { + log.info("施工产值审核任务创建了{}", processTaskEvent.toString()); + } + + /** + * 监听删除流程事件 + * 正常使用只需#processDeleteEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processDeleteEvent 参数 + */ + @EventListener(condition = "#processDeleteEvent.flowCode.endsWith('constructionValue')") + public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) { + log.info("监听删除流程事件,施工产值审核任务执行了{}", processDeleteEvent.toString()); +// OutMonthPlan plan = this.getById(Convert.toLong(processDeleteEvent.getBusinessId())); +// if (ObjectUtil.isNull(plan)) { +// return; +// } +// this.removeById(plan.getId()); + } + +} 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 1a605893..11b03578 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 @@ -1,27 +1,25 @@ package org.dromara.out.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.event.ProcessDeleteEvent; -import org.dromara.common.core.domain.event.ProcessEvent; -import org.dromara.common.core.domain.event.ProcessTaskEvent; -import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.ServiceException; 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.FacMatrix; import org.dromara.facility.service.IFacMatrixService; import org.dromara.out.domain.OutConstructionValue; +import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.vo.OutConstructionValueVo; import org.dromara.out.mapper.OutConstructionValueMapper; +import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo; @@ -29,7 +27,6 @@ import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; -import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -48,9 +45,8 @@ import java.util.Map; @RequiredArgsConstructor @Service @Slf4j -public class OutConstructionValueServiceImpl extends ServiceImpl implements IOutConstructionValueService { - - private final OutConstructionValueMapper baseMapper; +public class OutConstructionValueServiceImpl extends ServiceImpl + implements IOutConstructionValueService { private final IBusProjectService busProjectService; @@ -60,6 +56,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl 0; @@ -169,8 +162,27 @@ public class OutConstructionValueServiceImpl extends ServiceImpl 0; } @@ -243,54 +255,4 @@ public class OutConstructionValueServiceImpl extends ServiceImpl outConstructionValues = constructionValueService.lambdaQuery() - .eq(OutConstructionValue::getProjectId, outMonthPlan.getProjectId()) - .between(OutConstructionValue::getReportDate, firstDay, lastDay) - .eq(OutConstructionValue::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) + List list = constructionValueRangeService.lambdaQuery() + .eq(OutConstructionValueRange::getProjectId, outMonthPlan.getProjectId()) + .between(OutConstructionValueRange::getStartDate, firstDay, lastDay) + .eq(OutConstructionValueRange::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) .list(); // 计算完成值 - BigDecimal reduce = outConstructionValues.stream().map(OutConstructionValue::getOutValue) + BigDecimal reduce = list.stream().map(OutConstructionValueRange::getOutValue) .reduce(BigDecimal.ZERO, BigDecimal::add); outMonthPlan.setCompleteValue(reduce); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java index 20a13a8e..7aa6c5b5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java @@ -6,11 +6,13 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; +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.excel.core.DefaultExcelListener; @@ -21,6 +23,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.web.core.BaseController; import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.dto.progresscategory.*; +import org.dromara.progress.domain.enums.PgsRelevancyStructureEnum; import org.dromara.progress.domain.vo.progresscategory.*; import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.project.domain.BusProject; @@ -36,6 +39,7 @@ import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 进度类别 @@ -76,13 +80,13 @@ public class PgsProgressCategoryController extends BaseController { } /** - * 根据子项目获取进度类别模版顶级目录列表 + * 根据项目获取进度类别模版顶级目录列表 */ - @SaCheckPermission("progress:progressCategory:listTopBySubProjectId") - @GetMapping("/listTopBySubProjectId/{subProjectId}") - public R> listTopBySubProjectId(@NotNull(message = "项目id不能为空") - @PathVariable Long subProjectId) { - List list = pgsProgressCategoryService.getTopListByProjectId(subProjectId); + @SaCheckPermission("progress:progressCategory:listTopByProjectId") + @GetMapping("/listTopByProjectId/{projectId}") + public R> listTopByProjectId(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + List list = pgsProgressCategoryService.getTopListByProjectId(projectId); return R.ok(list); } @@ -93,64 +97,90 @@ public class PgsProgressCategoryController extends BaseController { @Log(title = "进度类别", businessType = BusinessType.EXPORT) @Transactional @PostMapping("/export") - public void export(@RequestBody Map projectId, HttpServletResponse response) { - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - //根据projectid拿到整个数据 - queryWrapper.eq(PgsProgressCategory::getProjectId, projectId.get("projectId")); - List list = pgsProgressCategoryService.list(queryWrapper); - List ids = new ArrayList<>(); - for (PgsProgressCategory pgsProgressCategory : list) { - ids.add(pgsProgressCategory.getId()); - } - + public void export(@RequestBody PgsProgressCategoryQueryReq req, HttpServletResponse response) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); //要导出的整个sheet所需要的names List names = new ArrayList<>(); //要导出的list List> listValues = new ArrayList<>(); + Long parentId = req.getParentId(); + String relevancyStructure = req.getRelevancyStructure(); + if (relevancyStructure.equals("2")) { + // 父类id不为空,导出父类对应的子类 + PgsProgressCategory category = pgsProgressCategoryService.getById(parentId); + if (category == null) { + throw new ServiceException("父进度类别不存在", HttpStatus.NOT_FOUND); + } + names.add(category.getName()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.apply("FIND_IN_SET({0}, ancestors)", parentId); + List voList = pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(queryWrapper)); + listValues.add(voList); + } else { + BusProject project = projectService.getById(req.getProjectId()); + if (project == null) { + throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND); + } + List projects; + if (project.getPId().equals(0L)) { + projects = projectService.lambdaQuery() + .eq(BusProject::getPId, req.getProjectId()) + .list(); + projects.add(project); + List ids = projects.stream().map(BusProject::getId).toList(); + lqw.in(CollUtil.isNotEmpty(ids), PgsProgressCategory::getProjectId, ids); + } else { + projects = List.of(project); + lqw.eq(req.getProjectId() != null, PgsProgressCategory::getProjectId, req.getProjectId()); + } + lqw.eq(req.getMatrixId() != null, PgsProgressCategory::getMatrixId, req.getMatrixId()); + // 查询数据 + lqw.eq(PgsProgressCategory::getParentId, 0L); + List list = pgsProgressCategoryService.list(lqw); - //获取非方阵类别name 非方阵类别有多级 暂定只有2级 也有可能没有父子关系 - queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PgsProgressCategory::getParentId, 0).eq(PgsProgressCategory::getMatrixId, 0).in(PgsProgressCategory::getId, ids); - List unMatrixList = pgsProgressCategoryService.list(queryWrapper); - if (!unMatrixList.isEmpty()) { - for (PgsProgressCategory unMatrix : unMatrixList) { - //所有非方阵顶类名 - names.add(unMatrix.getName()); - //寻找子类 - queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PgsProgressCategory::getParentId, unMatrix.getId()); - List children = pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(queryWrapper)); - if (!children.isEmpty()) { - //寻找孙类 然后添加 - List grandson = new ArrayList<>(); - for (PgsProgressCategoryVo childrenCategory : children) { - queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PgsProgressCategory::getParentId, childrenCategory.getId()); - List grandsonCategory = pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(queryWrapper)); - if (!grandsonCategory.isEmpty()) { - grandson.addAll(grandsonCategory); - } else { - grandson = children; + Map projectNameMap = projects.stream() + .collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName)); + // 获取非方阵类别name 非方阵类别有多级 暂定只有2级 也有可能没有父子关系 + List unMatrixList = list.stream().filter(category -> + !category.getRelevancyStructure().equals(PgsRelevancyStructureEnum.MATRIX.getValue())).toList(); + if (!unMatrixList.isEmpty()) { + for (PgsProgressCategory unMatrix : unMatrixList) { + //所有非方阵顶类名 + names.add(unMatrix.getName() + "-" + projectNameMap.get(unMatrix.getProjectId())); + //寻找子类 + lqw = new LambdaQueryWrapper<>(); + lqw.eq(PgsProgressCategory::getParentId, unMatrix.getId()); + List children = pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(lqw)); + if (!children.isEmpty()) { + //寻找孙类 然后添加 + List grandson = new ArrayList<>(); + for (PgsProgressCategoryVo childrenCategory : children) { + lqw = new LambdaQueryWrapper<>(); + lqw.eq(PgsProgressCategory::getParentId, childrenCategory.getId()); + List grandsonCategory = pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(lqw)); + if (!grandsonCategory.isEmpty()) { + grandson.addAll(grandsonCategory); + } else { + grandson = children; + } } + listValues.add(grandson); } - listValues.add(grandson); } } - } - //获取矩阵类别name - queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PgsProgressCategory::getParentId, 0).ne(PgsProgressCategory::getMatrixId, 0).in(PgsProgressCategory::getId, ids); - List matrixList = pgsProgressCategoryService.list(queryWrapper); - if (!matrixList.isEmpty()) { - for (PgsProgressCategory pgsProgressCategory : matrixList) { - //增加矩阵名 - names.add(pgsProgressCategory.getName() + "-" + pgsProgressCategory.getMatrixName()); - //找到该矩阵下的列表 - queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PgsProgressCategory::getMatrixId, pgsProgressCategory.getMatrixId()); - listValues.add(pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(queryWrapper))); + //获取矩阵类别name + List matrixList = list.stream().filter(category -> + category.getRelevancyStructure().equals(PgsRelevancyStructureEnum.MATRIX.getValue())).toList(); + if (!matrixList.isEmpty()) { + for (PgsProgressCategory pgsProgressCategory : matrixList) { + //增加矩阵名 + names.add(pgsProgressCategory.getName() + "-" + pgsProgressCategory.getMatrixName()); + //找到该矩阵下的列表 + lqw = new LambdaQueryWrapper<>(); + lqw.eq(PgsProgressCategory::getMatrixId, pgsProgressCategory.getMatrixId()); + listValues.add(pgsProgressCategoryService.getVoList(pgsProgressCategoryService.list(lqw))); + } } } @@ -183,12 +213,6 @@ public class PgsProgressCategoryController extends BaseController { return R.fail("文件名不能为空"); } - // 获取项目 - List projects = projectService.lambdaQuery() - .eq(BusProject::getPId, 1897160897167638529L) - .list(); - List ids = projects.stream().map(BusProject::getId).toList(); - try { // 使用EasyExcel读取所有sheet List allData = new ArrayList<>(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategory.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategory.java index 2f0eb1d1..f841d5b5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategory.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategory.java @@ -115,7 +115,7 @@ public class PgsProgressCategory extends BaseEntity { private String ancestors; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategoryTemplate.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategoryTemplate.java index a2496e40..21733f23 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategoryTemplate.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/PgsProgressCategoryTemplate.java @@ -48,7 +48,7 @@ public class PgsProgressCategoryTemplate implements Serializable { private String workType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; 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 08471778..ae09c2ca 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 @@ -70,4 +70,9 @@ public class PgsProgressPlanDetail extends BaseEntity { */ private BigDecimal aiFill; + /** + * 状态(1未上报 2已上报 3已审核) + */ + private String status; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateReq.java index 4c66c9dd..16b759cb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateReq.java @@ -25,9 +25,9 @@ public class PgsProgressCategoryCreateReq implements Serializable { private Long parentId; /** - * 子项目id + * 项目id */ - @NotNull(message = "子项目id不能为空") + @NotNull(message = "项目id不能为空") private Long projectId; /** @@ -44,7 +44,6 @@ public class PgsProgressCategoryCreateReq implements Serializable { /** * 计量方式(0无 1数量 2百分比) */ - @NotBlank(message = "计量方式不能为空") private String unitType; /** @@ -66,7 +65,7 @@ public class PgsProgressCategoryCreateReq implements Serializable { private BigDecimal constructionPrice; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; 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 2e37801e..119260eb 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 @@ -25,7 +25,7 @@ public class PgsProgressCategoryQueryReq { private Long parentId; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryUpdateReq.java index 38e198bb..b2c5348c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryUpdateReq.java @@ -39,7 +39,7 @@ public class PgsProgressCategoryUpdateReq { private BigDecimal total; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; 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 61cd425c..7179e3fb 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 @@ -52,7 +52,7 @@ public class PgsProgressCategoryTemplateCreateReq implements Serializable { private String constructionType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ @NotBlank(message = "关联结构不能为空") private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateQueryReq.java index 2f09946b..3f7f8abb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategorytemplate/PgsProgressCategoryTemplateQueryReq.java @@ -40,7 +40,7 @@ public class PgsProgressCategoryTemplateQueryReq implements Serializable { private String constructionType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ 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 a25bad92..9b8295ac 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 @@ -55,7 +55,7 @@ public class PgsProgressCategoryTemplateUpdateReq implements Serializable { private String constructionType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/enums/PgsRelevancyStructureEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/enums/PgsRelevancyStructureEnum.java index b6765b9f..70c206b2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/enums/PgsRelevancyStructureEnum.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/enums/PgsRelevancyStructureEnum.java @@ -10,7 +10,8 @@ import lombok.Getter; public enum PgsRelevancyStructureEnum { SUB_PROJECT("子项目", "1"), - MATRIX("方阵", "2"); + MATRIX("方阵", "2"), + PROJECT("项目", "3"); private final String text; 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 index f3813deb..ef123c99 100644 --- 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 @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; public class PgsProgressCategoryMatrixStructureTopVo { /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; @@ -28,6 +28,11 @@ public class PgsProgressCategoryMatrixStructureTopVo { */ private String name; + /** + * 子项目id + */ + private Long subProjectId; + /** * 方阵id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySecondVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySecondVo.java index be080715..1b6a3649 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySecondVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySecondVo.java @@ -16,7 +16,7 @@ public class PgsProgressCategorySecondVo implements Serializable { private static final long serialVersionUID = 5297363236416903392L; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySubProjectStructureTopVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySubProjectStructureTopVo.java new file mode 100644 index 00000000..b95930b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategorySubProjectStructureTopVo.java @@ -0,0 +1,51 @@ +package org.dromara.progress.domain.vo.progresscategory; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.util.List; + +/** + * @author lilemy + * @date 2025-09-24 16:21 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PgsProgressCategorySubProjectStructureTopVo { + + /** + * 关联结构(1子项目 2方阵 3项目) + */ + private String relevancyStructure; + + /** + * 主键id + */ + private Long id; + + /** + * 类别名称 + */ + private String name; + + /** + * 子项目id + */ + private Long subProjectId; + + /** + * 子项目名称 + */ + @Translation(type = TransConstant.PROJECT_ID_TO_NAME, mapper = "subProjectId") + private String subProjectName; + + /** + * 关联方阵结构列表 + */ + private List matrixStructureList; + +} 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 index 0b1a2597..bb8011fe 100644 --- 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 @@ -18,7 +18,7 @@ public class PgsProgressCategoryTopVo implements Serializable { private static final long serialVersionUID = -8638109773596974231L; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; @@ -53,9 +53,9 @@ public class PgsProgressCategoryTopVo implements Serializable { private Long sort; /** - * 关联方阵结构列表 + * 关联子项目结构列表 */ - private List matrixStructureList; + private List subProjectStructureList; /** * 子类别列表 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryVo.java index 3ef4838f..1588b6b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryVo.java @@ -140,7 +140,7 @@ public class PgsProgressCategoryVo implements Serializable { private BigDecimal constructionOutputValue; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategorytemplate/PgsProgressCategoryTemplateVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategorytemplate/PgsProgressCategoryTemplateVo.java index bae308b6..5dbbce04 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategorytemplate/PgsProgressCategoryTemplateVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategorytemplate/PgsProgressCategoryTemplateVo.java @@ -47,7 +47,7 @@ public class PgsProgressCategoryTemplateVo implements Serializable { private String workType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplan/PgsProgressPlanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplan/PgsProgressPlanVo.java index 20f8854e..b75ab08a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplan/PgsProgressPlanVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplan/PgsProgressPlanVo.java @@ -107,7 +107,7 @@ public class PgsProgressPlanVo implements Serializable { private String workType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailNumVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailNumVo.java index 5c6a291a..5086d73e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailNumVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progressplandetail/PgsProgressPlanDetailNumVo.java @@ -52,7 +52,7 @@ public class PgsProgressPlanDetailNumVo { private String workType; /** - * 关联结构(1子项目 2方阵) + * 关联结构(1子项目 2方阵 3项目) */ private String relevancyStructure; 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 293c3562..fa2e3bdf 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 @@ -68,4 +68,9 @@ public class PgsProgressPlanDetailVo implements Serializable { @ExcelProperty(value = "AI填入数量") private BigDecimal aiFill; + /** + * 状态(1未上报 2已上报 3已审核) + */ + private String status; + } 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 5aecf2b8..3fcbc374 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 @@ -53,12 +53,12 @@ public interface IPgsProgressCategoryService extends IService getTopListByProjectId(Long subProjectId); + List getTopListByProjectId(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 421cf639..63a31dba 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 @@ -114,11 +114,12 @@ public interface IPgsProgressPlanDetailService extends IService getTopListByProjectId(Long subProjectId) { + public List getTopListByProjectId(Long projectId) { + // 获取当前项目的所有子项目 + List projectIds = new ArrayList<>(projectService.lambdaQuery() + .select(BusProject::getId) + .eq(BusProject::getPId, projectId) + .list() + .stream() + .map(BusProject::getId) + .toList()); + projectIds.add(projectId); // 查询该子项目下的顶级进度类别(父ID为0) List list = this.lambdaQuery() - .eq(PgsProgressCategory::getProjectId, subProjectId) + .in(PgsProgressCategory::getProjectId, projectIds) .eq(PgsProgressCategory::getParentId, PgsProgressCategoryConstant.TOP_PARENT_ID) .list(); // 如果没有查询到顶级进度类别,直接返回空集合 @@ -216,8 +225,169 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl> subMap = subList.stream() + .collect(Collectors.groupingBy(PgsProgressCategory::getName)); + for (Map.Entry> entry : subMap.entrySet()) { + PgsProgressCategoryTopVo topVo = new PgsProgressCategoryTopVo(); + topVo.setName(entry.getKey()); + topVo.setRelevancyStructure(PgsRelevancyStructureEnum.SUB_PROJECT.getValue()); + // 取分组中的第一条记录的排序字段作为当前VO的排序值 + List value = entry.getValue(); + PgsProgressCategory first = value.getFirst(); + topVo.setId(first.getId()); + topVo.setSort(first.getSort()); + // 转换为子项目结构的VO列表 + List subProjectVoList = value.stream().map(category -> { + PgsProgressCategorySubProjectStructureTopVo vo = new PgsProgressCategorySubProjectStructureTopVo(); + BeanUtils.copyProperties(category, vo); + vo.setSubProjectId(category.getProjectId()); + return vo; + }).toList(); + topVo.setSubProjectStructureList(subProjectVoList); + // 统计深度 + AtomicInteger count = new AtomicInteger(1); + // 获取这些类别下的所有叶子节点 + List topIds = value.stream().map(PgsProgressCategory::getId).distinct().toList(); + List leafNodesByTopIds = childrenNodes.stream() + .filter(node -> { + Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) + .map(Long::parseLong) + .collect(Collectors.toSet()); + boolean result = topIds.stream().anyMatch(ancestorSet::contains); + if (result) { + count.set(Math.max(ancestorSet.size(), count.get())); + } + return result; + }).toList(); + // 如果有叶子节点,统计进度和状态;否则初始化为未完成 + if (CollUtil.isNotEmpty(leafNodesByTopIds)) { + topVo.setProgressTotal(this.getCompletedPercentage(leafNodesByTopIds)); + topVo.setStatus(this.getParentStatus(leafNodesByTopIds)); + if (count.get() == 2) { + topVo.setType("3"); + } else if (count.get() == 3) { + topVo.setType("4"); + List second = leafNodesByTopIds.stream() + .filter(node -> { + Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) + .map(Long::parseLong) + .collect(Collectors.toSet()); + return ancestorSet.size() == 2; + }).map(node -> { + PgsProgressCategorySecondVo vo = new PgsProgressCategorySecondVo(); + BeanUtils.copyProperties(node, vo); + return vo; + }) + .toList(); + topVo.setCategorySecondList(second); + } + } else { + topVo.setProgressTotal(BigDecimal.ZERO); + topVo.setStatus(PgsFinishStatusEnum.UNFINISH.getValue()); + topVo.setType("3"); + } + // 加入结果集 + topList.add(topVo); + } + } + // ============================= 处理关联方阵的数据 ============================= + // 筛选出关联方阵的顶级类别 + 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()); + // 取分组中的第一条记录的排序字段作为当前VO的排序值 + List value = entry.getValue(); + PgsProgressCategory first = value.getFirst(); + topVo.setId(first.getId()); + topVo.setSort(first.getSort()); + // 转换为方阵结构的VO列表 + List matrixVoList = value.stream().map(category -> { + PgsProgressCategoryMatrixStructureTopVo vo = new PgsProgressCategoryMatrixStructureTopVo(); + BeanUtils.copyProperties(category, vo); + vo.setSubProjectId(category.getProjectId()); + return vo; + }).toList(); + // 根据子项目进行分类 + Map> subProjectMap = matrixVoList.stream() + .collect(Collectors.groupingBy(PgsProgressCategoryMatrixStructureTopVo::getSubProjectId)); + List subProjects = new ArrayList<>(); + for (Map.Entry> subEntry : subProjectMap.entrySet()) { + List subValue = subEntry.getValue(); + PgsProgressCategorySubProjectStructureTopVo vo = new PgsProgressCategorySubProjectStructureTopVo(); + PgsProgressCategoryMatrixStructureTopVo subFirst = subValue.getFirst(); + vo.setRelevancyStructure(subFirst.getRelevancyStructure()); + vo.setId(subFirst.getId()); + vo.setName(subFirst.getName()); + vo.setSubProjectId(subFirst.getSubProjectId()); + vo.setMatrixStructureList(subValue); + subProjects.add(vo); + } + topVo.setSubProjectStructureList(subProjects); + // 统计深度 + AtomicInteger count = new AtomicInteger(1); + // 获取这些类别下的所有叶子节点 + List topIds = value.stream().map(PgsProgressCategory::getId).distinct().toList(); + List leafNodesByTopIds = childrenNodes.stream() + .filter(node -> { + Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) + .map(Long::parseLong) + .collect(Collectors.toSet()); + boolean result = topIds.stream().anyMatch(ancestorSet::contains); + if (result) { + count.set(Math.max(ancestorSet.size(), count.get())); + } + return result; + }).toList(); + // 如果有叶子节点,统计进度和状态;否则初始化为未完成 + if (CollUtil.isNotEmpty(leafNodesByTopIds)) { + topVo.setProgressTotal(this.getCompletedPercentage(leafNodesByTopIds)); + topVo.setStatus(this.getParentStatus(leafNodesByTopIds)); + if (count.get() == 2) { + topVo.setType("3"); + } else if (count.get() == 3) { + topVo.setType("4"); + List second = leafNodesByTopIds.stream() + .filter(node -> { + Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) + .map(Long::parseLong) + .collect(Collectors.toSet()); + return ancestorSet.size() == 2; + }).map(node -> { + PgsProgressCategorySecondVo vo = new PgsProgressCategorySecondVo(); + BeanUtils.copyProperties(node, vo); + return vo; + }) + .toList(); + topVo.setCategorySecondList(second); + } + } else { + topVo.setProgressTotal(BigDecimal.ZERO); + topVo.setStatus(PgsFinishStatusEnum.UNFINISH.getValue()); + topVo.setType("3"); + } + // 加入结果集 + topList.add(topVo); + } + } + // ============================= 处理关联子项目的数据 ============================= + // 筛选出关联项目的顶级类别 + List pList = list.stream() + .filter(category -> + category.getRelevancyStructure().equals(PgsRelevancyStructureEnum.PROJECT.getValue())) + .toList(); + if (CollUtil.isNotEmpty(pList)) { // 将子项目类别转换为VO对象 - List subVoList = subList.stream().map(category -> { + List pVoList = pList.stream().map(category -> { PgsProgressCategoryTopVo topVo = new PgsProgressCategoryTopVo(); // 属性拷贝 BeanUtils.copyProperties(category, topVo); @@ -265,77 +435,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl 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()); - // 取分组中的第一条记录的排序字段作为当前VO的排序值 - List value = entry.getValue(); - topVo.setSort(value.getFirst().getSort()); - // 转换为方阵结构的VO列表 - List matrixVoList = value.stream().map(category -> { - PgsProgressCategoryMatrixStructureTopVo vo = new PgsProgressCategoryMatrixStructureTopVo(); - BeanUtils.copyProperties(category, vo); - return vo; - }).toList(); - topVo.setMatrixStructureList(matrixVoList); - // 统计深度 - AtomicInteger count = new AtomicInteger(1); - // 获取这些类别下的所有叶子节点 - List topIds = value.stream().map(PgsProgressCategory::getId).distinct().toList(); - List leafNodesByTopIds = childrenNodes.stream() - .filter(node -> { - Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) - .map(Long::parseLong) - .collect(Collectors.toSet()); - boolean result = topIds.stream().anyMatch(ancestorSet::contains); - if (result) { - count.set(Math.max(ancestorSet.size(), count.get())); - } - return result; - }).toList(); - // 如果有叶子节点,统计进度和状态;否则初始化为未完成 - if (CollUtil.isNotEmpty(leafNodesByTopIds)) { - topVo.setProgressTotal(this.getCompletedPercentage(leafNodesByTopIds)); - topVo.setStatus(this.getParentStatus(leafNodesByTopIds)); - if (count.get() == 2) { - topVo.setType("3"); - } else if (count.get() == 3) { - topVo.setType("4"); - List second = leafNodesByTopIds.stream() - .filter(node -> { - Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) - .map(Long::parseLong) - .collect(Collectors.toSet()); - return ancestorSet.size() == 2; - }).map(node -> { - PgsProgressCategorySecondVo vo = new PgsProgressCategorySecondVo(); - BeanUtils.copyProperties(node, vo); - return vo; - }) - .toList(); - topVo.setCategorySecondList(second); - } - } else { - topVo.setProgressTotal(BigDecimal.ZERO); - topVo.setStatus(PgsFinishStatusEnum.UNFINISH.getValue()); - topVo.setType("3"); - } - // 加入结果集 - topList.add(topVo); - } + topList.addAll(pVoList); } // ============================= 排序 & 返回结果 ============================= // 按 sort 字段升序排序 @@ -398,6 +498,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl planDetailList = this.lambdaQuery() .eq(ObjectUtils.isNotEmpty(projectId), PgsProgressPlanDetail::getProjectId, projectId) - .eq(PgsProgressPlanDetail::getDate, localDate) + .ge(PgsProgressPlanDetail::getDate, startDate) + .le(PgsProgressPlanDetail::getDate, endDate) + .ne(PgsProgressPlanDetail::getFinishedNumber, BigDecimal.ZERO) + .eq(PgsProgressPlanDetail::getStatus, "1") .list(); if (CollUtil.isEmpty(planDetailList)) { return false; @@ -861,44 +880,118 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl v1) ); + // 为每一个项目创建一个施工产值范围 + Set projectIds = planDetailList.stream() + .map(PgsProgressPlanDetail::getProjectId).collect(Collectors.toSet()); + // 获取所有父级项目 + List projectList = projectService.listByIds(projectIds); + List allProjectIds = projectList + .stream().map(project -> { + if (project.getPId() != 0L) { + return project.getPId(); + } else { + return project.getId(); + } + }).distinct().toList(); + // 根据项目区分 + Map> detailMap = planDetailList.stream() + .collect(Collectors.groupingBy(PgsProgressPlanDetail::getProjectId)); 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; + 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); } - value.setProjectId(planDetail.getProjectId()); - value.setMatrixId(category.getMatrixId()); - value.setProgressCategoryId(progressCategoryId); - BigDecimal finishedNumber = planDetail.getFinishedNumber(); - BigDecimal aiFill = planDetail.getAiFill(); - // 如果完成数量为0, 则不保存 - if (finishedNumber.compareTo(BigDecimal.ZERO) == 0 && aiFill.compareTo(BigDecimal.ZERO) == 0) { - continue; + if (CollUtil.isEmpty(detailList)) { + return null; } - int artificialNum = finishedNumber.intValue(); - value.setArtificialNum(artificialNum); - int uavNum = aiFill.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)).setScale(4, RoundingMode.HALF_UP).add(constructionPrice.multiply(BigDecimal.valueOf(uavNum)).setScale(4, RoundingMode.HALF_UP))); - value.setOwnerValue(ownerPrice.multiply(BigDecimal.valueOf(artificialNum)).setScale(4, RoundingMode.HALF_UP).add(ownerPrice.multiply(BigDecimal.valueOf(uavNum)).setScale(4, RoundingMode.HALF_UP))); - saveList.add(value); - } + 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); + 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(saveList)) { boolean saved = constructionValueService.saveBatch(saveList); if (!saved) { throw new ServiceException("同步计划详情到施工产值失败,数据库异常", HttpStatus.ERROR); } } + if (CollUtil.isNotEmpty(allUpdateList)) { + boolean updateBatch = this.updateBatchById(allUpdateList); + if (!updateBatch) { + throw new ServiceException("同步计划详情到施工产值失败,数据库异常", HttpStatus.ERROR); + } + } return true; } @@ -925,10 +1018,8 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl projects = projectService.lambdaQuery() diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java index fd6ea4b4..81b961a5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java @@ -505,9 +505,6 @@ public class BusProjectServiceImpl extends ServiceImpl + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractAppointMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractAppointMapper.xml new file mode 100644 index 00000000..30770938 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractAppointMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractBillItemMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractBillItemMapper.xml new file mode 100644 index 00000000..132f7af6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractBillItemMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractMainMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractMainMapper.xml new file mode 100644 index 00000000..0cfafaf5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrContractMainMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrCooperationAgreementMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrCooperationAgreementMapper.xml new file mode 100644 index 00000000..49cd43db --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrCooperationAgreementMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrSubcontractMainMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrSubcontractMainMapper.xml new file mode 100644 index 00000000..f8ecb366 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrSubcontractMainMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrSubcontractSealMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrSubcontractSealMapper.xml new file mode 100644 index 00000000..7d917ebf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/ctr/CtrSubcontractSealMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/out/OutConstructionValueRangeMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/out/OutConstructionValueRangeMapper.xml new file mode 100644 index 00000000..a087c9d1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/out/OutConstructionValueRangeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/script/sql/xzd.sql b/xinnengyuan/script/sql/xzd.sql new file mode 100644 index 00000000..377e9fd6 --- /dev/null +++ b/xinnengyuan/script/sql/xzd.sql @@ -0,0 +1,421 @@ +use xinnengyuandev; + +drop table if exists ctr_cooperation_agreement; +create table ctr_cooperation_agreement +( + `id` bigint not null auto_increment comment '主键id', + `project_id` bigint not null comment '项目id', + `contract_code` varchar(100) not null comment '合同编码', + `contract_name` varchar(512) not null comment '合同名称', + `document_date` date not null comment '单据日期', + `party_a` varchar(255) null comment '甲方单位', + `party_b` varchar(255) null comment '乙方单位', + `company_name` varchar(255) not null comment '公司名称', + `sign_date` date null comment '签订日期', + `amount` decimal(20, 4) default 0.0000 null comment '合同含税金额', + `agreement_type` varchar(100) not null comment '协议类型', + `project_manager` varchar(100) null comment '项目经理', + `start_date` date null comment '开始日期', + `end_date` date null comment '结束日期', + `payment_terms` varchar(512) null comment '支付条款', + `file_id` varchar(512) null comment '文件id', + `status` varchar(16) default 'draft' not null comment '状态', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_project_id` (`project_id` asc) using btree comment '项目ID', + index `idx_contract_code` (`contract_code` asc) using btree comment '合同编码' +) comment ='合作协议'; + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970331683156451329, '合作协议', '1958086953051795457', '1', 'cooperationAgreement', + 'ctr/cooperationAgreement/index', 1, 0, 'C', '0', '0', 'ctr:cooperationAgreement:list', '#', 103, 1, sysdate(), + null, null, '合作协议菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970331683156451330, '合作协议查询', 1970331683156451329, '1', '#', '', 1, 0, 'F', '0', '0', + 'ctr:cooperationAgreement:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970331683156451331, '合作协议新增', 1970331683156451329, '2', '#', '', 1, 0, 'F', '0', '0', + 'ctr:cooperationAgreement:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970331683156451332, '合作协议修改', 1970331683156451329, '3', '#', '', 1, 0, 'F', '0', '0', + 'ctr:cooperationAgreement:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970331683156451333, '合作协议删除', 1970331683156451329, '4', '#', '', 1, 0, 'F', '0', '0', + 'ctr:cooperationAgreement:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970331683156451334, '合作协议导出', 1970331683156451329, '5', '#', '', 1, 0, 'F', '0', '0', + 'ctr:cooperationAgreement:export', '#', 103, 1, sysdate(), null, null, ''); + +drop table if exists ctr_contract_main; +create table ctr_contract_main +( + `id` bigint not null auto_increment comment '主键id', + `project_id` bigint not null comment '项目id', + `contract_code` varchar(128) not null comment '合同编码', + `contract_name` varchar(255) not null comment '合同名称', + `document_date` date not null comment '单据日期', + `contract_mode` varchar(128) not null comment '合同模式', + `sign_date` date not null comment '签订日期', + `customer_type` varchar(128) not null comment '客户性质', + `party_a` varchar(255) not null comment '甲方单位', + `contract_amount` decimal(20, 4) default 0.0000 null comment '合同金额', + `invoice_company` varchar(255) not null comment '开票单位', + `party_b` varchar(255) not null comment '乙方单位', + `total_invest` decimal(20, 4) default 0.0000 not null comment '总投资额', + `budget_category` varchar(128) not null comment '预算分类', + `receipt_company` varchar(255) not null comment '收票单位', + `archive_date` date null comment '归档日期', + `payment_method` varchar(128) not null comment '支付方式', + `payment_terms` varchar(512) null comment '支付条款', + `project_scale` varchar(512) null comment '工程规模', + `file_id` varchar(512) null comment '文件id', + `status` varchar(16) default 'draft' not null comment '状态', + `remark` varchar(512) null comment '备注', + `seal_name` varchar(255) not null comment '印章名称', + `amount_upper` varchar(512) null comment '大写合同价税合计', + `sign_org` varchar(255) not null comment '签约组织', + `project_type` varchar(128) null comment '项目类型', + `project_category` varchar(128) null comment '项目大类', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + unique key `uk_contract_code` (`contract_code`) comment '合同编码唯一', + index `idx_project_id` (`project_id` asc) using btree comment '项目ID' +) comment ='承包合同-基本信息表'; + +drop table if exists ctr_contract_bill_item; +create table ctr_contract_bill_item +( + `id` bigint not null auto_increment comment '主键id', + `code` varchar(128) not null comment '编码', + `contract_id` bigint not null comment '合同id', + `item_name` varchar(255) not null comment '合同清单名称', + `unit` varchar(50) not null comment '计量单位', + `quantity` decimal(20) default 0 null comment '数量', + `unit_price_tax` decimal(20, 4) default 0.0000 null comment '含税单价', + `total_price_tax` decimal(20, 4) default 0.0000 null comment '价税合计', + `amount_excl_tax` decimal(20, 4) default 0.0000 null comment '不含税金额', + `tax_rate` decimal(5, 2) default 0.00 null comment '税率(%)', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_contract_id` (`contract_id` asc) using btree comment '合同ID' +) comment ='承包合同-工程量清单表'; + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970377875752017921, '基本信息', '1970373019079335938', '1', 'contractMain', 'ctr/contractMain/index', 1, 0, + 'C', '0', '0', 'ctr:contractMain:list', '#', 103, 1, sysdate(), null, null, '承包合同-基本信息菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970377875752017922, '承包合同-基本信息查询', 1970377875752017921, '1', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractMain:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970377875752017923, '承包合同-基本信息新增', 1970377875752017921, '2', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractMain:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970377875752017924, '承包合同-基本信息修改', 1970377875752017921, '3', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractMain:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970377875752017925, '承包合同-基本信息删除', 1970377875752017921, '4', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractMain:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970377875752017926, '承包合同-基本信息导出', 1970377875752017921, '5', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractMain:export', '#', 103, 1, sysdate(), null, null, ''); + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970378640130367489, '承包合同-工程量清单', '1970377875752017921', '1', 'contractBillItem', + 'ctr/contractBillItem/index', 1, 0, 'C', '0', '0', 'ctr:contractBillItem:list', '#', 103, 1, sysdate(), null, + null, '承包合同-工程量清单菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970378640130367490, '承包合同-工程量清单查询', 1970378640130367489, '1', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractBillItem:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970378640130367491, '承包合同-工程量清单新增', 1970378640130367489, '2', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractBillItem:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970378640130367492, '承包合同-工程量清单修改', 1970378640130367489, '3', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractBillItem:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970378640130367493, '承包合同-工程量清单删除', 1970378640130367489, '4', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractBillItem:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970378640130367494, '承包合同-工程量清单导出', 1970378640130367489, '5', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractBillItem:export', '#', 103, 1, sysdate(), null, null, ''); + +drop table if exists ctr_contract_appoint; +create table ctr_contract_appoint +( + `id` bigint not null auto_increment comment '主键id', + `contract_id` bigint not null comment '合同id', + `performance_bond_type` varchar(100) not null comment '履约保证金形式', + `performance_bond_ratio` decimal(5, 2) default 0.00 null comment '履约保证金比例(%)', + `performance_bond_amount` decimal(20, 4) default 0.0000 null comment '履约保证金金额(元)', + `advance_payment_flag` char(1) default '0' not null comment '是否有预收款(0否 1 是)', + `advance_payment_ratio` decimal(5, 2) default 0.00 null comment '预收款比例(%)', + `advance_payment_amount` decimal(20, 4) default 0.0000 null comment '预收款金额(元)', + `quality_bond_type` varchar(100) not null comment '质量保证金形式', + `quality_bond_ratio` decimal(5, 2) default 0.00 null comment '质量保证金比例(%)', + `quality_bond_amount` decimal(20, 4) default 0.0000 null comment '质量保证金金额(元)', + `file_id` varchar(512) null comment '文件id', + `status` varchar(16) default 'draft' not null comment '状态', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_contract_id` (`contract_id` asc) using btree comment '合同ID' +) comment ='承包合同-主要条款约定'; + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970395180686131201, '承包合同-主要条款约定', '1970373019079335938', '1', 'contractAppoint', + 'ctr/contractAppoint/index', 1, 0, 'C', '0', '0', 'ctr:contractAppoint:list', '#', 103, 1, sysdate(), null, + null, '承包合同-主要条款约定菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970395180686131202, '承包合同-主要条款约定查询', 1970395180686131201, '1', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractAppoint:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970395180686131203, '承包合同-主要条款约定新增', 1970395180686131201, '2', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractAppoint:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970395180686131204, '承包合同-主要条款约定修改', 1970395180686131201, '3', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractAppoint:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970395180686131205, '承包合同-主要条款约定删除', 1970395180686131201, '4', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractAppoint:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970395180686131206, '承包合同-主要条款约定导出', 1970395180686131201, '5', '#', '', 1, 0, 'F', '0', '0', + 'ctr:contractAppoint:export', '#', 103, 1, sysdate(), null, null, ''); + + +drop table if exists contract_payment_clause; +create table contract_payment_clause +( + `id` bigint not null auto_increment comment '主键id', + `contract_id` bigint not null comment '合同id', + `clause_type` varchar(128) null comment '类型', + `settlement_cycle` varchar(128) null comment '结算周期', + `settlement_age_days` int null comment '结算账龄(天)', + `milestone` varchar(1024) null comment '里程碑节点', + `select_value` varchar(255) null comment '选择值', + `comparator` varchar(50) null comment '比较符', + `compare_value` varchar(255) null comment '比较值', + `receipt_age_days` int null comment '收款账龄(天)', + `receipt_base` decimal(20, 4) default 0.0000 null comment '收款基数', + `receipt_ratio` decimal(5, 2) default 0.00 null comment '收款比例(%)', + `file_id` varchar(512) null comment '文件id', + `status` varchar(16) default 'draft' not null comment '状态', + `remark` varchar(512) null comment '备注/补充说明', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_contract_id` (`contract_id` asc) using btree comment '合同ID索引' +) comment ='承包合同-支付条款'; + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970681637725093889, '支付条款', '1970373019079335938', '1', 'paymentClause', 'ctr/paymentClause/index', 1, 0, + 'C', '0', '0', 'ctr:paymentClause:list', '#', 103, 1, sysdate(), null, null, '支付条款菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970681637725093890, '支付条款查询', 1970681637725093889, '1', '#', '', 1, 0, 'F', '0', '0', + 'ctr:paymentClause:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970681637725093891, '支付条款新增', 1970681637725093889, '2', '#', '', 1, 0, 'F', '0', '0', + 'ctr:paymentClause:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970681637725093892, '支付条款修改', 1970681637725093889, '3', '#', '', 1, 0, 'F', '0', '0', + 'ctr:paymentClause:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970681637725093893, '支付条款删除', 1970681637725093889, '4', '#', '', 1, 0, 'F', '0', '0', + 'ctr:paymentClause:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1970681637725093894, '支付条款导出', 1970681637725093889, '5', '#', '', 1, 0, 'F', '0', '0', + 'ctr:paymentClause:export', '#', 103, 1, sysdate(), null, null, ''); + +drop table if exists ctr_subcontract_main; +create table ctr_subcontract_main +( + `id` bigint not null auto_increment comment '主键id', + `project_id` bigint not null comment '项目id', + `contract_code` varchar(100) not null comment '合同编码', + `contract_name` varchar(255) not null comment '合同名称', + `document_date` date not null comment '单据日期', + `contract_type` varchar(100) not null comment '合同类型', + `business_mode` varchar(100) null comment '经营模式', + `original_amount` decimal(20, 4) default 0.0000 null comment '原合同造价', + `sign_date` date null comment '签订日期', + `party_a` varchar(255) not null comment '甲方单位', + `party_b` varchar(255) not null comment '乙方单位', + `amount_incl_tax` decimal(20, 4) default 0.0000 null comment '含税合同金额', + `contract_status` varchar(100) null comment '合同状态', + `cumulative_change_amt` decimal(20, 4) default 0.0000 null comment '累计变更金额', + `manage_org` varchar(255) null comment '管理组织', + `executive_manager` varchar(100) null comment '执行项目经理', + `invoice_unit` varchar(255) not null comment '开票单位', + `receipt_unit` varchar(255) not null comment '收票单位', + `archive_date` date null comment '归档日期', + `target_cost` decimal(20, 4) default 0.0000 null comment '目标成本', + `available_target_cost` decimal(20, 4) default 0.0000 null comment '可用目标成本', + `has_seal` char(1) default '0' null comment '是否用印(0-否,1-是)', + `warning` varchar(512) null comment '警示', + `payment_terms` text null comment '支付条款', + `file_id` varchar(512) null comment '文件id', + `status` varchar(16) default 'draft' not null comment '状态', + `remark` varchar(512) null comment '备注', + `amount_in_words` varchar(500) null comment '大写合同价税合计', + `sign_org` varchar(255) null comment '签约组织', + `project_type` varchar(100) null comment '项目类型', + `project_category` varchar(100) null comment '项目大项', + `limit_pay` char(1) default '0' null comment '付款额不能超合同额(0-否,1-是)', + `limit_settlement` char(1) default '0' null comment '预结算/结算额不能超合同额(0-否,1-是)', + `limit_pay_ratio` decimal(5, 2) default 0.00 null comment '付款额不能超合同额比例', + `limit_settlement_ratio` decimal(5, 2) default 0.00 null comment '预结算/结算额不能超合同额比例', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_project_id` (`project_id` asc) using btree comment '项目ID索引' +) comment ='分包合同-主要信息'; + + +drop table if exists ctr_subcontract_seal; +create table ctr_subcontract_seal +( + `id` bigint not null auto_increment comment '主键id', + `subcontract_id` bigint not null comment '分包合同id', + `seal_name` varchar(512) not null comment '印章名称', + `seal_count` int default 0 not null comment '用印次数', + `file_id` varchar(512) null comment '文件id', + `status` varchar(16) default 'draft' not null comment '状态', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_subcontract_id` (`subcontract_id` asc) using btree comment '分包合同ID索引' +) comment ='分包合同-印章信息'; + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692582274809858, '主要信息', '1970690857740615681', '1', 'subcontractMain', 'ctr/subcontractMain/index', 1, 0, 'C', '0', '0', 'ctr:subcontractMain:list', '#', 103, 1, sysdate(), null, null, '主要信息菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692582274809859, '主要信息查询', 1970692582274809858, '1', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractMain:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692582274809860, '主要信息新增', 1970692582274809858, '2', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractMain:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692582274809861, '主要信息修改', 1970692582274809858, '3', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractMain:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692582274809862, '主要信息删除', 1970692582274809858, '4', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractMain:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692582274809863, '主要信息导出', 1970692582274809858, '5', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractMain:export', '#', 103, 1, sysdate(), null, null, ''); + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692923594686465, '印章信息', '1970692582274809858', '1', 'subcontractSeal', 'ctr/subcontractSeal/index', 1, 0, 'C', '0', '0', 'ctr:subcontractSeal:list', '#', 103, 1, sysdate(), null, null, '印章信息菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692923594686466, '印章信息查询', 1970692923594686465, '1', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractSeal:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692923594686467, '印章信息新增', 1970692923594686465, '2', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractSeal:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692923594686468, '印章信息修改', 1970692923594686465, '3', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractSeal:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692923594686469, '印章信息删除', 1970692923594686465, '4', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractSeal:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1970692923594686470, '印章信息导出', 1970692923594686465, '5', '#', '', 1, 0, 'F', '0', '0', 'ctr:subcontractSeal:export', '#', 103, 1, sysdate(), null, null, '');