From 19fd7785705f30d25c6c8e44b9356cc585af68cd Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期三, 19 三月 2025 14:26:41 +0800
Subject: [PATCH] 111

---
 server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java               |   11 +
 server/services/src/main/java/com/doumee/service/business/GoodsorderService.java              |    7 +
 server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeDetailReportVO.java        |   25 +++
 server/services/src/main/java/com/doumee/core/utils/DateUtil.java                             |   24 +++
 server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java |   11 +
 server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java                   |   11 +
 server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java               |   21 +++
 server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeReportVO.java              |   32 ++++
 server/web/src/main/java/com/doumee/task/ScheduleTool.java                                    |   12 
 server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java             |   64 +++++++--
 server/services/src/main/java/com/doumee/dao/business/vo/GoodsorderExportVO.java              |    7 +
 server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java     |  147 ++++++++++++++++++--
 server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java   |    3 
 server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java         |    1 
 14 files changed, 334 insertions(+), 42 deletions(-)

diff --git a/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java b/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
index f27e18d..753f115 100644
--- a/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
@@ -10,6 +10,7 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.business.model.Goodsorder;
 import com.doumee.dao.business.model.WxBillDetail;
+import com.doumee.dao.business.vo.BikeIncomeReportVO;
 import com.doumee.dao.business.vo.DiscountGoodsorderExportVO;
 import com.doumee.dao.business.vo.GoodsorderExportVO;
 import com.doumee.dao.business.vo.GoodsorderTotalDataVO;
@@ -31,6 +32,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -94,6 +96,7 @@
         return ApiResponse.success(goodsorderService.findPage(pageWrap));
     }
 
+
     @ApiOperation("绾夸笂浜ゆ槗姹囨�绘暟鎹帴鍙�")
     @PostMapping("/getTotalData")
     @RequiresPermissions("business:goodsorder:query")
@@ -102,6 +105,8 @@
         pageWrap.setEndDate(pageWrap.getEndDate() != null ? pageWrap.getEndDate():pageWrap.getStartDate());
         return ApiResponse.success(goodsorderService.getTotalData(pageWrap));
     }
+
+
 
     @ApiOperation("璁㈠崟鍒楄〃-瀵煎嚭Excel")
     @PostMapping("/exportExcel")
@@ -135,6 +140,7 @@
     public ApiResponse<PageData<GoodsorderExportVO>> findPageAccountDetail(@RequestBody PageWrap<Goodsorder> pageWrap) {
             return ApiResponse.success(goodsorderService.findAccountDetailPage(pageWrap));
     }
+
     @ApiOperation("鏀舵鏄庣粏锛堝井淇″璐︽槑缁嗭級_瀵煎嚭Excel")
     @PostMapping("/exportAccountDetailExcel")
     @RequiresPermissions("business:goodsorder:exportExcel")
@@ -186,4 +192,19 @@
     public ApiResponse<GoodsorderCanBanlanceDTO> getGoodsorderCanBanlanceDTO(@RequestParam String orderId){
         return ApiResponse.success(goodsorderService.getGoodsorderCanBanlanceDTO(orderId));
     }
+
+
+    @ApiOperation("杞﹀瀷鏀跺叆鍒嗘瀽")
+    @PostMapping("/getBikeIncomeReportVOList")
+    public ApiResponse<List<List<String>>> getBikeIncomeReportVOList (@RequestBody Goodsorder goodsorder) {
+        return ApiResponse.success(goodsorderService.getBikeIncomeReportVOList(goodsorder.getStartDate(),goodsorder.getEndDate()));
+    }
+
+
+
+    @ApiOperation("杞﹀瀷鏀跺叆鍒嗘瀽-瀵煎嚭Excel")
+    @PostMapping("/bikeIncomeExportExcel")
+    public void exportExcel (@RequestBody Goodsorder goodsorder, HttpServletResponse response) {
+        goodsorderService.excel(goodsorder.getStartDate(),goodsorder.getEndDate(),response);
+    }
 }
