浏览代码

窗口缴费

huangpeng 5 月之前
父节点
当前提交
4d9c1bb2cf
共有 26 个文件被更改,包括 1298 次插入6 次删除
  1. 55 0
      zhsw-common/src/main/java/com/rongwei/sfcommon/utils/CXCommonUtils.java
  2. 37 0
      zhsw-common/src/main/java/com/rongwei/sfcommon/utils/SaveConstans.java
  3. 19 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwBillManagementPaidDao.java
  4. 25 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwBillManagementUnpaidDao.java
  5. 17 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwBillingRecordDao.java
  6. 5 1
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwUserManagementMapper.java
  7. 16 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwBillManagementPaidService.java
  8. 15 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwBillManagementUnpaidService.java
  9. 20 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwBillingRecordService.java
  10. 4 1
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwUserManagementService.java
  11. 19 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwBillManagementPaidServiceImpl.java
  12. 19 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwBillManagementUnpaidServiceImpl.java
  13. 243 0
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwBillingRecordServiceImpl.java
  14. 17 1
      zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwUserManagementServiceImpl.java
  15. 20 0
      zhsw-common/src/main/resources/mybatis/SwBillManagementUnpaidDao.xml
  16. 5 0
      zhsw-common/src/main/resources/mybatis/SwUserManagementMapper.xml
  17. 188 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/domain/SwBillManagementPaidDo.java
  18. 186 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/domain/SwBillManagementUnpaidDo.java
  19. 197 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/domain/SwBillingRecordDo.java
  20. 1 1
      zhsw-entity/src/main/java/com/rongwe/zhsw/domian/SwUserManagement.java
  21. 13 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/dto/PaymentRequestDTO.java
  22. 97 0
      zhsw-server/src/main/java/com/rongwei/zhsw/config/zhswDataSourceConfig.java
  23. 23 0
      zhsw-server/src/main/java/com/rongwei/zhsw/controller/SwBillManagementPaidController.java
  24. 17 0
      zhsw-server/src/main/java/com/rongwei/zhsw/controller/SwBillManagementUnpaidController.java
  25. 37 0
      zhsw-server/src/main/java/com/rongwei/zhsw/controller/SwBillingRecordController.java
  26. 3 2
      zhsw-server/src/main/resources/bootstrap.yml

+ 55 - 0
zhsw-common/src/main/java/com/rongwei/sfcommon/utils/CXCommonUtils.java

@@ -0,0 +1,55 @@
+package com.rongwei.sfcommon.utils;
+
+
+import com.rongwei.commonservice.service.RedisService;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * CXCommonUtils class
+ *
+ * @author XH
+ * @date 2023/12/15
+ */
+@Component
+public class CXCommonUtils {
+    private static final Logger log = LoggerFactory.getLogger(CXCommonUtils.class.getName());
+    @Autowired
+    private RedisService autoRedisService;
+
+    private static RedisService redisService;
+
+
+    @PostConstruct
+    public void info() {
+        redisService = autoRedisService;
+
+    }
+
+
+
+    public static SysUserVo getCurrentUser() {
+        // 获取当前登录人信息
+        SysUserVo currUser = null;
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attributes != null) {
+            HttpServletRequest request = attributes.getRequest();
+            if (request != null) {
+                String token = request.getHeader("token");
+                if (StringUtils.isNotEmpty(token)) {
+                    currUser = redisService.getLoginUser(token);
+                }
+            }
+        }
+        return currUser;
+    }
+
+}

+ 37 - 0
zhsw-common/src/main/java/com/rongwei/sfcommon/utils/SaveConstans.java

@@ -0,0 +1,37 @@
+package com.rongwei.sfcommon.utils;
+
+public class SaveConstans {
+
+
+
+    public static class billInfo {
+
+        /**
+         * 账单待缴费状态  ----------代缴
+         */
+        public static final String PENDINGSTATUS = "2";
+
+        /**
+         * 账单待缴费状态  ----------实缴
+         */
+        public static final String PAIDINSTATUS = "3";
+
+
+    }
+
+    public static class billReccord {
+
+        /**
+         *  缴费记录缴费状态   ------已缴费
+         */
+        public static final String PAIDSTATUS = "1";
+
+        /**
+         * 数据来源  ---窗口收费
+         */
+        public static final String DATASOURCEWINSOW = "1";
+
+
+
+    }
+}

+ 19 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwBillManagementPaidDao.java

@@ -0,0 +1,19 @@
+package com.rongwei.zhsw.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.zhsw.domain.SwBillManagementPaidDo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 账单管理(按年分表)(已缴,退款)(SwBillManagementPaid)表数据库访问层
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:11
+ */
+@Mapper
+public interface SwBillManagementPaidDao extends BaseMapper<SwBillManagementPaidDo> {
+
+
+}
+

+ 25 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwBillManagementUnpaidDao.java

@@ -0,0 +1,25 @@
+package com.rongwei.zhsw.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.zhsw.domain.SwBillManagementUnpaidDo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 账单管理(按年分表)(预收,未缴)(SwBillManagementUnpaid)表数据库访问层
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:13
+ */
+@Mapper
+public interface SwBillManagementUnpaidDao extends BaseMapper<SwBillManagementUnpaidDo> {
+
+
+
+
+    int deleteByIds(@Param("idList") List<String> idList);
+}
+

+ 17 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwBillingRecordDao.java

@@ -0,0 +1,17 @@
+package com.rongwei.zhsw.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.zhsw.domain.SwBillingRecordDo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 缴费记录(SwBillingRecord)表数据库访问层
+ *
+ * @author makejava
+ * @since 2025-03-07 16:35:07
+ */
+@Mapper
+public interface SwBillingRecordDao extends BaseMapper<SwBillingRecordDo> {
+}
+

+ 5 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/sys/dao/SwUserManagementMapper.java

@@ -2,7 +2,10 @@ package com.rongwei.zhsw.sys.dao;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.rongwe.zhsw.domian.SwUserManagement;
+import com.rongwe.zhsw.domain.SwUserManagement;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
 
 /**
 * @author libai
@@ -12,6 +15,7 @@ import com.rongwe.zhsw.domian.SwUserManagement;
 */
 public interface SwUserManagementMapper extends BaseMapper<SwUserManagement> {
 
+    void balanceAdd(@Param("id") String id, @Param("balanceAdd") BigDecimal balanceAdd);
 }
 
 

+ 16 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwBillManagementPaidService.java

@@ -0,0 +1,16 @@
+package com.rongwei.zhsw.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.zhsw.domain.SwBillManagementPaidDo;
+
+/**
+ * 账单管理(按年分表)(已缴,退款)(SwBillManagementPaid)表服务接口
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:12
+ */
+public interface SwBillManagementPaidService extends IService<SwBillManagementPaidDo> {
+
+
+
+}

+ 15 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwBillManagementUnpaidService.java

@@ -0,0 +1,15 @@
+package com.rongwei.zhsw.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.zhsw.domain.SwBillManagementUnpaidDo;
+
+/**
+ * 账单管理(按年分表)(预收,未缴)(SwBillManagementUnpaid)表服务接口
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:13
+ */
+public interface SwBillManagementUnpaidService extends IService<SwBillManagementUnpaidDo> {
+
+
+}

+ 20 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwBillingRecordService.java

@@ -0,0 +1,20 @@
+package com.rongwei.zhsw.sys.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.zhsw.dto.PaymentRequestDTO;
+import com.rongwei.rwcommon.base.R;
+import com.rongwe.zhsw.domain.SwBillingRecordDo;
+
+/**
+ * 缴费记录(SwBillingRecord)表服务接口
+ *
+ * @author makejava
+ * @since 2025-03-07 16:35:09
+ */
+public interface SwBillingRecordService extends IService<SwBillingRecordDo> {
+
+
+    R windowPayment(PaymentRequestDTO paymentRequestDTO) throws Exception;
+
+}

+ 4 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/SwUserManagementService.java

@@ -2,7 +2,9 @@ package com.rongwei.zhsw.sys.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.rongwe.zhsw.domian.SwUserManagement;
+import com.rongwe.zhsw.domain.SwUserManagement;
+
+import java.math.BigDecimal;
 
 /**
 * @author libai
@@ -11,4 +13,5 @@ import com.rongwe.zhsw.domian.SwUserManagement;
 */
 public interface SwUserManagementService extends IService<SwUserManagement> {
 
+    void balanceAdd(String id, BigDecimal balanceAdd);
 }

+ 19 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwBillManagementPaidServiceImpl.java

@@ -0,0 +1,19 @@
+package com.rongwei.zhsw.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.zhsw.sys.dao.SwBillManagementPaidDao;
+import com.rongwei.zhsw.sys.service.SwBillManagementPaidService;
+import com.rongwe.zhsw.domain.SwBillManagementPaidDo;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 账单管理(按年分表)(已缴,退款)(SwBillManagementPaid)表服务实现类
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:13
+ */
+@Service
+public class SwBillManagementPaidServiceImpl  extends ServiceImpl<SwBillManagementPaidDao, SwBillManagementPaidDo> implements SwBillManagementPaidService {
+
+}

+ 19 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwBillManagementUnpaidServiceImpl.java

@@ -0,0 +1,19 @@
+package com.rongwei.zhsw.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.zhsw.sys.dao.SwBillManagementUnpaidDao;
+import com.rongwei.zhsw.sys.service.SwBillManagementUnpaidService;
+import com.rongwe.zhsw.domain.SwBillManagementUnpaidDo;
+import org.springframework.stereotype.Service;
+
+/**
+ * 账单管理(按年分表)(预收,未缴)(SwBillManagementUnpaid)表服务实现类
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:13
+ */
+@Service
+public class SwBillManagementUnpaidServiceImpl  extends ServiceImpl<SwBillManagementUnpaidDao, SwBillManagementUnpaidDo> implements SwBillManagementUnpaidService {
+
+
+}

