From 16207f06b1aae069c05657c178855388a2bcf5b2 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 26 八月 2025 18:45:09 +0800
Subject: [PATCH] 会员支付相关

---
 cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js                         |   19 +++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java |  144 ++++++++++++++++++++++++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html                      |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java  |  118 +++++++++++++++++++
 cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js                       |   32 +++++
 5 files changed, 312 insertions(+), 3 deletions(-)

diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java
index ceecb47..9e54a94 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java
@@ -1,10 +1,12 @@
 package com.dsh.guns.modular.system.controller.code;
 
+import cn.hutool.core.collection.CollUtil;
 import com.dsh.course.feignClient.account.AppUserClient;
 import com.dsh.course.feignClient.account.VipPaymentClient;
 import com.dsh.course.feignClient.account.model.QueryByNamePhone;
 import com.dsh.course.feignClient.account.model.TAppUser;
 import com.dsh.course.feignClient.activity.CouponClient;
+import com.dsh.course.feignClient.activity.model.HuiminPayQuery;
 import com.dsh.guns.core.base.controller.BaseController;
 import com.dsh.guns.core.base.tips.SuccessTip;
 import com.dsh.guns.modular.system.model.*;
@@ -12,13 +14,19 @@
 import com.dsh.guns.modular.system.model.dto.VipRefundDto;
 import com.dsh.guns.modular.system.model.vo.VipPaymentListVO;
 import com.dsh.guns.modular.system.service.*;