diff --git a/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java b/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
index 6358b59..c6090e0 100644
--- a/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
+++ b/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -1,5 +1,6 @@
 package com.doumee.core.annotation.excel;
 
+import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.dao.business.model.Goodsorder;
@@ -168,6 +169,21 @@
             }
         }
     }
+
+//    public void exportList (List<List<String>> data, String fileName, String sheetName, HttpServletResponse response) {
+//        try {
+//            String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
+//            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+//            response.setContentType("application/octet-stream");
+//            response.setHeader("eva-opera-type", "download");
+//            response.setHeader("eva-download-filename", encodeFileName);
+//            this.exportList(data, sheetName, response.getOutputStream());
+//        } catch (IOException e) {
+//            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+//        }
+//    }
+
+
     /**
      * 瀵煎嚭鍒版寚瀹氳緭鍑烘祦
      * @param os 杈撳嚭娴�
@@ -181,27 +197,47 @@
             sheet.createFreezePane(0, 1);
             Row header = sheet.createRow(0);
             CellStyle hstyle = configHeaderCellStatic(sxssfWorkbook);
-            CellStyle cstyle = configCellStatic(sxssfWorkbook);
-            List<String> headerList =dataList.get(0);
-            for (int i = 0; i < headerList.size(); i++) {
+            for (int i = 0; i < dataList.size(); i++) {
                 Cell cell = header.createCell(i);
-                cell.setCellValue(headerList.get(i));
+                cell.setCellValue(dataList.get(i).get(Constants.ZERO));
                 // 鍒楀璁剧疆
-                sheet.setColumnWidth(i, headerList.get(i).length() * 2 * 256);
+                sheet.setColumnWidth(i, dataList.get(i).get(Constants.ZERO).length() * 2 * 256);
                 // 璁剧疆鍒楀ご鍗曞厓鏍�
                 cell.setCellStyle(hstyle);
             }
-            // 鍒涘缓鏁版嵁璁板綍
-            for (int rowIndex = 1; rowIndex < dataList.size(); rowIndex++) {
-                Row row = sheet.createRow(rowIndex );
-                List<String> rowList = dataList.get(rowIndex);
-                for (int i = 0; i < rowList.size(); i++) {
-                    Cell cell = row.createCell(i);
-                    cell.setCellValue(rowList.get(i));
-                    // 鍒楀璁剧疆
-                    cell.setCellStyle(cstyle);
+
+            //鎬昏鏁�
+            Integer rowSize = dataList.get(Constants.ZERO).size();
+            //鎬诲垪鏁�
+            Integer columnSize = dataList.size();
+            for (int i = 1; i < rowSize; i++) {
+                Row row = sheet.createRow(i);
+                for (int j = 0; j < columnSize; j++) {
+                    Cell cell = row.createCell(j);
+                    cell.setCellValue(dataList.get(j).get(i));
                 }
             }
+//
+//            List<String> headerList =dataList.get(0);
+//            for (int i = 0; i < headerList.size(); i++) {
+//                Cell cell = header.createCell(i);
+//                cell.setCellValue(headerList.get(i));
+//                // 鍒楀璁剧疆
+//                sheet.setColumnWidth(i, headerList.get(i).length() * 2 * 256);
+//                // 璁剧疆鍒楀ご鍗曞厓鏍�
+//                cell.setCellStyle(hstyle);
+//            }
+//            // 鍒涘缓鏁版嵁璁板綍
+//            for (int rowIndex = 1; rowIndex < dataList.size(); rowIndex++) {
+//                Row row = sheet.createRow(rowIndex );
+//                List<String> rowList = dataList.get(rowIndex);
+//                for (int i = 0; i < rowList.size(); i++) {
+//                    Cell cell = row.createCell(i);
+//                    cell.setCellValue(rowList.get(i));
+//                    // 鍒楀璁剧疆
+//                    cell.setCellStyle(cstyle);
+//                }
+//            }
             sxssfWorkbook.write(os);
             os.close();
         } catch (Exception e) {
diff --git a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
index ca3082d..f585aa6 100644
--- a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -69,6 +69,30 @@
     }
 
 
+    public static List<Date> getDateList(Date dBegin, Date dEnd) {
+        int i = 1;
+        //鏃ユ湡宸ュ叿绫诲噯澶�
+        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        //璁剧疆寮�濮嬫椂闂�
+        Calendar calBegin = Calendar.getInstance();
+        calBegin.setTime(dBegin);
+        int weekNumber = calBegin.get(Calendar.DAY_OF_WEEK) - 1;
+        //璁剧疆缁撴潫鏃堕棿
+        Calendar calEnd = Calendar.getInstance();
+        calEnd.setTime(dEnd);
+        //瑁呰繑鍥炵殑鏃ユ湡闆嗗悎瀹瑰櫒
+        List<Date> dateList = new ArrayList<Date>();
+        dateList.add(dBegin);
+        //灏嗙涓�涓湀娣诲姞閲岄潰鍘�
+        while (dEnd.after(calBegin.getTime())) {
+            calBegin.add(Calendar.DAY_OF_MONTH, 1);
+            Date date =  calBegin.getTime();
+            dateList.add(date);
+        }
+        return dateList;
+    }
+
+
 
     public static Date StringToDateFormat(String DATE,String format) {
         if(StringUtils.isBlank(DATE)){
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java b/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
index ac0e439..2d34089 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
@@ -28,6 +28,7 @@
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 8,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
     @ApiModelProperty(value = "鍒涘缓浜�")
@@ -162,4 +163,14 @@
     @ApiModelProperty(value = "鎿嶄綔璁板綍")
     @TableField(exist = false)
     private List<DiscountLog> optLogList;
+
+    @ApiModelProperty(value = "鏌ヨ寮�濮嬫棩鏈燂紙鍖呭惈锛�", example = "2023-10-01 15:12:01")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startCreateDate;
+
+    @ApiModelProperty(value = "鏌ヨ鎴鏃ユ湡锛堝寘鍚級", example = "2023-10-09 15:12:05")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endCreateDate;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java b/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
index 8af42cf..e0bf2db 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -103,6 +103,8 @@
     private String closeUserId;
     @ApiModelProperty(value = "缁撶畻绫诲瀷 0鐢ㄦ埛鑷缁撶畻 1骞冲彴浜哄伐寮哄埗缁撶畻 2绯荤粺鑷姩缁撶畻")
     private Integer closeType;
+    @ApiModelProperty(value = "缁撶畻杞﹀瀷缂栫爜")
+    private String paramId;
     @ApiModelProperty(value = "鐢ㄦ埛openid" )
     @TableField(exist = false)
     @ExcelColumn(name="鐢ㄦ埛",index = 1 ,width = 10,align = HorizontalAlignment.CENTER)
@@ -123,11 +125,12 @@
     @ExcelColumn(name="閫�鎶奸噾(鍏�)",index = 6,width = 10,align = HorizontalAlignment.CENTER)
     private BigDecimal refundMoney;
     @ApiModelProperty(value = "楠戣鍗℃姷鎵�(鍒嗭級")
+    @ExcelColumn(name="浼樻儬閲戦",index = 10,width = 10,align = HorizontalAlignment.CENTER)
     @TableField(exist = false)
     private BigDecimal discountMoney;
     @ApiModelProperty(value = "鏈�鍚庨��娆炬椂闂�")
     @TableField(exist = false)
-    @ExcelColumn(name="閫�娆剧粨绠楁椂闂�",index = 9,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="閫�娆炬椂闂�",index = 9,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date refundDate;
     @ApiModelProperty(value = "鏈�杩戦獞琛岀姸鎬�")
     @TableField(exist = false)
@@ -137,7 +140,6 @@
     private Integer closeStatus;
 
     @ApiModelProperty(value = "鎿嶄綔浜�")
-    @ExcelColumn(name="鎿嶄綔浜�",index = 9,width = 10,align = HorizontalAlignment.CENTER)
     @TableField(exist = false)
     private String refundUserName;
 
@@ -145,4 +147,9 @@
     @TableField(exist = false)
     private String discountName;
 
+    @ApiModelProperty(value = "楠戣绫诲瀷")
+    @ExcelColumn(name="璁㈠崟绫诲瀷",index = 11,width = 10,valueMapping = "3=鍗曡溅绫诲瀷;4=鐢佃溅绫诲瀷;",align = HorizontalAlignment.CENTER)
+    @TableField(exist = false)
+    private Integer bikeType;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeDetailReportVO.java b/server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeDetailReportVO.java
new file mode 100644
index 0000000..8840b4f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeDetailReportVO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.business.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 璁㈠崟淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/09/27 18:06
+ */
+@Data
+@ApiModel("杞﹀瀷鏀跺叆鍒嗘瀽")
+public class BikeIncomeDetailReportVO {
+
+    @ApiModelProperty(value = "鏀跺叆閲戦")
+    private String totalAmount;
+
+    @ApiModelProperty(value = "鏃ユ湡鍊�")
+    private String dateStr;
+
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeReportVO.java b/server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeReportVO.java
new file mode 100644
index 0000000..054fa24
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/vo/BikeIncomeReportVO.java
@@ -0,0 +1,32 @@
+package com.doumee.dao.business.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 璁㈠崟淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/09/27 18:06
+ */
+@Data
+@ApiModel("杞﹀瀷鏀跺叆鍒嗘瀽")
+public class BikeIncomeReportVO {
+
+    @ApiModelProperty(value = "杞﹀瀷鍚嶇О")
+    private String paramName;
+
+    @ApiModelProperty(value = "杞﹀瀷涓婚敭")
+    private String paramId;
+
+//    @ApiModelProperty(value = "琛屾暟鎹敹鍏ュ垪琛�")
+//    private List<BikeIncomeDetailReportVO> bikeIncomeDetailReportVOList;
+
+    @ApiModelProperty(value = "琛屾暟鎹敹鍏ュ垪琛�")
+    private List<String> dataList;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/vo/GoodsorderExportVO.java b/server/services/src/main/java/com/doumee/dao/business/vo/GoodsorderExportVO.java
index a994ae9..87bafe0 100644
--- a/server/services/src/main/java/com/doumee/dao/business/vo/GoodsorderExportVO.java
+++ b/server/services/src/main/java/com/doumee/dao/business/vo/GoodsorderExportVO.java
@@ -57,4 +57,11 @@
     @ExcelColumn(name="閫�娆炬椂闂�",width = 10,index = 5,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date refundDate;
 
+    @ApiModelProperty(value = "楠戣绫诲瀷")
+    @ExcelColumn(name="璁㈠崟绫诲瀷",index = 8,width = 10,valueMapping = "1=濂楅璁㈠崟;3=鑷杞﹁鍗�;4=鐢靛姩杞﹁鍗�;",align = HorizontalAlignment.CENTER)
+    private Integer bikeType;
+
+    @ApiModelProperty(value = "浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾 1濂楅鍗¤喘涔�")
+    private Integer type;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java b/server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java
index ff943c2..373233b 100644
--- a/server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java
+++ b/server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java
@@ -35,6 +35,9 @@
     @ApiModelProperty(value = "鎶垫墸閲戦")
     private BigDecimal disCountMoney;
 
+    @ApiModelProperty(value = "杞﹁締绫诲瀷缂栫爜")
+    private String paramId;
+
 
     @ApiModelProperty(value = "楠戣璁板綍")
     private List<MemberRidesResponse> memberRidesResponseList;
diff --git a/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java b/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
index 9a570bf..a63ecaa 100644
--- a/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
+++ b/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -8,6 +8,7 @@
 import com.doumee.dao.business.model.DiscountMember;
 import com.doumee.dao.business.model.Goodsorder;
 import com.doumee.dao.business.model.MemberRides;
+import com.doumee.dao.business.vo.BikeIncomeReportVO;
 import com.doumee.dao.business.vo.GoodsorderExportVO;
 import com.doumee.dao.business.vo.GoodsorderTotalDataVO;
 import com.doumee.dao.business.web.request.BackElecBikeRequest;
@@ -20,7 +21,9 @@
 import com.wechat.pay.java.service.refund.model.RefundNotification;
 import io.swagger.models.auth.In;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -212,4 +215,8 @@
     DiscountMember getUseDiscount(String memberId, Integer driveTime,Integer type);
 
     void autCancel();
+
+    List<List<String>> getBikeIncomeReportVOList(Date startDate , Date endDate);
+
+    void excel(Date startDate , Date endDate, HttpServletResponse response);
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java
index aab545c..cfad07b 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java
@@ -11,10 +11,7 @@
 import com.doumee.dao.business.DiscountLogMapper;
 import com.doumee.dao.business.DiscountMemberMapper;
 import com.doumee.dao.business.join.DiscountMemberJoinMapper;
-import com.doumee.dao.business.model.Discount;
-import com.doumee.dao.business.model.DiscountLog;
-import com.doumee.dao.business.model.DiscountMember;
-import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.web.request.DiscountMemberDTO;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.DiscountMemberService;
@@ -147,6 +144,8 @@
                 .like(StringUtils.isNotBlank(model.getName()),DiscountMember::getName,model.getName())
                 .like(StringUtils.isNotBlank(model.getOpenid()),Member::getOpenid,model.getOpenid())
                 .eq(Objects.nonNull(model.getStatus()),DiscountMember::getStatus,model.getStatus())
+                .ge(Objects.nonNull(model.getStartCreateDate()),DiscountMember::getCreateDate, Utils.Date.getStart(model.getStartCreateDate()))
+                .le(Objects.nonNull(model.getEndCreateDate()),DiscountMember::getCreateDate, Utils.Date.getStart(model.getEndCreateDate()))
                 .ne(DiscountMember::getStatus,Constants.TWO)
                 .orderByDesc(DiscountMember::getCode);
         return PageData.from(discountMemberJoinMapper.selectJoinPage(page, DiscountMember.class,queryWrapper));
@@ -249,4 +248,8 @@
         QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember);
         return discountMemberMapper.selectCount(wrapper);
     }
+
+    
+    
+    
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index 0b3c4a2..f04ec9f 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.constants.Constants;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.Constants;
@@ -28,6 +29,8 @@
 import com.doumee.dao.business.model.Goodsorder;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberRides;
+import com.doumee.dao.business.vo.BikeIncomeDetailReportVO;
+import com.doumee.dao.business.vo.BikeIncomeReportVO;
 import com.doumee.dao.business.vo.GoodsorderExportVO;
 import com.doumee.dao.business.vo.GoodsorderTotalDataVO;
 import com.doumee.dao.business.web.request.*;
@@ -58,10 +61,14 @@
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.InetAddress;
+import java.net.URLEncoder;
 import java.net.UnknownHostException;
 
+import java.nio.charset.Charset;
 import java.sql.Ref;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
@@ -199,7 +206,9 @@
             MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>();
             queryWrapper.selectAll(Goodsorder.class);
             queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid);