+ 243 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwBillingRecordServiceImpl.java

@@ -0,0 +1,243 @@
+package com.rongwei.zhsw.sys.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwe.zhsw.domain.SwUserManagement;
+import com.rongwe.zhsw.dto.PaymentRequestDTO;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.utils.SecurityUtil;
+import com.rongwei.zhsw.sys.dao.SwBillManagementUnpaidDao;
+import com.rongwei.zhsw.sys.dao.SwBillingRecordDao;
+import com.rongwei.zhsw.sys.service.SwBillManagementPaidService;
+import com.rongwei.zhsw.sys.service.SwBillManagementUnpaidService;
+import com.rongwei.zhsw.sys.service.SwBillingRecordService;
+import com.rongwe.zhsw.domain.SwBillManagementPaidDo;
+import com.rongwe.zhsw.domain.SwBillManagementUnpaidDo;
+import com.rongwe.zhsw.domain.SwBillingRecordDo;
+import com.rongwei.zhsw.sys.service.SwUserManagementService;
+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.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.rongwei.sfcommon.utils.SaveConstans.billInfo.PAIDINSTATUS;
+import static com.rongwei.sfcommon.utils.SaveConstans.billInfo.PENDINGSTATUS;
+import static com.rongwei.sfcommon.utils.SaveConstans.billReccord.PAIDSTATUS;
+
+/**
+ * 缴费记录(SwBillingRecord)表服务实现类
+ *
+ * @author makejava
+ * @since 2025-03-07 16:35:09
+ */
+@Service
+public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao, SwBillingRecordDo> implements SwBillingRecordService {
+
+
+    @Autowired
+    private SwBillingRecordService swBillingRecordService;
+
+    @Autowired
+    private SwBillManagementPaidService swBillManagementPaidService;
+
+    @Autowired
+    private SwBillManagementUnpaidService swBillManagementUnpaidService;
+
+    @Autowired
+    private SwBillManagementUnpaidDao swBillManagementUnpaidDao;
+
+    @Autowired
+    private SwUserManagementService swUserManagementService;
+
+
+    /**
+     * 缴费记录生成
+     * @param paymentRequestDTO
+     * @return
+     * @throws Exception
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R windowPayment(PaymentRequestDTO paymentRequestDTO) throws Exception {
+        List<String> ids = paymentRequestDTO.getIds();
+        BigDecimal paidin = paymentRequestDTO.getPaidin();
+        String datasource = paymentRequestDTO.getDatasource();
+        //1. 根据户号查询 待缴费 状态 无缴费记录的 的待缴费账单
+        LambdaQueryWrapper<SwBillManagementUnpaidDo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.in(SwBillManagementUnpaidDo::getId, ids)
+                .eq(SwBillManagementUnpaidDo::getStatus,PENDINGSTATUS)
+                .eq(SwBillManagementUnpaidDo::getDeleted,"0");
+
+        List<SwBillManagementUnpaidDo> list = swBillManagementUnpaidService.list(lambdaQueryWrapper);
+
+        //2.校验账单数据
+        checkBillingData(list,ids);
+
+        //生成缴费记录
+        SwBillingRecordDo swBillingRecordDo = addNewBillRecord(paidin,datasource,list);
+        swBillingRecordService.save(swBillingRecordDo);
+
+        //4.生成已经缴费账单
+//        List<SwBillManagementPaidDo> paidDos = addNewPaids(list, swBillingRecordDo);
+//        swBillManagementPaidService.saveBatch(paidDos);
+
+        //5.删除 待收账单数据
+        swBillManagementUnpaidDao.deleteByIds(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 生成缴费账单
+     *
+     * @param list
+     * @param swBillingRecordDo
+     * @return
+     */
+    private List<SwBillManagementPaidDo> addNewPaids(List<SwBillManagementUnpaidDo> list, SwBillingRecordDo swBillingRecordDo) {
+        List<SwBillManagementPaidDo> paidDos =new ArrayList<>();
+        for (SwBillManagementUnpaidDo unpaidDo : list) {
+            SwBillManagementPaidDo paidDo = new SwBillManagementPaidDo();
+            BeanUtils.copyProperties(unpaidDo,paidDo);
+            paidDo.setStatus(PAIDINSTATUS);  // 实缴
+            paidDo.setPaymentrecordid(swBillingRecordDo.getId()); //缴费记录ID
+            paidDos.add(paidDo);
+        }
+        return paidDos;
+
+    }
+
+    /**
+     * 生成新的缴费账单
+     *
+     * @param paidin
+     * @param datasource
+     * @param list
+     */
+    private SwBillingRecordDo 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));
+        //     SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+//        add.setTollcollectorid(currentUser.getId());
+//        add.setTollcollectorname(currentUser.getName());
+//        add.setTenantid(currentUser.getTenantid());
+
+        // list 汇总计算
+        BigDecimal allfeewaiver =new BigDecimal(0);
+        BigDecimal oughttohavepaid =new BigDecimal("0");
+        BigDecimal overduepaymentfine =new BigDecimal(0);
+        List<SwBillManagementPaidDo> paidDos =new ArrayList<>();
+        for (SwBillManagementUnpaidDo unpaidDo : list) {
+            allfeewaiver = allfeewaiver.add(unpaidDo.getFeewaiver()==null?BigDecimal.ZERO:unpaidDo.getFeewaiver());
+            oughttohavepaid =oughttohavepaid.add(unpaidDo.getOughttohavepaid()==null?BigDecimal.ZERO:unpaidDo.getOughttohavepaid());
+            overduepaymentfine = overduepaymentfine.add(unpaidDo.getOverduepaymentfine()==null?BigDecimal.ZERO:unpaidDo.getOverduepaymentfine());
+
+            SwBillManagementPaidDo paidDo = new SwBillManagementPaidDo();
+            BeanUtils.copyProperties(unpaidDo,paidDo);
+            paidDo.setStatus(PAIDINSTATUS);  // 实缴
+            paidDo.setPaymentrecordid(add.getId()); //缴费记录ID
+            paidDos.add(paidDo);
+
+        }
+        //生成已经缴费账单
+        swBillManagementPaidService.saveBatch(paidDos);
+
+        add.setAllfeewaiver(allfeewaiver); //总减免
+        add.setOughttohavepaid(oughttohavepaid); //原应缴
+        add.setOverduepaymentfine(overduepaymentfine); //滞纳金
+
+        //根据户号获取 用户记录
+        SwUserManagement swUserManagement = swUserManagementService.getBaseMapper().
+                selectOne(new LambdaQueryWrapper<SwUserManagement>().eq(SwUserManagement::getUsernumber, add.getUsernumber()));
+        // 用户 账户余额
+        BigDecimal accountbalance = swUserManagement.getAccountbalance()==null?BigDecimal.ZERO:swUserManagement.getAccountbalance();
+
+        add.setAccountbalance(accountbalance); // 账户余额
+        add.setOriginalbalance(accountbalance);  //原余额(元)   = 用户表 用户余额
+
+        add.setPaidin(paidin);  //实缴
+
+        add.setActualdue(oughttohavepaid.subtract(allfeewaiver).subtract(overduepaymentfine));  //实际应缴(元)     =  原应缴 - 总减免 - 滞纳金
+        add.setAfterpaymentbalance(paidin.subtract(add.getActualdue())); //缴费后余额 =  实缴 - 实际应缴(元)
+        add.setDatasource(datasource); //数据来源
+        //1、当 【余额】 >=【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】  时,【余额】字段=【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】
+        //2、当 【余额】 <【原应缴(元)】-【总减免(元)】 -【滞纳金(元)】  时,【余额】字段=【账户余额(元)】
+        if(add.getAccountbalance().compareTo(add.getAccountbalance())>=0){
+            add.setBalancededuction(add.getAccountbalance());// 余额抵扣
+        }else {
+            add.setBalancededuction(add.getAccountbalance());// 余额抵扣
+        }
+
+        //更新用户表 余额字段
+        swUserManagementService.balanceAdd(swUserManagement.getId(),paidin.subtract(add.getActualdue()));
+
+
+     //   add.setTotalpaidin() //总已缴
+        return add;
+
+    }
+
+    /**
+     * 生成缴费编号  年月日 + 3位数 随机数
+     * @return
+     */
+    private String CreateBillingNumber() {
+        // 获取当前时间并格式化为 "yyyyMMddHHmmss"
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        String formattedDateTime = now.format(formatter);
+
+        // 生成一个三位数的随机数
+        Random random = new Random();
+        int randomNumber = random.nextInt(1000); // 生成0到999之间的随机数
+        String randomStr = String.format("%03d", randomNumber); // 格式化为三位数,不足三位补零
+        return formattedDateTime + randomStr;
+
+    }
+
+    /**
+     * 校验账单数据
+     *
+     * @param list
+     * @param ids
+     */
+    private void checkBillingData(List<SwBillManagementUnpaidDo> list,  List<String> ids) throws Exception {
+        //判空
+        if (list.isEmpty()) throw new Exception("该户号下待缴账单已全部缴费,请重新选择户号!");
+        //个别 被缴费
+        if (list.size() < ids.size()) {
+            //去缴费账单中查询 已缴费的记录
+            List<SwBillManagementPaidDo> collect = swBillManagementPaidService.listByIds(ids).stream().collect(Collectors.toList());
+            StringBuffer errorMsg = new StringBuffer("账单编号为【");
+
+            for (int i = 0; i < collect.size(); i++) {
+                if (i==collect.size()-1){
+                    errorMsg.append(collect.get(i).getBillnumber());
+                }else {
+                    errorMsg.append(collect.get(i).getBillnumber()+",");
+                }
+            }
+
+            errorMsg.append("]的账单已缴费,请重新选择户号!");
+            throw new Exception(errorMsg.toString());
+        }
+
+
+    }
+
+
+}

