wujianwei
2026-01-13 bab4925a2f17275f819241aba7e014f5f730773c
新增确认接口
5个文件已修改
138 ■■■■■ 已修改文件
service/src/main/java/com/ruoyi/cwgl/controller/FundFlowClaimDetailController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowClaimDetailMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/src/main/java/com/ruoyi/cwgl/service/IFundFlowClaimDetailService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/src/main/java/com/ruoyi/cwgl/service/impl/FundFlowClaimDetailServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/src/main/resources/mapper/cwgl/FundFlowClaimDetailMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/src/main/java/com/ruoyi/cwgl/controller/FundFlowClaimDetailController.java
@@ -105,4 +105,15 @@
    {
        return toAjax(fundFlowClaimDetailService.deleteFundFlowClaimDetailByIds(ids));
    }
    /**
     * 账单认领
     */
    @PreAuthorize("@ss.hasPermi('cwgl:fundFlowClaimDetail:add')")
    @Log(title = "账单认领明细", businessType = BusinessType.INSERT)
    @PostMapping("/claim/{fundFlowId}")
    public AjaxResult claim(@PathVariable Integer fundFlowId, @RequestBody List<FundFlowClaimDetail> claimDetails)
    {
        return toAjax(fundFlowClaimDetailService.claimBill(fundFlowId, claimDetails));
    }
}
service/src/main/java/com/ruoyi/cwgl/mapper/FundFlowClaimDetailMapper.java
@@ -70,7 +70,7 @@
    public int updateFundFlowClaimDetailBatch(List<FundFlowClaimDetail> fundFlowClaimDetails);
    /**
     * 删除账单认领明细
     * 删除账单认领明细信息
     * 
     * @param id 账单认领明细ID
     * @return 结果
@@ -78,6 +78,14 @@
    public int deleteFundFlowClaimDetailById(Integer id);
    /**
     * 根据资金流水ID删除账单认领明细
     *
     * @param fundFlowId 资金流水ID
     * @return 结果
     */
    public int deleteFundFlowClaimDetailByFundFlowId(Integer fundFlowId);
    /**
     * 批量删除账单认领明细
     * 
     * @param ids 需要删除的数据ID
service/src/main/java/com/ruoyi/cwgl/service/IFundFlowClaimDetailService.java
@@ -99,4 +99,13 @@
     * @return 结果
     */
    public int deleteFundFlowClaimDetailById(Integer id);
    /**
     * 账单认领
     *
     * @param fundFlowId 资金流水ID
     * @param claimDetails 账单认领明细列表
     * @return 结果
     */
    public int claimBill(Integer fundFlowId, List<FundFlowClaimDetail> claimDetails);
}
service/src/main/java/com/ruoyi/cwgl/service/impl/FundFlowClaimDetailServiceImpl.java
@@ -4,6 +4,8 @@
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import lombok.NonNull;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
@@ -16,9 +18,12 @@
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.cwgl.mapper.FundFlowClaimDetailMapper;
import com.ruoyi.cwgl.mapper.FundFlowMapper;
import com.ruoyi.cwgl.domain.FundFlowClaimDetail;
import com.ruoyi.cwgl.domain.FundFlow;
import com.ruoyi.cwgl.service.IFundFlowClaimDetailService;
import com.ruoyi.common.core.text.Convert;
import java.math.BigDecimal;
/**
 * 账单认领明细Service业务层处理
@@ -33,6 +38,9 @@
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private FundFlowClaimDetailMapper fundFlowClaimDetailMapper;
    @Resource
    private FundFlowMapper fundFlowMapper;
    /**
@@ -179,4 +187,101 @@
    {
        return fundFlowClaimDetailMapper.deleteFundFlowClaimDetailById(id);
    }
    /**
     * 账单认领
     *
     * @param fundFlowId 资金流水ID
     * @param claimDetails 账单认领明细列表
     * @return 结果
     */
    @Override
    public int claimBill(Integer fundFlowId, List<FundFlowClaimDetail> claimDetails)
    {
        if (fundFlowId == null) {
            throw new RuntimeException("资金流水ID不能为空");
        }
        if (claimDetails == null || claimDetails.isEmpty()) {
            throw new RuntimeException("认领明细列表不能为空");
        }
        // 验证认领明细的必填字段
        for (FundFlowClaimDetail claimDetail : claimDetails) {
            if (claimDetail.getClaimAmount() == null || claimDetail.getClaimAmount().compareTo(BigDecimal.ZERO) <= 0) {
                throw new RuntimeException("认领金额必须大于0");
            }
        }
        // 查询资金流水信息
        FundFlow fundFlow = fundFlowMapper.selectFundFlowById(fundFlowId);
        String newStatus = getString(fundFlowId, claimDetails, fundFlow);
        // 更新资金流水状态
        fundFlow.setStatus(newStatus);
        fundFlow.setUpdateTime(DateUtils.getNowDate());
        int updateResult = fundFlowMapper.updateFundFlow(fundFlow);
        if (updateResult <= 0) {
            throw new RuntimeException("更新资金流水状态失败,ID: " + fundFlowId);
        }
        // 先删除该资金流水ID下的所有认领明细(避免重复认领)
        fundFlowClaimDetailMapper.deleteFundFlowClaimDetailByFundFlowId(fundFlowId);
        // 批量保存所有账单认领明细
        for (FundFlowClaimDetail claimDetail : claimDetails) {
            // 设置资金流水ID
            claimDetail.setFundFlowId(fundFlowId);
            // 设置认领日期
            claimDetail.setClaimDate(DateUtils.getNowDate());
            // 设置创建时间
            claimDetail.setCreateTime(DateUtils.getNowDate());
        }
        int insertResult = fundFlowClaimDetailMapper.insertFundFlowClaimDetailBatch(claimDetails);
        return insertResult;
    }