+            queryWrapper.selectAs(BaseParam::getType, Goodsorder::getBikeType);
             queryWrapper.leftJoin(Member.class, Member::getId  ,Goodsorder::getMemberId);
+            queryWrapper.leftJoin(BaseParam.class, BaseParam::getId  ,Goodsorder::getParamId);
             queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id  and r.status=2 ) as refund_date");
             queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status=2) as refund_money");
             //鏃堕棿娈电瓫閫�
@@ -213,6 +222,9 @@
             queryWrapper.eq(Goodsorder::getPayStatus,Constants.ONE);
             queryWrapper.orderByAsc(Goodsorder::getPayDate);
             goodsorderExportVOIPage = goodsorderJoinMapper.selectJoinPage(page, GoodsorderExportVO.class, queryWrapper);
+
+
+
         }else{
             MPJLambdaWrapper<Refund> queryWrapper = new MPJLambdaWrapper<>();
             queryWrapper.selectAs(Refund::getMoney,GoodsorderExportVO::getRefundMoney);
@@ -240,6 +252,7 @@
 
         if (!CollectionUtils.isEmpty(goodsorderExportVOIPage.getRecords())){
             goodsorderExportVOIPage.getRecords().forEach(s->{
+                s.setBikeType(s.getType()!=Constants.ZERO?s.getBikeType():Constants.ONE);
                 s.setMoney(Constants.translateMoney(s.getMoney()));
                 s.setRefundMoney(Constants.translateMoney(s.getRefundMoney()));
                 s.setCloseMoney(Constants.translateMoney(s.getCloseMoney()).compareTo(s.getMoney()) > 0 ? s.getMoney() : Constants.translateMoney(s.getCloseMoney()));
@@ -296,11 +309,13 @@
         queryWrapper.selectAll(Goodsorder.class);
         queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid);
         queryWrapper.selectAs(DiscountMember::getName, Goodsorder::getDiscountName);
+        queryWrapper.selectAs(BaseParam::getType, Goodsorder::getBikeType);
         queryWrapper.leftJoin(Member.class, Member::getId  ,Goodsorder::getMemberId);
         queryWrapper.leftJoin(DiscountMember.class, DiscountMember::getGoodsorderId  ,Goodsorder::getId);
-//        queryWrapper.select("(select r.name from discount_member r where r.isdeleted=0  and r.goodsorder_id=t.id limit 1) as discountName");
+        queryWrapper.leftJoin(BaseParam.class, BaseParam::getId  ,Goodsorder::getParamId);
         queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id  and  r.status in(0,2)) as refund_date");
         queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_money");
+        queryWrapper.select("(select  sum(d.ride_price)  from discount_log d where d.goodsorder_id=t.id and d.type = 0) as discountMoney");
         //鏃堕棿娈电瓫閫�
         if (Objects.nonNull(model.getStartDate())){
             queryWrapper.ge(Goodsorder::getPayDate, Utils.Date.getStart(model.getStartDate()));
@@ -333,6 +348,8 @@
 
         queryWrapper.select("(select  sum(er.discount_price) from member_rides  er  where er.ordre_id=t.id and er.isdeleted=0) as discountMoney," +
                 "(select  er.status from member_rides  er  where er.ordre_id=t.id order by er.create_date desc limit 1) as memberRidesStatus");
+
+
         queryWrapper.select("( select s.realname from refund r left join system_user s on r.creator = s.id where r.obj_id = t.id order by r.id desc  limit 1  ) ",Goodsorder::getRefundUserName);
         if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ZERO)){
             queryWrapper.ne(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey());
@@ -627,6 +644,7 @@
                 freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode());
             }catch (Exception e){
             }