+ 17 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/sys/service/impl/SwUserManagementServiceImpl.java

@@ -2,11 +2,14 @@ package com.rongwei.zhsw.sys.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
-import com.rongwe.zhsw.domian.SwUserManagement;
+import com.rongwe.zhsw.domain.SwUserManagement;
 import com.rongwei.zhsw.sys.dao.SwUserManagementMapper;
 import com.rongwei.zhsw.sys.service.SwUserManagementService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+
 /**
 * @author libai
 * @description 针对表【sw_user_management(用户管理)】的数据库操作Service实现
@@ -16,6 +19,19 @@ import org.springframework.stereotype.Service;
 public class SwUserManagementServiceImpl extends ServiceImpl<SwUserManagementMapper, SwUserManagement>
     implements SwUserManagementService {
 
+    @Autowired
+    SwUserManagementMapper swUserManagementMapper;
+
+    /**
+     * 余额累加值 修改   a = a +  balanceAdd
+     *
+     * @param id
+     * @param balanceAdd
+     */
+    @Override
+    public void balanceAdd(String id, BigDecimal balanceAdd) {
+        swUserManagementMapper.balanceAdd(id,balanceAdd);
+    }
 }
 
 

+ 20 - 0
zhsw-common/src/main/resources/mybatis/SwBillManagementUnpaidDao.xml

