This commit is contained in:
zt
2025-08-02 17:51:08 +08:00
parent 7a7a40b13e
commit 9212fb31a7
29 changed files with 894 additions and 70 deletions

View File

@ -2,6 +2,7 @@ package org.dromara.out.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.enums.FormatsType; import org.dromara.common.core.enums.FormatsType;
@ -11,11 +12,11 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.utils.BigDecimalUtil; import org.dromara.common.utils.BigDecimalUtil;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.out.domain.OutConstructionValue; import org.dromara.out.domain.OutConstructionValue;
import org.dromara.out.domain.OutMonthPlan;
import org.dromara.out.domain.OutMonthPlanAudit; import org.dromara.out.domain.OutMonthPlanAudit;
import org.dromara.out.domain.bo.OutMonthPlanBo;
import org.dromara.out.domain.bo.OutTableBo; import org.dromara.out.domain.bo.OutTableBo;
import org.dromara.out.domain.vo.OutComparisonOfCompletionAndSettlementVo; import org.dromara.out.domain.vo.*;
import org.dromara.out.domain.vo.OutComparisonOfOwnerAndSubVo;
import org.dromara.out.domain.vo.OutMonthlyConstructionVo;
import org.dromara.out.service.*; import org.dromara.out.service.*;
import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressCategory;
import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.domain.PgsProgressPlanDetail;
@ -29,15 +30,18 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.YearMonth; import java.time.YearMonth;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* 月度产值计划 * 报表
* *
* @author Lion Li * @author Lion Li
* @date 2025-07-30 * @date 2025-07-30
@ -68,9 +72,9 @@ public class OutTableController extends BaseController {
/** /**
* 施工产值报表(计划 VS 实际) * 施工产值报表(计划 VS 实际)
*/ */
@SaCheckPermission("out:table:list") // @SaCheckPermission("out:table:list")
@GetMapping("/monthlyConstruct") @GetMapping("/monthlyConstruct")
public TableDataInfo<OutMonthlyConstructionVo> list(OutTableBo bo, PageQuery pageQuery) { public TableDataInfo<OutMonthlyConstructionVo> list(@NotNull String month, PageQuery pageQuery) {
//分页查询所有父项目 //分页查询所有父项目
BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq(); BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq();
@ -90,7 +94,7 @@ public class OutTableController extends BaseController {
//计算日期 //计算日期
LocalDate parsedDate = DateUtils.parseLocalDateTime(FormatsType.YYYY_MM, bo.getMonth()); LocalDate parsedDate = DateUtils.parseLocalDateTime(FormatsType.YYYY_MM, month);
// 当前月的第一天 // 当前月的第一天
LocalDate firstDay = parsedDate.with(TemporalAdjusters.firstDayOfMonth()); LocalDate firstDay = parsedDate.with(TemporalAdjusters.firstDayOfMonth());
// 当前月的最后一天 // 当前月的最后一天
@ -98,7 +102,7 @@ public class OutTableController extends BaseController {
// 方法1: 使用 YearMonth 进行比较(推荐) // 方法1: 使用 YearMonth 进行比较(推荐)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
YearMonth month = YearMonth.parse(bo.getMonth(), formatter); YearMonth yearMonth = YearMonth.parse(month, formatter);
//构建返回数据 //构建返回数据
List<OutMonthlyConstructionVo> outMonthlyConstructionVos = new ArrayList<>(); List<OutMonthlyConstructionVo> outMonthlyConstructionVos = new ArrayList<>();
@ -126,9 +130,9 @@ public class OutTableController extends BaseController {
for (OutMonthPlanAudit planAudit : planAudits) { for (OutMonthPlanAudit planAudit : planAudits) {
YearMonth planMonth = YearMonth.parse(planAudit.getPlanMonth(), formatter); YearMonth planMonth = YearMonth.parse(planAudit.getPlanMonth(), formatter);
// 比较大小 // 比较大小
if (planMonth.isBefore(month)) { if (planMonth.isBefore(yearMonth)) {
estimatedTotalValue=estimatedTotalValue.add(planAudit.getConstructionValue()); estimatedTotalValue=estimatedTotalValue.add(planAudit.getConstructionValue());
} else if (month.isAfter(planMonth)) { } else if (yearMonth.isAfter(planMonth)) {
} else { } else {
estimatedTotalValue = estimatedTotalValue.add(planAudit.getConstructionValue()); estimatedTotalValue = estimatedTotalValue.add(planAudit.getConstructionValue());
@ -219,8 +223,8 @@ public class OutTableController extends BaseController {
vo.setTotalCompletionProgress(BigDecimalUtil.toPercentage(accumulatedCompletionValue, totalValue)); vo.setTotalCompletionProgress(BigDecimalUtil.toPercentage(accumulatedCompletionValue, totalValue));
outMonthlyConstructionVos.add(vo);
} }
outMonthlyConstructionVos.add(vo);
} }
TableDataInfo<OutMonthlyConstructionVo> rspData = new TableDataInfo<>(); TableDataInfo<OutMonthlyConstructionVo> rspData = new TableDataInfo<>();
@ -236,7 +240,7 @@ public class OutTableController extends BaseController {
/** /**
* 分包完工产值与结算产值对比表 * 分包完工产值与结算产值对比表
*/ */
@SaCheckPermission("out:table:list") // @SaCheckPermission("out:table:list")
@GetMapping("/comparisonOfCompletionAndSettlement") @GetMapping("/comparisonOfCompletionAndSettlement")
public TableDataInfo<OutComparisonOfCompletionAndSettlementVo> comparisonOfCompletionAndSettlement(OutTableBo bo, PageQuery pageQuery) { public TableDataInfo<OutComparisonOfCompletionAndSettlementVo> comparisonOfCompletionAndSettlement(OutTableBo bo, PageQuery pageQuery) {
@ -258,17 +262,32 @@ public class OutTableController extends BaseController {
vo.setProjectId(projectVoId); vo.setProjectId(projectVoId);
if("1".equals(bo.getValueType())){
//设计完工产值 //设计完工产值
BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId); BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId,null);
vo.setTotalCompletionOutputValue( designValue);
} else if ("2".equals(bo.getValueType())) {
//施工完工产值 //施工完工产值
BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId); BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId,null);
vo.setTotalCompletionOutputValue(constructionValue);
}else if ("3".equals(bo.getValueType())) {
//采购完工产值 todo: 掉罗成的接口
BigDecimal purchaseValue = BigDecimal.ZERO;
vo.setTotalCompletionOutputValue(purchaseValue);
}else{
//设计完工产值
BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId,null);
//施工完工产值
BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId,null);
//采购完工产值 todo: 掉罗成的接口 //采购完工产值 todo: 掉罗成的接口
BigDecimal purchaseValue = BigDecimal.ZERO; BigDecimal purchaseValue = BigDecimal.ZERO;
vo.setTotalCompletionOutputValue( designValue.add(constructionValue).add(purchaseValue)); vo.setTotalCompletionOutputValue( designValue.add(constructionValue).add(purchaseValue));
}
//结算产值 //结算产值
BigDecimal settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId); BigDecimal settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId,bo.getValueType(),null);
vo.setTotalSettlementOutputValue(settlementValue); vo.setTotalSettlementOutputValue(settlementValue);
vo.setCompletionUnsettledAmount(vo.getTotalSettlementOutputValue().subtract(vo.getTotalCompletionOutputValue())); vo.setCompletionUnsettledAmount(vo.getTotalSettlementOutputValue().subtract(vo.getTotalCompletionOutputValue()));
vo.setCompletionUnsettledRatio(BigDecimalUtil.toPercentage(vo.getCompletionUnsettledAmount(), vo.getTotalCompletionOutputValue())); vo.setCompletionUnsettledRatio(BigDecimalUtil.toPercentage(vo.getCompletionUnsettledAmount(), vo.getTotalCompletionOutputValue()));
@ -288,7 +307,7 @@ public class OutTableController extends BaseController {
/** /**
* 结算产值 VS 业主结算报表 * 结算产值 VS 业主结算报表
*/ */
@SaCheckPermission("out:table:list") // @SaCheckPermission("out:table:list")
@GetMapping("/comparisonOfOwnerAndSub") @GetMapping("/comparisonOfOwnerAndSub")
public TableDataInfo<OutComparisonOfOwnerAndSubVo> comparisonOfOwnerAndSub(OutTableBo bo, PageQuery pageQuery){ public TableDataInfo<OutComparisonOfOwnerAndSubVo> comparisonOfOwnerAndSub(OutTableBo bo, PageQuery pageQuery){
//分页查询所有父项目 //分页查询所有父项目
@ -305,24 +324,23 @@ public class OutTableController extends BaseController {
OutComparisonOfOwnerAndSubVo vo = new OutComparisonOfOwnerAndSubVo(); OutComparisonOfOwnerAndSubVo vo = new OutComparisonOfOwnerAndSubVo();
vo.setProjectName(projectVo.getProjectName()); vo.setProjectName(projectVo.getProjectName());
vo.setProjectId(projectVoId); vo.setProjectId(projectVoId);
//设计完工产值 //设计完工产值
BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId); BigDecimal designValue = monthPlanService.getDesignValueByProjectId(projectVoId,bo.getMonth());
//施工完工产值 //施工完工产值
BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId); BigDecimal constructionValue = constructionValueService.getCompleteValue(projectVoId,bo.getMonth());
//采购完工产值 todo: 掉罗成的接口 //采购完工产值 todo: 掉罗成的接口
BigDecimal purchaseValue = BigDecimal.ZERO; BigDecimal purchaseValue = BigDecimal.ZERO;
vo.setTotalCompletionOutputValue( designValue.add(constructionValue).add(purchaseValue)); vo.setTotalCompletionOutputValue( designValue.add(constructionValue).add(purchaseValue));
//分包结算产值 //分包结算产值
BigDecimal settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId); BigDecimal settlementValue = settlementValueSubcontractService.getValueByProjectId(projectVoId,null,bo.getMonth());
vo.setSubTotalSettlementOutputValue(settlementValue); vo.setSubTotalSettlementOutputValue(settlementValue);
//业主结算产值 //业主结算产值
BigDecimal ownerSettlementValue = settlementValueOwnerService.getValueByProjectId(projectVoId); BigDecimal ownerSettlementValue = settlementValueOwnerService.getValueByProjectId(projectVoId,bo.getMonth());
vo.setOwnerTotalSettlementOutputValue(ownerSettlementValue); vo.setOwnerTotalSettlementOutputValue(ownerSettlementValue);
vos.add(vo); vos.add(vo);
@ -338,5 +356,81 @@ public class OutTableController extends BaseController {
} }
/**
* 采购设计产值报表(计划 VS 实际)
*/
// @SaCheckPermission("out:table:list")
@GetMapping("/monthlyPurchase")
public TableDataInfo<OutDesignAndPurchaseValueVo> monthlyPurchase(OutTableBo bo, PageQuery pageQuery){
//分页查询所有父项目
BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq();
busProjectQueryReq.setPId(0L);
TableDataInfo<BusProjectVo> busProjectVoTableDataInfo = projectService.queryPageList(busProjectQueryReq, pageQuery);
List<BusProjectVo> rows = busProjectVoTableDataInfo.getRows();
List<OutDesignAndPurchaseValueVo> vos = new ArrayList<>();
for (BusProjectVo projectVo : rows) {
OutDesignAndPurchaseValueVo vo = new OutDesignAndPurchaseValueVo();
vo.setProjectName(projectVo.getProjectName());
vo.setProjectId(projectVo.getId());
List<OutMonthPlan> list = monthPlanService.lambdaQuery().eq(OutMonthPlan::getProjectId, projectVo.getId())
.list();
// 计算累计完成值
BigDecimal totalValue = list.stream()
.map(OutMonthPlan::getCompleteValue)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setTotalValue(totalValue);
OutMonthPlan matchedPlan = list.stream()
.filter(plan -> Objects.equals(plan.getValueType(), bo.getValueType())
&& Objects.equals(plan.getPlanMonth(), bo.getMonth()))
.findFirst()
.orElse(null);
List<OutMonthPlan> matchedPlans = list.stream()
.filter(plan -> Objects.equals(plan.getValueType(), bo.getValueType())
&& plan.getPlanMonth() != null
&& bo.getMonth() != null
&& plan.getPlanMonth().compareTo(bo.getMonth()) <= 0)
.toList();
vo.setMonthEstimatedValue(matchedPlan == null? BigDecimal.ZERO :matchedPlan.getPlanValue());
if("1".equals(bo.getValueType())){
vo.setMonthCompletionValue(matchedPlan == null? BigDecimal.ZERO :matchedPlan.getCompleteValue());
// 计算累计完成值
BigDecimal accumulatedCompleteValue = matchedPlans.stream()
.map(OutMonthPlan::getCompleteValue)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setAccumulatedCompletionValue(accumulatedCompleteValue);
}else if("2".equals(bo.getValueType())){
//todo: 掉罗成的接口
vo.setMonthCompletionValue(BigDecimal.ZERO);
vo.setAccumulatedCompletionValue(BigDecimal.ZERO);
}
vo.setValueDifference(vo.getMonthCompletionValue().subtract(vo.getMonthEstimatedValue()));
vo.setProjectCompletionRate(BigDecimalUtil.toPercentage(vo.getAccumulatedCompletionValue(), totalValue));
vos.add(vo);
}
TableDataInfo<OutDesignAndPurchaseValueVo> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setMsg("查询成功");
rspData.setRows(vos);
rspData.setTotal(busProjectVoTableDataInfo.getTotal());
return TableDataInfo.build();
}
} }

View File

@ -0,0 +1,105 @@
package org.dromara.out.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.out.domain.vo.OutValueAllocationVo;
import org.dromara.out.domain.bo.OutValueAllocationBo;
import org.dromara.out.service.IOutValueAllocationService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 项目总产值分配
*
* @author Lion Li
* @date 2025-08-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/out/valueAllocation")
public class OutValueAllocationController extends BaseController {
private final IOutValueAllocationService outValueAllocationService;
/**
* 查询项目总产值分配列表
*/
@SaCheckPermission("out:valueAllocation:list")
@GetMapping("/list")
public TableDataInfo<OutValueAllocationVo> list(OutValueAllocationBo bo, PageQuery pageQuery) {
return outValueAllocationService.queryPageList(bo, pageQuery);
}
/**
* 导出项目总产值分配列表
*/
@SaCheckPermission("out:valueAllocation:export")
@Log(title = "项目总产值分配", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(OutValueAllocationBo bo, HttpServletResponse response) {
List<OutValueAllocationVo> list = outValueAllocationService.queryList(bo);
ExcelUtil.exportExcel(list, "项目总产值分配", OutValueAllocationVo.class, response);
}
/**
* 获取项目总产值分配详细信息
*
* @param id 主键
*/
@SaCheckPermission("out:valueAllocation:query")
@GetMapping("/{id}")
public R<OutValueAllocationVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(outValueAllocationService.queryById(id));
}
/**
* 新增项目总产值分配
*/
@SaCheckPermission("out:valueAllocation:add")
@Log(title = "项目总产值分配", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody OutValueAllocationBo bo) {
return toAjax(outValueAllocationService.insertByBo(bo));
}
/**
* 修改项目总产值分配
*/
@SaCheckPermission("out:valueAllocation:edit")
@Log(title = "项目总产值分配", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OutValueAllocationBo bo) {
return toAjax(outValueAllocationService.updateByBo(bo));
}
/**
* 删除项目总产值分配
*
* @param ids 主键串
*/
@SaCheckPermission("out:valueAllocation:remove")
@Log(title = "项目总产值分配", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(outValueAllocationService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,77 @@
package org.dromara.out.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;
/**
* 项目总产值分配对象 out_value_allocation
*
* @author Lion Li
* @date 2025-08-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("out_value_allocation")
public class OutValueAllocation extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 对甲设计产值
*/
private BigDecimal ownerDesignValue;
/**
* 对甲采购产值
*/
private BigDecimal ownerPurchaseValue;
/**
* 对甲施工产值
*/
private BigDecimal ownerConstructionValue;
/**
* 对甲总产值
*/
private BigDecimal ownerTotalValue;
/**
* 对乙设计产值
*/
private BigDecimal subDesignValue;
/**
* 对乙采购产值
*/
private BigDecimal subPurchaseValue;
/**
* 对乙施工产值
*/
private BigDecimal subConstructionValue;
/**
* 对乙总产值
*/
private BigDecimal subTotalValue;
}

View File

@ -8,7 +8,13 @@ import org.dromara.common.core.validate.EditGroup;
@Data @Data
public class OutTableBo { public class OutTableBo {
@NotBlank(message = "月份YYYY-MM不能为空") /**
private String month; * 1-设计 2-采购 3-施工
*/
private String valueType;
/**
* 月份
*/
private String month;
} }

View File

@ -0,0 +1,85 @@
package org.dromara.out.domain.bo;
import org.dromara.out.domain.OutValueAllocation;
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;
/**
* 项目总产值分配业务对象 out_value_allocation
*
* @author Lion Li
* @date 2025-08-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OutValueAllocation.class, reverseConvertGenerate = false)
public class OutValueAllocationBo 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 BigDecimal ownerDesignValue;
/**
* 对甲采购产值
*/
@NotNull(message = "对甲采购产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal ownerPurchaseValue;
/**
* 对甲施工产值
*/
@NotNull(message = "对甲施工产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal ownerConstructionValue;
/**
* 对甲总产值
*/
@NotNull(message = "对甲总产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal ownerTotalValue;
/**
* 对乙设计产值
*/
@NotNull(message = "对乙设计产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal subDesignValue;
/**
* 对乙采购产值
*/
@NotNull(message = "对乙采购产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal subPurchaseValue;
/**
* 对乙施工产值
*/
@NotNull(message = "对乙施工产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal subConstructionValue;
/**
* 对乙总产值
*/
@NotNull(message = "对乙总产值不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal subTotalValue;
}

View File

@ -24,23 +24,23 @@ public class OutComparisonOfCompletionAndSettlementVo {
* 累计完工产值 * 累计完工产值
*/ */
@ExcelProperty(value = "累计完工产值") @ExcelProperty(value = "累计完工产值")
private BigDecimal totalCompletionOutputValue; private BigDecimal totalCompletionOutputValue= BigDecimal.ZERO;
/** /**
* 累计结算产值 * 累计结算产值
*/ */
@ExcelProperty(value = "累计结算产值") @ExcelProperty(value = "累计结算产值")
private BigDecimal totalSettlementOutputValue; private BigDecimal totalSettlementOutputValue= BigDecimal.ZERO;
/** /**
* 完工未结算额 * 完工未结算额
*/ */
@ExcelProperty(value = "完工未结算额") @ExcelProperty(value = "完工未结算额")
private BigDecimal completionUnsettledAmount; private BigDecimal completionUnsettledAmount= BigDecimal.ZERO;
/** /**
* 完工未结算比例 * 完工未结算比例
*/ */
@ExcelProperty(value = "完工未结算比例") @ExcelProperty(value = "完工未结算比例")
private BigDecimal completionUnsettledRatio; private BigDecimal completionUnsettledRatio= BigDecimal.ZERO;
} }

View File

@ -24,24 +24,24 @@ public class OutComparisonOfOwnerAndSubVo {
* 累计完工产值 * 累计完工产值
*/ */
@ExcelProperty(value = "累计完工产值") @ExcelProperty(value = "累计完工产值")
private BigDecimal totalCompletionOutputValue; private BigDecimal totalCompletionOutputValue= BigDecimal.ZERO;
/** /**
* 分包累计结算产值 * 分包累计结算产值
*/ */
@ExcelProperty(value = "分包累计结算产值") @ExcelProperty(value = "分包累计结算产值")
private BigDecimal subTotalSettlementOutputValue; private BigDecimal subTotalSettlementOutputValue= BigDecimal.ZERO;
/** /**
* 业主累计结算产值 * 业主累计结算产值
*/ */
@ExcelProperty(value = "业主累计结算产值") @ExcelProperty(value = "业主累计结算产值")
private BigDecimal ownerTotalSettlementOutputValue; private BigDecimal ownerTotalSettlementOutputValue= BigDecimal.ZERO;
/** /**
* 差额 * 差额
*/ */
@ExcelProperty(value = "差额") @ExcelProperty(value = "差额")
private BigDecimal differenceValue; private BigDecimal differenceValue= BigDecimal.ZERO;
} }

View File

@ -154,7 +154,7 @@ public class OutConstructionValueVo implements Serializable {
/** /**
* 上报人 * 上报人
*/ */
@ExcelProperty(value = "审核状态") @ExcelProperty(value = "上报人")
@Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
private String createByName; private String createByName;

View File

@ -0,0 +1,57 @@
package org.dromara.out.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OutDesignAndPurchaseValueVo {
/**
* 项目id
*/
private Long projectId;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 月预计产值
*/
@ExcelProperty(value = "月预计产值")
private BigDecimal monthEstimatedValue = BigDecimal.ZERO;
/**
* 月完成产值
*/
@ExcelProperty(value = "月完成产值")
private BigDecimal monthCompletionValue= BigDecimal.ZERO;
/**
* 产值差额
*/
@ExcelProperty(value = "产值差额")
private BigDecimal valueDifference= BigDecimal.ZERO;
/**
* 项目总产值
*/
@ExcelProperty(value = "项目总产值")
private BigDecimal totalValue= BigDecimal.ZERO;
/**
* 累计完成产值
*/
@ExcelProperty(value = "累计完成产值")
private BigDecimal accumulatedCompletionValue= BigDecimal.ZERO;
/**
* 项目完成率
*/
@ExcelProperty(value = "项目完成率")
private BigDecimal projectCompletionRate= BigDecimal.ZERO;
}

View File

@ -21,79 +21,79 @@ public class OutMonthlyConstructionVo {
* 总产值(万元) * 总产值(万元)
*/ */
@ExcelProperty(value = "总产值(万元)") @ExcelProperty(value = "总产值(万元)")
private BigDecimal totalValue; private BigDecimal totalValue= BigDecimal.ZERO;
/** /**
* 月预计产值(万元) * 月预计产值(万元)
*/ */
@ExcelProperty(value = "月预计产值(万元)") @ExcelProperty(value = "月预计产值(万元)")
private BigDecimal monthlyEstimatedValue; private BigDecimal monthlyEstimatedValue= BigDecimal.ZERO;
/** /**
* 第一周完成产值(万元) * 第一周完成产值(万元)
*/ */
@ExcelProperty(value = "第一周完成产值(万元)") @ExcelProperty(value = "第一周完成产值(万元)")
private BigDecimal firstWeekCompletionValue; private BigDecimal firstWeekCompletionValue= BigDecimal.ZERO;
/** /**
* 第二周完成产值(万元) * 第二周完成产值(万元)
*/ */
@ExcelProperty(value = "第二周完成产值(万元)") @ExcelProperty(value = "第二周完成产值(万元)")
private BigDecimal secondWeekCompletionValue; private BigDecimal secondWeekCompletionValue= BigDecimal.ZERO;
/** /**
* 第三周完成产值(万元) * 第三周完成产值(万元)
*/ */
@ExcelProperty(value = "第三周完成产值(万元)") @ExcelProperty(value = "第三周完成产值(万元)")
private BigDecimal thirdWeekCompletionValue; private BigDecimal thirdWeekCompletionValue= BigDecimal.ZERO;
/** /**
* 第四周完成产值(万元) * 第四周完成产值(万元)
*/ */
@ExcelProperty(value = "第四周完成产值(万元)") @ExcelProperty(value = "第四周完成产值(万元)")
private BigDecimal fourthWeekCompletionValue; private BigDecimal fourthWeekCompletionValue= BigDecimal.ZERO;
/** /**
* 第五周完成产值(万元) * 第五周完成产值(万元)
*/ */
@ExcelProperty(value = "第五周完成产值(万元)") @ExcelProperty(value = "第五周完成产值(万元)")
private BigDecimal fifthWeekCompletionValue; private BigDecimal fifthWeekCompletionValue= BigDecimal.ZERO;
/** /**
* 完成产值月合计(万元) * 完成产值月合计(万元)
*/ */
@ExcelProperty(value = "完成产值月合计(万元)") @ExcelProperty(value = "完成产值月合计(万元)")
private BigDecimal totalCompletionValue; private BigDecimal totalCompletionValue= BigDecimal.ZERO;
/** /**
* 产值差额(万元) * 产值差额(万元)
*/ */
@ExcelProperty(value = "产值差额(万元)") @ExcelProperty(value = "产值差额(万元)")
private BigDecimal valueDifference; private BigDecimal valueDifference= BigDecimal.ZERO;
/** /**
* 预计累计产值(万元) * 预计累计产值(万元)
*/ */
@ExcelProperty(value = "预计累计产值(万元)") @ExcelProperty(value = "预计累计产值(万元)")
private BigDecimal estimatedAccumulatedValue; private BigDecimal estimatedAccumulatedValue= BigDecimal.ZERO;
/** /**
* 累计完成产值(万元) * 累计完成产值(万元)
*/ */
@ExcelProperty(value = "累计完成产值(万元)") @ExcelProperty(value = "累计完成产值(万元)")
private BigDecimal accumulatedCompletionValue; private BigDecimal accumulatedCompletionValue= BigDecimal.ZERO;
/** /**
* 产值差额累计(万元) * 产值差额累计(万元)
*/ */
@ExcelProperty(value = "产值差额累计(万元)") @ExcelProperty(value = "产值差额累计(万元)")
private BigDecimal valueDifferenceAccumulation; private BigDecimal valueDifferenceAccumulation= BigDecimal.ZERO;
/** /**
* 项目完成总进度(百分比)% * 项目完成总进度(百分比)%
*/ */
@ExcelProperty(value = "项目完成总进度(百分比)%") @ExcelProperty(value = "项目完成总进度(百分比)%")
private BigDecimal totalCompletionProgress; private BigDecimal totalCompletionProgress= BigDecimal.ZERO;
} }

View File

@ -1,6 +1,9 @@
package org.dromara.out.domain.vo; package org.dromara.out.domain.vo;
import java.math.BigDecimal; import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.out.domain.OutSettlementValueOwner; import org.dromara.out.domain.OutSettlementValueOwner;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
@ -67,4 +70,21 @@ public class OutSettlementValueOwnerVo implements Serializable {
private LocalDate settlementDate; private LocalDate settlementDate;
/**
* 上报人Id
*/
private Long createBy;
/**
* 填报人
*/
@ExcelProperty(value = "填报人")
@Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
private String createByName;
/**
* 填报时间
*/
@ExcelProperty(value = "填报时间")
private Date createTime;
} }

View File

@ -1,6 +1,9 @@
package org.dromara.out.domain.vo; package org.dromara.out.domain.vo;
import java.math.BigDecimal; import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.out.domain.OutSettlementValueSubcontract; import org.dromara.out.domain.OutSettlementValueSubcontract;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
@ -116,5 +119,21 @@ public class OutSettlementValueSubcontractVo implements Serializable {
@ExcelProperty(value = "合同地址") @ExcelProperty(value = "合同地址")
private String contractUrl; private String contractUrl;
/**
* 上报人Id
*/
private Long createBy;
/**
* 填报人
*/
@ExcelProperty(value = "填报人")
@Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
private String createByName;
/**
* 填报时间
*/
@ExcelProperty(value = "填报时间")
private Date createTime;
} }

View File

@ -0,0 +1,93 @@
package org.dromara.out.domain.vo;
import java.math.BigDecimal;
import org.dromara.out.domain.OutValueAllocation;
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;
/**
* 项目总产值分配视图对象 out_value_allocation
*
* @author Lion Li
* @date 2025-08-02
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OutValueAllocation.class)
public class OutValueAllocationVo 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 BigDecimal ownerDesignValue;
/**
* 对甲采购产值
*/
@ExcelProperty(value = "对甲采购产值")
private BigDecimal ownerPurchaseValue;
/**
* 对甲施工产值
*/
@ExcelProperty(value = "对甲施工产值")
private BigDecimal ownerConstructionValue;
/**
* 对甲总产值
*/
@ExcelProperty(value = "对甲总产值")
private BigDecimal ownerTotalValue;
/**
* 对乙设计产值
*/
@ExcelProperty(value = "对乙设计产值")
private BigDecimal subDesignValue;
/**
* 对乙采购产值
*/
@ExcelProperty(value = "对乙采购产值")
private BigDecimal subPurchaseValue;
/**
* 对乙施工产值
*/
@ExcelProperty(value = "对乙施工产值")
private BigDecimal subConstructionValue;
/**
* 对乙总产值
*/
@ExcelProperty(value = "对乙总产值")
private BigDecimal subTotalValue;
}

View File

@ -17,7 +17,14 @@ import java.math.BigDecimal;
public interface OutConstructionValueMapper extends BaseMapperPlus<OutConstructionValue, OutConstructionValueVo> { public interface OutConstructionValueMapper extends BaseMapperPlus<OutConstructionValue, OutConstructionValueVo> {
@Select("select sum(out_value) from out_construction_value where project_id = #{projectId} and audit_status = 'finish' ") @Select({
BigDecimal getCompleteValue( @Param("projectId") Long projectId); "<script>",
"select sum(out_value) from out_construction_value where project_id = #{projectId} and audit_status = 'finish'",
"<if test='month != null and month != \"\"'>",
"and DATE_FORMAT(report_date, '%Y-%m') = #{month}",
"</if>",
"</script>"
})
BigDecimal getCompleteValue( @Param("projectId") Long projectId,@Param("month")String month);
} }

View File

@ -16,6 +16,13 @@ import java.math.BigDecimal;
*/ */
public interface OutMonthPlanMapper extends BaseMapperPlus<OutMonthPlan, OutMonthPlanVo> { public interface OutMonthPlanMapper extends BaseMapperPlus<OutMonthPlan, OutMonthPlanVo> {
@Select("select sum(complete_value) from out_month_plan where value_type = 1 and complete_audit_status = 'finish' and project_id = #{projectId}") @Select({
BigDecimal getDesignValueByProjectId(@Param("projectId") Long projectId); "<script>",
"select sum(complete_value) from out_month_plan where value_type = 1 and complete_audit_status = 'finish' and project_id = #{projectId}",
"<if test='planMonth != null and planMonth != \"\"'>",
"and plan_month = #{planMonth}",
"</if>",
"</script>"
})
BigDecimal getDesignValueByProjectId(@Param("projectId") Long projectId,@Param("planMonth") String planMonth);
} }

View File

@ -17,6 +17,13 @@ import java.math.BigDecimal;
public interface OutSettlementValueOwnerMapper extends BaseMapperPlus<OutSettlementValueOwner, OutSettlementValueOwnerVo> { public interface OutSettlementValueOwnerMapper extends BaseMapperPlus<OutSettlementValueOwner, OutSettlementValueOwnerVo> {
@Select("select sum(settlement_value) from out_settlement_value_owner where project_id = #{projectId}") @Select({
BigDecimal getValueByProjectId(@Param("projectId") Long projectId); "<script>",
"select sum(settlement_value) from out_settlement_value_owner where project_id = #{projectId}",
"<if test='month != null and month != \"\"'>",
"and DATE_FORMAT(settlement_date, '%Y-%m') = #{month}",
"</if>",
"</script>"
})
BigDecimal getValueByProjectId(@Param("projectId") Long projectId, @Param("month") String month);
} }

View File

@ -17,6 +17,16 @@ import java.math.BigDecimal;
public interface OutSettlementValueSubcontractMapper extends BaseMapperPlus<OutSettlementValueSubcontract, OutSettlementValueSubcontractVo> { public interface OutSettlementValueSubcontractMapper extends BaseMapperPlus<OutSettlementValueSubcontract, OutSettlementValueSubcontractVo> {
@Select("select sum(settlement_value) from out_settlement_value_subcontract where project_id = #{projectId} ") @Select({
BigDecimal getValueByProjectId(@Param("projectId") Long projectId); "<script>",
"select sum(settlement_value) from out_settlement_value_subcontract where project_id = #{projectId}",
"<if test='valueType != null and valueType != \"\"'>",
"and value_type = #{valueType}",
"</if>",
"<if test='month != null and month != \"\"'>",
"and settlement_month = #{month}",
"</if>",
"</script>"
})
BigDecimal getValueByProjectId(@Param("projectId") Long projectId, @Param("valueType") String valueType,@Param("month")String month);
} }

View File

@ -0,0 +1,15 @@
package org.dromara.out.mapper;
import org.dromara.out.domain.OutValueAllocation;
import org.dromara.out.domain.vo.OutValueAllocationVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 项目总产值分配Mapper接口
*
* @author Lion Li
* @date 2025-08-02
*/
public interface OutValueAllocationMapper extends BaseMapperPlus<OutValueAllocation, OutValueAllocationVo> {
}

View File

@ -77,5 +77,5 @@ public interface IOutConstructionValueService extends IService<OutConstructionVa
* @param projectId 项目id * @param projectId 项目id
* @return 项目施工完成值 * @return 项目施工完成值
*/ */
BigDecimal getCompleteValue(Long projectId); BigDecimal getCompleteValue(Long projectId,String month);
} }

View File

@ -87,6 +87,6 @@ public interface IOutMonthPlanService extends IService<OutMonthPlan>{
/** /**
* 根据项目id查询项目已完工的设计产值 * 根据项目id查询项目已完工的设计产值
*/ */
BigDecimal getDesignValueByProjectId(Long projectId); BigDecimal getDesignValueByProjectId(Long projectId,String month);
} }

View File

@ -74,5 +74,5 @@ public interface IOutSettlementValueOwnerService extends IService<OutSettlementV
/** /**
* 根据项目id获取项目结算产值 * 根据项目id获取项目结算产值
*/ */
BigDecimal getValueByProjectId(Long projectId); BigDecimal getValueByProjectId(Long projectId,String month);
} }

