From ff94903b42fc1616cc139d071d915e271d12422a Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 19 八月 2025 08:58:18 +0800
Subject: [PATCH] 会员订单

---
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java |  181 ++++++++++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java                 |   45 ++
 cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java                        |   50 ++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/vipDetail/vip_detail.html                        |  109 ++++++
 cloud-server-activity/src/main/java/com/dsh/activity/model/VipDetailVO.java                                  |   84 ++++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipDetailVO.java                  |   86 ++++
 cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js                         |  187 ++++++++++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java                |   22 +
 cloud-server-activity/src/main/java/com/dsh/activity/entity/VipDetail.java                                   |    5 
 cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipDetailDto.java                         |   32 +
 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java                  |    4 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java  |  221 ++---------
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java               |   25 +
 13 files changed, 869 insertions(+), 182 deletions(-)

diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
index c770baa..fc7cf21 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -7,10 +7,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.dsh.activity.entity.Coupon;
-import com.dsh.activity.entity.CouponCity;
-import com.dsh.activity.entity.CouponStore;
-import com.dsh.activity.entity.UserCoupon;
+import com.dsh.activity.entity.*;
 import com.dsh.activity.feignclient.account.AppUserClient;
 import com.dsh.activity.feignclient.account.CityClient;
 import com.dsh.activity.feignclient.account.StoreStaffClient;
@@ -29,14 +26,13 @@
 import com.dsh.activity.feignclient.other.model.TOperatorCity;
 import com.dsh.activity.model.CouponListVo;
 import com.dsh.activity.model.CouponRecordQuery;
+import com.dsh.activity.model.VipDetailVO;
 import com.dsh.activity.model.request.CommodityRequest;
 import com.dsh.activity.model.request.CouponDataVo;
 import com.dsh.activity.model.request.CouponPackageReq;
+import com.dsh.activity.model.request.VipDetailDto;
 import com.dsh.activity.model.response.CouponPackageResp;
-import com.dsh.activity.service.CouponCityService;
-import com.dsh.activity.service.CouponStoreService;
-import com.dsh.activity.service.ICouponService;
-import com.dsh.activity.service.UserCouponService;
+import com.dsh.activity.service.*;
 import com.dsh.activity.util.GDMapGeocodingUtil;
 import com.dsh.activity.util.ResultUtil;
 import com.dsh.activity.util.TokenUtil;
@@ -47,7 +43,9 @@
 import io.swagger.annotations.ApiOperation;
 import io.swagger.models.auth.In;
 import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -67,6 +65,8 @@
 
     @Autowired
     private ICouponService couponService;
+    @Autowired
+    private VipDetailService vipDetailService;
 
     @Autowired
     private TokenUtil tokenUtil;
@@ -106,7 +106,41 @@
 
 
 