@@ -0,0 +1,20 @@
+<?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.rongwei.zhsw.sys.dao.SwBillManagementUnpaidDao">
+
+    <delete id="deleteByIds">
+
+        delete from sw_bill_management_unpaid
+        <where>
+            <if test="idList != null and idList.size() > 0">
+                ID in
+                <foreach collection="idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+
+    </delete>
+</mapper>

+ 5 - 0
zhsw-common/src/main/resources/mybatis/SwUserManagementMapper.xml

@@ -3,5 +3,10 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.rongwei.zhsw.sys.dao.SwUserManagementMapper">
+
+    <update id="balanceAdd">
+        update sw_user_management set ACCOUNTBALANCE = ACCOUNTBALANCE + ${balanceAdd}
+        where  ID = #{id}
+    </update>
 </mapper>
 

+ 188 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/domain/SwBillManagementPaidDo.java

@@ -0,0 +1,188 @@
+package com.rongwe.zhsw.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 账单管理(按年分表)(已缴,退款)(SwBillManagementPaid)实体类
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sw_bill_management_paid")
+public class SwBillManagementPaidDo implements Serializable {
+    private static final long serialVersionUID = -12565293614671354L;
+/**
+     * 主键
+     */
+    private String id;
+/**
+     * 租户ID
+     */
+    private String tenantid;
+/**
+     * 扩展json格式配置
+     */
+    private String roption;
+/**
+     * 是否删除Y/N
+     */
+    private String deleted;
+/**
+     * 备注
+     */
+    private String remark;
+/**
+     * 创建时间
+     */
+    private Date createdate;
+/**
+     * 创建用户ID
+     */
+    private String createuserid;
+/**
+     * 修改日期
+     */
+    private Date modifydate;
+/**
+     * 修改用户ID
+     */
+    private String modifyuserid;
+/**
+     * 创建人
+     */
+    private String createusername;
+/**
+     * 修改人
+     */
+    private String modifyusername;
+/**
+     * 账单编号
+     */
+    private String billnumber;
+/**
+     * 年
+     */
+    private Integer year;
+/**
+     * 月
+     */
+    private Integer month;
+/**
+     * 小区/村落/街道名称
+     */
+    private String villagename;
+/**
+     * 户号
+     */
+    private String usernumber;
+/**
+     * 户名
+     */
+    private String username;
+/**
+     * 用户类别
+     */
+    private String usertype;
+/**
+     * 详细地址
+     */
+    private String address;
+/**
+     * 单价(元)
+     */
+    private BigDecimal unitprice;
+/**
+     * 当期用水(t)
+     */
+    private BigDecimal currentwateruse;
+/**
+     * 减免用水(t)
+     */
+    private BigDecimal reducedwateruse;
+/**
+     * 减免费用
+(元)
+     */
+    private BigDecimal feewaiver;
+/**
+     * 原应缴
+(元)
+     */
+    private BigDecimal oughttohavepaid;
+/**
+     * 用水类型
+     */
+    private String watertype;
+/**
+     * 实际应缴
+(元)
+     */
+    private BigDecimal actualdue;
+/**
+     * 上次抄表日期
+     */
+    private Date lastmeterreadingdate;
+/**
+     * 上次抄表数(t)
+     */
+    private BigDecimal lastmeterreading;
+/**
+     * 本次抄表日期
+     */
+    private Date thismeterreadingdate;
+/**
+     * 本次抄表数(t)
+     */
+    private BigDecimal thismeterreading;
+/**
+     * 状态(预收,未缴,实缴,退款)
+     */
+    private String status;
+/**
+     * 缴费记录ID
+     */
+    private String paymentrecordid;
+/**
+     * 开票状态
+     */
+    private String invoicestatus;
+/**
+     * 票据状态
+     */
+    private String billstatus;
+/**
+     * 发票附件
+     */
+    private String invoicefiles;
+/**
+     * 滞纳金
+     */
+    private BigDecimal latefees;
+/**
+     * 退款金额
+     */
+    private BigDecimal refundamount;
+/**
+     * 余额划扣金额
+     */
+    private BigDecimal balancedebitamount;
+/**
+     * 滞纳金
+     */
+    private BigDecimal overduepaymentfine;
+
+
+
+
+}
+

