Kaynağa Gözat

窗口缴费,退款申请后台处理

huangpeng 4 ay önce
ebeveyn
işleme
fa73e02168

+ 15 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwRefundRequestRecordDao.java

@@ -0,0 +1,15 @@
+package com.rongwei.zhsw.system.dao;
+ 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.zhsw.system.domain.SwRefundRequestRecordDO;
+
+
+/**
+ * 退款申请记录(SwRefundRequestRecord)表数据库访问层
+ *
+ * @author makejava
+ * @since 2025-03-13 17:28:46
+ */
+public interface SwRefundRequestRecordDao extends BaseMapper<SwRefundRequestRecordDO> {
+ 
+}

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

@@ -0,0 +1,19 @@
+package com.rongwei.zhsw.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.zhsw.system.domain.SwRefundRequestRecordDO;
+import com.rongwe.zhsw.system.dto.RefundApplicationDTO;
+import com.rongwei.rwcommon.base.R;
+
+
+/**
+ * 退款申请记录(SwRefundRequestRecord)表Service
+ *
+ * @author makejava
+ * @since 2025-03-13 17:28:48
+ */
+public interface SwRefundRequestRecordService  extends IService<SwRefundRequestRecordDO> {
+
+
+    R refundApplication(RefundApplicationDTO refundApplicationDTO);
+}

+ 26 - 34
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwBillingRecordServiceImpl.java

@@ -67,7 +67,7 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
     @Transactional(rollbackFor = Exception.class)
     public R windowPayment(PaymentRequestDTO paymentRequestDTO) throws Exception {
         List<String> ids = paymentRequestDTO.getIds();
-        BigDecimal paidin = paymentRequestDTO.getPaidin();
+        BigDecimal paidIn = paymentRequestDTO.getPaidin();
         String datasource = paymentRequestDTO.getDatasource();
         //1. 根据户号查询 待缴费 状态 无缴费记录的 的待缴费账单
         LambdaQueryWrapper<SwBillManagementUnpaidDo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -81,9 +81,7 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
         checkBillingData(list,ids);
 
         //生成缴费记录
-        SwBillingRecordDo swBillingRecordDo = addNewBillRecord(paidin,datasource,list);
-        swBillingRecordService.save(swBillingRecordDo);
-
+         addNewBillRecord(paidIn,datasource,list);
 
         //5.删除 待收账单数据
         swBillManagementUnpaidDao.deleteByIds(ids);
@@ -100,18 +98,20 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
      * @param datasource
      * @param list
      */
-    private SwBillingRecordDo addNewBillRecord(BigDecimal paidin, String datasource, List<SwBillManagementUnpaidDo> list) {
+    private void addNewBillRecord(BigDecimal paidin, String datasource, List<SwBillManagementUnpaidDo> list) {
         SwBillingRecordDo add = new SwBillingRecordDo();
 
-        add.setId(SecurityUtil.getUUID());
-        add.setBillingnumber(CreateBillingNumber());
-        add.setChargedate(new Date());
-        add.setUsername(list.get(0).getUsername());
-        add.setUsernumber(list.get(0).getUsernumber());
-        add.setUsertype(list.get(0).getUsertype());
-        add.setAddress(list.get(0).getAddress());
-        add.setPayfeesstatus(PAIDSTATUS); // 已缴费
-        add.setYear(Calendar.getInstance().get(Calendar.YEAR));
+        add.setId(SecurityUtil.getUUID())
+                .setChargedate(new Date())
+                .setPayfeesstatus(PAIDSTATUS)
+                .setYear(Calendar.getInstance().get(Calendar.YEAR))
+                .setUsername(list.get(0).getUsername())
+                .setUsernumber(list.get(0).getUsernumber())
+                .setUsertype(list.get(0).getUsertype())
+                .setAddress(list.get(0).getAddress());
+
+        //生成缴费编号 年月日 + 3位数 随机数
+        CreateBillingNumber(add);
 
         //当前用户
         SysUserVo currentUser = ZhswCommonUtils.getCurrentUser();
@@ -139,7 +139,9 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
             BeanUtils.copyProperties(unpaidDo,paidDo);
             // 新生成的 已缴费账单
             paidDo.setStatus(PAIDINSTATUS);
-            paidDo.setPaymentrecordid(add.getId()); //缴费记录ID
+            //缴费记录ID
+            paidDo.setPaymentrecordid(add.getId());
+
             paidDo.setCreateuserid(currentUser.getId())
                     .setCreateusername(currentUser.getName())
                     .setCreatedate(new Date())
@@ -151,14 +153,12 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
         }
         //生成已经缴费账单
         swBillManagementPaidService.saveBatch(paidDos);
-
         //总减免
         add.setAllfeewaiver(allfeewaiver);
         //原应缴
         add.setOughttohavepaid(oughttohavepaid);
         //滞纳金
         add.setLatefees(latefees);
-
         //根据户号获取 用户记录
         SwUserManagementDo swUserManagement = swUserManagementService.getBaseMapper().
                 selectOne(new LambdaQueryWrapper<SwUserManagementDo>().eq(SwUserManagementDo::getUsernumber, add.getUsernumber()));
@@ -169,40 +169,31 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
         add.setAccountbalance(accountbalance);
         //原余额(元)   = 用户表 用户余额
         add.setOriginalbalance(accountbalance);
-
         //实缴
         add.setPaidin(paidin);
-
-        //1、当 【余额】 >=【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】  时,【余额】字段=【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】
-        //2、当 【余额】 <【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】  时,【余额】字段=【账户余额(元)】
+        //1、当 【余额】 >=【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】  时,【余额抵扣】字段=【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】
+        //2、当 【余额】 <【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】  时,【余额抵扣】字段=【账户余额(元)】
         if(oughttohavepaid.subtract(allfeewaiver).subtract(latefees).compareTo(accountbalance)<0){
-            add.setBalancededuction(oughttohavepaid.subtract(allfeewaiver).subtract(latefees));// 余额抵扣
+            add.setBalancededuction(oughttohavepaid.subtract(allfeewaiver).subtract(latefees));
         }else {
-            add.setBalancededuction(accountbalance);// 余额抵扣
+            add.setBalancededuction(accountbalance);
         }
-
         // 【实际应缴(元)】=【原应缴(元)】-【总减免(元)】 +【滞纳金(元)】-【余额抵扣(元)】
         add.setActualdue(oughttohavepaid.subtract(allfeewaiver).add(latefees).subtract(add.getBalancededuction()));
-
         //【实缴后余额(元)】=【账户余额】+【本次实缴(元-整)】- 原应缴 + 总减免 - 滞纳金
         add.setAfterpaymentbalance(paidin.add(accountbalance).subtract(oughttohavepaid).add(allfeewaiver).subtract(latefees));
         //数据来源
         add.setDatasource(datasource);
-
         //更新用户表 余额字段
-        swUserManagementService.balanceAdd(swUserManagement.getId(),paidin.subtract(add.getActualdue()));
-
-
-     //   add.setTotalpaidin() //总已缴
-        return add;
-
+        swUserManagementService.balanceAdd(swUserManagement.getId(), add.getAfterpaymentbalance().subtract(accountbalance));
+        swBillingRecordService.save(add);
     }
 
     /**
      * 生成缴费编号  年月日 + 3位数 随机数
      * @return
      */
-    private String CreateBillingNumber() {
+    private void CreateBillingNumber(SwBillingRecordDo add) {
         // 获取当前时间并格式化为 "yyyyMMddHHmmss"
         LocalDateTime now = LocalDateTime.now();
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
@@ -212,7 +203,8 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
         Random random = new Random();
         int randomNumber = random.nextInt(1000); // 生成0到999之间的随机数
         String randomStr = String.format("%03d", randomNumber); // 格式化为三位数,不足三位补零
-        return formattedDateTime + randomStr;
+        add.setBillingnumber(formattedDateTime + randomStr);
+
 
     }
 

+ 156 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwRefundRequestRecordServiceImpl.java

@@ -0,0 +1,156 @@
+package com.rongwei.zhsw.system.service.impl;
+ 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.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 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;
+
+/**
+ * 退款申请记录(SwRefundRequestRecord)表服务实现类
+ *
+ * @author makejava
+ * @since 2025-03-13 17:28:48
+ */
+@Service("swRefundRequestRecordService")
+public class SwRefundRequestRecordServiceImpl extends ServiceImpl<SwRefundRequestRecordDao, SwRefundRequestRecordDO> implements SwRefundRequestRecordService {
+
+    @Autowired
+    private SwUserManagementService swUserManagementService;
+
+    @Autowired
+    private SwBillingRecordService swBillingRecordService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R refundApplication(RefundApplicationDTO refundApplicationDTO) {
+
+        //1.新生成申请退款记录
+        SwRefundRequestRecordDO recordDO = new SwRefundRequestRecordDO();
+        recordDO.setId(SecurityUtil.getUUID())
+                .setRefundmethod(refundApplicationDTO.getRefundMethod())
+                .setRefundamount(refundApplicationDTO.getRefundAmount())
+
+
+        //当前用户
+        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());
+
+
+        //根据户号获取 用户记录
+        SwUserManagementDo swUserManagement = swUserManagementService.getBaseMapper().
+                selectOne(new LambdaQueryWrapper<SwUserManagementDo>().eq(SwUserManagementDo::getUsernumber, refundApplicationDTO.getUserNumber()));
+        recordDO.setUsername(swUserManagement.getUsername())
+                .setUsernumber(swUserManagement.getUsernumber())
+                .setAccountbalance(swUserManagement.getAccountbalance());
+
+
+        //根据缴费id 获取缴费记录
+        SwBillingRecordDo swBillingRecordDo = swBillingRecordService.getById(refundApplicationDTO.getPaymentRecordId());
+        recordDO.setActualdue(swBillingRecordDo.getActualdue())
+                .setPaidin(swBillingRecordDo.getPaidin())
+                .setThenafterpaymentbalance(swBillingRecordDo.getAfterpaymentbalance())
+                .setPaymentrecordid(swBillingRecordDo.getId());
+
+
+        // 根据退款方式计算  可退款金额 , 缴费记录,用户表等数据更新
+        updateByRefundmethod(recordDO,swBillingRecordDo,currentUser);
+
+        this.baseMapper.insert(recordDO);
+
+
+        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,
+     */
+    public void updateSwBillingRecordDo(SwBillingRecordDo swBillingRecordDo,String payfeesstatus,BigDecimal paidin){
+
+        swBillingRecordDo.setPayfeesstatus(payfeesstatus)
+                .setPaidin(paidin);
+
+
+    }
+
+    /**
+     *       1、
+     *
+     *
+     *       若
+     * @param recordDO
+     * @return
+     */
+    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();
+            }
+        }
+        recordDO.setRefundableamount(refundableamount);
+
+    }
+}

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