+import com.dsh.guns.modular.system.util.DateUtil;
+import com.dsh.guns.modular.system.util.ExcelUtil;
 import com.dsh.guns.modular.system.util.ResultUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -142,6 +150,116 @@
         return res;
     }
     /**
+     * 导出会员卡订单
+     * @param
+     */
+    @GetMapping("/export")
+    public void exportData(String appUserName
+            , String phone, String vipName
+            , Integer isRefund
+            , String time, HttpServletResponse response) {
+        VipPaymentDto vipPaymentDto = new VipPaymentDto();
+        if (StringUtils.hasLength(vipName)){
+            List<Integer> vipIds = vipService.lambdaQuery().like(Vip::getVipName, vipName)
+                    .list().stream().map(Vip::getId).collect(Collectors.toList());
+            if (vipIds.isEmpty()){
+                vipIds.add(-1);
+            }
+            vipPaymentDto.setVipIds(vipIds);
+        }
+        if (StringUtils.hasLength(phone)){
+            QueryByNamePhone queryByNamePhone = new QueryByNamePhone();
+            queryByNamePhone.setPhone( phone);
+            List<Integer> userIds = appUserClient.queryByNamePhone(queryByNamePhone).stream().map(TAppUser::getId)
+                    .collect(Collectors.toList());
+
+            vipPaymentDto.setUserIds(userIds);
+        }
+        if (StringUtils.hasLength(appUserName)){
+            QueryByNamePhone queryByNamePhone = new QueryByNamePhone();
+            queryByNamePhone.setName( appUserName);
+            List<Integer> userIds = appUserClient.queryByNamePhone(queryByNamePhone).stream().map(TAppUser::getId)
+                    .collect(Collectors.toList());
+            if (vipPaymentDto.getUserIds()!=null){
+                // 取交集
+                vipPaymentDto.setUserIds(vipPaymentDto.getUserIds().stream().filter(userIds::contains).collect(Collectors.toList()));
+            }else{
+                vipPaymentDto.setUserIds(userIds);
+            }
+        }
+        if (StringUtils.hasLength(appUserName)|| StringUtils.hasLength(phone)){
+            if (vipPaymentDto.getUserIds().isEmpty()){
+                List<Integer> userIds = vipPaymentDto.getUserIds();
+                userIds.add(-1);
+                vipPaymentDto.setUserIds(userIds);
+            }
+        }
+        vipPaymentDto.setIsRefund(isRefund);
+        if (StringUtils.hasLength(time)){
+            String stareTime = null;
+            String endTime = null;
+            stareTime = time.split(" - ")[0] + " 00:00:00";
+            endTime = time.split(" - ")[1] + " 23:59:59";
+            vipPaymentDto.setStartTime(stareTime);
+            vipPaymentDto.setEndTime(endTime);
+        }
+        QueryByNamePhone queryByNamePhone = new QueryByNamePhone();
+        List<TAppUser> tAppUsers = appUserClient.queryByNamePhone(queryByNamePhone);
+        List<Vip> vipList = vipService.list();
+        List<VipPaymentListVO> res =vipPaymentClient.vipPayment(vipPaymentDto);
+        for (VipPaymentListVO re : res) {
+            Vip vip = vipList.stream().filter(e -> e.getId().equals(re.getVipId())).findFirst().orElse(null);
+            if (vip!=null){
+                re.setVipName(vip.getVipName());
+                Integer timeType = vip.getTimeType();
+                Integer time1 = vip.getTime();
+                switch (timeType){
+                    case 1:
+                        re.setVipTime(time1 + "天");
+                        break;
+                    case 2:
+                        re.setVipTime(time1 + "月");
+                        break;
+                    case 3:
+                        re.setVipTime(time1 + "年");
+                        break;
+                }
+            }
+            re.setAmountValue("¥"+re.getAmount().toString());
+            TAppUser appUser = tAppUsers.stream().filter(e -> e.getId().equals(re.getAppUserId())).findFirst().orElse(null);
+            if (appUser!=null){
+                re.setAppUserName(appUser.getName());
+                re.setAppUserPhone(appUser.getName());
+            }
+        }
+
+        String[] titleArr = {"订单编号", "用户姓名", "联系电话", "会员卡名称", "时长", "金额", "下单时间", "是否退费", "备注"};
+        String[][] values = new String[res.size()][];
+        for (int i = 0; i < res.size(); i++) {
+            VipPaymentListVO vipPaymentListVO = res.get(i);
+            values[i] = new String[titleArr.length];
+            values[i][0] = vipPaymentListVO.getCode();
+            values[i][1] = vipPaymentListVO.getAppUserName();
+            values[i][2] = vipPaymentListVO.getAppUserPhone();
+            values[i][3] = vipPaymentListVO.getVipName();
+            values[i][4] = vipPaymentListVO.getVipTime();
+            values[i][5] = vipPaymentListVO.getAmountValue();
+            values[i][6] = DateUtil.format(vipPaymentListVO.getInsertTime(), "yyyy-MM-dd HH:mm:ss");
+            values[i][7] = vipPaymentListVO.getIsRefund() == 1 ? "是" : "否";
+            values[i][8] = vipPaymentListVO.getRemark().toString();
+        }
+        try {
+            HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("会员卡订单", titleArr, values, null);
+            ExcelUtil.setResponseHeader(response, "会员卡订单.xls");
+            OutputStream os = response.getOutputStream();
+            wb.write(os);
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+    /**
      * 退费
      */
     @RequestMapping(value = "/refund")
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java
index caeeeb5..ee54dfc 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java
@@ -11,18 +11,27 @@
 import com.dsh.guns.modular.system.model.TStore;
 import com.dsh.guns.modular.system.model.Vip;
 import com.dsh.guns.modular.system.model.dto.VipDetailDto;
+import com.dsh.guns.modular.system.model.dto.VipPaymentDto;
 import com.dsh.guns.modular.system.model.vo.VipDetailVO;
+import com.dsh.guns.modular.system.model.vo.VipPaymentListVO;
 import com.dsh.guns.modular.system.service.IStoreService;
 import com.dsh.guns.modular.system.service.ITSiteService;
 import com.dsh.guns.modular.system.service.IVipService;
 import com.dsh.guns.modular.system.service.TOperatorService;
+import com.dsh.guns.modular.system.util.DateUtil;
+import com.dsh.guns.modular.system.util.ExcelUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -176,6 +185,141 @@
         }
         return res;
     }
