Ver código fonte

转正式账单,退款申请修改

huangpeng 4 meses atrás
pai
commit
d185da955f

+ 54 - 11
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwBillManagementUnpaidServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.rongwei.zhsw.system.utils.SaveConstans.billInfo.*;
 import static com.rongwei.zhsw.system.utils.SaveConstans.billReccord.DATASOURCEBALANCEDEDUCTION;
@@ -146,6 +147,7 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
      */
     @Override
     public R transferAccount(Map<String, Object> map) throws Exception {
+        try {
 
         //获取账单数据 已根据户号 分组 创建时间正序
         Map<String, List<SwBillManagementUnpaidDo>> billGroups = getGroupedBills(map);
@@ -159,7 +161,7 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
         billGroups.keySet().forEach(key -> processUserBills(billGroups.get(key), userGroups.get(key).get(0), transferAccountDo));
 
         // 保存处理结果
-        try {
+
             swBillManagementUnpaidService.saveProcessedData(transferAccountDo);
         }catch (Exception e){
             log.error("转正式账单数据保存失败 {}",e.getMessage());
@@ -232,25 +234,40 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
     private void processUserBills(List<SwBillManagementUnpaidDo> swBillManagementUnpaidDos, SwUserManagementDo user,
                                   TransferAccountDo transferAccountDo ) {
 
+        // 初始化变量
+        BigDecimal accumulatedAmount = BigDecimal.ZERO;
+        List<SwBillManagementUnpaidDo> processedBills = new ArrayList<>();
+        //是否累加值超出余额
+        boolean isBalanceExceeded = false;
+
         BigDecimal billAmount =BigDecimal.ZERO;
         List<SwBillManagementUnpaidDo> unpaidDos  = new ArrayList<>();
         SwBillManagementPaidDo paid;
-        String paymentBatchId = SecurityUtil.getUUID(); // 批次唯一ID
+
+
+        // 获取当前用户和批次信息
         SysUserVo currentUser = ZHSWCommonUtils.getCurrentUser();
-        HashMap<String, BigDecimal> map = new HashMap<>();
-        //是否累加值超出余额
-        Boolean excessBalance =false;
+        String paymentBatchId = SecurityUtil.getUUID();
 
 
-        for (SwBillManagementUnpaidDo unpaidDo:swBillManagementUnpaidDos){
-            //当累计的账单的 【原应缴(元)】-【总减免(元)】 +【滞纳金(元)】 <= 账户余额,生成计费记录
-            billAmount = billAmount.add(unpaidDo.getOughttohavepaid()).subtract(unpaidDo.getFeewaiver()).add(unpaidDo.getLatefees());
+        //合并并排序账单
+        List<SwBillManagementUnpaidDo> sortedBills  = mergeAndSortBills(swBillManagementUnpaidDos);
+
+        for (SwBillManagementUnpaidDo unpaidDo:sortedBills){
+
+            if (unpaidDo ==null ){
+                continue;
+            }
 
-            if (excessBalance){
+
+            if (isBalanceExceeded ){
                 transferAccountDo.getOfficeIds().add(unpaidDo.getId());
                 continue;
             }
 
+            //当累计的账单的 【原应缴(元)】-【总减免(元)】 +【滞纳金(元)】 <= 账户余额,生成计费记录
+            billAmount = billAmount.add(unpaidDo.getOughttohavepaid()).subtract(unpaidDo.getFeewaiver()).add(unpaidDo.getLatefees());
+
             if (billAmount.compareTo(user.getAccountbalance()) <= 0){
                 //转正式账单后 生成缴费记录,生成 已缴费账单,删除待缴费记录,更新用户余额
 
@@ -268,9 +285,8 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
                 //整合要生成缴费记录的预收账单
                 unpaidDos.add(unpaidDo);
 
-
             }else{
-                excessBalance =true;
+                isBalanceExceeded  =true;
                 // 超出余额部分标记为正式账单
                 transferAccountDo.getOfficeIds().add(unpaidDo.getId());
             }
@@ -297,6 +313,33 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
 
     }
 
+    /**
+     * 原应缴(元)】-【总减免(元)】 +【滞纳金(元)】 是否小于等于 0  的数据先处理
+     * @param swBillManagementUnpaidDos
+     * @return
+     */
+    private List<SwBillManagementUnpaidDo> mergeAndSortBills(List<SwBillManagementUnpaidDo> swBillManagementUnpaidDos) {
+        //【原应缴(元)】-【总减免(元)】 +【滞纳金(元)】 是否小于等于 0 分成两列
+        Map<Boolean, List<SwBillManagementUnpaidDo>> partitioned = swBillManagementUnpaidDos.stream()
+                .collect(Collectors.partitioningBy(unpaidDo ->
+                        unpaidDo.getOughttohavepaid()
+                                .subtract(unpaidDo.getFeewaiver())
+                                .add(unpaidDo.getLatefees())
+                                .compareTo(BigDecimal.ZERO) <= 0
+                ));
+
+        //将 【原应缴(元)】-【总减免(元)】 +【滞纳金(元)】 是否小于等于 0 先处理 后面的数据还是按照原来的  创建时间排序
+
+        // 合并并保持原始顺序
+        List<SwBillManagementUnpaidDo> result = new ArrayList<>();
+
+        result.addAll(partitioned.getOrDefault(true, Collections.emptyList()));
+
+        result.addAll(partitioned.getOrDefault(false, Collections.emptyList()));
+        return result;
+
+    }
+
     /**
      * 保存数据
      * @param transferAccountDo

+ 5 - 6
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwRefundRequestRecordServiceImpl.java

@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import com.rongwei.zhsw.system.utils.ZHSWCommonUtils;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import static com.rongwei.zhsw.system.utils.SaveConstans.billInfo.PENDINGSTATUS;
 import static com.rongwei.zhsw.system.utils.SaveConstans.billReccord.FULLREFUNDSTATUS;
@@ -59,7 +58,6 @@ public class SwRefundRequestRecordServiceImpl extends ServiceImpl<SwRefundReques
 
           log.info("开始退款申请");
 
-
             //当前用户
             SysUserVo currentUser = ZHSWCommonUtils.getCurrentUser();
 
@@ -78,7 +76,7 @@ public class SwRefundRequestRecordServiceImpl extends ServiceImpl<SwRefundReques
                 updateBillRecord(refundRequestRecordDO,currentUser);
 
                 //2. 更新退款记录
-                processRefund(refundRequestRecordDO, currentUser);
+                processRefund(refundRequestRecordDO, currentUser,REFUNDSUCCESSFUL);
 
                 // 已缴账单记录表更新
                 migratePaidBillsToUnpaid(refundRequestRecordDO);
@@ -87,7 +85,8 @@ public class SwRefundRequestRecordServiceImpl extends ServiceImpl<SwRefundReques
                 updateUserBalance(refundRequestRecordDO,user);
 
             }catch (Exception e){
-
+                //退款失败
+                processRefund(refundRequestRecordDO, currentUser,REFUNDFAILED);
                 log.error("退款申请失败 {}",e.getMessage());
                 throw new Exception(e.getMessage());
             }
@@ -95,12 +94,12 @@ public class SwRefundRequestRecordServiceImpl extends ServiceImpl<SwRefundReques
         return R.ok();
     }
 
-    private void processRefund(SwRefundRequestRecordDO refundRequestRecordDO, SysUserVo currentUser) {
+    private void processRefund(SwRefundRequestRecordDO refundRequestRecordDO, SysUserVo currentUser,  String refundstatus) {
             // 退款记录表更新 实退金额 退款操作人,操作时间
             swRefundRequestRecordService.update(new LambdaUpdateWrapper<SwRefundRequestRecordDO>()
                     .eq(SwRefundRequestRecordDO::getId, refundRequestRecordDO.getId())
                     .set(SwRefundRequestRecordDO::getActualretirement, refundRequestRecordDO.getRefundamount())
-                    .set(SwRefundRequestRecordDO::getHasbeenrefunded, REFUNDED)
+                    .set(SwRefundRequestRecordDO::getRefundstatus, refundstatus)
                     .set(SwRefundRequestRecordDO::getRefundoperatorid, currentUser.getId())
                     .set(SwRefundRequestRecordDO::getRefundoperatorname, currentUser.getName())
                     .set(SwRefundRequestRecordDO::getRefundtime,new Date())

+ 11 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/SaveConstans.java

@@ -89,5 +89,16 @@ public class SaveConstans {
          */
         public static final String REFUNDED = "y";
 
+        /**
+         * 退款成功
+         */
+        public static final String REFUNDSUCCESSFUL ="3";
+
+        /**
+         * 退款失败
+         */
+        public static final String REFUNDFAILED ="4";
+
+
     }
 }

+ 3 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwRefundRequestRecordDO.java

@@ -90,5 +90,8 @@ public class SwRefundRequestRecordDO extends BaseDo implements Serializable {
     private Date chargedate;
     //是否已退款
     private String hasbeenrefunded;
+    //退款状态 REFUNDSTATUS
+    private String refundstatus;
+
 
 }