@@ -44,5 +44,21 @@ public class SaveConstans {
 
 
 
+    }
+
+
+    public static class refundApply {
+
+        /**退款方式
+         * 退余额-不退账单
+         */
+        public static final String REFUNDBALANCE = "2";
+
+
+        /**退款方式
+         * 全部退款-按缴费记录退款并退账单
+         */
+        public static final String FULLREFUND = "1";
+
     }
 }

+ 25 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwBillingRecordDo.java

@@ -1,5 +1,6 @@
 package com.rongwe.zhsw.system.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -193,5 +194,29 @@ public class SwBillingRecordDo implements Serializable {
      */
     private BigDecimal accountbalance;
 
+    /**
+     * 退款金额
+     */
+    private BigDecimal refundamount;
+
+    /**
+     * 退款时间
+     */
+
+    private Date refundtime;
+
+    /**
+     * 退款操作人ID
+     */
+
+    private String refundoperatorid;
+
+
+    /**
+     * 退款操作人
+     */
+    private String refundoperatorname;
+
+
 }
 

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

@@ -0,0 +1,187 @@
+package com.rongwe.zhsw.system.domain;
+ 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+
+/**
+ * 退款申请记录(SwRefundRequestRecord)实体类
+ *
+ * @author 黄鹏
+ * @since 2025-03-13 17:28:47
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("sw_refund_request_record")
+@Accessors(chain = true)
+public class SwRefundRequestRecordDO  implements Serializable {
+    private static final long serialVersionUID = -17434421718501775L;
+    
+
+    @TableField("id")
+    private String id;
+    
+    /**
+     * 租户ID
+     */     
+
+    @TableField("tenantid")
+    private String tenantid;
+    
+    /**
+     * 扩展json格式配置
+     */     
+
+    @TableField("roption")
+    private String roption;
+    
+    /**
+     * 是否删除Y/N
+     */
+    @TableField("deleted")
+    private String deleted;
+    
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    
+    /**
+     * 创建时间
+     */
+    @TableField("createdate")
+    private Date createdate;
+    
+    /**
+     * 创建用户ID
+     */
+    @TableField("createuserid")
+    private String createuserid;
+    
+    /**
+     * 修改日期
+     */     
+
+    @TableField("modifydate")
+    private Date modifydate;
+    
+
+    @TableField("modifyuserid")
+    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")
+    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")
+    private String paymentrecordid;
+
+    //退款原因
+    private String refundreason;
+    //缴费时间
+    private Date paymenttime;
+    //余额抵扣(元)
+    private Double balancededuction;
+    //数据来源
+    private String datasource;
+    //退款类型
+    private String refundtype;
+    //经理ID
+    private String managerid;
+    //经理名称
+    private String managername;
+    //片区经理ID
+    private String districtmanagerid;
+    //片区经理名称
+    private String districtmanagername;
+}