+    /**
+     * 导出会员权益明细
+     * @param
+     */
+    @GetMapping("/export")
+    public void exportData(String vipName, Integer type
+            , String phone, String storeName
+            , Integer operatorId, Integer status
+            , String time
+            , String useTime, HttpServletResponse response) {
+        Integer objectType = UserExt.getUser().getObjectType();
+        Integer objectId = UserExt.getUser().getObjectId();
+        VipDetailDto vipDetailDto = new VipDetailDto();
+        vipDetailDto.setOperatorId(operatorId);
+        vipDetailDto.setStatus(status);
+        vipDetailDto.setType(type);
+        vipDetailDto.setObjectType(objectType);
+        if (objectType == 2){
+            vipDetailDto.setStatus(2);
+        }
 
+        if (StringUtils.hasLength(vipName)){
+            List<Integer> vipIds = vipService.lambdaQuery().like(Vip::getVipName, vipName)
+                    .list().stream().map(Vip::getId).collect(Collectors.toList());
+            if (vipIds.isEmpty()){
+                vipIds.add(-1);
+            }
+            vipDetailDto.setVipIds(vipIds);
+        }
+        if (StringUtils.hasLength(phone)){
+            QueryByNamePhone queryByNamePhone = new QueryByNamePhone();
+            queryByNamePhone.setPhone( phone);
+            List<Integer> userIds = appUserClient.queryByNamePhone(queryByNamePhone).stream().map(TAppUser::getId)
+                    .collect(Collectors.toList());
+            if (userIds.isEmpty()){
+                userIds.add(-1);
+            }
+            vipDetailDto.setUserIds(userIds);
+
+        }
+        if (StringUtils.hasLength(storeName)){
+            List<Integer> storeIds = storeService.lambdaQuery().like(TStore::getName, storeName)
+                    .eq(objectType!=1,TStore::getOperatorId,objectId ).list()
+                    .stream().map(TStore::getId).collect(Collectors.toList());
+            if (storeIds.isEmpty()){
+                storeIds.add(-1);
+            }
+            vipDetailDto.setStoreIds(storeIds);
+        }
+
+        if (StringUtils.hasLength(time)){
+            String stareTime = null;
+            String endTime = null;
+            stareTime = time.split(" - ")[0] + " 00:00:00";
+            endTime = time.split(" - ")[1] + " 23:59:59";
+            vipDetailDto.setStartTime(stareTime);
+            vipDetailDto.setEndTime(endTime);
+        }
+        if (StringUtils.hasLength(useTime)){
+            String stareTime = null;
+            String endTime = null;
+            stareTime = time.split(" - ")[0] + " 00:00:00";
+            endTime = time.split(" - ")[1] + " 23:59:59";
+            vipDetailDto.setUseStartTime(stareTime);
+            vipDetailDto.setUseEndTime(endTime);
+        }
+        List<VipDetailVO> res = couponClient.vipDetail(vipDetailDto);
+        QueryByNamePhone queryByNamePhone = new QueryByNamePhone();
+        List<TAppUser> tAppUsers = appUserClient.queryByNamePhone(queryByNamePhone);
+        List<Vip> vipList = vipService.list();
+        List<TStore> storeList = storeService.list();
+        List<TSite> siteList = siteService.list();
+        List<TOperator> operatorList = operatorService.list();
+        for (VipDetailVO re : res) {
+            TAppUser tAppUser = tAppUsers.stream().filter(e -> e.getId().equals(re.getAppUserId())).findFirst().orElse(null);
+            if (tAppUser!=null){
+                re.setAppUserName(tAppUser.getName());
+                re.setAppUserPhone(tAppUser.getPhone());
+            }
+            Vip vip = vipList.stream().filter(e -> e.getId().equals(re.getVipId())).findFirst().orElse(null);
+            if (vip!=null){
+                re.setVipName(vip.getVipName());
+            }
+            if (re.getUseSiteId()!=null){
+                TSite site = siteList.stream().filter(e -> e.getId().equals(re.getUseSiteId())).findFirst().orElse(null);
+                if (site!=null){
+                    re.setGoodsName(site.getName());
+                }
+            }
+            if (re.getUseStoreId()!=null){
+                TStore store = storeList.stream().filter(e -> e.getId().equals(re.getUseStoreId())).findFirst().orElse(null);
+                if (store!=null){
+                    re.setStoreName(store.getName());
+                }
+            }
+            if (re.getOperatorId()!=null){
+                if (re.getOperatorId()==0){
+                    re.setOperatorName("总平台");
+                }else{
+                    TOperator operator = operatorList.stream().filter(e -> e.getId().equals(re.getOperatorId())).findFirst().orElse(null);
+                    if (operator!=null){
+                        re.setOperatorName(operator.getName());
+                    }
+                }
+
+            }
+        }
+
+        String[] titleArr = {"权益名称", "权益类型", "关联会员类型", "购买会员姓名", "联系电话", "使用状态", "使用场地/商品名称", "使用门店", "归属运营商", "获得时间", "使用时间"};
+        String[][] values = new String[res.size()][];
+        for (int i = 0; i < res.size(); i++) {
+            VipDetailVO vipDetailVO = res.get(i);
+            values[i] = new String[titleArr.length];
+            values[i][0] = vipDetailVO.getTicketName();
+            values[i][1] = vipDetailVO.getType()==1 ? "优惠券" : "门票";
+            values[i][2] = vipDetailVO.getVipName();
+            values[i][3] = vipDetailVO.getAppUserName();
+            values[i][4] = vipDetailVO.getAppUserPhone();
+            values[i][5] = vipDetailVO.getStatus() == 1 ? "未使用" : vipDetailVO.getStatus()==2 ? "已使用" : "已过期";
+            values[i][6] = vipDetailVO.getGoodsName();
+            values[i][7] = vipDetailVO.getStoreName();
+            values[i][8] = vipDetailVO.getOperatorName();
+            values[i][9] = DateUtil.format(vipDetailVO.getInsertTime(), "yyyy-MM-dd HH:mm:ss");
+            values[i][10] = vipDetailVO.getUseTime()!=null?DateUtil.format(vipDetailVO.getUseTime(), "yyyy-MM-dd HH:mm:ss"):"";
+        }
+        try {
+            HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("会员权益使用明细", titleArr, values, null);
+            ExcelUtil.setResponseHeader(response, "会员权益使用明细.xls");
+            OutputStream os = response.getOutputStream();
+            wb.write(os);
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 
 }
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html
index 1f2e5a2..c341d3b 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html
@@ -3,7 +3,7 @@
     <div class="col-sm-12">
         <div class="ibox float-e-margins">
             <div class="ibox-title">
-                <h5>会员权益使用明细</h5>
+                <h5>会员卡订单</h5>
             </div>
 
             <div class="ibox-content">
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js b/cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js
index 390dfca..a2d5aaa 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js
@@ -40,7 +40,24 @@
 };
 
 
