From 4cceddfb4d9437d9c97c47e3ca59f23c70d48ddc Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期六, 02 十一月 2024 18:35:28 +0800
Subject: [PATCH] bug修改

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java |  182 ++++++++++++++++++++++++++++++++++++---------
 1 files changed, 144 insertions(+), 38 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
index ecba608..aef8ea7 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -15,13 +15,11 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
-import com.ruoyi.order.api.model.TChargingBill;
-import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.TOrderInvoiceQuery;
 import com.ruoyi.order.api.vo.AccountListVO;
 import com.ruoyi.order.api.vo.ChargingBillListVO;
 import com.ruoyi.order.api.vo.ChargingBillVO;
-import com.ruoyi.order.api.model.ChargingListQuery;
 import com.ruoyi.order.api.vo.TOrderInvoiceVO;
 import com.ruoyi.order.export.*;
 import com.ruoyi.order.service.*;
@@ -29,6 +27,7 @@
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -39,6 +38,7 @@
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
@@ -71,7 +71,16 @@
     @ApiOperation(value = "列表查询", tags = {"管理后台-账户结算账单"})
     public R<AccountListVO> accountBillList(@RequestBody ChargingListQuery dto) {
         AccountListVO accountListVO = new AccountListVO();
-        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+        ChargingBillVO res = chargingBillService.chargingBillList1(dto);
+        List<ChargingBillListVO> records = res.getList().getRecords();
+        accountListVO.setBillCount(records.size());
+        accountListVO.setTotalAmount(res.getPaymentAmount().subtract(res.getRefundAmount())
+                .subtract(res.getCommissionAmount().setScale(2,BigDecimal.ROUND_DOWN)).subtract(res.getSharingAmount()).setScale(2, BigDecimal.ROUND_DOWN));
+        accountListVO.setPaymentAmount(res.getPaymentAmount().setScale(2, BigDecimal.ROUND_DOWN));
+        accountListVO.setRefundAmount(res.getRefundAmount().setScale(2, BigDecimal.ROUND_DOWN));
+        accountListVO.setCommissionAmount(res.getCommissionAmount().setScale(2, BigDecimal.ROUND_DOWN));
+        accountListVO.setSharingAmount(res.getSharingAmount().setScale(2, BigDecimal.ROUND_DOWN));
+        accountListVO.setList(res.getList());
         return R.ok(accountListVO);
     }
     @PostMapping(value = "/chargingBillList")
@@ -90,7 +99,7 @@
         return R.ok(null);
     }
     @ApiOperation(value = "导出", tags = {"管理后台-充电算账单"})
-    @PostMapping("/export")
+    @PutMapping("/export")
     public void export(@RequestBody ChargingListQuery dto)
     {
         ChargingBillVO res = chargingBillService.chargingBillList(dto);
@@ -152,40 +161,121 @@
             }
         }
     }
