龚焕茏
2024-04-26 eb806b5ec0bb72536e78c1a7fcffb94bcd24cbbe
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -1,6 +1,12 @@
package com.ycl.platform.service.impl;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.ycl.platform.domain.entity.CalculateRecord;
import com.ycl.platform.domain.entity.CalculateReport;
import com.ycl.platform.domain.form.CalculateReportBackfillForm;
import com.ycl.platform.domain.vo.CalculateRecordVO;
import com.ycl.platform.domain.vo.CalculateReportDetailVO;
import com.ycl.platform.mapper.CalculateRecordMapper;
import com.ycl.platform.mapper.CalculateReportMapper;
import com.ycl.platform.service.CalculateReportService;
import com.ycl.system.Result;
@@ -8,7 +14,12 @@
import com.ycl.platform.domain.form.CalculateReportForm;
import com.ycl.platform.domain.vo.CalculateReportVO;
import com.ycl.platform.domain.query.CalculateReportQuery;
import java.math.BigDecimal;
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;
@@ -18,10 +29,12 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.Objects;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.util.CollectionUtils;
/**
 * 核算报告 服务实现类
@@ -34,6 +47,7 @@
public class CalculateReportServiceImpl extends ServiceImpl<CalculateReportMapper, CalculateReport> implements CalculateReportService {
    private final CalculateReportMapper calculateReportMapper;
    private final CalculateRecordMapper calculateRecordMapper;
    /**
     * 添加
@@ -74,7 +88,7 @@
     * @return
     */
    @Override
    public Result remove(List<String> ids) {
    public Result remove(List<Long> ids) {
        if(baseMapper.deleteBatchIds(ids) > 0) {
            return Result.ok("删除成功");
        }
@@ -87,7 +101,7 @@
     * @return
     */
    @Override
    public Result removeById(String id) {
    public Result removeById(Long id) {
        if(baseMapper.deleteById(id) > 0) {
            return Result.ok("删除成功");
        }
@@ -103,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());
    }
@@ -112,12 +133,17 @@
     * @return
     */
    @Override
    public Result detail(String id) {
        CalculateReport entity = baseMapper.selectById(id);
        Assert.notNull(entity, "记录不存在");
        CalculateReportVO vo = CalculateReportVO.getVoByEntity(entity, null);
        return Result.ok().data(vo);
    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);
    }
    /**
@@ -128,10 +154,48 @@
    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);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result backfill(CalculateReportBackfillForm form) {
        CalculateReport report = baseMapper.selectById(form.getId());
        if (Objects.isNull(report)) {
            throw new RuntimeException("该核算报告不存在");
        }
        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);
        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("操作成功");
    }
}