+ 186 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/domain/SwBillManagementUnpaidDo.java

@@ -0,0 +1,186 @@
+package com.rongwe.zhsw.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 账单管理(按年分表)(预收,未缴)(SwBillManagementUnpaid)实体类
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sw_bill_management_unpaid")
+public class SwBillManagementUnpaidDo implements Serializable {
+    private static final long serialVersionUID = -66298835868317923L;
+/**
+     * 主键
+     */
+    private String id;
+/**
+     * 租户ID
+     */
+    private String tenantid;
+/**
+     * 扩展json格式配置
+     */
+    private String roption;
+/**
+     * 是否删除Y/N
+     */
+    private String deleted;
+/**
+     * 备注
+     */
+    private String remark;
+/**
+     * 创建时间
+     */
+    private Date createdate;
+/**
+     * 创建用户ID
+     */
+    private String createuserid;
+/**
+     * 修改日期
+     */
+    private Date modifydate;
+/**
+     * 修改用户ID
+     */
+    private String modifyuserid;
+/**
+     * 创建人
+     */
+    private String createusername;
+/**
+     * 修改人
+     */
+    private String modifyusername;
+/**
+     * 账单编号
+     */
+    private String billnumber;
+/**
+     * 年
+     */
+    private Integer year;
+/**
+     * 月
+     */
+    private Integer month;
+/**
+     * 小区/村落/街道名称
+     */
+    private String villagename;
+/**
+     * 户号
+     */
+    private String usernumber;
+/**
+     * 户名
+     */
+    private String username;
+/**
+     * 用户类别
+     */
+    private String usertype;
+/**
+     * 详细地址
+     */
+    private String address;
+/**
+     * 单价(元)
+     */
+    private BigDecimal unitprice;
+/**
+     * 当期用水(t)
+     */
+    private BigDecimal currentwateruse;
+/**
+     * 减免用水(t)
+     */
+    private BigDecimal reducedwateruse;
+/**
+     * 减免费用
+(元)
+     */
+    private BigDecimal feewaiver;
+/**
+     * 原应缴
+(元)
+     */
+    private BigDecimal oughttohavepaid;
+/**
+     * 用水类型
+     */
+    private String watertype;
+/**
+     * 实际应缴
+(元)
+     */
+    private BigDecimal actualdue;
+/**
+     * 上次抄表日期
+     */
+    private Date lastmeterreadingdate;
+/**
+     * 上次抄表数(t)
+     */
+    private BigDecimal lastmeterreading;
+/**
+     * 本次抄表日期
+     */
+    private Date thismeterreadingdate;
+/**
+     * 本次抄表数(t)
+     */
+    private BigDecimal thismeterreading;
+/**
+     * 状态(预收,未缴,实缴,退款)
+     */
+    private String status;
+/**
+     * 缴费记录ID
+     */
+    private String paymentrecordid;
+/**
+     * 开票状态
+     */
+    private String invoicestatus;
+/**
+     * 票据状态
+     */
+    private String billstatus;
+/**
+     * 发票附件
+     */
+    private String invoicefiles;
+/**
+     * 滞纳金
+     */
+    private BigDecimal latefees;
+/**
+     * 退款金额
+     */
+    private BigDecimal refundamount;
+/**
+     * 余额划扣金额
+     */
+    private BigDecimal balancedebitamount;
+/**
+     * 滞纳金
+     */
+    private BigDecimal overduepaymentfine;
+
+
+}
+

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