+    @ApiOperation(value = "导出", tags = {"管理后台-账户结算账单"})
+    @PutMapping("/exportAccount")
+    public void exportAccount(@RequestBody ChargingListQuery dto)
+    {
+        ChargingBillVO res = chargingBillService.chargingBillList1(dto);
+        List<ChargingBillListVO> list = res.getList().getRecords();
+        List<TChargingBillExport> tChargingBillExports = new ArrayList<>();
+        for (ChargingBillListVO orderInvoiceVO : list) {
+            TChargingBillExport tChargingBillExport = new TChargingBillExport();
+            tChargingBillExport.setCode(orderInvoiceVO.getCode());
+            switch (orderInvoiceVO.getOrderState()){
+                case 1:
+                    tChargingBillExport.setBillType("日账单");
+                    break;
+                case 2:
+                    tChargingBillExport.setBillType("月账单");
+                    break;
+            }
+            tChargingBillExport.setType(orderInvoiceVO.getType().toString());
+            tChargingBillExport.setBillWeek(orderInvoiceVO.getBillWeek());
+            tChargingBillExport.setSiteName(orderInvoiceVO.getSiteName());
+            tChargingBillExport.setPaymentAmount(orderInvoiceVO.getPaymentAmount());
+            tChargingBillExport.setElectrovalence(orderInvoiceVO.getElectrovalence());
+            tChargingBillExport.setServiceCharge(orderInvoiceVO.getServiceCharge());
+            tChargingBillExport.setChargingCapacity(orderInvoiceVO.getChargingCapacity());
+            Integer chargingSecond = orderInvoiceVO.getChargingSecond();
+            // 根据秒数 转换为xx小时xx分钟xx秒 如果小时为0不展示 如果分钟为0则不展示
+            // 计算小时、分钟和秒
+            int hours = chargingSecond / 60 / 60;
+            int minutes = chargingSecond /60 % 60;
+            int seconds = 0; // 如果没有秒数,则默认是0
+            // 构造结果字符串
+            StringBuilder result = new StringBuilder();
+            if (hours > 0) {
+                result.append(hours).append("小时");
+            }
+            if (minutes > 0) {
+                result.append(minutes).append("分钟");
+            }
+            if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
+                result.append(seconds).append("秒");
+            }
+            tChargingBillExport.setChargingTime(result.toString());
+            tChargingBillExport.setOrderCount(orderInvoiceVO.getOrderCount());
+            tChargingBillExport.setBillTime(orderInvoiceVO.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            tChargingBillExports.add(tChargingBillExport);
+        }
+        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TChargingBillExport.class, tChargingBillExports);
+        HttpServletResponse response = WebUtils.response();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        ServletOutputStream outputStream = null;
+        try {
+            String fileName = URLEncoder.encode("月账单-"+res.getCategory()+"-"+res.getBillWeek()+"-"+res.getSiteName()+".xls", "utf-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+            response.setHeader("Pragma", "no-cache");
+            response.setHeader("Cache-Control", "no-cache");
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                outputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Autowired
+    private TChargingOrderRefundService tChargingOrderRefundService;
     @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"})
-    @GetMapping("/download")
-    public void download(String uid)
+    @PutMapping("/download")
+    public void download(@RequestBody ExportUidDto uid)
     {
         List<ChargingBillExport> chargingBillExports = new ArrayList<>();
         List<ChargingBillRefundExport> chargingBillRefundExports = new ArrayList<>();
         List<ChargingBillPayExport> chargingBillPayExports = new ArrayList<>();
-        TChargingBill byId = chargingBillService.getById(uid);
+        TChargingBill byId = chargingBillService.getById(uid.getUid());
         ChargingBillExport chargingBillExport = new ChargingBillExport();
         chargingBillExport.setCode(byId.getCode());
-        // todo 确认商户类型
-        chargingBillExport.setAccountType("商户类型");
+        chargingBillExport.setAccountType("微信商户");
         chargingBillExport.setType(byId.getType().toString());
-        chargingBillExport.setBillType("月结");
         LocalDateTime billTime = byId.getBillTime();
         // 将billTime 减去一个月 转化为yyyy-MM格式字符串
         billTime = billTime.minusMonths(1);
         chargingBillExport.setBillWeek(DateUtils.parseDateToStr("yyyy-MM",DateUtils.toDate(billTime)));
 
         chargingBillExport.setBillTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(billTime)));
-        chargingBillExport.setState("未出账");
         List<Site> data = siteClient.getSiteByIds(Arrays.asList(byId.getSiteId())).getData();
         if (!data.isEmpty()){
             chargingBillExport.setSiteName(data.get(0).getName());
         }
-        // 根据账单的出账时间 查询上个月的充电订单
-        LocalDateTime localDate = byId.getBillTime().minusMonths(1);
-        // 账单周期
+//        // 根据账单的出账时间 查询上个月的充电订单
+//        LocalDateTime localDate = byId.getBillTime().minusMonths(1);
+//        // 账单周期
+//        // 获取 LocalDate 对象
+//        LocalDate date = localDate.toLocalDate();
+//        // 获取该月份的第一天
+//        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+         LocalDateTime localDate = byId.getBillTime().minusDays(1);
+        // todo 临时修改为前一天
         // 获取 LocalDate 对象
         LocalDate date = localDate.toLocalDate();
-        // 获取该月份的第一天
-        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+//            // 获取该月份的第一天
+//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+//            // 获取该月份的最后一天
+//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
+        // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
+        LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
+        LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
         // 获取该月份的最后一天
-        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
+//        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
         QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                 .between("create_time", firstDayOfMonth, lastDayOfMonth)
                 .eq("status", 5)
@@ -195,17 +285,15 @@
         }
         BigDecimal paymentAmount = new BigDecimal("0");
         BigDecimal refundAmount = new BigDecimal("0");
-        BigDecimal income = new BigDecimal("0");
 
         List<TChargingOrder> tChargingOrders = chargingOrderService.list(eq);
         // 累加支付金额
