Browse Source

退款申请后台处理

huangpeng 4 months ago
parent
commit
5c6c59d4c8

+ 1 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwRefundRequestRecordService.java

@@ -15,5 +15,5 @@ import com.rongwei.rwcommon.base.R;
 public interface SwRefundRequestRecordService  extends IService<SwRefundRequestRecordDO> {
 
 
-    R refundApplication(RefundApplicationDTO refundApplicationDTO);
+    R refundApplication( String id);
 }

+ 91 - 101
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwRefundRequestRecordServiceImpl.java

@@ -1,27 +1,24 @@
 package com.rongwei.zhsw.system.service.impl;
  
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.rongwe.zhsw.system.domain.SwBillingRecordDo;
-import com.rongwe.zhsw.system.domain.SwRefundRequestRecordDO;
-import com.rongwe.zhsw.system.domain.SwUserManagementDo;
-import com.rongwe.zhsw.system.dto.RefundApplicationDTO;
-import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwe.zhsw.system.domain.*;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.zhsw.system.dao.SwRefundRequestRecordDao;
-import com.rongwei.zhsw.system.service.SwBillingRecordService;
-import com.rongwei.zhsw.system.service.SwRefundRequestRecordService;
-import com.rongwei.zhsw.system.service.SwUserManagementService;
-import com.rongwei.zhsw.system.utils.ZhswCommonUtils;
+import com.rongwei.zhsw.system.service.*;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
 import java.math.BigDecimal;