@@ -0,0 +1,197 @@
+package com.rongwe.zhsw.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 缴费记录(SwBillingRecord)实体类
+ *
+ * @author makejava
+ * @since 2025-03-07 16:35:08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sw_billing_record")
+public class SwBillingRecordDo implements Serializable {
+    private static final long serialVersionUID = -25780597568495659L;
+/**
+     * 主键
+     */
+    private String id;
+/**
+     * 租户ID
+     */
+    private String tenantid;
+/**
+     * 扩展json格式配置
+     */
+    private String roption;
+/**
+     * 是否删除Y/N
+     */
+    private String deleted;
+/**
+     * 备注
+     */
+    private String remark;
+/**
+     * 创建时间
+     */
+    private Date createdate;
+/**
+     * 创建用户ID
+     */
+    private String createuserid;
+/**
+     * 修改日期
+     */
+    private Date modifydate;
+/**
+     * 修改用户ID
+     */
+    private String modifyuserid;
+/**
+     * 创建人
+     */
+    private String createusername;
+/**
+     * 修改人
+     */
+    private String modifyusername;
+/**
+     * 缴费编号
+     */
+    private String billingnumber;
+/**
+     * 收费日期
+     */
+    private Date chargedate;
+/**
+     * 收费员ID
+     */
+    private String tollcollectorid;
+/**
+     * 收费员名称
+     */
+    private String tollcollectorname;
+/**
+     * 户号
+     */
+    private String usernumber;
+/**
+     * 户名
+     */
+    private String username;
+/**
+     * 用水类型
+     */
+    private String watertype;
+/**
+     * 用户类别
+     */
+    private String usertype;
+/**
+     * 详细地址
+     */
+    private String address;
+/**
+     * 缴费状态
+     */
+    private String payfeesstatus;
+/**
+     * 原余额(元)
+     */
+    private BigDecimal originalbalance;
+/**
+     * 总减免
+(元)
+     */
+    private BigDecimal allfeewaiver;
+/**
+     * 原应缴
+(元)
+     */
+    private BigDecimal oughttohavepaid;
+/**
+     * 实际应缴
+(元)
+     */
+    private BigDecimal actualdue;
+/**
+     * 实缴
+(元)
+     */
+    private BigDecimal paidin;
+/**
+     * 缴费后余额
+(元)
+     */
+    private BigDecimal afterpaymentbalance;
+/**
+     * 数据来源(窗口缴费,微信缴费,自动缴费)
+     */
+    private String datasource;
+/**
+     * 商户支付编号
+     */
+    private String merchantpaymentnumber;
+/**
+     * 微信支付订单号
+     */
+    private String wechatpayordernumber;
+/**
+     * 商品描述
+     */
+    private String productdescription;
+/**
+     * 支付金额
+(元)
+     */
+    private BigDecimal amountpaid;
+/**
+     * 支付完成时间
+     */
+    private Date paymentcompletiontime;
+/**
+     * 订单创建时间
+     */
+    private Date ordercreationtime;
+/**
+     * 支付状态
+     */
+    private String paymentstatus;
+/**
+     * 年份(可能跨年 2024,2025)
+     */
+    private Integer year;
+/**
+     * 滞纳金
+     */
+    private BigDecimal overduepaymentfine;
+/**
+     * 余额抵扣
+     */
+    private BigDecimal balancededuction;
+/**
+     * 总已缴
+     */
+    private BigDecimal totalpaidin;
+/**
+     * 充值缴费金额
+     */
+    private String topuppaymentamount;
+
+    /**
+     * 账户余额
+     */
+    private BigDecimal accountbalance;
+
+}
+

+ 1 - 1
zhsw-entity/src/main/java/com/rongwe/zhsw/domian/SwUserManagement.java

@@ -1,4 +1,4 @@
-package com.rongwe.zhsw.domian;
+package com.rongwe.zhsw.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;

+ 13 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/dto/PaymentRequestDTO.java

@@ -0,0 +1,13 @@
+package com.rongwe.zhsw.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class PaymentRequestDTO {
+    private BigDecimal paidin;
+    private List<String> ids;
+    private String  datasource;
+}

+ 97 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/config/zhswDataSourceConfig.java