+        BigDecimal bigDecimal = new BigDecimal("0");
         int i =1;
         for (TChargingOrder tChargingOrder : tChargingOrders) {
             // 账单信息
             paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
-            if (tChargingOrder.getRefundStatus()!=null && tChargingOrder.getRefundStatus()==2){
-                refundAmount = refundAmount.add(tChargingOrder.getRefundAmount());
-            }
+
             // 退款信息
             ChargingBillRefundExport chargingBillRefundExport = new ChargingBillRefundExport();
             ChargingBillPayExport chargingBillPayExport = new ChargingBillPayExport();
@@ -225,37 +313,55 @@
                     chargingBillPayExport.setPlatformPay("支付宝小程序支付");
 
             }
-            chargingBillRefundExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
-            chargingBillRefundExport.setCode(tChargingOrder.getCode());
-            chargingBillRefundExport.setPayTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())));
-            if (tChargingOrder.getRefundTime()!=null){
-                chargingBillRefundExport.setRefundTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getRefundTime())));
+            List<TChargingOrderRefund> one1 = tChargingOrderRefundService.lambdaQuery()
+                    .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId())
+                    .eq(TChargingOrderRefund::getRefundStatus, 2)
+                    .list();
+            for (TChargingOrderRefund one : one1) {
+                refundAmount= refundAmount.add(one.getRefundAmount());
+                chargingBillRefundExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
+                chargingBillRefundExport.setCode(tChargingOrder.getCode());
+                chargingBillRefundExport.setPayTime(tChargingOrder.getCreateTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getCreateTime())):"");
+                if (one.getRefundTime()!=null){
+                    chargingBillRefundExport.setRefundTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(one.getRefundTime())));
+                }
+                chargingBillRefundExport.setRefundMoney(one.getRefundAmount().toString());
+                chargingBillRefundExport.setRefundRemark(one.getRefundReason());
+                chargingBillRefundExport.setRefundCode(one.getRefundCode());
+                chargingBillRefundExport.setRefundSerialNumber(one.getRefundSerialNumber());
+                chargingBillRefundExports.add(chargingBillRefundExport);
             }
-            chargingBillRefundExport.setRefundMoney(tChargingOrder.getRefundAmount().toString());
-            chargingBillRefundExport.setRefundRemark(tChargingOrder.getRefundReason());
-            chargingBillRefundExport.setRefundCode(tChargingOrder.getRefundCode());
-            chargingBillRefundExport.setRefundSerialNumber(tChargingOrder.getRefundSerialNumber());
-            chargingBillRefundExports.add(chargingBillRefundExport);
+
             // 支付信息
             chargingBillPayExport.setId(i+"");
             chargingBillPayExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
             chargingBillPayExport.setCode(tChargingOrder.getCode());
-            chargingBillPayExport.setPayTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())));
-            chargingBillPayExport.setPaymentAmount(tChargingOrder.getPaymentAmount().toString());
+            chargingBillPayExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):"");
+            chargingBillPayExport.setPaymentAmount(tChargingOrder.getChargeAmount().toString());
             chargingBillPayExport.setTotal("");
             chargingBillPayExports.add(chargingBillPayExport);
             i++;
+            bigDecimal = bigDecimal.add(tChargingOrder.getOrderAmount());
+        }
+        if (!chargingBillPayExports.isEmpty()){
+            chargingBillPayExports.get(0).setTotal(bigDecimal+"");
+        }
+        if (byId.getSiteId()==0){
+            chargingBillExport.setSiteName("全站");
+        }else{
+            List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(byId.getSiteId())).getData();
+            if (data1!=null&&(!data1.isEmpty())){
+                String name = data1.get(0).getName();
+                chargingBillExport.setSiteName(name);
+            }
         }
         chargingBillExport.setPaymentAmount(paymentAmount);
         chargingBillExport.setRefundAmount(refundAmount);
         chargingBillExport.setIncome(paymentAmount.subtract(refundAmount));
         chargingBillExports.add(chargingBillExport);
-
         // 导出
         List<Map<String, Object>> sheetsList = new ArrayList<>();
-        AtomicInteger atomicInteger = new AtomicInteger();
-
-        for (int i1 = 0; i1 < 3; i1++) {
+        for (int i1 = 1; i1 <= 3; i1++) {
             String sheetName="";
             switch (i1){
                 case 1:

--
Gitblit v1.7.1