Browse Source

打款页面增加多次打款功能

yzc 1 năm trước cách đây
mục cha
commit
bcc9ba6824

+ 20 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountPaymentRecordsController.java

@@ -0,0 +1,20 @@
+package com.fjhx.account.controller.account;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 打款记录 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@RestController
+@RequestMapping("/accountPaymentRecords")
+public class AccountPaymentRecordsController {
+
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentRecordsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款记录新增编辑入参实体
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+public class AccountPaymentRecordsDto extends AccountPaymentRecords {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentRecordsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款记录列表查询入参实体
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+public class AccountPaymentRecordsSelectDto extends BaseSelectDto {
+
+}

+ 1 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/enums/PaymentStatusEnum.java

@@ -8,6 +8,7 @@ import java.util.Map;
 //打款状态
 public enum PaymentStatusEnum {
     UNDER_REVIEW("20", "未打款"),
+    PARTIAL("15", "部分打款"),
     REJECT("10", "已打款"),
     ;
     private String key;

+ 34 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountPaymentRecords.java

@@ -0,0 +1,34 @@
+package com.fjhx.account.entity.account.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 打款记录
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+@TableName("account_payment_records")
+public class AccountPaymentRecords extends BasePo {
+
+    /**
+     * 打款id
+     */
+    private Long accountPaymentId;
+
+    /**
+     * 打款金额
+     */
+    private BigDecimal
+            amount;
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountPaymentRecordsVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.vo;
+
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款记录列表查询返回值实体
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+public class AccountPaymentRecordsVo extends AccountPaymentRecords {
+
+}

+ 3 - 2
hx-account/src/main/java/com/fjhx/account/flow/AccountRequestFundsFlow.java

@@ -198,16 +198,17 @@ public class AccountRequestFundsFlow extends FlowDelegate {
         accountPayment.setInterbankNumber(accountRequestFunds.getInterbankNumber());
         accountPayment.setDataUser(accountRequestFunds.getCreateUser());
         accountPayment.setApplyForTime(accountRequestFunds.getCreateTime());
+        accountPayment.setAmount(BigDecimal.ZERO);
 
         // 如果是核销 核销数据审批通过后,根据“核销总额 - 预支总额”生成“待打款”数据
         if ("3".equals(accountRequestFunds.getType())) {
             BigDecimal subtract = accountRequestFunds.getTotal().subtract(accountRequestFunds.getAdvanceAmounts());
-            accountPayment.setAmount(subtract);
+            accountPayment.setIncomeAmount(subtract);
             if (subtract.compareTo(BigDecimal.ZERO) <= 0) {//不生成打款数据
                 return;
             }
         } else {
-            accountPayment.setAmount(accountRequestFunds.getTotal());
+            accountPayment.setIncomeAmount(accountRequestFunds.getTotal());
         }
 
         accountPaymentService.save(accountPayment);

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountPaymentRecordsMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.mapper.account;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+
+
+/**
+ * <p>
+ * 打款记录 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+public interface AccountPaymentRecordsMapper extends BaseMapper<AccountPaymentRecords> {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountPaymentRecordsService.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.service.account;
+
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 打款记录 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+public interface AccountPaymentRecordsService extends BaseService<AccountPaymentRecords> {
+
+}

+ 21 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentRecordsServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.account.service.account.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import com.fjhx.account.mapper.account.AccountPaymentRecordsMapper;
+import com.fjhx.account.service.account.AccountPaymentRecordsService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 打款记录 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Service
+public class AccountPaymentRecordsServiceImpl extends ServiceImpl<AccountPaymentRecordsMapper, AccountPaymentRecords> implements AccountPaymentRecordsService {
+
+}

+ 39 - 17
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -11,20 +11,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.dto.AccountPaymentDto;
 import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
 import com.fjhx.account.entity.account.enums.PaymentStatusEnum;
-import com.fjhx.account.entity.account.po.AccountManagement;
-import com.fjhx.account.entity.account.po.AccountPayment;
-import com.fjhx.account.entity.account.po.AccountRemainder;
-import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.entity.account.po.*;
 import com.fjhx.account.entity.account.vo.AccountPaymentVo;
 import com.fjhx.account.entity.transaction.po.Transaction;
 import com.fjhx.account.mapper.account.AccountPaymentMapper;
-import com.fjhx.account.service.account.AccountManagementService;
-import com.fjhx.account.service.account.AccountPaymentService;
-import com.fjhx.account.service.account.AccountRemainderService;
-import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.account.*;
 import com.fjhx.account.service.transaction.TransactionService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.service.corporation.CorporationService;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.exception.ServiceException;
@@ -33,6 +28,7 @@ import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -66,6 +62,8 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
 
     @Autowired
     private TransactionService transactionService;
+    @Autowired
+    private AccountPaymentRecordsService accountPaymentRecordsService;
 
     @Override
     public Page<AccountPaymentVo> getPage(AccountRequestFundsSelectDto dto) {
@@ -139,19 +137,19 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         AccountPayment AccountPayment = baseMapper.detail(id);
         AccountPaymentVo result = BeanUtil.toBean(AccountPayment, AccountPaymentVo.class);
 
-        if (ObjectUtil.isNotEmpty(result.getAccountManagementId())){
+        if (ObjectUtil.isNotEmpty(result.getAccountManagementId())) {
             //查询实际打款的付款账户名称;
             AccountManagement accountManagement = accountManagementService.getById(result.getAccountManagementId());
-            if (ObjectUtil.isNotEmpty(accountManagement)){
+            if (ObjectUtil.isNotEmpty(accountManagement)) {
                 result.setAccountManagementName(accountManagement.getName());
             }
 
         }
 
-        if (ObjectUtil.isNotEmpty(result.getBusinessManagementId())){
+        if (ObjectUtil.isNotEmpty(result.getBusinessManagementId())) {
             //查询业务中选中的付款账户名称;
             AccountManagement accountManagement = accountManagementService.getById(result.getBusinessManagementId());
-            if (ObjectUtil.isNotEmpty(accountManagement)){
+            if (ObjectUtil.isNotEmpty(accountManagement)) {
                 result.setBusinessManagementName(accountManagement.getName());
             }
 
@@ -161,11 +159,13 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
 
     /**
      * 打款功能
+     *
      * @param accountPaymentDto
      */
     @Override
     @DSTransactional
-    public void add(AccountPaymentDto accountPaymentDto) {
+    public synchronized void add(AccountPaymentDto accountPaymentDto) {
+        Assert.notEmpty(accountPaymentDto.getId(), "打款id不能为空");
 
         AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
                 .eq(AccountRemainder::getAccountManagementId, accountPaymentDto.getAccountManagementId())
@@ -181,9 +181,31 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
             throw new ServiceException("账户余额不足");
         }
 
-        // TODO 只要发起就是已打款(后期可能要修改)
-        accountPaymentDto.setStatus(PaymentStatusEnum.REJECT.getKey());
-        updateById(accountPaymentDto);
+        //刷新打款信息
+        AccountPayment oldAccountPayment = this.getById(accountPaymentDto.getId());
+        //如果是未打款把已打款金额改成0(修复旧数据)
+        if (oldAccountPayment.getStatus().equals(PaymentStatusEnum.UNDER_REVIEW.getKey())) {
+            oldAccountPayment.setAmount(BigDecimal.ZERO);
+        }
+        BigDecimal add = oldAccountPayment.getAmount().add(accountPaymentDto.getAmount());
+        if (add.compareTo(oldAccountPayment.getIncomeAmount()) > 0) {
+            throw new ServiceException("打款金额不能大于待打款金额");
+        }
+        //修改打款状态
+        if (add.compareTo(oldAccountPayment.getIncomeAmount()) >= 0) {
+            oldAccountPayment.setStatus(PaymentStatusEnum.REJECT.getKey());
+        } else {
+            oldAccountPayment.setStatus(PaymentStatusEnum.PARTIAL.getKey());
+        }
+        //赋值已打款金额
+        oldAccountPayment.setAmount(add);
+        updateById(oldAccountPayment);
+
+        //创建打款记录
+        AccountPaymentRecords accountPaymentRecords = new AccountPaymentRecords();
+        accountPaymentRecords.setAccountPaymentId(accountPaymentDto.getId());
+        accountPaymentRecords.setAmount(accountPaymentDto.getAmount());
+        accountPaymentRecordsService.save(accountPaymentRecords);
 
         // 赋值变更金额
         accountRemainder.setChangeRemainder(accountPaymentDto.getAmount());
@@ -213,7 +235,7 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
     /**
      * 添加资金流水表的数据
      */
-    private void  addAccountRunningWater(AccountPaymentDto accountPaymentDto){
+    private void addAccountRunningWater(AccountPaymentDto accountPaymentDto) {
 
         AccountRunningWater accountRunningWater = new AccountRunningWater();
         accountRunningWater.setAccountManagementId(accountPaymentDto.getAccountManagementId());

+ 4 - 0
hx-account/src/main/resources/mapper/account/AccountPaymentRecordsMapper.xml

@@ -0,0 +1,4 @@
+<?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="com.fjhx.account.mapper.account.AccountPaymentRecordsMapper">
+</mapper>

+ 1 - 1
hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java

@@ -156,7 +156,7 @@ public class PayFlow extends FlowDelegate {
             payment.setType(PaymentTypeEnum.REJECT.getKey());
             payment.setStatus(PaymentStatusEnum.UNDER_REVIEW.getKey());
             payment.setCorporationId(pay.getCorporationId());
-            payment.setAmount(pay.getAmount());
+            payment.setAmount(BigDecimal.ZERO);
             payment.setIncomeAmount(pay.getAmount());
             payment.setName(pay.getName());
             payment.setDataUser(pay.getCreateUser());