From 46367116aef9a54c43c9348e095d62105f16aebe Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期四, 05 九月 2024 17:54:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java |  361 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 304 insertions(+), 57 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 cfed3a4..d219870 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
@@ -1,29 +1,50 @@
 package com.ruoyi.order.controller;
 
 
-import com.ruoyi.account.api.feignClient.AppUserCarClient;
-import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
-import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient;
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
+import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.WebUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.redis.service.RedisService;
-import com.ruoyi.common.security.service.TokenService;
+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.query.TOrderInvoiceQuery;
+import com.ruoyi.order.api.vo.ChargingBillListVO;
 import com.ruoyi.order.api.vo.ChargingBillVO;
-import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
-import com.ruoyi.order.dto.ChargingBillQuery;
-import com.ruoyi.order.dto.ChargingListQuery;
+import com.ruoyi.order.api.model.ChargingListQuery;
+import com.ruoyi.order.api.vo.TOrderInvoiceVO;
+import com.ruoyi.order.export.*;
 import com.ruoyi.order.service.*;
-import com.ruoyi.order.vo.ChargingOrderListInfoVO;
-import com.ruoyi.payment.api.feignClient.AliPaymentClient;
-import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * <p>
@@ -39,53 +60,279 @@
 public class ChargingBillController {
 
     @Resource
-    private TChargingOrderService chargingOrderService;
-    @Autowired
-    private TokenService tokenService;
-    @Autowired
-    private TOrderEvaluateService orderEvaluateService;
-
-    @Resource
-    private WxPaymentClient wxPaymentClient;
-
-    @Resource
-    private RedisService redisService;
-
-    @Resource
-    private AliPaymentClient aliPaymentClient;
-    @Resource
-    private TShoppingOrderService shoppingOrderService;
-
-    @Resource
-    private AppUserClient appUserClient;
-
-    @Resource
-    private TVipOrderService vipOrderService;
-    @Resource
-    private ParkingLotClient parkingLotClient;
-    @Resource
-    private TChargingOrderRefundService chargingOrderRefundService;
-
-    @Resource
-    private TShoppingOrderRefundService shoppingOrderRefundService;
-    @Resource
-    private TVipOrderRefundService vipOrderRefundService;
+    private TChargingBillService chargingBillService;
     @Resource
     private SiteClient siteClient;
     @Resource
-    private ChargingPileClient chargingPileClient;
-    @Resource
-    private ChargingGunClient chargingGunClient;
-    @Resource
-    private AppUserCarClient appUserCarClient;
-    @Resource
-    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
-    @ResponseBody
-    @PostMapping(value = "/chargingList")
-    @ApiOperation(value = "充电算帐单列表查询", tags = {"管理后台-充电算账单"})
-    public AjaxResult<ChargingBillVO> chargingList(@RequestBody ChargingListQuery dto) {
+    private TChargingOrderService chargingOrderService;
 
-        return AjaxResult.success(null);
+
+    @PostMapping(value = "/chargingBillList")
+    @ApiOperation(value = "充电算帐单列表查询", tags = {"管理后台-充电算账单"})
+    public AjaxResult<ChargingBillVO> chargingBillList(@RequestBody ChargingListQuery dto) {
+        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+        return AjaxResult.success(res);
+    }
+    @PostMapping(value = "/chargingBillListR")
+    public R<ChargingBillVO> chargingBillListR(@RequestBody ChargingListQuery dto) {
+        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+        return R.ok(res);
+    }
+    @GetMapping(value = "/chargingBillListExport")
+    public R<ChargingBillVO> chargingBillListExport(String uid) {
+        return R.ok(null);
+    }
+    @ApiOperation(value = "导出", tags = {"管理后台-充电算账单"})
+    @PostMapping("/export")
+    public void export(@RequestBody ChargingListQuery dto)
+    {
+        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+        List<ChargingBillListVO> list = res.getList().getRecords();
+        List<TChargingBillExport> tChargingBillExports = new ArrayList<>();
+        for (ChargingBillListVO orderInvoiceVO : list) {
+            TChargingBillExport tChargingBillExport = new TChargingBillExport();
+            tChargingBillExport.setCode(orderInvoiceVO.getCode());
+            tChargingBillExport.setBillType("月账单");
+            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();
+            }
+        }
+    }
+    @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"})
+    @GetMapping("/download")
+    public void download(String uid)
+    {
+        List<ChargingBillExport> chargingBillExports = new ArrayList<>();
+        List<ChargingBillRefundExport> chargingBillRefundExports = new ArrayList<>();
+        List<ChargingBillPayExport> chargingBillPayExports = new ArrayList<>();
+        TChargingBill byId = chargingBillService.getById(uid);
+        ChargingBillExport chargingBillExport = new ChargingBillExport();
+        chargingBillExport.setCode(byId.getCode());
+        // todo 确认商户类型
+        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);
+        // 账单周期
+        // 获取 LocalDate 对象
+        LocalDate date = localDate.toLocalDate();
+        // 获取该月份的第一天
+        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+        // 获取该月份的最后一天
+        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
+        QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
+                .between("create_time", firstDayOfMonth, lastDayOfMonth)
+                .eq("status", 5)
+                .eq("recharge_payment_status", 2);
+        if (byId.getType() == 2) {
+            eq.eq("site_id", byId.getSiteId());
+        }
+        BigDecimal paymentAmount = new BigDecimal("0");
+        BigDecimal refundAmount = new BigDecimal("0");
+        BigDecimal income = new BigDecimal("0");
+
+        List<TChargingOrder> tChargingOrders = chargingOrderService.list(eq);
+        // 累加支付金额
+        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();
+
+            chargingBillRefundExport.setId(i+"");
+            switch (tChargingOrder.getRechargePaymentType()){
+                case 1:
+                    chargingBillRefundExport.setPlatform("微信");
+                    chargingBillRefundExport.setPlatformPay("微信小程序支付");
+                    chargingBillPayExport.setPlatform("微信");
+                    chargingBillPayExport.setPlatformPay("微信小程序支付");
+                    break;
+                case 2:
+                    chargingBillRefundExport.setPlatform("支付宝");
+                    chargingBillRefundExport.setPlatformPay("支付宝小程序支付");
+                    chargingBillPayExport.setPlatform("支付宝");
+                    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())));
+            }
+            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.setTotal("");
+            chargingBillPayExports.add(chargingBillPayExport);
+            i++;
+        }
+        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++) {
+            String sheetName="";
+            switch (i1){
+                case 1:
+                    sheetName= "账单信息";
+                    Map<String, Object> exportMap = Maps.newHashMap();
+                    ExportParams exportParams = new ExportParams(null, sheetName, ExcelType.HSSF);
+                    // 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
+                    exportMap.put("title", exportParams);
+                    exportMap.put("entity", ChargingBillExport.class);
+                    exportMap.put("data", chargingBillExports);
+                    // 加入多sheet配置列表
+                    sheetsList.add(exportMap);
+                    break;
+                case 2:
+                    sheetName= "退款订单";
+                    Map<String, Object> exportMap1 = Maps.newHashMap();
+                    ExportParams exportParams1 = new ExportParams(null, sheetName, ExcelType.HSSF);
+                    // 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
+                    exportMap1.put("title", exportParams1);
+                    exportMap1.put("entity", ChargingBillRefundExport.class);
+                    exportMap1.put("data", chargingBillRefundExports);
+                    // 加入多sheet配置列表
+                    sheetsList.add(exportMap1);
+                    break;
+                case 3:
+                    sheetName= "支付记录";
+                    Map<String, Object> exportMap2 = Maps.newHashMap();
+                    ExportParams exportParams2 = new ExportParams(null, sheetName, ExcelType.HSSF);
+                    // 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
+                    exportMap2.put("title", exportParams2);
+                    exportMap2.put("entity", ChargingBillPayExport.class);
+                    exportMap2.put("data", chargingBillPayExports);
+                    // 加入多sheet配置列表
+                    sheetsList.add(exportMap2);
+                    break;
+            }
+        }
+        if (!chargingBillRefundExports.isEmpty()){
+            ChargingBillRefundExport chargingBillRefundExport = chargingBillRefundExports.get(0);
+            chargingBillRefundExport.setTotal(refundAmount.toString());
+        }
+        if (!chargingBillPayExports.isEmpty()){
+            ChargingBillPayExport chargingBillPayExport = chargingBillPayExports.get(0);
+            chargingBillPayExport.setTotal(refundAmount.toString());
+        }
+        String type="";
+        String type1="";
+        switch (byId.getType()){
+            case 1:
+                type = "全站账单";
+                type1 = "全站";
+                break;
+            case 2:
+                type = "各个站点账单";
+                List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(byId.getSiteId())).getData();
+                if (!data1.isEmpty()){
+                    type1 = data.get(0).getName();
+                }
+                break;
+        }
+        String s = DateUtils.parseDateToStr("yyyy-MM", DateUtils.toDate(billTime));
+
+        Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
+        HttpServletResponse response = WebUtils.response();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        ServletOutputStream outputStream = null;
+        try {
+            String fileName = URLEncoder.encode("账户结算账单-月账单-"+type+"-"+s+"-"+type1+".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();
+            }
+        }
     }
 }
 

--
Gitblit v1.7.1