ycl-common/src/main/java/enumeration/general/CalculateReportStatusEnum.java
New file @@ -0,0 +1,28 @@ package enumeration.general; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.Getter; /** * @author:xp * @date:2024/4/26 14:44 */ @Getter public enum CalculateReportStatusEnum { NOT_PUBLISH("not_publish", "未发布"), PUBLISHED("published", "已发布"); ; @EnumValue @JsonValue private final String value; private final String desc; CalculateReportStatusEnum(String value, String desc) { this.value = value; this.desc = desc; } } ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java
@@ -5,6 +5,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import com.ycl.platform.base.AbsEntity; import enumeration.general.CalculateReportStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -36,14 +37,6 @@ @TableField("deduct_money") private BigDecimal deductMoney; @ApiModelProperty("哪年的") @TableField("which_year") private Integer whichYear; @ApiModelProperty("哪月的") @TableField("which_month") private Integer whichMonth; @ApiModelProperty("修改人") @TableField("update_by") private String updateBy; @@ -52,5 +45,7 @@ @TableField("latest_time") private LocalDateTime latestTime; @TableField("status") private CalculateReportStatusEnum status; } ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
@@ -1,9 +1,11 @@ package com.ycl.platform.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.platform.base.AbsVo; import com.ycl.platform.domain.entity.CalculateRecord; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.time.LocalDateTime; import org.springframework.lang.NonNull; @@ -20,7 +22,12 @@ * @since 2024-04-23 */ @Data public class CalculateRecordVO extends AbsVo { public class CalculateRecordVO { private Integer id; @JsonFormat(pattern = "yyyy-MM-dd") private Date createTime; /** 合同 */ private Integer contractId; @@ -39,6 +46,9 @@ /** 哪月 */ private Integer whichMonth; /** 最新一条核算标识 */ private Boolean latest; public static CalculateRecordVO getVoByEntity(@NonNull CalculateRecord entity, CalculateRecordVO vo) { if(vo == null) { vo = new CalculateRecordVO(); ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
@@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.platform.base.AbsVo; import com.ycl.platform.domain.entity.CalculateReport; import enumeration.general.CalculateReportStatusEnum; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; @@ -48,6 +49,8 @@ /** 核算规则 */ private List<CalculateMoneyRuleVO> ruleList; private CalculateReportStatusEnum status; public static CalculateReportDetailVO getVoByEntity(@NonNull CalculateReport entity, CalculateReportDetailVO vo) { if(vo == null) { vo = new CalculateReportDetailVO(); ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
@@ -7,6 +7,7 @@ import java.util.List; import java.time.LocalDateTime; import enumeration.general.CalculateReportStatusEnum; import org.springframework.lang.NonNull; import org.springframework.beans.BeanUtils; import lombok.Data; @@ -41,6 +42,14 @@ /** 最近一次核算时间 */ private LocalDateTime latestTime; /** 能否发布 */ private Boolean canPublish; private CalculateReportStatusEnum status; /** 最新一次扣款 */ private BigDecimal latestDeductMoney; /** 明细 */ private List<CalculateRecordVO> recordList; ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
@@ -33,25 +33,6 @@ private final CalculateReportService calculateReportService; // @PostMapping // @ApiOperation(value = "添加", notes = "添加") // public Result add(@RequestBody @Validated(Add.class) CalculateReportForm form) { // return calculateReportService.add(form); // } // @PutMapping // @ApiOperation(value = "修改", notes = "修改") // public Result update(@RequestBody @Validated(Update.class) CalculateReportForm form) { // return calculateReportService.update(form); // } @PutMapping @ApiOperation(value = "修改金额", notes = "修改金额") @PreAuthorize("@ss.hasPermi('system:calculate:report:edit:money')") public Result adjustMoney(@RequestBody @Validated(Update.class) CalculateReportForm form) { return calculateReportService.update(form); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") @PreAuthorize("@ss.hasPermi('system:calculate:report:page')") @@ -73,23 +54,11 @@ return calculateReportService.detail(id); } // @GetMapping("/list") // @ApiOperation(value = "列表", notes = "列表") // public Result list() { // return calculateReportService.all(); // } // @DeleteMapping("/{id}") // @ApiOperation(value = "ID删除", notes = "ID删除") // public Result removeById(@PathVariable("id") String id) { // return calculateReportService.removeById(id); // } // // @DeleteMapping("/batch") // @ApiOperation(value = "批量删除", notes = "批量删除") // public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) { // return calculateReportService.remove(ids); // } @PutMapping("/status/{reportId}") @ApiOperation(value = "修改发布状态", notes = "修改发布状态") @PreAuthorize("@ss.hasPermi('system:calculate:report:status')") public Result updatePublishStatus(@PathVariable("reportId") Long reportId) { return calculateReportService.updatePublishStatus(reportId); } } ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
@@ -71,4 +71,12 @@ * @return */ Result backfill(CalculateReportBackfillForm form); /** * 修改发布状态 * * @param reportId * @return */ Result updatePublishStatus(Long reportId); } ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -19,6 +19,7 @@ import java.util.List; import com.ycl.utils.SecurityUtils; import enumeration.general.CalculateReportStatusEnum; import org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.system.page.PageUtil; @@ -33,6 +34,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.RequiredArgsConstructor; import org.springframework.util.CollectionUtils; /** * 核算报告 服务实现类 @@ -115,6 +117,13 @@ public Result page(CalculateReportQuery query) { IPage<CalculateReportVO> page = PageUtil.getPage(query, CalculateReportVO.class); baseMapper.page(query, page); page.getRecords().stream().forEach(item -> { if (Objects.isNull(item)) { item.setCanPublish(Boolean.FALSE); } else { item.setCanPublish(Boolean.TRUE); } }); return Result.ok().data(page.getRecords()).total(page.getTotal()); } @@ -127,6 +136,13 @@ public Result detail(Long id) { // 明细列表 CalculateReportDetailVO detail = baseMapper.getById(id); if (Objects.nonNull(detail) && ! CollectionUtils.isEmpty(detail.getRecordList())) { if (CalculateReportStatusEnum.NOT_PUBLISH.equals(detail.getStatus())) { detail.getRecordList().get(0).setLatest(Boolean.TRUE); } else { detail.getRecordList().get(0).setLatest(Boolean.FALSE); } } return Result.ok().data(detail); } @@ -138,9 +154,7 @@ public Result all() { List<CalculateReport> entities = baseMapper.selectList(null); List<CalculateReportVO> vos = entities.stream() .map( entity -> CalculateReportVO.getVoByEntity(entity, null) ) .map(entity -> CalculateReportVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } @@ -152,18 +166,36 @@ if (Objects.isNull(report)) { throw new RuntimeException("该核算报告不存在"); } // 累加得到扣款总额 BigDecimal totalDeduct = form.getRecordList().stream() .map(CalculateReportBackfillForm.RecordForm::getDeductMoney) .reduce(BigDecimal.ZERO, BigDecimal::add); if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) { throw new RuntimeException("最新一次核算报告已经发布,无法修改"); } CalculateReportBackfillForm.RecordForm latestRecord = form.getRecordList().get(0); CalculateRecord beforeRecord = calculateRecordMapper.selectById(latestRecord.getId()); if (Objects.isNull(beforeRecord)) { throw new RuntimeException("最近一次核算记录不存在"); } // 计算得到扣款总额(只算最近一条) BigDecimal totalDeduct = report.getDeductMoney().subtract(latestRecord.getDeductMoney()).add(latestRecord.getDeductMoney()); report.setDeductMoney(totalDeduct); baseMapper.updateById(report); form.getRecordList().stream().forEach(item -> { new LambdaUpdateChainWrapper<>(calculateRecordMapper) .eq(CalculateRecord::getId, item.getId()) .set(CalculateRecord::getDeductMoney, item.getDeductMoney()) .update(); }); beforeRecord.setDeductMoney(latestRecord.getDeductMoney()); calculateRecordMapper.updateById(beforeRecord); return Result.ok("操作成功"); } @Override public Result updatePublishStatus(Long reportId) { CalculateReport report = baseMapper.selectById(reportId); if (Objects.isNull(report)) { throw new RuntimeException("该核算报告不存在"); } if (CalculateReportStatusEnum.NOT_PUBLISH.equals(report.getStatus())) { report.setStatus(CalculateReportStatusEnum.PUBLISHED); } else if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) { report.setStatus(CalculateReportStatusEnum.NOT_PUBLISH); } baseMapper.updateById(report); return Result.ok("操作成功"); } } ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -13,18 +13,23 @@ <result column="deduct_money" property="deductMoney"/> <result column="latest_time" property="latestTime"/> <result column="update_by" property="updateBy"/> <result column="can_publish" property="canPublish"/> <result column="status" property="status"/> <result column="latestDeductMoney" property="latestDeductMoney"/> </resultMap> <select id="page" resultMap="BaseResultMap"> SELECT tyu.unit_name, tc.name, tcr.id, tcr.deduct_money, tcr.create_time, tcr.update_time, tcr.calculate_time, tcr.latest_time tyu.unit_name, tc.name, tcr.id, tcr.status, tcr.deduct_money, tcr.create_time, tcr.update_time, tcr.calculate_time, tcr.latest_time, (SELECT a.deduct_money FROM (SELECT deduct_money,which_year, which_month FROM t_calculate_record WHERE contract_id = tcr.contract_id ORDER BY which_year, which_month DESC limit 1) a) as latestDeductMoney FROM t_calculate_report tcr INNER JOIN t_contract tc ON tcr.contract_id = tc.id @@ -45,6 +50,7 @@ <result column="contract_id" property="contractId"/> <result column="calculate_time" property="calculateTime"/> <result column="deduct_money" property="deductMoney"/> <result column="status" property="status"/> <collection property="ruleList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateMoneyRuleVO" select="selectRuleByContractId"/> <collection property="recordList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateRecordVO" @@ -85,7 +91,8 @@ tcr.deduct_money, tcr.create_time, tcr.update_time, tcr.calculate_time tcr.calculate_time, tcr.status FROM t_calculate_report tcr INNER JOIN t_contract tc ON tcr.contract_id = tc.id INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id