@@ -0,0 +1,97 @@
+package com.rongwei.zhsw.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
+import com.alibaba.druid.wall.WallConfig;
+import com.alibaba.druid.wall.WallFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+import java.sql.SQLException;
+
+@Configuration
+public class zhswDataSourceConfig {
+
+    @Value("${spring.datasource.druid.url}")
+    private String dbUrl;
+    @Value("${spring.datasource.druid.username}")
+    private String username;
+    @Value("${spring.datasource.druid.password}")
+    private String password;
+    @Value("${spring.datasource.druid.driver-class-name}")
+    private String driverClassName;
+
+    @Autowired
+    private Environment evn;
+
+
+    /**
+     * 创建数据源对象
+     * @return data source
+     */
+    private DruidDataSource createDefaultDataSource() throws SQLException {
+        //如果不指定数据库类型,则使用默认数据库连接
+        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
+        dataSource.setName("defaultDatasource");
+        dataSource.setUrl(dbUrl+"&allowMultiQueries=true");
+        dataSource.setUsername(username);
+        dataSource.setPassword(password);
+        dataSource.setDriverClassName(driverClassName);
+        dataSource.setResetStatEnable(true);
+        /*try {
+            dataSource.setFilters("stat,wall");
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }*/
+        dataSource.setInitialSize(8);
+        dataSource.setMaxActive(100);
+        dataSource.setMaxWait(7000);
+        dataSource.setTimeBetweenEvictionRunsMillis(60000);
+        dataSource.setMinEvictableIdleTimeMillis(300000);
+        dataSource.setRemoveAbandoned(true);
+        dataSource.setRemoveAbandonedTimeout(300);
+        dataSource.setLogAbandoned(true);
+
+        // 连接最大存活时间,默认是-1(不限制物理连接时间),从创建连接开始计算,如果超过该时间,则会被清理
+//        dataSource.setPhyTimeoutMillis(15000);
+        dataSource.setValidationQuery("select 1");
+        dataSource.setTestWhileIdle(true);
+        dataSource.setTestOnBorrow(false);
+        dataSource.setTestOnReturn(false);
+        dataSource.setPoolPreparedStatements(false);
+        dataSource.setMaxOpenPreparedStatements(20);
+        // 开启多条SQL语句批量执行
+        WallConfig wallConfig = new WallConfig();
+        wallConfig.setMultiStatementAllow(true);
+        WallFilter wallFilter = new WallFilter();
+        wallFilter.setConfig(wallConfig);
+
+        /*List<Filter> filters = new ArrayList<>();
+        filters.add(wallFilter);
+        dataSource.setProxyFilters(filters);*/
+
+        dataSource.getProxyFilters().add(wallFilter);
+        dataSource.setFilters("stat,wall");//配置文件中的配置失效必须手动设置
+        return dataSource;
+    }
+
+    /*@Bean
+    @Primary
+    public DynamicDataSource dataSource() throws SQLException {
+        DynamicDataSource dynamicDataSource = new DynamicDataSource();
+        DruidDataSource defaultDataSource = createDefaultDataSource();
+        DynamicDataSource.dataSourcesMap.put("defaultDataSource", defaultDataSource);
+        dynamicDataSource.setTargetDataSources(DynamicDataSource.dataSourcesMap);
+        return dynamicDataSource;
+    }*/
+
+//    @Primary
+    @Bean
+    public DruidDataSource dataSourceOne() throws SQLException{
+        return createDefaultDataSource();
+    }
+
+}

+ 23 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/controller/SwBillManagementPaidController.java

@@ -0,0 +1,23 @@
+package com.rongwei.zhsw.controller;
+
+
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 账单管理(按年分表)(已缴,退款)(SwBillManagementPaid)表控制层
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:09
+ */
+@RestController
+@RequestMapping("swBillManagementPaid")
+public class SwBillManagementPaidController {
+    /**
+     * 服务对象
+     */
+
+
+}
+

+ 17 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/controller/SwBillManagementUnpaidController.java

@@ -0,0 +1,17 @@
+package com.rongwei.zhsw.controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 账单管理(按年分表)(预收,未缴)(SwBillManagementUnpaid)表控制层
+ *
+ * @author makejava
+ * @since 2025-03-07 16:49:13
+ */
+@RestController
+@RequestMapping("swBillManagementUnpaid")
+public class SwBillManagementUnpaidController {
+
+}
+

+ 37 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/controller/SwBillingRecordController.java

@@ -0,0 +1,37 @@
+package com.rongwei.zhsw.controller;
+import com.rongwe.zhsw.dto.PaymentRequestDTO;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.zhsw.sys.service.SwBillingRecordService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 缴费记录(SwBillingRecord)表控制层
+ *
+ * @author makejava
+ * @since 2025-03-07 16:35:01
+ */
+@RestController
+@RequestMapping("/swBillingRecord")
+public class SwBillingRecordController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private SwBillingRecordService swBillingRecordService;
+
+
+
+    @PostMapping("/windowPayment")
+    @ResponseBody
+    public R windowPayment(@RequestBody PaymentRequestDTO paymentRequestDTO){
+        try {
+           return  swBillingRecordService.windowPayment(paymentRequestDTO);
+        }catch (Exception e){
+            return R.error(e.getMessage());
+        }
+    }
+}
+

+ 3 - 2
zhsw-server/src/main/resources/bootstrap.yml

@@ -39,11 +39,12 @@ client:
 mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    #    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
     map-underscore-to-camel-case: false
   #basepackage: com.rongwei.rwadmin.system.dao
-  xmlLocation: classpath:mybatis/**/*Dao.xml
+  xmlLocation: classpath:mybatis/*Dao.xml
   mapperLocations: "classpath:mybatis/**/*Dao.xml"
-  typeAliasesPackage: com.rongwei.rwcommonservers.**.domain
+  typeAliasesPackage: com.rongwei.zhsw.domain
   global-config:
     db-config:
       logic-delete-value: 1