+    @PostMapping("/base/coupon/vipDetail")
+    @ResponseBody
+    List<VipDetailVO> vipDetail(VipDetailDto vipDetailDto){
+        List<VipDetailVO> vipDetailVOS = new ArrayList<>();
+        List<VipDetail> list = vipDetailService.lambdaQuery()
+                .in(!vipDetailDto.getVipIds().isEmpty(), VipDetail::getVipId, vipDetailDto.getVipIds())
+                .in(!vipDetailDto.getUserIds().isEmpty(), VipDetail::getAppUserId, vipDetailDto.getUserIds())
+                .in(!vipDetailDto.getStoreIds().isEmpty(), VipDetail::getUseStoreId, vipDetailDto.getStoreIds())
+                .ge(StringUtils.hasLength(vipDetailDto.getStartTime()), VipDetail::getInsertTime, vipDetailDto.getStartTime())
+                .le(StringUtils.hasLength(vipDetailDto.getEndTime()), VipDetail::getInsertTime, vipDetailDto.getEndTime())
+                .ge(StringUtils.hasLength(vipDetailDto.getUseStartTime()), VipDetail::getUseTime, vipDetailDto.getUseStartTime())
+                .le(StringUtils.hasLength(vipDetailDto.getUseEndTime()), VipDetail::getUseTime, vipDetailDto.getUseEndTime())
+                .eq(vipDetailDto.getOperatorId() != null, VipDetail::getOperatorId, vipDetailDto.getOperatorId())
+                .eq(vipDetailDto.getType() != null, VipDetail::getType, vipDetailDto.getType())
+                .eq(vipDetailDto.getStatus() != null, VipDetail::getStatus, vipDetailDto.getStatus()).list();
 
+        // 使用 Stream + 手动拷贝提升性能和可读性(或使用 MapStruct)
+        vipDetailVOS = list.stream().map(vipDetail -> {
+            VipDetailVO vo = new VipDetailVO();
+            BeanUtils.copyProperties(vo, vipDetail); // 注意参数顺序是否正确
+            return vo;
+        }).collect(Collectors.toList());
+        List<Coupon> coupons = couponService.list();
+        for (VipDetailVO vipDetailVO : vipDetailVOS) {
+            if (vipDetailVO.getType()==1){
+                Coupon coupon = coupons.stream().filter(coupon1 -> coupon1.getId().equals(vipDetailVO.getCouponId())).findFirst().orElse(null);
+                if (coupon!=null){
+                    vipDetailVO.setTicketName(coupon.getName());
+                    vipDetailVO.setGoodsName(coupon.getName());
+                }
+            }
+
+        }
+        return vipDetailVOS;
+    }
 
     /**
      * 查询注册赠送优惠券 判断当前优惠券限领数量
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/VipDetail.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/VipDetail.java
index 40ca4ab..b7382ef 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/VipDetail.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/VipDetail.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -9,6 +10,7 @@
 
 @Data
 @ApiModel(value = "VipDetail", description = "会员权益明细")
+@TableName("t_vip_detail")
 public class VipDetail {
 
     @ApiModelProperty(value = "主键")
@@ -53,7 +55,8 @@
 
     @ApiModelProperty(value = "使用场地id")
     private Integer useSiteId;
-
+    @ApiModelProperty(value = "使用商品id")
+    private Integer useGoodsId;
     @ApiModelProperty(value = "使用时间")
     private Date useTime;
 
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/VipDetailVO.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/VipDetailVO.java
new file mode 100644
index 0000000..874c6ca
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/VipDetailVO.java
@@ -0,0 +1,84 @@
+package com.dsh.activity.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 会员权益明细列表
+ */
+@Data
+public class VipDetailVO {
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer appUserId;
+    @ApiModelProperty(value = "用户名称")
+    private String appUserName;
+    @ApiModelProperty(value = "用户电话")
+    private String appUserPhone;
+
+    @ApiModelProperty(value = "使用状态 1待使用 2已使用 3已过期")
+    private Integer status;
+
+    @ApiModelProperty(value = "获取时间")
+    private Date insertTime;
+
+    @ApiModelProperty(value = "会员id")
+    private Integer vipId;
+    @ApiModelProperty(value = "会员名称")
+    private String vipName;
+    @ApiModelProperty(value = "会员权益类型 1优惠券 2门票")
+    private Integer type;
+
+    @ApiModelProperty(value = "会员支付记录id")
+    private Integer vipPaymentId;
+
+    @ApiModelProperty(value = "优惠券id")
+    private Integer couponId;
+
+
+    @ApiModelProperty(value = "门票名称/优惠券名称")
+    private String ticketName;
+
+    @ApiModelProperty(value = "开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private Date endTime;
+
+    @ApiModelProperty(value = "可用次数")
+    private Integer useCount;
+
+    @ApiModelProperty(value = "使用门店id")
+    private Integer useStoreId;
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+    @ApiModelProperty(value = "使用场地id")
+    private Integer useSiteId;
+
+    @ApiModelProperty(value = "使用商品id")
+    private Integer useGoodsId;
+    @ApiModelProperty(value = "使用商品/场地名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "使用时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private Date useTime;
+
+    @ApiModelProperty(value = "运营商id")
+    private Integer operatorId;
+    @ApiModelProperty(value = "运营商名称")
+    private String operatorName;
+
+    @ApiModelProperty(value = "用户优惠券id")
+    private Long userCouponId;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipDetailDto.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipDetailDto.java
new file mode 100644
index 0000000..52a7eea
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipDetailDto.java
@@ -0,0 +1,32 @@
+package com.dsh.activity.model.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 会员权益明细
+ */
+@Data
+public class VipDetailDto {
+    // 会员ids
+    List<Integer> vipIds;
+    // 用户ids
+    List<Integer> userIds;
+    // 门店ids
+    List<Integer> storeIds;
+    // 获得时间 开始
+    String startTime;
+    // 获得时间 结束
+    String endTime;
+    // 使用时间开始
+    String useStartTime;
+    // 使用时间结束
+    String useEndTime;
+    // 运营商id
+    Integer operatorId;
+    // 使用状态 1未使用 2已使用 3已过期
+    Integer status;
+    // 权益类型 1优惠券2门票
+    Integer type;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java
index 95aaddf..440ce62 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java
@@ -4,6 +4,8 @@
 import com.dsh.course.feignClient.activity.model.*;
 import com.dsh.guns.modular.system.model.CouponDataVo;
 import com.dsh.guns.modular.system.model.CouponStore;
+import com.dsh.guns.modular.system.model.dto.VipDetailDto;
+import com.dsh.guns.modular.system.model.vo.VipDetailVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -62,4 +64,6 @@
     void updateType(Long id);
     @PostMapping("/base/pointMerchars/goodsList")
     List<PointsMerchandise> goodsList();
+    @PostMapping("/base/coupon/vipDetail")
+    List<VipDetailVO> vipDetail(VipDetailDto vipDetailDto);
 }
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 f6db7eb..aa90268 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
@@ -3,19 +3,24 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dsh.course.feignClient.account.AppUserClient;
 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.Coupon;
 import com.dsh.course.feignClient.activity.model.CouponCity;
 import com.dsh.course.feignClient.activity.model.TicketDetailVO;
+import com.dsh.guns.config.UserExt;
 import com.dsh.guns.core.base.controller.BaseController;
 import com.dsh.guns.core.common.constant.factory.PageFactory;
 import com.dsh.guns.modular.system.model.*;
-import com.dsh.guns.modular.system.service.IProtocolService;
-import com.dsh.guns.modular.system.service.IStoreService;
-import com.dsh.guns.modular.system.service.IVipService;
+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.VipPaymentVO;
+import com.dsh.guns.modular.system.service.*;
 import com.dsh.guns.modular.system.util.ResultUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -44,7 +49,11 @@
     private IStoreService storeService;
     @Autowired
     private AppUserClient appUserClient;
-    private String PREFIX = "/system/vip/";
+    @Autowired
+    private ITSiteService siteService;
+    @Autowired
+    private TOperatorService operatorService;
+    private String PREFIX = "/system/vipPayment/";
 
 
     /**
@@ -52,8 +61,7 @@
      */
     @RequestMapping("")
     public String index(Model model) {
-
-        return PREFIX + "vipDetail.html";
+        return PREFIX + "vip_payment.html";
     }
 
     /**
@@ -61,176 +69,49 @@
      */
     @RequestMapping(value = "/list")
     @ResponseBody
-    public List<Map<String, Object>> list(String vipName, Integer type
-            , Integer phone, String storeName
-            , Integer operatorId, Integer status
-            , String startTime, String endTime
-            , Integer useStartTime, Integer useEndTim) {
-        // 根据会员名查询会员ids
+    public List<VipPaymentVO> list(String appUserName
+            , String phone, String vipName
+            , Integer isRefund
+            , String time
+            ) {
+        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);
         }
-//        QueryByNamePhone
-//        appUserClient.listAll()
-//        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-//        List<Map<String, Object>> maps = vipService.listOfPage(vipName, status, page);
-//        for (Map<String, Object> map : maps) {
-//            Object timeType = map.get("timeType");
-//            Object time = map.get("time");
-//            Integer timeTypeValue = Integer.valueOf(timeType.toString());
-//            Integer timeValue = Integer.valueOf(time.toString());
-//            switch (timeTypeValue) {
-//                case 1:
-//                    map.put("time",timeValue+"天");
-//                    break;
-//                case 2:
-//                    map.put("time",timeValue+"月");
-//                    break;
-//                case 3:
-//                    map.put("time",timeValue+"年");
-//                    break;
-//            }
-//        }
+        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);
+            }
+        }
         return null;
     }
 