+
             closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId(),true).getAmount();
             //瀹為檯缁撶畻浠锋牸锛岃褰曞湪鏈�楂樿溅鍨嬭褰曚笂
 //            memberRides.get(0).setActualPrice(closeMoney);
@@ -674,6 +692,15 @@
                 memberRidesJoinMapper.updateById(up);
             }
         }
+        int durationSum = 0;
+        int freeTime = 0;
+        try {
+            freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode());
+        }catch (Exception e){
+        }
+        //鏈�楂樹环鏍艰溅鍨嬬殑楠戣璁板綍
+        MemberRides topRides = this.getMaxRides(memberRides,durationSum,freeTime,true);
+
 //        BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refund.getMoney()));
         //閫�娆句箰琛�
 //       int type =Constants.formatIntegerNum(refund.getType());
@@ -681,6 +708,7 @@
         update.setId(goodsorder.getId());
         update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey());
         update.setCloseMoney(closeMoney);
+        update.setParamId(Objects.nonNull(topRides)?topRides.getParamId():null);
         update.setCloseStatus(Constants.ONE);
         update.setCloseDate(new Date());
         update.setCloseInfo(Constants.REFUND_TYPE.get(type).getInfo());
@@ -717,6 +745,23 @@
         transactionsMapper.insert(transactions);
         //淇敼璁㈠崟淇℃伅
         goodsorderMapper.updateById(update);