-
+TCompetition.export = function (){
+    var queryData = TCompetition.getQueryParam();
+    // 生成带参数的完整URL
+    var exportUrl = Feng.ctxPath + "/vipPayment/export?" + $.param(queryData);
+    window.location.href = exportUrl;
+}
+TCompetition.getQueryParam = function () {
+    var queryData = {};
+    queryData['vipName'] = $("#vipName").val();
+    queryData['type'] = $("#type").val();
+    queryData['phone'] = $("#phone").val();
+    queryData['storeName'] = $("#storeName").val();
+    queryData['operatorId'] = $("#operatorId").val();
+    queryData['status'] = $("#status").val();
+    queryData['time'] = $("#time").val();
+    queryData['useTime'] = $("#useTime").val();
+    return queryData;
+}
 
 
 /**
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js b/cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js
index d2de627..9288238 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js
@@ -46,6 +46,22 @@
         },
     ];
 };
+
+TCompetition.export = function (){
+    var queryData = TCompetition.getQueryParam();
+    // 生成带参数的完整URL
+    var exportUrl = Feng.ctxPath + "/vipDetail/export?" + $.param(queryData);
+    window.location.href = exportUrl;
+}
+TCompetition.getQueryParam = function () {
+    var queryData = {};
+    queryData['appUserName'] = $("#appUserName").val();
+    queryData['vipName'] = $("#vipName").val();
+    queryData['phone'] = $("#phone").val();
+    queryData['isRefund'] = $("#isRefund").val();
+    queryData['time'] = $("#time").val();
+    return queryData;
+}
 /**
  * 打开编辑
  */
@@ -113,7 +129,21 @@
 
 };
 
-
+TCompetition.export = function (){
+    var queryData = TCompetition.getQueryParam();
+    // 生成带参数的完整URL
+    var exportUrl = Feng.ctxPath + "/vipDetail/export?" + $.param(queryData);
+    window.location.href = exportUrl;
+}
+TCompetition.getQueryParam = function () {
+    var queryData = {};
+    queryData['appUserName'] = $("#appUserName").val();
+    queryData['vipName'] = $("#vipName").val();
+    queryData['phone'] = $("#phone").val();
+    queryData['isRefund'] = $("#isRefund").val();
+    queryData['time'] = $("#time").val();
+    return queryData;
+}
 /**
  * 查询车辆管理列表
  */

--
Gitblit v1.7.1