-    // APP查询所有上架的会员卡
-    @ResponseBody
-    @PostMapping("/listAll")
-    public List<Vip> listAll() {
-        List<Vip> list = vipService.lambdaQuery().eq(Vip::getStatus, 1).list();
-        List<Coupon> coupons = couponClient.queryCouponAll();
-        List<CouponCity> couponCityList = couponClient.queryAllCity();
-        List<CouponStore> storeList = couponClient.queryAllStore();
-        List<TStore> shopList = storeService.list();
-        // 封装会员权益
-        for (Vip vip : list) {
-            List<CouponVipResp> couponVipRespList = new ArrayList<>();
-            List<TicketVipResp> ticketVipRespList = new ArrayList<>();
-            String couponJson = vip.getCouponJson();
-            JSONArray couponJsonArray = JSONArray.parseArray(couponJson);
-            for (Object o : couponJsonArray) {
-                JSONObject couponJsonObject = (JSONObject) o;
-                // 优惠券id
-                Integer id = Integer.valueOf(couponJsonObject.getString("id"));
-                // 优惠券数量
-                Integer value = Integer.valueOf(couponJsonObject.getString("value"));
-                Coupon coupon = coupons.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Coupon());
-                CouponVipResp couponVipResp = new CouponVipResp();
-                couponVipResp.setId(coupon.getId());
-                couponVipResp.setName(coupon.getName());
-                couponVipResp.setType(coupon.getType());
-                couponVipResp.setUseCondition(coupon.getUseScope());
-                couponVipResp.setCount(value);
-                switch (coupon.getUseScope()) {
-                    case 1:
-                        couponVipResp.setAvailable("全国通用");
-                        break;
-                    case 2:
-                        couponVipResp.setAvailable("指定城市可用");
-                        List<CouponCity> couponId = couponCityList.stream().filter(e -> e.getCouponId().equals(id))
-                                .collect(Collectors.toList());
-                        StringBuilder stringBuilder = new StringBuilder();
-                        for (CouponCity couponCity : couponId) {
-                            stringBuilder.append(couponCity.getCity());
-                        }
-                        couponVipResp.setCityOrStore(String.valueOf(stringBuilder));
-                        break;
-                    case 3:
-                        couponVipResp.setAvailable("指定门店可用");
-                        // 门店ids
-                        List<Integer> storeIds = storeList.stream().filter(e -> e.getCouponId().equals(id))
-                                .map(CouponStore::getStoreId).collect(Collectors.toList());
-                        StringBuilder storeNames = new StringBuilder("");
 
-                        if (!storeIds.isEmpty()) {
-                            List<TStore> stores = shopList.stream().filter(e -> storeIds.contains(e.getId())).collect(Collectors.toList());
-                            for (TStore store : stores) {
-                                storeNames.append(store.getName()).append(",");
-                            }
-                            // 去除最后一位
-                            StringBuilder res = storeNames.deleteCharAt(storeNames.length() - 1);
-                            couponVipResp.setCityOrStore(res.toString());
-                        } else {
-                            couponVipResp.setCityOrStore("无可用门店");
-                        }
-                        break;
-                    default:
-                        break;
-                }
-                couponVipResp.setInstructionsForUse(coupon.getIllustrate());
-                ConponJsonRuleModel ruleModel = new ConponJsonRuleModel();
-                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
-                switch (coupon.getType()) {
-                    case 1:
-//                            满减券
-                        Double num1 = jsonObject.getDouble("conditionalAmount");
-                        Double num2 = jsonObject.getDouble("deductionAmount");
-                        ruleModel.setConditionalAmount("满" + num1 + "可用");
-                        ruleModel.setDeductionAmount("¥ " + num2);
-                        ruleModel.setExperienceName("");
-                        break;
-                    case 2:
-//                            代金券
-                        Double jsonObjectDouble = jsonObject.getDouble("conditionalAmount");
-                        ruleModel.setConditionalAmount("");
-                        ruleModel.setDeductionAmount("¥ " + jsonObjectDouble);
-                        ruleModel.setExperienceName("");
-                        break;
-                    case 3:
-//                            体验券
-                        ruleModel.setConditionalAmount("");
-                        ruleModel.setDeductionAmount("");
-                        ruleModel.setExperienceName(jsonObject.getString("experienceName"));
-                        break;
-                    default:
-                        break;
-                }
-                couponVipResp.setRuleModel(ruleModel);
-
-                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-                couponVipResp.setEffectiveTime(simpleDateFormat.format(coupon.getEndTime()));
-                couponVipRespList.add(couponVipResp);
-            }
-            vip.setCouponList(couponVipRespList);
-            String ticketJson = vip.getTicketJson();
-            JSONArray ticketJsonArray = JSONArray.parseArray(ticketJson);
-            for (Object o : ticketJsonArray) {
-                JSONObject ticketJsonObject = (JSONObject) o;
-                TicketVipResp ticketVipResp = new TicketVipResp();
-                ticketVipResp.setName(ticketJsonObject.getString("name"));
-                ticketVipResp.setTime(ticketJsonObject.getInteger("time"));
-                ticketVipResp.setCount(ticketJsonObject.getInteger("count"));
-                ticketVipRespList.add(ticketVipResp);
-            }
-            vip.setTicketList(ticketVipRespList);
-        }
-        return list;
-    }
-    @Autowired
-    private IProtocolService protocolService;
-    @ResponseBody
-    @PostMapping("/getAgreement")
-    public String getAgreement() {
-        Protocol one = protocolService.lambdaQuery().eq(Protocol::getType, 6).one();
-        if (one==null){
-            Protocol protocol = new Protocol();
-            protocol.setType(6);
-            protocol.setContent("");
-            protocol.setInsertTime(new Date());
-            protocolService.save( protocol);
-            return  "";
-        }else{
-            return one.getContent();
-
-        }
-    }
-
-    @ResponseBody
-    @PostMapping("/getVipByIds")
-    public List<Vip> getVipByIds(@RequestBody String ids) {
-        List<Vip> list = vipService.lambdaQuery().in(Vip::getId, Arrays.asList(ids.split(","))).list();
-        return list;
-    }
 }
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
new file mode 100644
index 0000000..9ae64a2
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java
@@ -0,0 +1,181 @@
+package com.dsh.guns.modular.system.controller.code;
+
+import com.dsh.course.feignClient.account.AppUserClient;
+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.guns.config.UserExt;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.modular.system.model.TOperator;
+import com.dsh.guns.modular.system.model.TSite;
+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.vo.VipDetailVO;
+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 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.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/1 14:02
+ */
+@Controller
+@RequestMapping("/vipPayment")
+public class TVipPaymentController extends BaseController {
+
+    @Autowired
+    private IVipService vipService;
+    @Autowired
+    private CouponClient couponClient;
+    @Autowired
+    private IStoreService storeService;
+    @Autowired
+    private AppUserClient appUserClient;
+    @Autowired
+    private ITSiteService siteService;
+    @Autowired
+    private TOperatorService operatorService;
+    private String PREFIX = "/system/vip/";
+
+
+    /**
+     * 跳转到优惠券管理首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        Integer objectType = UserExt.getUser().getObjectType();
+        Integer objectId = UserExt.getUser().getObjectId();
+        if (objectType!=1){
+            List<TOperator> list = operatorService.lambdaQuery().eq(TOperator::getId, objectId).list();
+            model.addAttribute("list",list);
+        }else{
+            List<TOperator> list = operatorService.lambdaQuery().ne(TOperator::getState,3).list();
+            model.addAttribute("list",list);
+        }
+        model.addAttribute("objectType",objectType);
+        return PREFIX + "vip_detail.html";
+    }
+
+    /**
+     * 获取 会员权益使用明细列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public List<VipDetailVO> list(String vipName, Integer type
+            , String phone, String storeName
+            , Integer operatorId, Integer status
+            , String time
+            , String useTime) {
+        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());
+                    }
+                }
+
+            }
+        }
+        return res;
+    }
+
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java
index 28e7e41..b9f04e2 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java
@@ -9,10 +9,26 @@
  */
 @Data
 public class VipDetailDto {
+    // 会员ids
     List<Integer> vipIds;
+    // 用户ids
     List<Integer> userIds;
-    String store;
-    String site;
+    // 门店ids
+    List<Integer> storeIds;
+    // 获得时间 开始
+    String startTime;
+    // 获得时间 结束
+    String endTime;
+    // 使用时间开始
+    String useStartTime;
+    // 使用时间结束
+    String useEndTime;
+    // 运营商id
+    Integer operatorId;
+    // 使用状态 1未使用 2已使用 3已过期
+    Integer status;
+    // 权益类型 1优惠券2门票
     Integer type;
-    Integer id;
+    // 1平台 2运营商
+    Integer objectType;
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java
new file mode 100644
index 0000000..258a988
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java
@@ -0,0 +1,25 @@
+package com.dsh.guns.modular.system.model.dto;
+
+import com.baomidou.mybatisplus.extension.api.R;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 会员权益明细
+ */
+@Data
+public class VipPaymentDto {
+    // 会员ids
+    List<Integer> vipIds;
+    // 用户ids
+    List<Integer> userIds;
+
+    // 是否退款 0否1是
+    Integer isRefund;
+    // 下单时间开始
+    String useStartTime;
+    // 下单时间结束
+    String useEndTime;
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipDetailVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipDetailVO.java
new file mode 100644
index 0000000..b353bbc
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipDetailVO.java
@@ -0,0 +1,86 @@
+package com.dsh.guns.modular.system.model.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 会员权益明细列表
+ */
+@Data
+public class VipDetailVO {
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer appUserId;
+    @ApiModelProperty(value = "用户名称")
+    private String appUserName;
+    @ApiModelProperty(value = "用户电话")
+    private String appUserPhone;
+
+    @ApiModelProperty(value = "使用状态 1待使用 2已使用 3已过期")
+    private Integer status;
+
+    @ApiModelProperty(value = "获取时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private Date insertTime;
+
+    @ApiModelProperty(value = "会员id")
+    private Integer vipId;
+    @ApiModelProperty(value = "会员名称")
+    private String vipName;
+    @ApiModelProperty(value = "会员权益类型 1优惠券 2门票")
+    private Integer type;
+
+    @ApiModelProperty(value = "会员支付记录id")
+    private Integer vipPaymentId;
+
+    @ApiModelProperty(value = "优惠券id")
+    private Integer couponId;
+
+    @ApiModelProperty(value = "门票名称/优惠券名称")
+    private String ticketName;
+
+    @ApiModelProperty(value = "开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "可用次数")
+    private Integer useCount;
+
+    @ApiModelProperty(value = "使用门店id")
+    private Integer useStoreId;
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+    @ApiModelProperty(value = "使用场地id")
+    private Integer useSiteId;
+
+    @ApiModelProperty(value = "使用商品id")
+    private Integer useGoodsId;
+    @ApiModelProperty(value = "使用商品/场地名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "使用时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private Date useTime;
+
+    @ApiModelProperty(value = "运营商id")
+    private Integer operatorId;
+    @ApiModelProperty(value = "运营商名称")
+    private String operatorName;
+
+    @ApiModelProperty(value = "用户优惠券id")
+    private Long userCouponId;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java
new file mode 100644
index 0000000..60d74e3
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java
@@ -0,0 +1,45 @@
+package com.dsh.guns.modular.system.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 会员订单列表
+ */
+@Data
+public class VipPaymentVO {
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "订单编号")
+    private String code;
+    @ApiModelProperty(value = "用户id")
+    private Integer appUserId;
+    @ApiModelProperty(value = "用户名称")
+    private String appUserName;
+    @ApiModelProperty(value = "用户电话")
+    private String appUserPhone;
+    @ApiModelProperty(value = "会员名称")
+    private String vipName;
+    @ApiModelProperty(value = "会员id")
+    private Integer vipId;
+    @ApiModelProperty(value = "会员时长")
+    private String vipTime;
+    @ApiModelProperty(value = "金额¥")
+    private String amountValue;
+    @ApiModelProperty(value = "金额")
+    private BigDecimal amount;
+    @ApiModelProperty(value = "下单时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date insertTime;
+    @ApiModelProperty(value = "是否退款 0否1时")
+    private Integer isRefund;
+    @ApiModelProperty(value = "备注")
+    private Integer remark;
+
+
+
+}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipDetail/vip_detail.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipDetail/vip_detail.html
new file mode 100644
index 0000000..25881bd
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipDetail/vip_detail.html
@@ -0,0 +1,109 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>会员权益使用明细</h5>
+            </div>
+
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <#NameCon id="vipName" name="权益名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            权益类型
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="type" >
+                                        <option value="">全部</option>
+                                        <option value="1">优惠券</option>
+                                        <option value="2">门票</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="phone" name="会员电话" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="storeName" name="使用门店" />
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            归属运营商
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="operatorId" >
+                                        <option value="">全部</option>
+                                        @for(obj in list){
+                                        <option value="${obj.id}">${obj.name}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            使用状态
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="status" >
+                                        <option value="">全部</option>
+                                        <option value="1">未使用</option>
+                                        <option value="2">已使用</option>
+                                        <option value="3">已过期</option>
+                                    </select>
+                                </div>
+                            </div>
+
+                            <div class="col-sm-3">
+                                <#TimeCon id="time" name="获得日期" isTime="false"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <#TimeCon id="useTime" name="使用日期" isTime="false"/>
+                            </div>
+
+
+
+
+
+                    <div class="col-sm-3">
+                        <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/>
+                        <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/>
+                    </div>
+                </div>
+                        <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
+                            @if(objectType==1){
+                            <#button name="导出" icon="fa-plus" clickFun="TCompetition.export()"/>
+                            @}
+                        </div>
+                <#table id="TCompetitionTable"/>
+            </div>
+        </div>
+    </div>
+</div>
+</div>
+</div>
+<script src="${ctxPath}/modular/system/vipDetail/vipDetail.js"></script>
+<script>
+    laydate.render({
+        elem: '#time'
+        , trigger: 'click'
+        , range: true
+    });
+    laydate.render({
+        elem: '#useTime'
+        , trigger: 'click'
+        , range: true
+    });
+</script>
+
+@}
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
new file mode 100644
index 0000000..53f20c6
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js
@@ -0,0 +1,187 @@
+/**
+ * 车辆管理管理初始化
+ */
+var TCompetition = {
+    id: "TCompetitionTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+var language =1
+var role =$("#role").val()
+/**
+ * 初始化表格的列
+ */
+TCompetition.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '序号', field: 'id', visible: true, align: 'center', valign: 'middle'},
+        {title: '权益名称', field: 'ticketName', visible: true, align: 'center', valign: 'middle'},
+        {title: '权益类型', field: 'type', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return {1:"优惠券",2:"门票"}[data]
+            }
+        },
+        {title: '关联会员类型', field: 'vipName', visible:  true, align: 'center', valign: 'middle'},
+        {title:  '购买会员姓名', field: 'appUserName', visible: true, align: 'center', valign: 'middle'},
+        {title:  '联系电话', field: 'appUserPhone', visible: true, align: 'center', valign: 'middle'},
+        {title: '使用状态', field: 'status', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return {1:"未使用",2:"已使用",3:"已过期"}[data]
+            }
+        },
+        {title:  '使用场地/商品名称', field: 'goodsName', visible: true, align: 'center', valign: 'middle'},
+        {title: '使用门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+        {title: '归属运营商', field: 'operatorName', visible: true, align: 'center', valign: 'middle'},
+        {title: '获得时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
+        {title: '使用时间', field: 'useTime', visible: true, align: 'center', valign: 'middle'},
+
+    ];
+};
+
+
+
+
+
+/**
+ * 查询车辆管理列表
+ */
+TCompetition.search = 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();
+    TCompetition.table.refresh({query: queryData});
+};
+
+
+TCompetition.resetSearch = function () {
+    $("#vipName").val("");
+    $("#type").val("");
+    $("#name").val("");
+    $("#phone").val("");
+    $("#storeName").val("");
+    $("#operatorId").val("");
+    $("#status").val("");
+    $("#time").val("");
+    $("#useTime").val("");
+    TCompetition.search();
+};
+
+
+$(function () {
+    var defaultColunms = TCompetition.initColumn();
+    var table = new BSTable(TCompetition.id, "/vipDetail/list", defaultColunms);
+    table.setPaginationType("client");
+    TCompetition.table = table.init();
+    TCompetition.getAmount();
+
+});
+
+/**
+ * 下载模板
+ */
+TCompetition.uploadCarModel = function () {
+    window.location.href = Feng.ctxPath + "/TCompetition/uploadCarModel";
+}
+
+var agreement = function(){
+    this.init = function(){
+        //模拟上传excel  
+        $("#uploadEventBtn").unbind("click").bind("click",function(){
+            $("#uploadEventFile").click();
+        });
+    };
+}
+/**
+ * 导入合同
+ */
+TCompetition.exporTCompetition = function () {
+    var uploadEventFile = $("#uploadEventFile").val();
+    if(uploadEventFile == ''){
+        if(language==1){
+            Feng.info("请选择Excel,再上传");
+        }else if(language==2){
+            Feng.info("Please select Excel and upload");
+        }else {
+            Feng.info("Silakan pilih Excel dan upload");
+        }
+    }else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel  
+        if(language==1){
+            Feng.info("只能上传Excel文件");
+        }else if(language==2){
+            Feng.info("Only Excel files can be uploaded");
+        }else {
+            Feng.info("Hanya berkas Excel yang dapat diunggah");
+        }
+    }else{
+        var url = Feng.ctxPath + '/TCompetition/exporTCompetition';
+        var file = document.querySelector('input[name=file]').files[0];
+        var reader = new FileReader();
+        if (file) {
+            var formData = new FormData();
+            formData.append("myfile", file);
+            this.sendAjaxRequest(url, 'POST', formData);
+        }
+    }
+}
+TCompetition.sendAjaxRequest = function(url,type,data){
+    $.ajax({
+        url : url,
+        type : type,
+        data : data,
+        success : function(result) {
+            if(result.code==500) {
+                Feng.info(result.message);
+            }else {
+                if(language==1){
+                    Feng.success("导入成功!");
+                }else if(language==2){
+                    Feng.success("SUCCESSFUL IMPORT!");
+                }else {
+                    Feng.success("Import berhasil!");
+                }
+            }
+            TCompetition.table.refresh();
+        },
+        error : function() {
+            if(language==1){
+                Feng.error("excel上传失败!");
+            }else if(language==2){
+                Feng.error("Uploading excel Fails. Procedure!");
+            }else {
+                Feng.error("Gagal mengunggah excel!");
+            }
+        },
+        cache : false,
+        contentType : false,
+        processData : false
+    });
+};
+
+var agreement;
+$(function(){
+    agreement = new agreement();
+    agreement.init();
+});
+
+/**
+ * 导出车辆操作
+ */
+TCompetition.ouTCompetition = function () {
+    var operation = function() {
+        window.location.href = Feng.ctxPath + "/TCompetition/ouTCompetition";
+    };
+    if(language==1){
+        Feng.confirm("是否确认导出车辆信息?", operation);
+    }else if(language==2){
+        Feng.confirm("Are you sure to export vehicle information?", operation);
+    }else {
+        Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation);
+    }
+}
\ No newline at end of file

--
Gitblit v1.7.1