产值
This commit is contained in:
@ -255,6 +255,8 @@ springdoc:
|
||||
packages-to-scan: org.dromara.generator
|
||||
- group: 16.app模块
|
||||
packages-to-scan: org.dromara.app
|
||||
- group: 17.产值模块
|
||||
packages-to-scan: org.dromara.out
|
||||
# knife4j的增强配置,不需要增强可以不配
|
||||
knife4j:
|
||||
enable: true
|
||||
|
@ -148,6 +148,23 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将指定格式的日期时间字符串转换为 LocalDate 对象
|
||||
*
|
||||
* @param format 要解析的日期时间格式,例如"YYYY-MM-DD HH:MM:SS"
|
||||
* @param ts 要解析的日期时间字符串
|
||||
* @return 解析后的 Date 对象
|
||||
* @throws RuntimeException 如果解析过程中发生异常
|
||||
*/
|
||||
public static LocalDate parseLocalDateTime(final FormatsType format, final String ts) {
|
||||
try {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format.getTimeFormat());
|
||||
return LocalDate.parse(ts, formatter);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将对象转换为日期对象
|
||||
*
|
||||
@ -254,6 +271,16 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
return Date.from(zdt.toInstant());
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Date 对象转换为 LocalDate 对象
|
||||
*
|
||||
* @param temporalAccessor 要转换的 Date 对象
|
||||
* @return 转换后的 LocalDate 对象
|
||||
*/
|
||||
public static LocalDate toLocalDate(Date temporalAccessor) {
|
||||
return temporalAccessor.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验日期范围
|
||||
*
|
||||
|
@ -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.OutConstructionValueVo;
|
||||
import org.dromara.out.domain.bo.OutConstructionValueBo;
|
||||
import org.dromara.out.service.IOutConstructionValueService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 施工产值
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-30
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/out/constructionValue")
|
||||
public class OutConstructionValueController extends BaseController {
|
||||
|
||||
private final IOutConstructionValueService outConstructionValueService;
|
||||
|
||||
/**
|
||||
* 查询施工产值列表
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OutConstructionValueVo> list(OutConstructionValueBo bo, PageQuery pageQuery) {
|
||||
return outConstructionValueService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出施工产值列表
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:export")
|
||||
@Log(title = "施工产值", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OutConstructionValueBo bo, HttpServletResponse response) {
|
||||
List<OutConstructionValueVo> list = outConstructionValueService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "施工产值", OutConstructionValueVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取施工产值详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OutConstructionValueVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(outConstructionValueService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增施工产值
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:add")
|
||||
@Log(title = "施工产值", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OutConstructionValueBo bo) {
|
||||
return toAjax(outConstructionValueService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改施工产值
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:edit")
|
||||
@Log(title = "施工产值", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OutConstructionValueBo bo) {
|
||||
return toAjax(outConstructionValueService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除施工产值
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:remove")
|
||||
@Log(title = "施工产值", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(outConstructionValueService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
@ -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.OutMonthPlanAuditVo;
|
||||
import org.dromara.out.domain.bo.OutMonthPlanAuditBo;
|
||||
import org.dromara.out.service.IOutMonthPlanAuditService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 审核通过月度产值计划
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/out/monthPlanAudit")
|
||||
public class OutMonthPlanAuditController extends BaseController {
|
||||
|
||||
private final IOutMonthPlanAuditService outMonthPlanAuditService;
|
||||
|
||||
/**
|
||||
* 查询审核通过月度产值计划列表
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlanAudit:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OutMonthPlanAuditVo> list(OutMonthPlanAuditBo bo, PageQuery pageQuery) {
|
||||
return outMonthPlanAuditService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出审核通过月度产值计划列表
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlanAudit:export")
|
||||
@Log(title = "审核通过月度产值计划", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OutMonthPlanAuditBo bo, HttpServletResponse response) {
|
||||
List<OutMonthPlanAuditVo> list = outMonthPlanAuditService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "审核通过月度产值计划", OutMonthPlanAuditVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取审核通过月度产值计划详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlanAudit:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OutMonthPlanAuditVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(outMonthPlanAuditService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增审核通过月度产值计划
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlanAudit:add")
|
||||
@Log(title = "审核通过月度产值计划", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OutMonthPlanAuditBo bo) {
|
||||
return toAjax(outMonthPlanAuditService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改审核通过月度产值计划
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlanAudit:edit")
|
||||
@Log(title = "审核通过月度产值计划", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OutMonthPlanAuditBo bo) {
|
||||
return toAjax(outMonthPlanAuditService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除审核通过月度产值计划
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlanAudit:remove")
|
||||
@Log(title = "审核通过月度产值计划", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(outMonthPlanAuditService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
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.OutMonthPlanVo;
|
||||
import org.dromara.out.domain.bo.OutMonthPlanBo;
|
||||
import org.dromara.out.service.IOutMonthPlanService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 月度产值计划
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/out/monthPlan")
|
||||
public class OutMonthPlanController extends BaseController {
|
||||
|
||||
private final IOutMonthPlanService outMonthPlanService;
|
||||
|
||||
/**
|
||||
* 查询月度产值计划列表
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OutMonthPlanVo> list(OutMonthPlanBo bo, PageQuery pageQuery) {
|
||||
return outMonthPlanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出月度产值计划列表
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:export")
|
||||
@Log(title = "月度产值计划", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OutMonthPlanBo bo, HttpServletResponse response) {
|
||||
List<OutMonthPlanVo> list = outMonthPlanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "月度产值计划", OutMonthPlanVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取月度产值计划详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OutMonthPlanVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(outMonthPlanService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据项目id和月份和类型获取月度产值计划详细信息
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:query")
|
||||
@GetMapping("/info")
|
||||
public R<OutMonthPlanVo> getInfoByBo(OutMonthPlanBo bo) {
|
||||
return R.ok(outMonthPlanService.getInfoByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增月度产值计划
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:add")
|
||||
@Log(title = "月度产值计划", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OutMonthPlanBo bo) {
|
||||
return toAjax(outMonthPlanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改月度产值计划
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:edit")
|
||||
@Log(title = "月度产值计划", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OutMonthPlanBo bo) {
|
||||
return toAjax(outMonthPlanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除月度产值计划
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:remove")
|
||||
@Log(title = "月度产值计划", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(outMonthPlanService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断月度产值计划是否可以提交
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("out:monthPlan:query")
|
||||
@GetMapping("/isSubmit/{id}")
|
||||
public R<Boolean> isSubmit(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(outMonthPlanService.isSubmit(id));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,230 @@
|
||||
package org.dromara.out.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.enums.FormatsType;
|
||||
import org.dromara.common.core.utils.DateUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.utils.BigDecimalUtil;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.out.domain.OutConstructionValue;
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
import org.dromara.out.domain.bo.OutTableBo;
|
||||
import org.dromara.out.domain.vo.OutMonthlyConstructionVo;
|
||||
import org.dromara.out.service.IOutConstructionValueService;
|
||||
import org.dromara.out.service.IOutMonthPlanAuditService;
|
||||
import org.dromara.progress.domain.PgsProgressCategory;
|
||||
import org.dromara.progress.domain.PgsProgressPlanDetail;
|
||||
import org.dromara.progress.service.IPgsProgressCategoryService;
|
||||
import org.dromara.progress.service.IPgsProgressPlanDetailService;
|
||||
import org.dromara.project.domain.BusProject;
|
||||
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 java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 月度产值计划
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-30
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/out/table")
|
||||
public class OutTableController extends BaseController {
|
||||
|
||||
private final IOutConstructionValueService constructionValueService;
|
||||
|
||||
private final IBusProjectService projectService;
|
||||
|
||||
private final IPgsProgressPlanDetailService progressPlanDetailService;
|
||||
|
||||
private final IPgsProgressCategoryService progressCategoryService;
|
||||
|
||||
private final IOutMonthPlanAuditService outMonthPlanAuditService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询公司项目月度施工产值表
|
||||
*/
|
||||
@SaCheckPermission("out:table:list")
|
||||
@GetMapping("/monthlyConstruct")
|
||||
public TableDataInfo<OutMonthlyConstructionVo> list(OutTableBo bo, PageQuery pageQuery) {
|
||||
|
||||
//分页查询所有父项目
|
||||
BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq();
|
||||
busProjectQueryReq.setPId(0L);
|
||||
TableDataInfo<BusProjectVo> busProjectVoTableDataInfo = projectService.queryPageList(busProjectQueryReq, pageQuery);
|
||||
List<BusProjectVo> rows = busProjectVoTableDataInfo.getRows();
|
||||
List<Long> projectIds = rows.stream().map(BusProjectVo::getId).toList();
|
||||
|
||||
//查询每个进度(分项工程)的单价和总量
|
||||
List<PgsProgressCategory> pgsProgressCategories = progressCategoryService.queryListByProjectIds(projectIds);
|
||||
//转为map
|
||||
// Map<Long, PgsProgressCategory> pgsProgressCategoryMap = pgsProgressCategories.stream()
|
||||
// .collect(Collectors.toMap(PgsProgressCategory::getId, category -> category));
|
||||
|
||||
//查询项目的施工计划产值
|
||||
List<OutMonthPlanAudit> outMonthPlanAudits = outMonthPlanAuditService.queryListByProjectIds(projectIds);
|
||||
|
||||
|
||||
//计算日期
|
||||
LocalDate parsedDate = DateUtils.parseLocalDateTime(FormatsType.YYYY_MM, bo.getMonth());
|
||||
// 当前月的第一天
|
||||
LocalDate firstDay = parsedDate.with(TemporalAdjusters.firstDayOfMonth());
|
||||
// 当前月的最后一天
|
||||
LocalDate lastDay = parsedDate.with(TemporalAdjusters.lastDayOfMonth());
|
||||
// 方法1: 使用 YearMonth 进行比较(推荐)
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
||||
|
||||
YearMonth month = YearMonth.parse(bo.getMonth(), formatter);
|
||||
|
||||
//构建返回数据
|
||||
List<OutMonthlyConstructionVo> outMonthlyConstructionVos = new ArrayList<>();
|
||||
BigDecimal parseUnit = new BigDecimal("10000");
|
||||
|
||||
for (BusProjectVo busProjectVo : rows){
|
||||
OutMonthlyConstructionVo vo = new OutMonthlyConstructionVo();
|
||||
vo.setProjectName(busProjectVo.getProjectName());
|
||||
|
||||
//1.总产值的计算 2.预计累计产值(截止当前月) 3.月预计产值
|
||||
List<BusProject> subProjects = projectService.lambdaQuery().eq(BusProject::getPId, busProjectVo.getId()).list();
|
||||
List<Long> subProjectIds = subProjects.stream().map(BusProject::getId).toList();
|
||||
|
||||
//所有分项工程
|
||||
List<PgsProgressCategory> collect = pgsProgressCategories.stream()
|
||||
.filter(category -> subProjectIds.contains(category.getProjectId())).toList();
|
||||
|
||||
BigDecimal totalValue = BigDecimal.ZERO;
|
||||
BigDecimal estimatedTotalValue = BigDecimal.ZERO;
|
||||
BigDecimal monthlyEstimatedValue = BigDecimal.ZERO;
|
||||
for (PgsProgressCategory category : collect) {
|
||||
|
||||
List<OutMonthPlanAudit> planAudits = outMonthPlanAudits.stream().filter(plan -> plan.getProjectId().equals(category.getProjectId())).toList();
|
||||
|
||||
for (OutMonthPlanAudit planAudit : planAudits) {
|
||||
YearMonth planMonth = YearMonth.parse(planAudit.getPlanMonth(), formatter);
|
||||
// 比较大小
|
||||
if (planMonth.isBefore(month)) {
|
||||
estimatedTotalValue=estimatedTotalValue.add(planAudit.getConstructionValue());
|
||||
} else if (month.isAfter(planMonth)) {
|
||||
|
||||
} else {
|
||||
estimatedTotalValue = estimatedTotalValue.add(planAudit.getConstructionValue());
|
||||
monthlyEstimatedValue = planAudit.getConstructionValue();
|
||||
}
|
||||
}
|
||||
|
||||
//计算价格
|
||||
if ("1".equals(category.getUnitType())) {
|
||||
// 数量类型: total * unitPrice
|
||||
BigDecimal total = category.getTotal() != null ? category.getTotal() : BigDecimal.ZERO;
|
||||
BigDecimal unitPrice = category.getUnitPrice() != null ? category.getUnitPrice() : BigDecimal.ZERO;
|
||||
totalValue = totalValue.add(total.multiply(unitPrice));
|
||||
|
||||
} else if ("2".equals(category.getUnitType())) {
|
||||
// 百分比类型: 直接使用 unitPrice
|
||||
totalValue = totalValue.add(category.getUnitPrice() != null ? category.getUnitPrice() : BigDecimal.ZERO);
|
||||
}
|
||||
}
|
||||
//转化单位为万元
|
||||
vo.setTotalValue(totalValue.divide(parseUnit));
|
||||
vo.setEstimatedAccumulatedValue(estimatedTotalValue.divide(parseUnit));
|
||||
vo.setMonthlyEstimatedValue(monthlyEstimatedValue.divide(parseUnit));
|
||||
|
||||
//查询项目的审核通过的施工详细表 1.累计完成产值 2.完成产值月合计 3.各周完成产值
|
||||
List<OutConstructionValue> outConstructionValues = constructionValueService.lambdaQuery()
|
||||
.eq(OutConstructionValue::getProjectId, busProjectVo.getId())
|
||||
.eq(OutConstructionValue::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())
|
||||
.list();
|
||||
|
||||
BigDecimal accumulatedCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal firstWeekCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal secondWeekCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal thirdWeekCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal fourthWeekCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal fifthWeekCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal totalCompletionValue = BigDecimal.ZERO;
|
||||
|
||||
|
||||
for (OutConstructionValue outConstructionValue : outConstructionValues) {
|
||||
LocalDate localDate = outConstructionValue.getReportDate();
|
||||
BigDecimal outValue = outConstructionValue.getOutValue();
|
||||
|
||||
totalCompletionValue = totalCompletionValue.add(outValue);
|
||||
|
||||
if (!localDate.isAfter(lastDay) && !localDate.isBefore(firstDay)) {
|
||||
accumulatedCompletionValue = accumulatedCompletionValue.add(outValue);
|
||||
|
||||
// 计算周数并累加到对应周的产值
|
||||
int dayOfMonth = localDate.getDayOfMonth();
|
||||
int weekOfMonth = (dayOfMonth - 1) / 7 + 1;
|
||||
|
||||
switch (weekOfMonth) {
|
||||
case 1:
|
||||
firstWeekCompletionValue = firstWeekCompletionValue.add(outValue);
|
||||
break;
|
||||
case 2:
|
||||
secondWeekCompletionValue = secondWeekCompletionValue.add(outValue);
|
||||
break;
|
||||
case 3:
|
||||
thirdWeekCompletionValue = thirdWeekCompletionValue.add(outValue);
|
||||
break;
|
||||
case 4:
|
||||
fourthWeekCompletionValue = fourthWeekCompletionValue.add(outValue);
|
||||
break;
|
||||
case 5:
|
||||
fifthWeekCompletionValue = fifthWeekCompletionValue.add(outValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
vo.setAccumulatedCompletionValue(accumulatedCompletionValue.divide(parseUnit));
|
||||
vo.setTotalCompletionValue(totalCompletionValue.divide(parseUnit));
|
||||
vo.setFirstWeekCompletionValue(firstWeekCompletionValue.divide(parseUnit));
|
||||
vo.setSecondWeekCompletionValue(secondWeekCompletionValue.divide(parseUnit));
|
||||
vo.setThirdWeekCompletionValue(thirdWeekCompletionValue.divide(parseUnit));
|
||||
vo.setFourthWeekCompletionValue(fourthWeekCompletionValue.divide(parseUnit));
|
||||
vo.setFifthWeekCompletionValue(fifthWeekCompletionValue.divide(parseUnit));
|
||||
|
||||
vo.setValueDifference(vo.getTotalCompletionValue().subtract(vo.getMonthlyEstimatedValue()));
|
||||
vo.setValueDifferenceAccumulation(vo.getAccumulatedCompletionValue().subtract(vo.getEstimatedAccumulatedValue()));
|
||||
|
||||
vo.setTotalCompletionProgress(BigDecimalUtil.toPercentage(accumulatedCompletionValue, totalValue));
|
||||
|
||||
outMonthlyConstructionVos.add(vo);
|
||||
}
|
||||
}
|
||||
|
||||
TableDataInfo<OutMonthlyConstructionVo> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setRows(outMonthlyConstructionVos);
|
||||
rspData.setTotal(busProjectVoTableDataInfo.getTotal());
|
||||
|
||||
return rspData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
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.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 施工产值对象 out_construction_value
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-30
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("out_construction_value")
|
||||
public class OutConstructionValue extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 方阵id
|
||||
*/
|
||||
private Long matrixId;
|
||||
|
||||
/**
|
||||
* 分项工程id
|
||||
*/
|
||||
private Long progressCategoryId;
|
||||
|
||||
/**
|
||||
* 人工填报数量
|
||||
*/
|
||||
private Integer artificialNum;
|
||||
|
||||
/**
|
||||
* 无人机识别数量
|
||||
*/
|
||||
private Integer uavNum;
|
||||
|
||||
/**
|
||||
* 确认数量
|
||||
*/
|
||||
private Integer confirmNum;
|
||||
|
||||
/**
|
||||
* 计划数量
|
||||
*/
|
||||
private Integer planNum;
|
||||
|
||||
/**
|
||||
* 产值
|
||||
*/
|
||||
private BigDecimal outValue;
|
||||
|
||||
/**
|
||||
* 上报日期
|
||||
*/
|
||||
private LocalDate reportDate;
|
||||
|
||||
/**
|
||||
* 计划日期
|
||||
*/
|
||||
private LocalDate planDate;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String auditStatus;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
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_month_plan
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("out_month_plan")
|
||||
public class OutMonthPlan extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 计划产值
|
||||
*/
|
||||
private BigDecimal planValue;
|
||||
|
||||
/**
|
||||
* 完成产值
|
||||
*/
|
||||
private BigDecimal completeValue;
|
||||
|
||||
/**
|
||||
* 差额
|
||||
*/
|
||||
private BigDecimal differenceValue;
|
||||
|
||||
/**
|
||||
* 计划月份(YYYY-MM)
|
||||
*/
|
||||
private String planMonth;
|
||||
|
||||
/**
|
||||
* 1-设计 2-采购 3-施工
|
||||
*/
|
||||
private String valueType;
|
||||
|
||||
/**
|
||||
* 计划审核状态
|
||||
*/
|
||||
private String planAuditStatus;
|
||||
|
||||
/**
|
||||
* 完成审核状态
|
||||
*/
|
||||
private String completeAuditStatus;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
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_month_plan_audit
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("out_month_plan_audit")
|
||||
public class OutMonthPlanAudit extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 设计产值
|
||||
*/
|
||||
private BigDecimal designValue;
|
||||
|
||||
/**
|
||||
* 采购产值
|
||||
*/
|
||||
private BigDecimal purchaseValue;
|
||||
|
||||
/**
|
||||
* 施工产值
|
||||
*/
|
||||
private BigDecimal constructionValue;
|
||||
|
||||
/**
|
||||
* 总产值
|
||||
*/
|
||||
private BigDecimal totalValue;
|
||||
|
||||
/**
|
||||
* 计划月份(YYYY-MM)
|
||||
*/
|
||||
private String planMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package org.dromara.out.domain.bo;
|
||||
|
||||
import org.dromara.out.domain.OutConstructionValue;
|
||||
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;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 施工产值业务对象 out_construction_value
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OutConstructionValue.class, reverseConvertGenerate = false)
|
||||
public class OutConstructionValueBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
@NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 方阵id
|
||||
*/
|
||||
@NotNull(message = "方阵id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long matrixId;
|
||||
|
||||
/**
|
||||
* 分项工程id
|
||||
*/
|
||||
private Long progressCategoryId;
|
||||
|
||||
/**
|
||||
* 人工填报数量
|
||||
*/
|
||||
@NotNull(message = "人工填报数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer artificialNum;
|
||||
|
||||
/**
|
||||
* 无人机识别数量
|
||||
*/
|
||||
@NotNull(message = "无人机识别数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer uavNum;
|
||||
|
||||
/**
|
||||
* 计划数量
|
||||
*/
|
||||
private Integer planNum;
|
||||
|
||||
/**
|
||||
* 确认数量
|
||||
*/
|
||||
@NotNull(message = "确认数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer confirmNum;
|
||||
|
||||
/**
|
||||
* 产值
|
||||
*/
|
||||
private BigDecimal outValue;
|
||||
|
||||
/**
|
||||
* 计划日期
|
||||
*/
|
||||
private LocalDate planDate;
|
||||
|
||||
/**
|
||||
* 上报日期
|
||||
*/
|
||||
@NotNull(message = "上报日期不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private LocalDate reportDate;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String auditStatus;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package org.dromara.out.domain.bo;
|
||||
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
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_month_plan_audit
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OutMonthPlanAudit.class, reverseConvertGenerate = false)
|
||||
public class OutMonthPlanAuditBo 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 designValue;
|
||||
|
||||
/**
|
||||
* 采购产值
|
||||
*/
|
||||
@NotNull(message = "采购产值不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private BigDecimal purchaseValue;
|
||||
|
||||
/**
|
||||
* 施工产值
|
||||
*/
|
||||
@NotNull(message = "施工产值不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private BigDecimal constructionValue;
|
||||
|
||||
/**
|
||||
* 总产值
|
||||
*/
|
||||
@NotNull(message = "总产值不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private BigDecimal totalValue;
|
||||
|
||||
/**
|
||||
* 计划月份(YYYY-MM)
|
||||
*/
|
||||
@NotBlank(message = "计划月份(YYYY-MM)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String planMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package org.dromara.out.domain.bo;
|
||||
|
||||
import org.dromara.out.domain.OutMonthPlan;
|
||||
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_month_plan
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OutMonthPlan.class, reverseConvertGenerate = false)
|
||||
public class OutMonthPlanBo 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 planValue;
|
||||
|
||||
/**
|
||||
* 完成产值
|
||||
*/
|
||||
private BigDecimal completeValue;
|
||||
|
||||
/**
|
||||
* 差额
|
||||
*/
|
||||
private BigDecimal differenceValue;
|
||||
|
||||
/**
|
||||
* 计划月份(YYYY-MM)
|
||||
*/
|
||||
@NotBlank(message = "计划月份(YYYY-MM)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String planMonth;
|
||||
|
||||
/**
|
||||
* 1-设计 2-采购 3-施工
|
||||
*/
|
||||
@NotBlank(message = "1-设计 2-采购 3-施工不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String valueType;
|
||||
|
||||
/**
|
||||
* 计划审核状态
|
||||
*/
|
||||
private String planAuditStatus;
|
||||
|
||||
/**
|
||||
* 完成审核状态
|
||||
*/
|
||||
private String completeAuditStatus;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package org.dromara.out.domain.bo;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
|
||||
@Data
|
||||
public class OutTableBo {
|
||||
|
||||
@NotBlank(message = "月份(YYYY-MM)不能为空")
|
||||
private String month;
|
||||
|
||||
}
|
@ -0,0 +1,161 @@
|
||||
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 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;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 施工产值视图对象 out_construction_value
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-30
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OutConstructionValue.class)
|
||||
public class OutConstructionValueVo 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 projectName;
|
||||
|
||||
/**
|
||||
* 子项目ID
|
||||
*/
|
||||
@ExcelProperty(value = "子项目ID")
|
||||
private Long subProjectId;
|
||||
|
||||
/**
|
||||
* 子项目名
|
||||
*/
|
||||
@ExcelProperty(value = "子项目名")
|
||||
private String subProjectName;
|
||||
|
||||
/**
|
||||
* 方阵id
|
||||
*/
|
||||
@ExcelProperty(value = "方阵id")
|
||||
private Long matrixId;
|
||||
|
||||
/**
|
||||
* 方阵名称
|
||||
*/
|
||||
@ExcelProperty(value = "方阵名称")
|
||||
private String matrixName;
|
||||
|
||||
/**
|
||||
* 分部工程id
|
||||
*/
|
||||
@ExcelProperty(value = "分部工程id")
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 分部工程名称
|
||||
*/
|
||||
@ExcelProperty(value = "分部工程名称")
|
||||
private String categoryName;
|
||||
|
||||
/**
|
||||
* 分项工程id
|
||||
*/
|
||||
@ExcelProperty(value = "分项工程id")
|
||||
private Long progressCategoryId;
|
||||
|
||||
/**
|
||||
* 分项工程名称
|
||||
*/
|
||||
@ExcelProperty(value = "分项工程名称")
|
||||
private String progressCategoryName;
|
||||
|
||||
/**
|
||||
* 人工填报数量
|
||||
*/
|
||||
@ExcelProperty(value = "人工填报数量")
|
||||
private Integer artificialNum;
|
||||
|
||||
/**
|
||||
* 无人机识别数量
|
||||
*/
|
||||
@ExcelProperty(value = "无人机识别数量")
|
||||
private Integer uavNum;
|
||||
|
||||
/**
|
||||
* 确认数量
|
||||
*/
|
||||
@ExcelProperty(value = "确认数量")
|
||||
private Integer confirmNum;
|
||||
|
||||
/**
|
||||
* 计划数量
|
||||
*/
|
||||
private Integer planNum;
|
||||
|
||||
/**
|
||||
* 产值
|
||||
*/
|
||||
@ExcelProperty(value = "产值")
|
||||
private BigDecimal outValue;
|
||||
|
||||
/**
|
||||
* 上报日期
|
||||
*/
|
||||
@ExcelProperty(value = "上报日期")
|
||||
private LocalDate reportDate;
|
||||
|
||||
/**
|
||||
* 计划日期
|
||||
*/
|
||||
private LocalDate planDate;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@ExcelProperty(value = "审核状态")
|
||||
private String auditStatus;
|
||||
|
||||
/**
|
||||
* 上报人Id
|
||||
*/
|
||||
private Long createBy;
|
||||
|
||||
/**
|
||||
* 上报人
|
||||
*/
|
||||
@ExcelProperty(value = "审核状态")
|
||||
@Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
|
||||
private String createByName;
|
||||
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package org.dromara.out.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
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_month_plan_audit
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OutMonthPlanAudit.class)
|
||||
public class OutMonthPlanAuditVo 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 designValue;
|
||||
|
||||
/**
|
||||
* 采购产值
|
||||
*/
|
||||
@ExcelProperty(value = "采购产值")
|
||||
private BigDecimal purchaseValue;
|
||||
|
||||
/**
|
||||
* 施工产值
|
||||
*/
|
||||
@ExcelProperty(value = "施工产值")
|
||||
private BigDecimal constructionValue;
|
||||
|
||||
/**
|
||||
* 总产值
|
||||
*/
|
||||
@ExcelProperty(value = "总产值")
|
||||
private BigDecimal totalValue;
|
||||
|
||||
/**
|
||||
* 计划月份(YYYY-MM)
|
||||
*/
|
||||
@ExcelProperty(value = "计划月份", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "Y=YYY-MM")
|
||||
private String planMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package org.dromara.out.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import org.dromara.out.domain.OutMonthPlan;
|
||||
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_month_plan
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OutMonthPlan.class)
|
||||
public class OutMonthPlanVo 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 planValue;
|
||||
|
||||
/**
|
||||
* 完成产值
|
||||
*/
|
||||
@ExcelProperty(value = "完成产值")
|
||||
private BigDecimal completeValue;
|
||||
|
||||
/**
|
||||
* 差额
|
||||
*/
|
||||
@ExcelProperty(value = "差额")
|
||||
private BigDecimal differenceValue;
|
||||
|
||||
/**
|
||||
* 计划月份(YYYY-MM)
|
||||
*/
|
||||
@ExcelProperty(value = "计划月份", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "Y=YYY-MM")
|
||||
private String planMonth;
|
||||
|
||||
/**
|
||||
* 1-设计 2-采购 3-施工
|
||||
*/
|
||||
@ExcelProperty(value = "1-设计 2-采购 3-施工")
|
||||
private String valueType;
|
||||
|
||||
/**
|
||||
* 计划审核状态
|
||||
*/
|
||||
@ExcelProperty(value = "计划审核状态")
|
||||
private String planAuditStatus;
|
||||
|
||||
/**
|
||||
* 完成审核状态
|
||||
*/
|
||||
@ExcelProperty(value = "完成审核状态")
|
||||
private String completeAuditStatus;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
package org.dromara.out.domain.vo;
|
||||
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class OutMonthlyConstructionVo {
|
||||
|
||||
/**
|
||||
* 项目名称
|
||||
*/
|
||||
@ExcelProperty(value = "项目名称")
|
||||
private String projectName;
|
||||
|
||||
/**
|
||||
* 总产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "总产值(万元)")
|
||||
private BigDecimal totalValue;
|
||||
|
||||
/**
|
||||
* 月预计产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "月预计产值(万元)")
|
||||
private BigDecimal monthlyEstimatedValue;
|
||||
|
||||
/**
|
||||
* 第一周完成产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "第一周完成产值(万元)")
|
||||
private BigDecimal firstWeekCompletionValue;
|
||||
|
||||
/**
|
||||
* 第二周完成产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "第二周完成产值(万元)")
|
||||
private BigDecimal secondWeekCompletionValue;
|
||||
|
||||
/**
|
||||
* 第三周完成产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "第三周完成产值(万元)")
|
||||
private BigDecimal thirdWeekCompletionValue;
|
||||
|
||||
/**
|
||||
* 第四周完成产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "第四周完成产值(万元)")
|
||||
private BigDecimal fourthWeekCompletionValue;
|
||||
|
||||
/**
|
||||
* 第五周完成产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "第五周完成产值(万元)")
|
||||
private BigDecimal fifthWeekCompletionValue;
|
||||
|
||||
/**
|
||||
* 完成产值月合计(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "完成产值月合计(万元)")
|
||||
private BigDecimal totalCompletionValue;
|
||||
|
||||
/**
|
||||
* 产值差额(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "产值差额(万元)")
|
||||
private BigDecimal valueDifference;
|
||||
|
||||
/**
|
||||
* 预计累计产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "预计累计产值(万元)")
|
||||
private BigDecimal estimatedAccumulatedValue;
|
||||
|
||||
/**
|
||||
* 累计完成产值(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "累计完成产值(万元)")
|
||||
private BigDecimal accumulatedCompletionValue;
|
||||
|
||||
/**
|
||||
* 产值差额累计(万元)
|
||||
*/
|
||||
@ExcelProperty(value = "产值差额累计(万元)")
|
||||
private BigDecimal valueDifferenceAccumulation;
|
||||
|
||||
/**
|
||||
* 项目完成总进度(百分比)%
|
||||
*/
|
||||
@ExcelProperty(value = "项目完成总进度(百分比)%")
|
||||
private BigDecimal totalCompletionProgress;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package org.dromara.out.mapper;
|
||||
|
||||
import org.dromara.out.domain.OutConstructionValue;
|
||||
import org.dromara.out.domain.vo.OutConstructionValueVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 施工产值Mapper接口
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-30
|
||||
*/
|
||||
public interface OutConstructionValueMapper extends BaseMapperPlus<OutConstructionValue, OutConstructionValueVo> {
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package org.dromara.out.mapper;
|
||||
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
import org.dromara.out.domain.vo.OutMonthPlanAuditVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 审核通过月度产值计划Mapper接口
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
public interface OutMonthPlanAuditMapper extends BaseMapperPlus<OutMonthPlanAudit, OutMonthPlanAuditVo> {
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package org.dromara.out.mapper;
|
||||
|
||||
import org.dromara.out.domain.OutMonthPlan;
|
||||
import org.dromara.out.domain.vo.OutMonthPlanVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 月度产值计划Mapper接口
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
public interface OutMonthPlanMapper extends BaseMapperPlus<OutMonthPlan, OutMonthPlanVo> {
|
||||
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package org.dromara.out.service;
|
||||
|
||||
import org.dromara.out.domain.vo.OutConstructionValueVo;
|
||||
import org.dromara.out.domain.bo.OutConstructionValueBo;
|
||||
import org.dromara.out.domain.OutConstructionValue;
|
||||
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-07-30
|
||||
*/
|
||||
public interface IOutConstructionValueService extends IService<OutConstructionValue>{
|
||||
|
||||
/**
|
||||
* 查询施工产值
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 施工产值
|
||||
*/
|
||||
OutConstructionValueVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询施工产值列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 施工产值分页列表
|
||||
*/
|
||||
TableDataInfo<OutConstructionValueVo> queryPageList(OutConstructionValueBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的施工产值列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 施工产值列表
|
||||
*/
|
||||
List<OutConstructionValueVo> queryList(OutConstructionValueBo bo);
|
||||
|
||||
/**
|
||||
* 新增施工产值
|
||||
*
|
||||
* @param bo 施工产值
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OutConstructionValueBo bo);
|
||||
|
||||
/**
|
||||
* 修改施工产值
|
||||
*
|
||||
* @param bo 施工产值
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OutConstructionValueBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除施工产值信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package org.dromara.out.service;
|
||||
|
||||
import org.dromara.out.domain.vo.OutMonthPlanAuditVo;
|
||||
import org.dromara.out.domain.bo.OutMonthPlanAuditBo;
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.progress.domain.PgsProgressCategory;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 审核通过月度产值计划Service接口
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
public interface IOutMonthPlanAuditService extends IService<OutMonthPlanAudit>{
|
||||
|
||||
/**
|
||||
* 查询审核通过月度产值计划
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 审核通过月度产值计划
|
||||
*/
|
||||
OutMonthPlanAuditVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询审核通过月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 审核通过月度产值计划分页列表
|
||||
*/
|
||||
TableDataInfo<OutMonthPlanAuditVo> queryPageList(OutMonthPlanAuditBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的审核通过月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 审核通过月度产值计划列表
|
||||
*/
|
||||
List<OutMonthPlanAuditVo> queryList(OutMonthPlanAuditBo bo);
|
||||
|
||||
/**
|
||||
* 新增审核通过月度产值计划
|
||||
*
|
||||
* @param bo 审核通过月度产值计划
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OutMonthPlanAuditBo bo);
|
||||
|
||||
/**
|
||||
* 修改审核通过月度产值计划
|
||||
*
|
||||
* @param bo 审核通过月度产值计划
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OutMonthPlanAuditBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除审核通过月度产值计划信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
|
||||
/**
|
||||
* 根据父项目id获取列表
|
||||
*/
|
||||
List<OutMonthPlanAudit> queryListByProjectIds(List<Long> projectIds);
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package org.dromara.out.service;
|
||||
|
||||
import org.dromara.out.domain.vo.OutMonthPlanVo;
|
||||
import org.dromara.out.domain.bo.OutMonthPlanBo;
|
||||
import org.dromara.out.domain.OutMonthPlan;
|
||||
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-07-31
|
||||
*/
|
||||
public interface IOutMonthPlanService extends IService<OutMonthPlan>{
|
||||
|
||||
/**
|
||||
* 查询月度产值计划
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 月度产值计划
|
||||
*/
|
||||
OutMonthPlanVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 月度产值计划分页列表
|
||||
*/
|
||||
TableDataInfo<OutMonthPlanVo> queryPageList(OutMonthPlanBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 月度产值计划列表
|
||||
*/
|
||||
List<OutMonthPlanVo> queryList(OutMonthPlanBo bo);
|
||||
|
||||
/**
|
||||
* 新增月度产值计划
|
||||
*
|
||||
* @param bo 月度产值计划
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OutMonthPlanBo bo);
|
||||
|
||||
/**
|
||||
* 修改月度产值计划
|
||||
*
|
||||
* @param bo 月度产值计划
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OutMonthPlanBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除月度产值计划信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 是否可以提交
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 是否提交
|
||||
*/
|
||||
Boolean isSubmit(Long id);
|
||||
|
||||
/**
|
||||
* 根据条件查询月度产值计划
|
||||
*/
|
||||
OutMonthPlanVo getInfoByBo(OutMonthPlanBo bo);
|
||||
|
||||
}
|
@ -0,0 +1,254 @@
|
||||
package org.dromara.out.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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.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.dromara.facility.domain.vo.matrix.FacMatrixVo;
|
||||
import org.dromara.facility.service.IFacMatrixService;
|
||||
import org.dromara.progress.domain.PgsProgressCategory;
|
||||
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo;
|
||||
import org.dromara.progress.service.IPgsProgressCategoryService;
|
||||
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 org.dromara.out.domain.bo.OutConstructionValueBo;
|
||||
import org.dromara.out.domain.vo.OutConstructionValueVo;
|
||||
import org.dromara.out.domain.OutConstructionValue;
|
||||
import org.dromara.out.mapper.OutConstructionValueMapper;
|
||||
import org.dromara.out.service.IOutConstructionValueService;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 施工产值Service业务层处理
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-30
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
@Slf4j
|
||||
public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstructionValueMapper, OutConstructionValue> implements IOutConstructionValueService {
|
||||
|
||||
private final OutConstructionValueMapper baseMapper;
|
||||
|
||||
private final IBusProjectService busProjectService;
|
||||
|
||||
private final IFacMatrixService facMatrixService;
|
||||
|
||||
private final IPgsProgressCategoryService pgsProgressCategoryService;
|
||||
|
||||
/**
|
||||
* 查询施工产值
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 施工产值
|
||||
*/
|
||||
@Override
|
||||
public OutConstructionValueVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询施工产值列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 施工产值分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OutConstructionValueVo> queryPageList(OutConstructionValueBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OutConstructionValue> lqw = buildQueryWrapper(bo);
|
||||
Page<OutConstructionValueVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
supplementaryData(result.getRecords());
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的施工产值列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 施工产值列表
|
||||
*/
|
||||
@Override
|
||||
public List<OutConstructionValueVo> queryList(OutConstructionValueBo bo) {
|
||||
LambdaQueryWrapper<OutConstructionValue> lqw = buildQueryWrapper(bo);
|
||||
List<OutConstructionValueVo> outConstructionValueVos = baseMapper.selectVoList(lqw);
|
||||
supplementaryData(outConstructionValueVos);
|
||||
return outConstructionValueVos;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OutConstructionValue> buildQueryWrapper(OutConstructionValueBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OutConstructionValue> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OutConstructionValue::getId);
|
||||
lqw.eq(bo.getProjectId() != null, OutConstructionValue::getProjectId, bo.getProjectId());
|
||||
lqw.eq(bo.getMatrixId() != null, OutConstructionValue::getMatrixId, bo.getMatrixId());
|
||||
lqw.eq(bo.getProgressCategoryId() != null, OutConstructionValue::getProgressCategoryId, bo.getProgressCategoryId());
|
||||
lqw.eq(bo.getArtificialNum() != null, OutConstructionValue::getArtificialNum, bo.getArtificialNum());
|
||||
lqw.eq(bo.getUavNum() != null, OutConstructionValue::getUavNum, bo.getUavNum());
|
||||
lqw.eq(bo.getConfirmNum() != null, OutConstructionValue::getConfirmNum, bo.getConfirmNum());
|
||||
lqw.eq(bo.getOutValue() != null, OutConstructionValue::getOutValue, bo.getOutValue());
|
||||
lqw.eq(bo.getReportDate() != null, OutConstructionValue::getReportDate, bo.getReportDate());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), OutConstructionValue::getAuditStatus, bo.getAuditStatus());
|
||||
lqw.eq(bo.getCreateBy() != null, OutConstructionValue::getCreateBy, bo.getCreateBy());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增施工产值
|
||||
*
|
||||
* @param bo 施工产值
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OutConstructionValueBo bo) {
|
||||
OutConstructionValue add = MapstructUtils.convert(bo, OutConstructionValue.class);
|
||||
validEntityBeforeSave(add);
|
||||
//计算产值
|
||||
PgsProgressCategory progressCategory = pgsProgressCategoryService.getById(bo.getProgressCategoryId());
|
||||
if(progressCategory != null ){
|
||||
if("1".equals(progressCategory.getUnitType())){
|
||||
add.setOutValue(progressCategory.getUnitPrice().multiply(BigDecimal.valueOf(bo.getArtificialNum())));
|
||||
}else if("2".equals(progressCategory.getUnitType())){
|
||||
add.setOutValue(progressCategory.getUnitPrice().multiply(BigDecimal.valueOf(bo.getUavNum()).divide(new BigDecimal("100"))));
|
||||
}
|
||||
}
|
||||
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改施工产值
|
||||
*
|
||||
* @param bo 施工产值
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OutConstructionValueBo bo) {
|
||||
OutConstructionValue update = MapstructUtils.convert(bo, OutConstructionValue.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OutConstructionValue entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除施工产值信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 补充数据
|
||||
*/
|
||||
public void supplementaryData(List<OutConstructionValueVo> list){
|
||||
for (OutConstructionValueVo vo : list){
|
||||
//查询项目
|
||||
BusProjectVo busProjectVo = busProjectService.queryById(vo.getProjectId());
|
||||
vo.setProjectName(busProjectVo.getProjectName());
|
||||
|
||||
//查询方阵以及子项目
|
||||
FacMatrixVo facMatrixVo = facMatrixService.queryById(vo.getMatrixId());
|
||||
vo.setMatrixName(facMatrixVo.getMatrixName());
|
||||
|
||||
BusProjectVo busProjectVo1 = busProjectService.queryById(facMatrixVo.getProjectId());
|
||||
vo.setSubProjectId(busProjectVo1.getId());
|
||||
vo.setSubProjectName(busProjectVo1.getProjectName());
|
||||
|
||||
//查询分部工程以及分项工程
|
||||
PgsProgressCategoryVo pgsProgressCategoryVo = pgsProgressCategoryService.queryById(vo.getProgressCategoryId());
|
||||
vo.setProgressCategoryName(pgsProgressCategoryVo.getName());
|
||||
|
||||
PgsProgressCategoryVo pgsProgressCategoryVo1 = pgsProgressCategoryService.queryById(pgsProgressCategoryVo.getPid());
|
||||
vo.setCategoryId(pgsProgressCategoryVo1.getId());
|
||||
vo.setCategoryName(pgsProgressCategoryVo1.getName());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processEvent.flowCode.endsWith('constructionValue')")
|
||||
public void processHandler(ProcessEvent processEvent) {
|
||||
log.info("施工产值审核任务执行了{}", processEvent.toString());
|
||||
OutConstructionValue byId = this.getById(Convert.toLong(processEvent.getBusinessId()));
|
||||
byId.setAuditStatus(processEvent.getStatus());
|
||||
if (processEvent.getSubmit()) {
|
||||
byId.setAuditStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||
}
|
||||
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());
|
||||
}
|
||||
}
|
@ -0,0 +1,145 @@
|
||||
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.OutMonthPlanAuditBo;
|
||||
import org.dromara.out.domain.vo.OutMonthPlanAuditVo;
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
import org.dromara.out.mapper.OutMonthPlanAuditMapper;
|
||||
import org.dromara.out.service.IOutMonthPlanAuditService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 审核通过月度产值计划Service业务层处理
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OutMonthPlanAuditServiceImpl extends ServiceImpl<OutMonthPlanAuditMapper, OutMonthPlanAudit> implements IOutMonthPlanAuditService {
|
||||
|
||||
private final OutMonthPlanAuditMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询审核通过月度产值计划
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 审核通过月度产值计划
|
||||
*/
|
||||
@Override
|
||||
public OutMonthPlanAuditVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询审核通过月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 审核通过月度产值计划分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OutMonthPlanAuditVo> queryPageList(OutMonthPlanAuditBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OutMonthPlanAudit> lqw = buildQueryWrapper(bo);
|
||||
Page<OutMonthPlanAuditVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的审核通过月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 审核通过月度产值计划列表
|
||||
*/
|
||||
@Override
|
||||
public List<OutMonthPlanAuditVo> queryList(OutMonthPlanAuditBo bo) {
|
||||
LambdaQueryWrapper<OutMonthPlanAudit> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OutMonthPlanAudit> buildQueryWrapper(OutMonthPlanAuditBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OutMonthPlanAudit> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OutMonthPlanAudit::getId);
|
||||
lqw.eq(bo.getProjectId() != null, OutMonthPlanAudit::getProjectId, bo.getProjectId());
|
||||
lqw.eq(bo.getDesignValue() != null, OutMonthPlanAudit::getDesignValue, bo.getDesignValue());
|
||||
lqw.eq(bo.getPurchaseValue() != null, OutMonthPlanAudit::getPurchaseValue, bo.getPurchaseValue());
|
||||
lqw.eq(bo.getConstructionValue() != null, OutMonthPlanAudit::getConstructionValue, bo.getConstructionValue());
|
||||
lqw.eq(bo.getTotalValue() != null, OutMonthPlanAudit::getTotalValue, bo.getTotalValue());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPlanMonth()), OutMonthPlanAudit::getPlanMonth, bo.getPlanMonth());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增审核通过月度产值计划
|
||||
*
|
||||
* @param bo 审核通过月度产值计划
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OutMonthPlanAuditBo bo) {
|
||||
OutMonthPlanAudit add = MapstructUtils.convert(bo, OutMonthPlanAudit.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改审核通过月度产值计划
|
||||
*
|
||||
* @param bo 审核通过月度产值计划
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OutMonthPlanAuditBo bo) {
|
||||
OutMonthPlanAudit update = MapstructUtils.convert(bo, OutMonthPlanAudit.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OutMonthPlanAudit entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除审核通过月度产值计划信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OutMonthPlanAudit> queryListByProjectIds(List<Long> projectIds) {
|
||||
if(projectIds.isEmpty()){
|
||||
return List.of();
|
||||
}
|
||||
return baseMapper.selectList(Wrappers.<OutMonthPlanAudit>lambdaUpdate()
|
||||
.in(OutMonthPlanAudit::getProjectId, projectIds));
|
||||
}
|
||||
}
|
@ -0,0 +1,372 @@
|
||||
package org.dromara.out.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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.enums.FormatsType;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.DateUtils;
|
||||
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.dromara.out.domain.OutConstructionValue;
|
||||
import org.dromara.out.domain.OutMonthPlanAudit;
|
||||
import org.dromara.out.service.IOutConstructionValueService;
|
||||
import org.dromara.out.service.IOutMonthPlanAuditService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.out.domain.bo.OutMonthPlanBo;
|
||||
import org.dromara.out.domain.vo.OutMonthPlanVo;
|
||||
import org.dromara.out.domain.OutMonthPlan;
|
||||
import org.dromara.out.mapper.OutMonthPlanMapper;
|
||||
import org.dromara.out.service.IOutMonthPlanService;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 月度产值计划Service业务层处理
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-31
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
@Slf4j
|
||||
public class OutMonthPlanServiceImpl extends ServiceImpl<OutMonthPlanMapper, OutMonthPlan> implements IOutMonthPlanService {
|
||||
|
||||
private final OutMonthPlanMapper baseMapper;
|
||||
|
||||
private final IOutMonthPlanAuditService outMonthPlanAuditService;
|
||||
|
||||
private final IOutConstructionValueService constructionValueService;
|
||||
/**
|
||||
* 查询月度产值计划
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 月度产值计划
|
||||
*/
|
||||
@Override
|
||||
public OutMonthPlanVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 月度产值计划分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OutMonthPlanVo> queryPageList(OutMonthPlanBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OutMonthPlan> lqw = buildQueryWrapper(bo);
|
||||
Page<OutMonthPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
List<OutMonthPlanVo> records = result.getRecords();
|
||||
//计算完成产值与差额
|
||||
calculateCompleteValueAndDifference(records);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的月度产值计划列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 月度产值计划列表
|
||||
*/
|
||||
@Override
|
||||
public List<OutMonthPlanVo> queryList(OutMonthPlanBo bo) {
|
||||
LambdaQueryWrapper<OutMonthPlan> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OutMonthPlan> buildQueryWrapper(OutMonthPlanBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OutMonthPlan> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OutMonthPlan::getId);
|
||||
lqw.eq(bo.getProjectId() != null, OutMonthPlan::getProjectId, bo.getProjectId());
|
||||
lqw.eq(bo.getPlanValue() != null, OutMonthPlan::getPlanValue, bo.getPlanValue());
|
||||
lqw.eq(bo.getCompleteValue() != null, OutMonthPlan::getCompleteValue, bo.getCompleteValue());
|
||||
lqw.eq(bo.getDifferenceValue() != null, OutMonthPlan::getDifferenceValue, bo.getDifferenceValue());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPlanMonth()), OutMonthPlan::getPlanMonth, bo.getPlanMonth());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getValueType()), OutMonthPlan::getValueType, bo.getValueType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPlanAuditStatus()), OutMonthPlan::getPlanAuditStatus, bo.getPlanAuditStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCompleteAuditStatus()), OutMonthPlan::getCompleteAuditStatus, bo.getCompleteAuditStatus());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增月度产值计划
|
||||
*
|
||||
* @param bo 月度产值计划
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OutMonthPlanBo bo) {
|
||||
OutMonthPlan add = MapstructUtils.convert(bo, OutMonthPlan.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改月度产值计划
|
||||
*
|
||||
* @param bo 月度产值计划
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OutMonthPlanBo bo) {
|
||||
OutMonthPlan update = MapstructUtils.convert(bo, OutMonthPlan.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OutMonthPlan entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
List<OutMonthPlan> outMonthPlans = baseMapper.selectList(Wrappers.<OutMonthPlan>lambdaQuery()
|
||||
.eq(OutMonthPlan::getProjectId, entity.getProjectId())
|
||||
.eq(OutMonthPlan::getPlanMonth, entity.getPlanMonth())
|
||||
.eq(OutMonthPlan::getValueType, entity.getValueType())
|
||||
.ne(entity.getId() != null, OutMonthPlan::getId, entity.getId())
|
||||
);
|
||||
if (!outMonthPlans.isEmpty()) {
|
||||
throw new ServiceException("该月份已有计划");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除月度产值计划信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean isSubmit(Long id) {
|
||||
OutMonthPlan outMonthPlan = baseMapper.selectById(id);
|
||||
List<OutMonthPlan> outMonthPlans = baseMapper.selectList(Wrappers.<OutMonthPlan>lambdaQuery()
|
||||
.eq(OutMonthPlan::getProjectId, outMonthPlan.getProjectId())
|
||||
.eq(OutMonthPlan::getPlanMonth, outMonthPlan.getPlanMonth())
|
||||
);
|
||||
Set<String> collect = outMonthPlans.stream().map(OutMonthPlan::getValueType).collect(Collectors.toSet());
|
||||
return collect.contains("1") && collect.contains("2") && collect.contains("3");
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutMonthPlanVo getInfoByBo(OutMonthPlanBo bo) {
|
||||
LambdaQueryWrapper<OutMonthPlan> outMonthPlanLambdaQueryWrapper = buildQueryWrapper(bo);
|
||||
outMonthPlanLambdaQueryWrapper.last("limit 1");
|
||||
return baseMapper.selectVoOne(outMonthPlanLambdaQueryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processEvent.flowCode.endsWith('monthPlan')")
|
||||
public void monthPlanProcessHandler(ProcessEvent processEvent) {
|
||||
log.info("月度计划产值审核任务执行了{}", processEvent.toString());
|
||||
//这里的业务id:项目id_月份
|
||||
String str = Convert.toStr(processEvent.getBusinessId());
|
||||
String[] split = str.split("_");
|
||||
List<OutMonthPlan> outMonthPlans = baseMapper.selectList(Wrappers.<OutMonthPlan>lambdaQuery()
|
||||
.eq(OutMonthPlan::getProjectId, split[0])
|
||||
.eq(OutMonthPlan::getPlanMonth, split[1])
|
||||
);
|
||||
outMonthPlans.forEach(outMonthPlan -> {
|
||||
outMonthPlan.setPlanAuditStatus(processEvent.getStatus());
|
||||
if (processEvent.getSubmit()) {
|
||||
outMonthPlan.setPlanAuditStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||
}
|
||||
});
|
||||
if(BusinessStatusEnum.FINISH.getStatus().equals(processEvent.getStatus())){
|
||||
OutMonthPlanAudit outMonthPlanAudit = getOutMonthPlanAudit(outMonthPlans);
|
||||
outMonthPlanAuditService.save(outMonthPlanAudit);
|
||||
}
|
||||
updateBatchById(outMonthPlans);
|
||||
}
|
||||
|
||||
private static @NotNull OutMonthPlanAudit getOutMonthPlanAudit(List<OutMonthPlan> outMonthPlans) {
|
||||
OutMonthPlanAudit outMonthPlanAudit = new OutMonthPlanAudit();
|
||||
for (OutMonthPlan outMonthPlan : outMonthPlans) {
|
||||
outMonthPlanAudit.setProjectId(outMonthPlan.getProjectId());
|
||||
outMonthPlanAudit.setPlanMonth(outMonthPlan.getPlanMonth());
|
||||
if(outMonthPlan.getValueType().equals("1")){
|
||||
outMonthPlanAudit.setDesignValue(outMonthPlan.getPlanValue());
|
||||
}
|
||||
if(outMonthPlan.getValueType().equals("2")){
|
||||
outMonthPlanAudit.setPurchaseValue(outMonthPlan.getPlanValue());
|
||||
}
|
||||
if(outMonthPlan.getValueType().equals("3")){
|
||||
outMonthPlanAudit.setConstructionValue(outMonthPlan.getPlanValue());
|
||||
}
|
||||
}
|
||||
outMonthPlanAudit.setTotalValue(outMonthPlanAudit.getDesignValue().add(outMonthPlanAudit.getPurchaseValue()).add(outMonthPlanAudit.getConstructionValue()));
|
||||
return outMonthPlanAudit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 计算完成值和差异
|
||||
*/
|
||||
public void calculateCompleteValueAndDifference(List<OutMonthPlanVo> outMonthPlans){
|
||||
for (OutMonthPlanVo outMonthPlan : outMonthPlans) {
|
||||
|
||||
//计算日期
|
||||
LocalDate parsedDate = DateUtils.parseLocalDateTime(FormatsType.YYYY_MM, outMonthPlan.getPlanMonth());
|
||||
// 当前月的第一天
|
||||
LocalDate firstDay = parsedDate.with(TemporalAdjusters.firstDayOfMonth());
|
||||
// 当前月的最后一天
|
||||
LocalDate lastDay = parsedDate.with(TemporalAdjusters.lastDayOfMonth());
|
||||
|
||||
|
||||
if("2".equals(outMonthPlan.getValueType())){ //采购产值
|
||||
//todo: 罗成没写完
|
||||
|
||||
|
||||
}else if("3".equals(outMonthPlan.getValueType())){ //施工产值
|
||||
//查询项目的审核通过的施工详细表 1.累计完成产值 2.完成产值月合计 3.各周完成产值
|
||||
List<OutConstructionValue> outConstructionValues = constructionValueService.lambdaQuery()
|
||||
.eq(OutConstructionValue::getProjectId, outMonthPlan.getProjectId())
|
||||
.between(OutConstructionValue::getReportDate, firstDay, lastDay)
|
||||
.eq(OutConstructionValue::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())
|
||||
.list();
|
||||
// 计算完成值
|
||||
BigDecimal reduce = outConstructionValues.stream().map(OutConstructionValue::getOutValue)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
outMonthPlan.setCompleteValue(reduce);
|
||||
}
|
||||
// 计算差额(计划值 - 完成值)
|
||||
if (outMonthPlan.getPlanValue() != null && outMonthPlan.getCompleteValue() != null) {
|
||||
outMonthPlan.setDifferenceValue(outMonthPlan.getPlanValue().subtract(outMonthPlan.getCompleteValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行任务创建监听
|
||||
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
|
||||
* 在方法中判断流程节点key
|
||||
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
|
||||
* //执行业务逻辑
|
||||
* }
|
||||
*
|
||||
* @param processTaskEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processTaskEvent.flowCode.endsWith('monthPlan')")
|
||||
public void monthPlanProcessTaskHandler(ProcessTaskEvent processTaskEvent) {
|
||||
log.info("月度计划产值任务创建了{}", processTaskEvent.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听删除流程事件
|
||||
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processDeleteEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('monthPlan')")
|
||||
public void monthPlanProcessDeleteHandler(ProcessDeleteEvent processDeleteEvent) {
|
||||
log.info("监听删除流程事件,月度计划产值审核任务执行了{}", processDeleteEvent.toString());
|
||||
// OutMonthPlan plan = this.getById(Convert.toLong(processDeleteEvent.getBusinessId()));
|
||||
// if (ObjectUtil.isNull(plan)) {
|
||||
// return;
|
||||
// }
|
||||
// this.removeById(plan.getId());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processEvent.flowCode.endsWith('designCompleteValue')")
|
||||
public void processHandler(ProcessEvent processEvent) {
|
||||
log.info("设计完成产值审核任务执行了{}", processEvent.toString());
|
||||
//这里的业务id:项目id_月份
|
||||
Long id = Convert.toLong(processEvent.getBusinessId());
|
||||
OutMonthPlan outMonthPlan = baseMapper.selectById(id);
|
||||
|
||||
outMonthPlan.setCompleteAuditStatus(processEvent.getStatus());
|
||||
if (processEvent.getSubmit()) {
|
||||
outMonthPlan.setCompleteAuditStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||
}
|
||||
baseMapper.updateById(outMonthPlan);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 执行任务创建监听
|
||||
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
|
||||
* 在方法中判断流程节点key
|
||||
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
|
||||
* //执行业务逻辑
|
||||
* }
|
||||
*
|
||||
* @param processTaskEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processTaskEvent.flowCode.endsWith('designCompleteValue')")
|
||||
public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
|
||||
log.info("施工产值审核任务创建了{}", processTaskEvent.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听删除流程事件
|
||||
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processDeleteEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('designCompleteValue')")
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -122,4 +122,10 @@ public interface IPgsProgressCategoryService extends IService<PgsProgressCategor
|
||||
*/
|
||||
PgsProgressCategoryProjectVo getProjectNumber(Long projectId);
|
||||
|
||||
|
||||
/**
|
||||
* 根据父项目id获取项目进度类别列表
|
||||
*/
|
||||
List<PgsProgressCategory> queryListByProjectIds(List<Long> projectIds);
|
||||
|
||||
}
|
||||
|
@ -108,4 +108,9 @@ public interface IPgsProgressPlanDetailService extends IService<PgsProgressPlanD
|
||||
*/
|
||||
Page<PgsProgressPlanDetailVo> getVoPage(Page<PgsProgressPlanDetail> progressPlanDetailPage);
|
||||
|
||||
/**
|
||||
* 根据项目id查询进度计划详情列表
|
||||
*/
|
||||
List<PgsProgressPlanDetail> queryListByProjectIds(List<Long> projectIds);
|
||||
|
||||
}
|
||||
|
@ -749,4 +749,17 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<PgsProgressCategory> queryListByProjectIds(List<Long> projectIds) {
|
||||
|
||||
List<BusProject> projects = projectService.lambdaQuery().in(BusProject::getPId, projectIds).list();
|
||||
List<Long> list = projects.stream().map(BusProject::getId).toList();
|
||||
if(CollUtil.isEmpty(list)){
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return this.lambdaQuery()
|
||||
.in(PgsProgressCategory::getProjectId, list)
|
||||
.list();
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,9 @@ import org.dromara.progress.mapper.PgsProgressPlanDetailMapper;
|
||||
import org.dromara.progress.service.IPgsProgressCategoryService;
|
||||
import org.dromara.progress.service.IPgsProgressPlanDetailService;
|
||||
import org.dromara.progress.service.IPgsProgressPlanService;
|
||||
import org.dromara.common.utils.PageConvertUtil;
|
||||
import org.dromara.project.domain.BusProject;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -81,6 +84,9 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
|
||||
@Resource
|
||||
private IFacPhotovoltaicPanelPartsService photovoltaicPanelPartsService;
|
||||
|
||||
@Resource
|
||||
private IBusProjectService projectService;
|
||||
|
||||
/**
|
||||
* 分页查询进度计划详情列表
|
||||
*
|
||||
@ -568,6 +574,17 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
|
||||
return progressPlanDetailVoPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PgsProgressPlanDetail> queryListByProjectIds(List<Long> projectIds) {
|
||||
List<BusProject> list = projectService.lambdaQuery().in(BusProject::getPId, projectIds).list();
|
||||
if(CollUtil.isEmpty(list)){
|
||||
return List.of();
|
||||
}
|
||||
return this.lambdaQuery()
|
||||
.in(PgsProgressPlanDetail::getProjectId, list.stream().map(BusProject::getId).toList())
|
||||
.list();
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
@ -655,6 +672,4 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
|
||||
return vo;
|
||||
}).toList();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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.OutConstructionValueMapper">
|
||||
|
||||
</mapper>
|
@ -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.OutMonthPlanAuditMapper">
|
||||
|
||||
</mapper>
|
@ -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.OutMonthPlanMapper">
|
||||
|
||||
</mapper>
|
Reference in New Issue
Block a user