Browse Source

feature 代码提交

xiahan 4 months ago
parent
commit
c2757bc93a

+ 13 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/MeterReadingService.java

@@ -0,0 +1,13 @@
+package com.rongwei.zhsw.system.service;
+
+import com.rongwei.rwcommon.base.R;
+
+/**
+ * MeterReadingService class
+ *
+ * @author XH
+ * @date 2025/03/28
+ */
+public interface MeterReadingService {
+    R removeRecord(String id);
+}

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

@@ -21,5 +21,6 @@ public interface SwBillingRecordService extends IService<SwBillingRecordDo> {
 
     R windowPayment(PaymentRequestDTO paymentRequestDTO);
 
+    R removeRecord(String id);
 
 }

+ 16 - 11
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/BillGenerationServiceImpl.java

@@ -17,6 +17,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.TransactionDefinition;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.DefaultTransactionDefinition;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -51,8 +53,11 @@ public class BillGenerationServiceImpl {
         }
     }
 
-    public void generateBill(List<SwWaterUsageEntryDo> swWaterUsageEntryDoList) {
+    @Async(value = "zhswThreadPool")
+    public void generateBill(List<SwWaterUsageEntryDo> swWaterUsageEntryDoList,ServletRequestAttributes attributes) {
+        RequestContextHolder.setRequestAttributes(attributes);
         SysUserVo currentUser = ZHSWCommonUtils.getCurrentUser();
+        ;
         log.info("当前生成账单的用户:{},所属的租户库为:{}",currentUser.getAccount(),currentUser.getTenantDo().getDskey());
         if (swWaterUsageEntryDoList == null || swWaterUsageEntryDoList.isEmpty()) {
             log.error("暂无需要生成账单的信息");
@@ -147,31 +152,31 @@ public class BillGenerationServiceImpl {
         dataSave(saveList, saveUsageEntryList, userSaveList);
     }
 
-    @Async(value = "zhswThreadPool")
-    public void generateBill(String id) {
-        log.info("开始给抄表记录:{},生成账单信息",id);
 
+    public void generateBill(String id,ServletRequestAttributes attributes) {
+        log.info("开始给抄表记录:{},生成账单信息",id);
         SwWaterUsageEntryDo swWaterUsageEntryDo = swWaterUsageEntryService.getById(id);
-        this.generateBill(Collections.singletonList(swWaterUsageEntryDo));
+        this.generateBill(Collections.singletonList(swWaterUsageEntryDo),attributes);
     }
 
-    @Async(value = "zhswThreadPool")
-    public void generateBill(List<String> ids, boolean a) {
+
+    public void generateBill(List<String> ids, boolean a,ServletRequestAttributes attributes) {
         if (ids.isEmpty()) {
             log.error("抄表记录ID为空");
             return;
         }
         log.info("开始给抄表记录:{},生成账单信息",ids);
-        this.generateBill(swWaterUsageEntryService.getBaseMapper().selectBatchIds(ids));
+        this.generateBill(swWaterUsageEntryService.getBaseMapper().selectBatchIds(ids),attributes);
     }
 
-    @Async(value = "zhswThreadPool")
-    public void generateBill() {
+
+    public void generateBill(ServletRequestAttributes attributes) {
+
         List<SwWaterUsageEntryDo> list = swWaterUsageEntryService.list(new LambdaQueryWrapper<SwWaterUsageEntryDo>()
                 .eq(SwWaterUsageEntryDo::getDeleted, "0")
                 .eq(SwWaterUsageEntryDo::getState, 0));
         log.info("开始给抄表记录:{},生成账单信息",list.stream().map(SwWaterUsageEntryDo::getId).collect(Collectors.toList()));
-        this.generateBill(list);
+        this.generateBill(list,attributes);
     }
 
     /**

+ 4 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/ImportExcelServiceImpl.java

@@ -16,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.io.File;
 import java.util.List;
@@ -64,7 +66,8 @@ public class ImportExcelServiceImpl implements ImportExcelService {
         log.error("数据保存时长:{}",startTime-entTime);
         List<String> ids = saveList.stream().map(SwWaterUsageEntryDo::getId).distinct().collect(Collectors.toList());
         startTime = System.currentTimeMillis();
-        billGenerationService.generateBill(ids, true);
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        billGenerationService.generateBill(ids, true,attributes);
         entTime = System.currentTimeMillis();
         log.error("账单生成时长:{}",startTime-entTime);
         return R.ok();

+ 92 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/MeterReadingServiceImpl.java

@@ -0,0 +1,92 @@
+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.rongwe.zhsw.system.domain.SwBillManagementPaidDo;
+import com.rongwe.zhsw.system.domain.SwBillManagementUnpaidDo;
+import com.rongwe.zhsw.system.domain.SwUserManagementDo;
+import com.rongwe.zhsw.system.domain.SwWaterUsageEntryDo;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.UtilsChecks;
+import com.rongwei.zhsw.system.service.MeterReadingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * MeterReadingServiceImpl class
+ *
+ * @author XH
+ * @date 2025/03/28
+ */
+@Service
+public class MeterReadingServiceImpl implements MeterReadingService {
+    private static final Logger log = LoggerFactory.getLogger(MeterReadingServiceImpl.class);
+    @Autowired
+    private  SwWaterUsageEntryServiceImpl swWaterUsageEntryService;
+
+    @Autowired
+    private SwUserManagementServiceImpl swUserManagementService;
+    @Autowired
+    private SwBillManagementUnpaidServiceImpl swBillManagementUnpaidService;
+
+    @Autowired
+    private SwBillManagementPaidServiceImpl swBillManagementPaidService;
+    @Override
+    @Transactional
+    public R removeRecord(String id) {
+        log.info("开始删除抄表记录:{}",id);
+        // 获取抄表记录
+        SwWaterUsageEntryDo swWaterUsageEntryDo = swWaterUsageEntryService.getById(id);
+        // 本次记录由换表生成无法删除
+        UtilsChecks.parameterCheck(()->"9".equals(swWaterUsageEntryDo.getReadingsource()),"本次抄表记录由换表生成无法删除","本次抄表记录由换表生成无法删除");
+        // 户号信息
+        String userNumber = swWaterUsageEntryDo.getUsernumber();
+        // 判断改抄表记录是否是最新的抄表
+        List<SwWaterUsageEntryDo> swWaterUsageEntryDoList = swWaterUsageEntryService.list(new LambdaQueryWrapper<SwWaterUsageEntryDo>()
+                .eq(SwWaterUsageEntryDo::getUsernumber, userNumber)
+                .gt(SwWaterUsageEntryDo::getCurrentreadingdate, swWaterUsageEntryDo.getCurrentreadingdate())
+        );
+        if(!swWaterUsageEntryDoList.isEmpty()){
+            log.error("当前抄表记录不是改户号下最新的一条记录,最新的记录为:{}",swWaterUsageEntryDoList.get(0).getId());
+            throw new CustomException("该抄表记录不是该户号最新的抄表记录,不允许删除!");
+        }
+        // 如果未生成直接删除并更新用户表信息
+        if(1!=swWaterUsageEntryDo.getState()){
+            swUserManagementService.update(new LambdaUpdateWrapper<SwUserManagementDo>()
+                    .eq(SwUserManagementDo::getUsernumber,userNumber)
+                    .set(SwUserManagementDo::getLastmeterreaddate,swWaterUsageEntryDo.getLastreadingdate())
+                    .set(SwUserManagementDo::getLastmeterreading,swWaterUsageEntryDo.getLastreading()));
+            return R.ok("该抄表记录已删除");
+        }
+        // 未缴账单
+        SwBillManagementUnpaidDo unpaidDo = swBillManagementUnpaidService.getOne(new LambdaQueryWrapper<SwBillManagementUnpaidDo>()
+                .eq(SwBillManagementUnpaidDo::getUsernumber, userNumber)
+                .eq(SwBillManagementUnpaidDo::getYear, swWaterUsageEntryDo.getYear())
+                .eq(SwBillManagementUnpaidDo::getPaymentrecordid, id));
+        // 已缴账单
+        SwBillManagementPaidDo paidDo = swBillManagementPaidService.getOne(new LambdaQueryWrapper<SwBillManagementPaidDo>()
+                .eq(SwBillManagementPaidDo::getUsernumber, userNumber)
+                .eq(SwBillManagementPaidDo::getYear, swWaterUsageEntryDo.getYear())
+                .eq(SwBillManagementPaidDo::getPaymentrecordid, id));
+        if(paidDo!=null){
+            log.error("该账单已缴费");
+            return R.ok("该抄表记录已存在已缴账单,不允许删除");
+        }
+        if(unpaidDo!=null){
+            swBillManagementUnpaidService.removeById(unpaidDo.getId());
+        }
+        swWaterUsageEntryService.removeById(id);
+        swUserManagementService.update(new LambdaUpdateWrapper<SwUserManagementDo>()
+                .eq(SwUserManagementDo::getUsernumber,userNumber)
+                .set(SwUserManagementDo::getLastmeterreaddate,swWaterUsageEntryDo.getLastreadingdate())
+                .set(SwUserManagementDo::getLastmeterreading,swWaterUsageEntryDo.getLastreading()));
+        return R.ok("该抄表记录已删除,且对应预收或待缴账单也已删除");
+    }
+}

+ 27 - 18
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwBillManagementUnpaidServiceImpl.java

@@ -116,8 +116,8 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
             // 原应缴
             BigDecimal oughttohavepaid = unpaidDo.getUnitprice().multiply(currentUsing);
             BigDecimal actualDue = oughttohavepaid.subtract(unpaidDo.getFeewaiver()).add(unpaidDo.getLatefees());
-            if(actualDue.compareTo(BigDecimal.ZERO)<=0){
-                actualDue=BigDecimal.ZERO;
+            if (actualDue.compareTo(BigDecimal.ZERO) <= 0) {
+                actualDue = BigDecimal.ZERO;
             }
             swBillManagementUnpaidService.update(new LambdaUpdateWrapper<SwBillManagementUnpaidDo>()
                     .eq(SwBillManagementUnpaidDo::getId, billId)
@@ -221,12 +221,12 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
             throw new CustomException("预收账单数量为空!");
         }
 
-        //1. 预收账单根据户号分组 创建时间正序
+        //1. 预收账单根据户号分组 抄表时间品牌需
         return unpaidDoList.stream()
                 .collect(Collectors.groupingBy(SwBillManagementUnpaidDo::getUsernumber,
                         Collectors.collectingAndThen(
                                 Collectors.toList(), list -> list.stream()
-                                        .sorted(Comparator.comparing(SwBillManagementUnpaidDo::getCreatedate))
+                                        .sorted(Comparator.comparing(SwBillManagementUnpaidDo::getThismeterreadingdate))
                                         .collect(Collectors.toList())
                         )
                 ));
@@ -252,39 +252,48 @@ public class SwBillManagementUnpaidServiceImpl extends ServiceImpl<SwBillManagem
 
         BigDecimal billAmount = BigDecimal.ZERO;
         List<SwBillManagementUnpaidDo> unpaidDos = new ArrayList<>();
+        // 生成的已缴账单实体
         SwBillManagementPaidDo paid;
 
 
         // 获取当前用户和批次信息
         SysUserVo currentUser = ZHSWCommonUtils.getCurrentUser();
         String paymentBatchId = SecurityUtil.getUUID();
+        // 实际应缴为0的账单信息
+        List<SwBillManagementUnpaidDo> ZeroDueData = swBillManagementUnpaidDos.stream()
+                .filter(data -> data.getActualdue().compareTo(BigDecimal.ZERO) <= 0)
+                .collect(Collectors.toList());
+        // 需要被删除的代缴账单信息
+        /**************实际应缴为0的数据**********************/
+        // List<SwBillManagementUnpaidDo> removeUnpaidDatas=new ArrayList<>();
+        for (SwBillManagementUnpaidDo zeroDueDatum : ZeroDueData) {
+            // 实体生成
+            paid = new SwBillManagementPaidDo();
+            BeanUtils.copyProperties(zeroDueDatum, paid);
+            paid.setStatus(PAIDINSTATUS);
+            paid.setPaymentrecordid(paymentBatchId);
+            ZHSWCommonUtils.initModelGeneralParameters(paid, null);
+            transferAccountDo.getPaidDoList().add(paid);
+        }
+        /**************实际应缴大于0的数据**********************/
+        List<SwBillManagementUnpaidDo> NoZeroDueData = swBillManagementUnpaidDos.stream()
+                .filter(data -> data.getActualdue().compareTo(BigDecimal.ZERO) > 0)
+                .collect(Collectors.toList());
 
-
-        //合并并排序账单
-        List<SwBillManagementUnpaidDo> sortedBills = mergeAndSortBills(swBillManagementUnpaidDos);
-
-        for (SwBillManagementUnpaidDo unpaidDo : sortedBills) {
-
-            if (unpaidDo == null) {
-                continue;
-            }
-
-
+        for (SwBillManagementUnpaidDo unpaidDo : NoZeroDueData) {
             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) {
                 //转正式账单后 生成缴费记录,生成 已缴费账单,删除待缴费记录,更新用户余额
 
                 // 记录待删除ID
                 transferAccountDo.getDelUnpaidIds().add(unpaidDo.getId());
 
-                //2.生成已缴费记录
+                //2.生成已缴账单
                 paid = new SwBillManagementPaidDo();
                 BeanUtils.copyProperties(unpaidDo, paid);
                 paid.setStatus(PAIDINSTATUS);

+ 12 - 2
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwBillingRecordServiceImpl.java

@@ -89,19 +89,29 @@ public class SwBillingRecordServiceImpl extends ServiceImpl<SwBillingRecordDao,
             } else {
 
                 //生成缴费记录
-                addNewBillRecord(paymentRequestDTO, null);
+                addNewBillRecord(paymentRequestDTO, new ArrayList<>());
             }
 
             log.info("窗口缴费结束");
 
         }catch (Exception e){
-            log.error("窗口缴费失败 {}",e.getMessage());
+            e.printStackTrace();
             return R.error("窗口缴费失败");
         }
 
         return R.ok();
     }
 
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @Override
+    public R removeRecord(String id) {
+        return null;
+    }
+
 
     /**
      * 删除 待收账单数据

+ 3 - 2
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwMeterExchangeRegisterServiceImpl.java

@@ -17,6 +17,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.util.Collections;
 import java.util.List;
@@ -56,9 +58,8 @@ public class SwMeterExchangeRegisterServiceImpl extends ServiceImpl<SwMeterExcha
         SwWaterUsageEntryDo newEntry = changemeterinfo.size() > 1 ? changemeterinfo.get(1) : null; // 新表数据
         // 1. 先插入旧表数据
         swWaterUsageEntryDao.insert(oldEntry);
-
         // 2. 生成账单,
-        billGenerationService.generateBill(Collections.singletonList(oldEntry));
+        billGenerationService.generateBill(Collections.singletonList(oldEntry),(ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
 
         updateUserMeterInfo(newEntry);
 

+ 4 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/ZHSWCommonUtils.java

@@ -54,11 +54,15 @@ public class ZHSWCommonUtils {
     public static SysUserVo getCurrentUser() {
         // 获取当前登录人信息
         SysUserVo currUser = null;
+        log.info("开始获取当前用户登录信息");
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        log.info("attributes:{}",attributes);
         if (attributes != null) {
             HttpServletRequest request = attributes.getRequest();
+            log.info("request:{}",request);
             if (request != null) {
                 String token = request.getHeader("token");
+                log.info("token:{}",token);
                 if (StringUtils.isNotEmpty(token)) {
                     currUser = redisService.getLoginUser(token);
                 }

+ 12 - 3
zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/BillGenerationController.java

@@ -1,7 +1,9 @@
 package com.rongwei.zhsw.system.controller;
 
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.zhsw.system.service.impl.BillGenerationServiceImpl;
+import com.rongwei.zhsw.system.utils.ZHSWCommonUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +11,11 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.AsyncContext;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * BillGenerationController class
@@ -25,13 +32,15 @@ public class BillGenerationController {
     private BillGenerationServiceImpl billGenerationService;
 
     @PostMapping("/generate/{id}")
-    private R generateBill(@PathVariable("id") String id) {
-        billGenerationService.generateBill(id);
+    private R generateBill(@PathVariable("id") String id, HttpServletRequest request) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        billGenerationService.generateBill(id,attributes);
         return R.ok();
     }
     @PostMapping("/generate")
     private R generateBill() {
-        billGenerationService.generateBill();
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        billGenerationService.generateBill(attributes);
         return R.ok();
     }
 }

+ 28 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/MeterReadingRecordController.java

@@ -0,0 +1,28 @@
+package com.rongwei.zhsw.system.controller;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.zhsw.system.service.MeterReadingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * MeterReadingRecord class
+ *
+ * @author XH
+ * @date 2025/03/28
+ */
+@RestController
+@RequestMapping("/meter")
+public class MeterReadingRecordController {
+
+    @Autowired
+    private MeterReadingService meterReadingService;
+
+    @PostMapping("/remove/{id}")
+    public R removeRecord(@PathVariable("id")String id){
+        return  meterReadingService.removeRecord(id);
+    }
+}

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

@@ -25,11 +25,8 @@ public class SwBillingRecordController {
 
 
     @PostMapping("/windowPayment")
-    @ResponseBody
     public R windowPayment(@RequestBody PaymentRequestDTO paymentRequestDTO){
-
            return  swBillingRecordService.windowPayment(paymentRequestDTO);
-
     }
 }