-import java.util.Date;
-
-import static com.rongwei.zhsw.system.utils.SaveConstans.refundApply.FULLREFUND;
+import java.util.ArrayList;
+import java.util.List;
+import static com.rongwei.zhsw.system.utils.SaveConstans.billInfo.PENDINGSTATUS;
+import static com.rongwei.zhsw.system.utils.SaveConstans.billReccord.FULLREFUNDSTATUS;
+import static com.rongwei.zhsw.system.utils.SaveConstans.billReccord.PARTIALREFUNDSTATUS;
+import static com.rongwei.zhsw.system.utils.SaveConstans.refundApply.*;
 
 /**
  * 退款申请记录(SwRefundRequestRecord)表服务实现类
@@ -38,119 +35,112 @@ public class SwRefundRequestRecordServiceImpl extends ServiceImpl<SwRefundReques
     @Autowired
     private SwBillingRecordService swBillingRecordService;
 
+    @Autowired
+    private SwRefundRequestRecordService swRefundRequestRecordService;
+
+    @Autowired
+    private SwBillManagementPaidService swBillManagementPaidService;
+
+    @Autowired
+    private SwBillManagementUnpaidService swBillManagementUnpaidService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R refundApplication(RefundApplicationDTO refundApplicationDTO) {
+    public R refundApplication(String id) {
 
-        //1.新生成申请退款记录
-        SwRefundRequestRecordDO recordDO = new SwRefundRequestRecordDO();
-        recordDO.setId(SecurityUtil.getUUID())
-                .setRefundmethod(refundApplicationDTO.getRefundMethod())
-                .setRefundamount(refundApplicationDTO.getRefundAmount());
+        //1.获取退款记录
+        SwRefundRequestRecordDO refundRequestRecordDO = swRefundRequestRecordService.getById(id);
 
+        // 缴费记录表更新:
+        updateBillRecord(refundRequestRecordDO);
 
-        //当前用户
-        SysUserVo currentUser = ZhswCommonUtils.getCurrentUser();
-        recordDO.setCreateuserid(currentUser.getId())
-                .setCreateusername(currentUser.getName())
-                .setCreatedate(new Date())
-                .setModifydate(new Date())
-                .setModifyuserid(currentUser.getId())
-                .setModifyusername(currentUser.getName())
-                .setRefundtime(new Date())
-                .setRefundoperatorid(currentUser.getId())
-                .setRefundoperatorname(currentUser.getName());
+        BigDecimal balanceAdd =BigDecimal.ZERO;
 
+        //全额 退款
+        if (refundRequestRecordDO.getRefundmethod().equals(REFUNDMETHODALL)){
+            // 退款记录表更新 实退金额
+            swRefundRequestRecordService.update(new LambdaUpdateWrapper<SwRefundRequestRecordDO>()
+                    .eq(SwRefundRequestRecordDO::getId, refundRequestRecordDO.getId())
+                    .set(SwRefundRequestRecordDO::getActualretirement, refundRequestRecordDO.getRefundamount()));
 
-        //根据户号获取 用户记录
-        SwUserManagementDo swUserManagement = swUserManagementService.getBaseMapper().
-                selectOne(new LambdaQueryWrapper<SwUserManagementDo>().eq(SwUserManagementDo::getUsernumber, refundApplicationDTO.getUserNumber()));
-        recordDO.setUsername(swUserManagement.getUsername())
-                .setUsernumber(swUserManagement.getUsernumber())
-                .setAccountbalance(swUserManagement.getAccountbalance());
+            //预收账单记录表更新: 已缴账单记录表更新
+            updateOrSaveBills(refundRequestRecordDO.getPaymentrecordid());
 
+            //用户表更新:系统需要 将 对应用户信息中的【余额】进行更新,余额 =  当前用户余额 + 【余额抵扣 balancededuction
+            balanceAdd = refundRequestRecordDO.getBalancededuction();
 
-        //根据缴费id 获取缴费记录
-        SwBillingRecordDo swBillingRecordDo = swBillingRecordService.getById(refundApplicationDTO.getPaymentRecordId());
-        recordDO.setActualdue(swBillingRecordDo.getActualdue())
-                .setPaidin(swBillingRecordDo.getPaidin())
-                .setThenafterpaymentbalance(swBillingRecordDo.getAfterpaymentbalance())
-                .setPaymentrecordid(swBillingRecordDo.getId());
 
+        } else if (refundRequestRecordDO.getRefundmethod().equals(REFUNDMETHODBALANCE)) {
+             // 差额退款
 
-        // 根据退款方式计算  可退款金额 , 缴费记录,用户表等数据更新
-        updateByRefundmethod(recordDO,swBillingRecordDo,currentUser);
+           // 用户表更新:系统需要 将 对应用户信息中的【余额】进行更新,余额 =  当前用户余额 - 【退款金额】
+            balanceAdd = BigDecimal.ZERO.subtract(refundRequestRecordDO.getRefundamount());
+        }
 
-        this.baseMapper.insert(recordDO);
+        //用户表更新
+        SwUserManagementDo swUserManagement = swUserManagementService.getBaseMapper().
+                selectOne(new LambdaQueryWrapper<SwUserManagementDo>().eq(SwUserManagementDo::getUsernumber, refundRequestRecordDO.getUsernumber()));
+        swUserManagementService.balanceAdd(swUserManagement.getId(), balanceAdd);
 
 
         return R.ok();
     }
 
-    // 根据退款方式计算  可退款金额 , 缴费记录,用户表等数据更新
-    private void updateByRefundmethod(SwRefundRequestRecordDO recordDO, SwBillingRecordDo swBillingRecordDo, SysUserVo currentUser) {
-        // 缴费记录 数据更新
-        swBillingRecordDo.setRefundtime(recordDO.getRefundtime())
-                .setRefundoperatorid(recordDO.getRefundoperatorid())
-                .setRefundoperatorname(recordDO.getRefundoperatorname())
-                .setModifydate(new Date())
-                .setModifyuserid(currentUser.getId())
-                .setModifyusername(currentUser.getName());
-
-        //当退款方式选择  ”全部退款-按缴费记录退款并退账单 “ 时,
-        if (recordDO.getRefundmethod() .equals(FULLREFUND)) {
-            //【可退款金额】默认= 【实缴金额】
-            recordDO.setRefundableamount(recordDO.getActualdue());
-            // 更新缴费记录
-            updateSwBillingRecordDo(swBillingRecordDo,null,BigDecimal.ZERO);
-        }else {
-            // 当退款方式选择  “差额退款-不退账单但调整账单 “ 时,
-            if (recordDO.getThenafterpaymentbalance().compareTo(recordDO.getAccountbalance() ) >=0){
-                //【当时缴费后余额】 >=【账户余额】时,【可退款金额】默认=【账户余额】
-                recordDO.setRefundableamount(recordDO.getAccountbalance());
-            }else {
-                //【当时缴费后余额】 <【账户余额】时,【可退款金额】默认= 【当时缴费后余额】
-                recordDO.setRefundableamount(recordDO.getThenafterpaymentbalance());
-            }
-        }
-
-    }
-
     /**
-     * 更新缴费记录
-     * 全部退款-按收款记录退款并退账单
-     * 系统需要 将对应的 【退款金额】【退款人】【退款时间】记录到 缴费记录表中,同时缴费记录的缴费 状态 更新为 “全部退款” 状态,【缴费金额-整数】更新为 0,
+     * 预收账单记录表更新:系统需要 将 对应的 缴费记录对应账单 信息 复制一份到  预收账单记录表中,并且 缴费状态标记状态为“待缴费”
+     * 已缴账单记录表更新:系统需要 将 对应的 缴费记录对应账单 标记为删除
+     * @param paymentrecordid
      */