+    }
+
+    public MemberRides getMaxRides(List<MemberRides> memberRides,Integer durationSum,Integer freeTime,boolean isClose){
+        MemberRides topRides =null;
+        for(MemberRides rides : memberRides){
+            if ( isClose && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻");
+            }
+            durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱
+            if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹�
+                if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum())
+                        && Constants.formatIntegerNum(rides.getDuration())>0)){
+                    topRides = rides;
+                }
+            }
+        }
+        return topRides;
     }
     /**
      * 閫�娆炬垚鍔熷洖璋�
@@ -797,21 +842,8 @@
         ridesDetailResponse.setHaveDisCount(Constants.ZERO);
         BigDecimal closeMoney = new BigDecimal(0.00);
         int durationSum = 0;
-        MemberRides topRides =null;
-
-        //鍙栨渶楂樿溅鍨嬭绠楁柟妗堢粨绠楄鍗�
-        for(MemberRides rides : memberRides){
-            if ( isClose && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻");
-            }
-            durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱
-            if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹�
-                if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum())
-                        && Constants.formatIntegerNum(rides.getDuration())>0)){
-                    topRides = rides;
-                }
-            }
-        }
+        //鏈�楂樹环鏍艰溅鍨嬬殑楠戣璁板綍
+        MemberRides topRides = this.getMaxRides(memberRides,durationSum,freeTime,isClose);
 
         //璁$畻搴斾粯閲戦
         if( topRides != null){
@@ -827,6 +859,8 @@
                 }
             }
             topRides.setActualPrice(closeMoney);
+            //2025骞�3鏈�18鏃�11:28:38 杩斿洖楠戣浠锋牸鏈�楂樼殑杞﹀瀷
+            ridesDetailResponse.setParamId(topRides.getParamId());
         } 
         //鏌ヨ鏄惁瀛樺湪濂楅淇℃伅
         DiscountMember discountMember = this.getUseDiscount(memberId,durationSum,Objects.nonNull(topRides)?topRides.getType():null);
@@ -1641,4 +1675,85 @@
         );
     }
 
+
+
+    @Override
+    public List<List<String>> getBikeIncomeReportVOList(Date startDate ,Date endDate){
+        if( (Objects.isNull(startDate)||Objects.isNull(endDate))
+        || startDate.getTime()>endDate.getTime()
+        || DateUtil.daysBetweenDates(endDate,startDate) > 30
+        )
+        {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        System.out.println( DateUtil.daysBetweenDates(endDate,startDate));
+        //鑾峰彇鎵�鏈夎溅鍨嬩俊鎭�
+        List<BaseParam> baseParamList = baseParamMapper.selectList(new QueryWrapper<BaseParam>().lambda().eq(BaseParam::getIsdeleted,Constants.ZERO)
+                .in(BaseParam::getType,Constants.THREE,Constants.FOUR)
+                .orderByAsc(BaseParam::getType,BaseParam::getSortnum)
+        );
+        //鑾峰彇2涓棩鏈熶笅鎵�鏈夊ぉ鏁�
+        List<Date> dateList = DateUtil.getDateList(startDate,endDate);
+        //鏌ヨ鏃ユ湡鍐呯殑鎵�鏈夋暟鎹�
+        List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getType,Constants.ZERO)
+                .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+                .eq(Goodsorder::getStatus,Constants.FOUR)
+                .isNotNull(Goodsorder::getParamId)
+                .ge(Goodsorder::getPayDate, Utils.Date.getStart(startDate))
+                .le( Goodsorder::getPayDate, Utils.Date.getEnd(endDate))
+        );
+
+        List<List<String>> parentList = new ArrayList<>();
+
+        for (BaseParam baseParam:baseParamList) {
+            List<String> dataChildList = new ArrayList<>();
+            dataChildList.add(baseParam.getName()+"(鍏�)");
+            BigDecimal totalAmount = BigDecimal.ZERO;
+            for (Date date:dateList) {
+                BigDecimal amount = goodsorderList.stream()
+                        .filter(i->StringUtils.isNotBlank(i.getParamId())&&DateUtil.getShortDateStr(date).equals(DateUtil.getShortDateStr(i.getCreateDate()))&&baseParam.getId().equals(i.getParamId()))
+                        .map(i->i.getCloseMoney()).reduce(BigDecimal.ZERO,BigDecimal::add);
+                dataChildList.add(amount.toString());
+                totalAmount  = amount.add(totalAmount);
+            }
+            BikeIncomeDetailReportVO detail = new BikeIncomeDetailReportVO();
+            dataChildList.add("锟�"+totalAmount);
+            parentList.add(dataChildList);
+        }
+
+        List<String> dataStrList = new ArrayList<>();
+        dataStrList.add("鏃ユ湡");
+        for (Date date:dateList) {
+            dataStrList.add(DateUtil.getShortDateStr(date));
+        }
+        dataStrList.add("鎬昏");
+        parentList.add(0,dataStrList);
+
+        return parentList;
+
+    }
+
+    @Override
+    public void excel(Date startDate , Date endDate, HttpServletResponse response){
+        List<List<String>> data = this.getBikeIncomeReportVOList(startDate,endDate);
+        try {
+            String fileName = "杞﹀瀷鏀跺叆鍒嗘瀽_"+System.currentTimeMillis();
+            String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
+            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+            response.setContentType("application/octet-stream");
+            response.setHeader("eva-opera-type", "download");
+            response.setHeader("eva-download-filename", encodeFileName);
+            ExcelExporter.exportList(data, fileName, response.getOutputStream());
+        } catch (IOException e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+    }
+
+
+
+
+
+
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
index 95742af..d96655d 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
@@ -273,6 +273,7 @@
         bill.setDiscountRefundFee(new BigDecimal(0.00));
         bill.setDiscountRefundCmmsAmt(new BigDecimal(0.00));
         bill.setBikeRefundCmmsAmt(new BigDecimal(0.00));
+        bill.setDiscountFee(new BigDecimal(0.00));
         return bill;
     }
     @Override
diff --git a/server/web/src/main/java/com/doumee/task/ScheduleTool.java b/server/web/src/main/java/com/doumee/task/ScheduleTool.java
index 6df7a1c..31f956e 100644
--- a/server/web/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/web/src/main/java/com/doumee/task/ScheduleTool.java
@@ -43,12 +43,12 @@
      * 绔欑偣杞﹁締婊℃灦鐜囬璀�
      * @throws Exception
      */
-//    @Scheduled(fixedDelay = 1000L *20L )
-//    public void reSubMqtt() throws Exception {
-//        log.info("=====================妫�鏌ユ槸鍚﹂渶瑕侀噸鏂拌闃�===========start============");
-//        MqttClientInit.isSubClientValid();
-//        log.info("=====================妫�鏌ユ槸鍚﹂渶瑕侀噸鏂拌闃�===========end============");
-//    }
+    @Scheduled(fixedDelay = 1000L *20L )
+    public void reSubMqtt() throws Exception {
+        log.info("=====================妫�鏌ユ槸鍚﹂渶瑕侀噸鏂拌闃�===========start============");
+        MqttClientInit.isSubClientValid();
+        log.info("=====================妫�鏌ユ槸鍚﹂渶瑕侀噸鏂拌闃�===========end============");
+    }
 
 
     @Scheduled(fixedDelay = 1000L * 100L )

--
Gitblit v1.9.3