+ 27 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/dto/RefundApplicationDTO.java

@@ -0,0 +1,27 @@
+package com.rongwe.zhsw.system.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RefundApplicationDTO {
+    //户号
+    private String userNumber;
+    //缴费记录ID
+    private String paymentRecordId;
+    //退款金额
+    private BigDecimal refundAmount;
+    //退款方式
+    private String refundMethod;
+
+    //退款类型
+    private String refundType;
+    //退款原因
+    private String refundReason;
+
+    //片区经理id
+    private String districtManagerId;
+    //经理id
+    private String managerId;
+}

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

@@ -0,0 +1,37 @@
+package com.rongwei.zhsw.system.controller;
+
+import com.rongwe.zhsw.system.dto.PaymentRequestDTO;
+import com.rongwe.zhsw.system.dto.RefundApplicationDTO;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.zhsw.system.service.SwRefundRequestRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 退款申请记录(SwRefundRequestRecord)表控制层
+ *
+ * @author makejava
+ * @since 2025-03-13 17:28:45
+ */
+@RestController
+@RequestMapping("/swRefundRequestRecord")
+public class SwRefundRequestRecordController {
+
+    @Autowired
+    private SwRefundRequestRecordService swRefundRequestRecordService;
+
+
+
+    @PostMapping("/refundApplication")
+    @ResponseBody
+    public R refundApplication(@RequestBody RefundApplicationDTO refundApplicationDTO){
+        try {
+            return  swRefundRequestRecordService.refundApplication(refundApplicationDTO);
+        }catch (Exception e){
+            return R.error(e.getMessage());
+        }
+    }
+
+
+}
+