xiangpei
2024-04-26 061b711dc16212c651ce6047145420c50728f213
核算报告功能完善
8个文件已修改
1个文件已添加
197 ■■■■■ 已修改文件
ycl-common/src/main/java/enumeration/general/CalculateReportStatusEnum.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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