-    public void updateSwBillingRecordDo(SwBillingRecordDo swBillingRecordDo,String payfeesstatus,BigDecimal paidin){
-
-        swBillingRecordDo.setPayfeesstatus(payfeesstatus)
-                .setPaidin(paidin);
+    private void updateOrSaveBills(String paymentrecordid) {
+        List<SwBillManagementUnpaidDo> unpaidDoList =new ArrayList<>();
+        List<String> paidIds =new ArrayList<>();
+        List<SwBillManagementPaidDo> list = swBillManagementPaidService.list(new LambdaQueryWrapper<SwBillManagementPaidDo>()
+                .eq(SwBillManagementPaidDo::getPaymentrecordid,paymentrecordid)
+                .eq(SwBillManagementPaidDo::getDeleted,"0")
+        );
+        if (!list.isEmpty()){
+            for (SwBillManagementPaidDo paidDo : list){
+                // 已缴账单记录
+                paidIds.add(paidDo.getId());
+                //预收账单记录
+                SwBillManagementUnpaidDo unpaidDo = new SwBillManagementUnpaidDo();
+                BeanUtils.copyProperties(paidDo,unpaidDo);
+                unpaidDo.setId(SecurityUtil.getUUID());
+                unpaidDo.setStatus(PENDINGSTATUS);
+                unpaidDoList.add(unpaidDo);
+            }
 
+            swBillManagementUnpaidService.saveBatch(unpaidDoList,200);
+            swBillManagementPaidService.getBaseMapper().selectBatchIds(paidIds);
+        }
 
     }
 
     /**
-     *       1、
-     *
-     *
-     *       若
-     * @param recordDO
-     * @return
+     * 更新缴费记录
+     * @param refundRequestRecordDO
      */
-    public void setRefundableamountData(SwRefundRequestRecordDO recordDO) {
-        BigDecimal refundableamount = BigDecimal.ZERO;
-
-        if (recordDO.getRefundmethod() .equals(FULLREFUND)) {
-            refundableamount =recordDO.getActualdue();
-
-        }else {
-            if (recordDO.getThenafterpaymentbalance().compareTo(recordDO.getAccountbalance() ) >=0){
-                refundableamount =recordDO.getAccountbalance();
-            }else {
-                refundableamount =recordDO.getThenafterpaymentbalance();
-            }
+    private void updateBillRecord(SwRefundRequestRecordDO refundRequestRecordDO) {
+        // 将对应的 【退款金额】【退款人】【退款时间】记录到 缴费记录表中,
+        SwBillingRecordDo swBillingRecordUpdateDo = new SwBillingRecordDo();
+        swBillingRecordUpdateDo.setId(refundRequestRecordDO.getPaymentrecordid());
+        swBillingRecordUpdateDo.setRefundtime(refundRequestRecordDO.getRefundtime());
+        swBillingRecordUpdateDo.setRefundoperatorid(refundRequestRecordDO.getRefundoperatorid());
+        swBillingRecordUpdateDo.setRefundoperatorname(refundRequestRecordDO.getRefundoperatorname());
+        swBillingRecordUpdateDo.setRefundamount(refundRequestRecordDO.getRefundamount());
+        //全额退款 系统需要同时缴费记录的缴费 状态 更新为 “全部退款” 状态,【本次实缴-整数】更新为 0,【缴费后余额】更新为 0
+        if (refundRequestRecordDO.getRefundmethod().equals(REFUNDMETHODALL)){
+            swBillingRecordUpdateDo.setPayfeesstatus(FULLREFUNDSTATUS);
+            swBillingRecordUpdateDo.setPaidin(BigDecimal.ZERO);
+            swBillingRecordUpdateDo.setAfterpaymentbalance(BigDecimal.ZERO);
+        } else if (refundRequestRecordDO.getRefundmethod().equals(REFUNDMETHODBALANCE)) {
+            //差额退款 ,同时缴费记录的缴费 状态 更新为 “部分退款” 状态,【缴费金额-整数】更新为【原缴费金额-整数】-【退款金额】【缴费后余额】更新为【原实缴后余额】-【退款金额】 ,
+            swBillingRecordUpdateDo.setPayfeesstatus(PARTIALREFUNDSTATUS);
+            SwBillingRecordDo recordDO = swBillingRecordService.getById(refundRequestRecordDO.getPaymentrecordid());
+            swBillingRecordUpdateDo.setPaidin(recordDO.getPaidin().subtract(refundRequestRecordDO.getRefundableamount()));
+            swBillingRecordUpdateDo.setAfterpaymentbalance(recordDO.getAfterpaymentbalance().subtract(refundRequestRecordDO.getRefundableamount()));
         }
-        recordDO.setRefundableamount(refundableamount);
-
+        swBillingRecordService.updateById(swBillingRecordUpdateDo);
     }
+
 }

+ 13 - 2
zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/SaveConstans.java

@@ -22,6 +22,7 @@ public class SaveConstans {
         public static final String PAIDINSTATUS = "3";
 
 
+
     }
 
     public static class billReccord {
@@ -30,6 +31,16 @@ public class SaveConstans {
          *  缴费记录缴费状态   ------已缴费
          */
         public static final String PAIDSTATUS = "1";
+        /**
+         *  缴费记录缴费状态   ------全额退款
+         */
+        public static final String FULLREFUNDSTATUS = "3";
+
+        /**
+         * 账单待缴费状态  ----------部分退费
+         */
+        public static final String PARTIALREFUNDSTATUS = "4";
+
 
         /**
          * 数据来源  ---窗口收费
@@ -52,13 +63,13 @@ public class SaveConstans {
         /**退款方式
          * 退余额-不退账单
          */
-        public static final String REFUNDBALANCE = "2";
+        public static final String REFUNDMETHODBALANCE = "2";
 
 
         /**退款方式
          * 全部退款-按缴费记录退款并退账单
          */
-        public static final String FULLREFUND = "1";
+        public static final String REFUNDMETHODALL = "1";
 
     }
 }

+ 42 - 120
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwRefundRequestRecordDO.java

@@ -22,156 +22,61 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class SwRefundRequestRecordDO  implements Serializable {
     private static final long serialVersionUID = -17434421718501775L;
-    
 
-    @TableField("id")
+    //主键
     private String id;
-    
-    /**
-     * 租户ID
-     */     
-
-    @TableField("tenantid")
+    //租户ID
     private String tenantid;
-    
-    /**
-     * 扩展json格式配置
-     */     
-
-    @TableField("roption")
+    //扩展json格式配置
     private String roption;
-    
-    /**
-     * 是否删除Y/N
-     */
-    @TableField("deleted")
+    //是否删除Y/N
     private String deleted;
-    
-    /**
-     * 备注
-     */
-    @TableField("remark")
+    //备注
     private String remark;
-    
-    /**
-     * 创建时间
-     */
-    @TableField("createdate")
+    //创建时间
     private Date createdate;
-    
-    /**
-     * 创建用户ID
-     */
-    @TableField("createuserid")
+    //创建用户ID
     private String createuserid;
-    
-    /**
-     * 修改日期
-     */     
-
-    @TableField("modifydate")
+    //修改日期
     private Date modifydate;
-    
-
-    @TableField("modifyuserid")
+    //修改用户ID
     private String modifyuserid;
-    
-
-    @TableField("createusername")
+    //创建人
     private String createusername;
-    
-    /**
-     * 修改人
-     */
-    @TableField("modifyusername")
+    //修改人
     private String modifyusername;
-    
-    /**
-     * 户号
-     */
-    @TableField("usernumber")
+    //户号
     private String usernumber;
-    
-    /**
-     * 户名
-     */
-    @TableField("username")
+    //户名
     private String username;
-
-    
-    /**
-     * 账户余额
-     */
-    @TableField("accountbalance")
+    //账户余额
     private BigDecimal accountbalance;
-    
-    /**
-     * 退款金额
-     */
-    @TableField("refundamount")
+    //退款金额
     private BigDecimal refundamount;
-    
-    /**
-     * 退款时间
-     */
-    @TableField("refundtime")
+    //退款时间
     private Date refundtime;
-    
-    /**
-     * 退款操作人ID
-     */
-    @TableField("refundoperatorid")
+    //退款操作人ID
     private String refundoperatorid;
-    
-
-    @TableField("refundoperatorname")
+    //退款操作人
     private String refundoperatorname;
-    
-    /**
-     * 实际应缴
-(元)
-     */
-    @TableField("actualdue")
+    //实际应缴(元)
     private BigDecimal actualdue;
-    
-    /**
-     * 实缴
-(元)
-     */     
-
-    @TableField("paidin")
+    //实缴(元)
     private BigDecimal paidin;
-    
-    /**
-     * 当时缴费后余额
-     */
-    @TableField("thenafterpaymentbalance")
+    //当时缴费后余额
     private BigDecimal thenafterpaymentbalance;
-    
-    /**
-     * 退款方式
-     */
-    @TableField("refundmethod")
+    //退款方式
     private String refundmethod;
-    
-    /**
-     * 可退款金额
-     */
-    @TableField("refundableamount")
+    //可退款金额
     private BigDecimal refundableamount;
-    
-    /**
-     * 缴费记录ID
-     */
-    @TableField("paymentrecordid")
+    //缴费记录ID
     private String paymentrecordid;
-
     //退款原因
     private String refundreason;
     //缴费时间
     private Date paymenttime;
     //余额抵扣(元)
-    private Double balancededuction;
+    private BigDecimal balancededuction;
     //数据来源
     private String datasource;
     //退款类型
@@ -184,4 +89,21 @@ public class SwRefundRequestRecordDO  implements Serializable {
     private String districtmanagerid;
     //片区经理名称
     private String districtmanagername;
+    //状态
+    private String status;
+    //流程ID
+    private String processinstid;
+    //缴费编号
+    private String billingnumber;
+    //收费员ID
+    private String tollcollectorid;
+    //收费员名称
+    private String tollcollectorname;
+    //实退(元)
+    private BigDecimal actualretirement;
+    //收费日期
+    private Date chargedate;
+    //是否已退款
+    private String hasbeenrefunded;
+
 }

+ 2 - 2
zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/SwRefundRequestRecordController

@@ -24,9 +24,9 @@ public class SwRefundRequestRecordController {
 
     @PostMapping("/refundApplication")
     @ResponseBody
-    public R refundApplication(@RequestBody RefundApplicationDTO refundApplicationDTO){
+    public R refundApplication(@RequestParam("id") String id){
         try {
-            return  swRefundRequestRecordService.refundApplication(refundApplicationDTO);
+            return  swRefundRequestRecordService.refundApplication(id);
         }catch (Exception e){
             return R.error(e.getMessage());
         }