/**
 * 根据资金流水ID、认领详情列表和资金流水对象获取状态字符串
 * @param fundFlowId 资金流水ID,用于标识特定的资金流水记录
 * @param claimDetails 认领详情列表,包含所有认领金额信息
 * @param fundFlow 资金流水对象,包含交易金额等关键信息
 * @return 返回处理后的状态字符串
 * @throws RuntimeException 当资金流水对象为null时抛出异常
 */
    private static @NonNull String getString(Integer fundFlowId, List<FundFlowClaimDetail> claimDetails, FundFlow fundFlow) {
    // 检查资金流水对象是否为空,如果为空则抛出异常
        if (fundFlow == null) {
            throw new RuntimeException("资金流水不存在,ID: " + fundFlowId);
        }
        // 计算总认领金额
        BigDecimal totalClaimAmount = BigDecimal.ZERO;
        for (FundFlowClaimDetail claimDetail : claimDetails) {
            totalClaimAmount = totalClaimAmount.add(claimDetail.getClaimAmount());
        }
        // 验证总认领金额不能超过交易金额
        String newStatus = getString(fundFlow, totalClaimAmount);
        return newStatus;
    }
    private static @NonNull String getString(FundFlow fundFlow, BigDecimal totalClaimAmount) {
        BigDecimal transactionAmount = fundFlow.getTransactionAmount();
        if (totalClaimAmount.compareTo(transactionAmount) > 0) {
            throw new RuntimeException("总认领金额不能超过交易金额。交易金额: " + transactionAmount + ", 总认领金额: " + totalClaimAmount);
        }
        // 根据总认领金额与交易金额的比较设置状态
        String newStatus;
        if (totalClaimAmount.compareTo(transactionAmount) < 0) {
            // 总认领金额小于交易金额,状态改为2(部分认领)
            newStatus = "2";
        } else {
            // 总认领金额等于交易金额,状态改为3(完全认领)
            newStatus = "3";
        }
        return newStatus;
    }
}
service/src/main/resources/mapper/cwgl/FundFlowClaimDetailMapper.xml
@@ -166,5 +166,8 @@
            #{id}
        </foreach>
    </delete>
    <delete id="deleteFundFlowClaimDetailByFundFlowId" parameterType="Integer">
        delete from fund_flow_claim_detail where fund_flow_id = #{fundFlowId}
    </delete>
</mapper>