View File

@ -73,5 +73,5 @@ public interface IOutSettlementValueSubcontractService extends IService<OutSettl
/** /**
* 根据项目id获取项目结算产值 * 根据项目id获取项目结算产值
*/ */
BigDecimal getValueByProjectId(Long projectId); BigDecimal getValueByProjectId(Long projectId,String valueType,String month);
} }

View File

@ -0,0 +1,70 @@
package org.dromara.out.service;
import org.dromara.out.domain.vo.OutValueAllocationVo;
import org.dromara.out.domain.bo.OutValueAllocationBo;
import org.dromara.out.domain.OutValueAllocation;
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 Lion Li
* @date 2025-08-02
*/
public interface IOutValueAllocationService extends IService<OutValueAllocation>{
/**
* 查询项目总产值分配
*
* @param id 主键
* @return 项目总产值分配
*/
OutValueAllocationVo queryById(Long id);
/**
* 分页查询项目总产值分配列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 项目总产值分配分页列表
*/
TableDataInfo<OutValueAllocationVo> queryPageList(OutValueAllocationBo bo, PageQuery pageQuery);
/**
* 查询符合条件的项目总产值分配列表
*
* @param bo 查询条件
* @return 项目总产值分配列表
*/
List<OutValueAllocationVo> queryList(OutValueAllocationBo bo);
/**
* 新增项目总产值分配
*
* @param bo 项目总产值分配
* @return 是否新增成功
*/
Boolean insertByBo(OutValueAllocationBo bo);
/**
* 修改项目总产值分配
*
* @param bo 项目总产值分配
* @return 是否修改成功
*/
Boolean updateByBo(OutValueAllocationBo bo);
/**
* 校验并批量删除项目总产值分配信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -174,8 +174,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
} }
@Override @Override
public BigDecimal getCompleteValue(Long projectId) { public BigDecimal getCompleteValue(Long projectId, String month) {
return baseMapper.getCompleteValue(projectId); return baseMapper.getCompleteValue(projectId,month);
} }
/** /**

View File

@ -192,8 +192,8 @@ public class OutMonthPlanServiceImpl extends ServiceImpl<OutMonthPlanMapper, Out
@Override @Override
public BigDecimal getDesignValueByProjectId(Long projectId) { public BigDecimal getDesignValueByProjectId(Long projectId,String month) {
return baseMapper.getDesignValueByProjectId(projectId); return baseMapper.getDesignValueByProjectId(projectId,month);
} }
/** /**

View File

@ -134,7 +134,7 @@ public class OutSettlementValueOwnerServiceImpl extends ServiceImpl<OutSettlemen
} }
@Override @Override
public BigDecimal getValueByProjectId(Long projectId) { public BigDecimal getValueByProjectId(Long projectId,String month) {
return baseMapper.getValueByProjectId(projectId); return baseMapper.getValueByProjectId(projectId,month);
} }
} }

View File

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.contractor.service.ISubContractorService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.out.domain.bo.OutSettlementValueSubcontractBo; import org.dromara.out.domain.bo.OutSettlementValueSubcontractBo;
import org.dromara.out.domain.vo.OutSettlementValueSubcontractVo; import org.dromara.out.domain.vo.OutSettlementValueSubcontractVo;
@ -33,6 +34,8 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl<OutSet
private final OutSettlementValueSubcontractMapper baseMapper; private final OutSettlementValueSubcontractMapper baseMapper;
private final ISubContractorService contractorService;
/** /**
* 查询结算产值登记(对乙) * 查询结算产值登记(对乙)
* *
@ -55,6 +58,9 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl<OutSet
public TableDataInfo<OutSettlementValueSubcontractVo> queryPageList(OutSettlementValueSubcontractBo bo, PageQuery pageQuery) { public TableDataInfo<OutSettlementValueSubcontractVo> queryPageList(OutSettlementValueSubcontractBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OutSettlementValueSubcontract> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<OutSettlementValueSubcontract> lqw = buildQueryWrapper(bo);
Page<OutSettlementValueSubcontractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<OutSettlementValueSubcontractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(e -> {
e.setContractorName(contractorService.queryById(e.getContractorId()).getName());
});
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@ -141,7 +147,7 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl<OutSet
} }
@Override @Override
public BigDecimal getValueByProjectId(Long projectId) { public BigDecimal getValueByProjectId(Long projectId,String valueType,String month) {
return baseMapper.getValueByProjectId(projectId); return baseMapper.getValueByProjectId(projectId, valueType,month);
} }
} }

View File

@ -0,0 +1,139 @@
package org.dromara.out.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.out.domain.bo.OutValueAllocationBo;
import org.dromara.out.domain.vo.OutValueAllocationVo;
import org.dromara.out.domain.OutValueAllocation;
import org.dromara.out.mapper.OutValueAllocationMapper;
import org.dromara.out.service.IOutValueAllocationService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 项目总产值分配Service业务层处理
*
* @author Lion Li
* @date 2025-08-02
*/
@RequiredArgsConstructor
@Service
public class OutValueAllocationServiceImpl extends ServiceImpl<OutValueAllocationMapper, OutValueAllocation> implements IOutValueAllocationService {
private final OutValueAllocationMapper baseMapper;
/**
* 查询项目总产值分配
*
* @param id 主键
* @return 项目总产值分配
*/
@Override
public OutValueAllocationVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询项目总产值分配列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 项目总产值分配分页列表
*/
@Override
public TableDataInfo<OutValueAllocationVo> queryPageList(OutValueAllocationBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OutValueAllocation> lqw = buildQueryWrapper(bo);
Page<OutValueAllocationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的项目总产值分配列表
*
* @param bo 查询条件
* @return 项目总产值分配列表
*/
@Override
public List<OutValueAllocationVo> queryList(OutValueAllocationBo bo) {
LambdaQueryWrapper<OutValueAllocation> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OutValueAllocation> buildQueryWrapper(OutValueAllocationBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OutValueAllocation> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OutValueAllocation::getId);
lqw.eq(bo.getProjectId() != null, OutValueAllocation::getProjectId, bo.getProjectId());
lqw.eq(bo.getOwnerDesignValue() != null, OutValueAllocation::getOwnerDesignValue, bo.getOwnerDesignValue());
lqw.eq(bo.getOwnerPurchaseValue() != null, OutValueAllocation::getOwnerPurchaseValue, bo.getOwnerPurchaseValue());
lqw.eq(bo.getOwnerConstructionValue() != null, OutValueAllocation::getOwnerConstructionValue, bo.getOwnerConstructionValue());
lqw.eq(bo.getOwnerTotalValue() != null, OutValueAllocation::getOwnerTotalValue, bo.getOwnerTotalValue());
lqw.eq(bo.getSubDesignValue() != null, OutValueAllocation::getSubDesignValue, bo.getSubDesignValue());
lqw.eq(bo.getSubPurchaseValue() != null, OutValueAllocation::getSubPurchaseValue, bo.getSubPurchaseValue());
lqw.eq(bo.getSubConstructionValue() != null, OutValueAllocation::getSubConstructionValue, bo.getSubConstructionValue());
lqw.eq(bo.getSubTotalValue() != null, OutValueAllocation::getSubTotalValue, bo.getSubTotalValue());
return lqw;
}
/**
* 新增项目总产值分配
*
* @param bo 项目总产值分配
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OutValueAllocationBo bo) {
OutValueAllocation add = MapstructUtils.convert(bo, OutValueAllocation.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改项目总产值分配
*
* @param bo 项目总产值分配
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OutValueAllocationBo bo) {
OutValueAllocation update = MapstructUtils.convert(bo, OutValueAllocation.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OutValueAllocation entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除项目总产值分配信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.out.mapper.OutValueAllocationMapper">
</mapper>