无关风月
17 小时以前 4c07eb5512914ebd38e1c1e4455094577864c9f0
会员支付相关
10个文件已修改
2 文件已复制
1 文件已重命名
6个文件已添加
626 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/FinanceController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/entity/VipPayment.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/dto/VipPaymentDto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/dto/VipRefundDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/VipPaymentListVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/VipPaymentVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipPaymentDto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/VipPaymentClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipRefundDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentListVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/ball/ball.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/FinanceController.java
@@ -1,25 +1,30 @@
package com.dsh.account.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.account.entity.CoachType;
import com.dsh.account.entity.RechargeRecords;
import com.dsh.account.entity.TAppUser;
import com.dsh.account.entity.VipPayment;
import com.dsh.account.model.IncomeQuery;
import com.dsh.account.model.dto.VipPaymentDto;
import com.dsh.account.model.dto.VipRefundDto;
import com.dsh.account.model.query.RechargeRecordsQuery;
import com.dsh.account.model.query.coachQuery.CoachQuery;
import com.dsh.account.model.vo.CoachSerchVO;
import com.dsh.account.model.vo.RechargeRecordsVO;
import com.dsh.account.model.vo.VipPaymentListVO;
import com.dsh.account.service.*;
import net.bytebuddy.asm.Advice;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 充值记录控制器
@@ -82,4 +87,60 @@
    public List<VipPayment> registrationList(@RequestBody IncomeQuery query) {
        return rechargeRecordsService.listAll(query);
    }
    /**
     * 退费
     */
    @ResponseBody
    @RequestMapping("/finance/refund")
    public String refund(@RequestBody VipRefundDto vipRefundDto) throws ParseException {
        VipPayment vipPayment = vipPaymentService.getById(vipRefundDto.getId());
        if (vipPayment==null){
            return "500";
        }
        Integer appUserId = vipPayment.getAppUserId();
        TAppUser appUser = appUserService.getById(appUserId);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parse = simpleDateFormat.parse(vipRefundDto.getEndTime() + " 00:00:00");
        appUser.setVipEndTime( parse);
        if (parse.before(new Date())){
            appUser.setIsVip(0);
        }
        appUserService.updateById(appUser);
        vipPayment.setState(3);
        vipPaymentService.updateById(vipPayment);
        return "200";
    }
    @ResponseBody
    @RequestMapping("/finance/vipPayment")
    List<VipPaymentListVO> vipPayment(@RequestBody VipPaymentDto vipPaymentDto){
        List<VipPaymentListVO> vipPaymentListVOS = new ArrayList<>();
        List<Integer> payStatus = new ArrayList<>();
        payStatus.add(2);
        LambdaQueryWrapper<VipPayment> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>();
        vipPaymentLambdaQueryWrapper.in(!vipPaymentDto.getUserIds().isEmpty(),VipPayment::getAppUserId, vipPaymentDto.getUserIds());
        vipPaymentLambdaQueryWrapper.in(!vipPaymentDto.getVipIds().isEmpty(),VipPayment::getVipId, vipPaymentDto.getVipIds());
        vipPaymentLambdaQueryWrapper.in(VipPayment::getPayStatus,payStatus);
        vipPaymentLambdaQueryWrapper.ge(StringUtils.hasLength(vipPaymentDto.getStartTime()), VipPayment::getInsertTime, vipPaymentDto.getStartTime());
        vipPaymentLambdaQueryWrapper.le(StringUtils.hasLength(vipPaymentDto.getEndTime()), VipPayment::getInsertTime, vipPaymentDto.getEndTime());
        if (vipPaymentDto.getIsRefund()!=null&&vipPaymentDto.getIsRefund()==1){
            payStatus.add(3);
        }
        List<VipPayment> list = vipPaymentService.list(vipPaymentLambdaQueryWrapper);
        // 使用 Stream + 手动拷贝提升性能和可读性(或使用 MapStruct)
        vipPaymentListVOS = list.stream().map(vipDetail -> {
                VipPaymentListVO vo = new VipPaymentListVO();
            BeanUtils.copyProperties(vo, vipDetail); // 注意参数顺序是否正确
            return vo;
        }).collect(Collectors.toList());
        for (VipPaymentListVO vipPaymentListVO : vipPaymentListVOS) {
            if (vipPaymentListVO.getPayStatus()==2){
                vipPaymentListVO.setIsRefund(0);
            }else {
                vipPaymentListVO.setIsRefund(1);
            }
        }
        return vipPaymentListVOS;
    }
}
cloud-server-account/src/main/java/com/dsh/account/entity/VipPayment.java
@@ -44,7 +44,7 @@
    @TableField("payType")
    private Integer payType;
    /**
     * 支付状态(1=待支付,2=已支付)
     * 支付状态(1=待支付,2=已支付 3=已退款)
     */
    @TableField("payStatus")
    private Integer payStatus;
@@ -84,6 +84,11 @@
     */
    @TableField("couponJson")
    private String couponJson;
    /**
     * 退款备注
     */
    @TableField("remark")
    private String remark;
    public static String CODE() {
cloud-server-account/src/main/java/com/dsh/account/model/dto/VipPaymentDto.java
New file
@@ -0,0 +1,24 @@
package com.dsh.account.model.dto;
import lombok.Data;
import java.util.List;
/**
 * 会员权益明细
 */
@Data
public class VipPaymentDto {
    // 会员ids
    List<Integer> vipIds;
    // 用户ids
    List<Integer> userIds;
    // 是否退款 0否1是
    Integer isRefund;
    // 下单时间开始
    String startTime;
    // 下单时间结束
    String endTime;
}
cloud-server-account/src/main/java/com/dsh/account/model/dto/VipRefundDto.java
New file
@@ -0,0 +1,16 @@
package com.dsh.account.model.dto;
import lombok.Data;
/**
 * 会员退费DTO
 */
@Data
public class VipRefundDto {
    // 会员支付记录id
    String id;
    // 会员到期时间
    String endTime;
}
cloud-server-account/src/main/java/com/dsh/account/model/vo/VipPaymentListVO.java
copy from cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java copy to cloud-server-account/src/main/java/com/dsh/account/model/vo/VipPaymentListVO.java
File was copied from cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java
@@ -1,5 +1,8 @@
package com.dsh.guns.modular.system.model.vo;
package com.dsh.account.model.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -11,7 +14,7 @@
 * 会员订单列表
 */
@Data
public class VipPaymentVO {
public class VipPaymentListVO {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "订单编号")
@@ -40,6 +43,31 @@
    @ApiModelProperty(value = "备注")
    private Integer remark;
    /**
     * 支付方式(1=微信,2=支付宝)
     */
    @TableField("payType")
    private Integer payType;
    /**
     * 支付状态(1=待支付,2=已支付 3=已退款)
     */
    @TableField("payStatus")
    private Integer payStatus;
    /**
     * 支付时间
     */
    @TableField("payTime")
    private Date payTime;
    /**
     * 第三方流水号
     */
    @TableField("orderNumber")
    private String orderNumber;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
}
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -27,10 +27,8 @@
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.VipPaymentVO;
import com.dsh.activity.model.request.*;
import com.dsh.activity.model.response.CouponPackageResp;
import com.dsh.activity.service.*;
import com.dsh.activity.util.GDMapGeocodingUtil;
@@ -108,7 +106,7 @@
    @PostMapping("/base/coupon/vipDetail")
    @ResponseBody
    List<VipDetailVO> vipDetail(VipDetailDto vipDetailDto){
    List<VipDetailVO> vipDetail(@RequestBody VipDetailDto vipDetailDto){
        List<VipDetailVO> vipDetailVOS = new ArrayList<>();
        List<VipDetail> list = vipDetailService.lambdaQuery()
                .in(!vipDetailDto.getVipIds().isEmpty(), VipDetail::getVipId, vipDetailDto.getVipIds())
@@ -137,11 +135,11 @@
                    vipDetailVO.setGoodsName(coupon.getName());
                }
            }
        }
        return vipDetailVOS;
    }
    /**
     * 查询注册赠送优惠券 判断当前优惠券限领数量
     */
cloud-server-activity/src/main/java/com/dsh/activity/model/VipPaymentVO.java
copy from cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java copy to cloud-server-activity/src/main/java/com/dsh/activity/model/VipPaymentVO.java
File was copied from cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java
@@ -1,4 +1,4 @@
package com.dsh.guns.modular.system.model.vo;
package com.dsh.activity.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipPaymentDto.java
New file
@@ -0,0 +1,24 @@
package com.dsh.activity.model.request;
import lombok.Data;
import java.util.List;
/**
 * 会员权益明细
 */
@Data
public class VipPaymentDto {
    // 会员ids
    List<Integer> vipIds;
    // 用户ids
    List<Integer> userIds;
    // 是否退款 0否1是
    Integer isRefund;
    // 下单时间开始
    String startTime;
    // 下单时间结束
    String endTime;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/VipPaymentClient.java
@@ -2,6 +2,9 @@
import com.dsh.course.feignClient.account.model.VipPayment;
import com.dsh.guns.modular.system.model.IncomeQuery;
import com.dsh.guns.modular.system.model.dto.VipPaymentDto;
import com.dsh.guns.modular.system.model.dto.VipRefundDto;
import com.dsh.guns.modular.system.model.vo.VipPaymentListVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -20,4 +23,9 @@
     */
    @RequestMapping("/finance/vipPaymentList")
    List<VipPayment> registrationList(@RequestBody IncomeQuery query);
    @RequestMapping("/finance/vipPayment")
    List<VipPaymentListVO> vipPayment(@RequestBody VipPaymentDto vipPaymentDto);
    @RequestMapping("/finance/refund")
    String refund(@RequestBody VipRefundDto vipRefundDto);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java
@@ -5,7 +5,9 @@
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.dto.VipPaymentDto;
import com.dsh.guns.modular.system.model.vo.VipDetailVO;
import com.dsh.guns.modular.system.model.vo.VipPaymentListVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -65,5 +67,7 @@
    @PostMapping("/base/pointMerchars/goodsList")
    List<PointsMerchandise> goodsList();
    @PostMapping("/base/coupon/vipDetail")
    List<VipDetailVO> vipDetail(VipDetailDto vipDetailDto);
    List<VipDetailVO> vipDetail(@RequestBody VipDetailDto vipDetailDto);
    @PostMapping("/base/coupon/vipPayment")
    List<VipPaymentListVO> vipPayment(@RequestBody VipPaymentDto vipPaymentDto);
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java
@@ -1,25 +1,16 @@
package com.dsh.guns.modular.system.controller.code;
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.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.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.core.base.tips.SuccessTip;
import com.dsh.guns.modular.system.model.*;
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.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.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,8 +19,6 @@
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -50,6 +39,8 @@
    @Autowired
    private AppUserClient appUserClient;
    @Autowired
    private VipPaymentClient vipPaymentClient;
    @Autowired
    private ITSiteService siteService;
    @Autowired
    private TOperatorService operatorService;
@@ -69,7 +60,7 @@
     */
    @RequestMapping(value = "/list")
    @ResponseBody
    public List<VipPaymentVO> list(String appUserName
    public List<VipPaymentListVO> list(String appUserName
            , String phone, String vipName
            , Integer isRefund
            , String time
@@ -110,7 +101,58 @@
                vipPaymentDto.setUserIds(userIds);
            }
        }
        return null;
        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());
            }
        }
        return res;
    }
    /**
     * 退费
     */
    @RequestMapping(value = "/refund")
    @ResponseBody
    public Object list(@RequestBody VipRefundDto vipRefundDto) {
        String code =vipPaymentClient.refund(vipRefundDto);
        if (code!=null&& code.equals("200")){
            return ResultUtil.success();
        }else{
            return ResultUtil.error("退费失败");
        }
    }
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java
@@ -46,7 +46,7 @@
    private ITSiteService siteService;
    @Autowired
    private TOperatorService operatorService;
    private String PREFIX = "/system/vip/";
    private String PREFIX = "/system/vipDetail/";
    /**
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java
@@ -18,8 +18,8 @@
    // 是否退款 0否1是
    Integer isRefund;
    // 下单时间开始
    String useStartTime;
    String startTime;
    // 下单时间结束
    String useEndTime;
    String endTime;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipRefundDto.java
New file
@@ -0,0 +1,18 @@
package com.dsh.guns.modular.system.model.dto;
import lombok.Data;
import java.util.List;
/**
 * 会员退费DTO
 */
@Data
public class VipRefundDto {
    // 会员支付记录id
    String id;
    // 会员到期时间
    String endTime;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentListVO.java
File was renamed from cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java
@@ -11,7 +11,7 @@
 * 会员订单列表
 */
@Data
public class VipPaymentVO {
public class VipPaymentListVO {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "订单编号")
cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html
New file
@@ -0,0 +1,68 @@
@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="appUserName" name="用户姓名" />
                            </div>
                            <div class="col-sm-3">
                                <#NameCon id="phone" name="电话" />
                            </div>
                            <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">
                                <#TimeCon id="time" 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">
                            <#button name="导出" icon="fa-plus" clickFun="TCompetition.export()"/>
                        </div>
                <#table id="TCompetitionTable"/>
            </div>
        </div>
    </div>
</div>
</div>
</div>
<script src="${ctxPath}/modular/system/vipPayment/vipPayment.js"></script>
<script>
    laydate.render({
        elem: '#time'
        , trigger: 'click'
        , range: true
    });
</script>
@}
cloud-server-management/src/main/webapp/static/modular/system/ball/ball.js
@@ -93,6 +93,7 @@
TStudent.openDetail = function (e) {
    console.log("看看")
    console.log(e)
        var index = layer.load(1,{
            type: 1
            , title: '设备二维码'
cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js
@@ -76,7 +76,7 @@
$(function () {
    var defaultColunms = TCompetition.initColumn();
    var table = new BSTable(TCompetition.id, "/vipDetail/list", defaultColunms);
    var table = new BSTable(TCompetition.id, "/vipPayment/list", defaultColunms);
    table.setPaginationType("client");
    TCompetition.table = table.init();
    TCompetition.getAmount();
cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js
New file
@@ -0,0 +1,253 @@
/**
 * 车辆管理管理初始化
 */
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: 'code', 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: 'vipName', visible:  true, align: 'center', valign: 'middle'},
        {title: '时长', field: 'vipTime', visible:  true, align: 'center', valign: 'middle'},
        {title: '金额', field: 'amountValue', visible:  true, align: 'center', valign: 'middle'},
        {title: '下单时间', field: 'insertTime', visible:  true, align: 'center', valign: 'middle'},
        {title: '是否退费', field: 'isRefund', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {0:"否",1:"是"}[data]
            }
        },
        {title: '备注', field: 'remark', visible: true, align: 'center', valign: 'middle'},
        { title: '操作', field: 'remark', visible: true, align: 'center', valign: 'middle',
            formatter: function (data,row) {
                // row.redCode存储的设备二维码连接
                var temp = row.isRefund;
                var id = row.id;
                // 已退费不展示按钮
                if (temp==0){
                    var str = '<button class="btn btn-outline btn-primary" onclick="TCompetition.refund(\'' + id + '\')" >'+row.id+'</button>'
                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>']
                    return btn;
                }else{
                    return '已退费';
                }
            }
        },
    ];
};
/**
 * 打开编辑
 */
TCompetition.refund = function (e) {
    console.log("退款记录id")
    console.log( e)
    const data1 = {
        id:null,
        vipEndTime:""
    };
        var index = layer.load(1,{
            type: 1
            , title: '会员退费'
            , area: ['800px', '600px']
            , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
            , id: 'layerDemo' //防止重复弹出cge
            , content: '<div class="form-horizontal" style="padding-top: 20px;">' +
                '                    <div class="col-sm-11" >' +
                '                    <div class="col-sm-11">' +
                '                        <div class="form-group">\n' +
                '<label class="col-sm-3 control-label">*会员到期时间:</label>'+
    '<div class="col-sm-9">'+
        '<input style="width: 300px" class="form-control" id="vipEndTime" name="vipEndTime" type="date">'|
    '</div>'+
                '                        <div class="form-group refusal" style="display: none;">\n' +
                '                            <label class="col-sm-3 control-label">备注:</label>\n' +
                '                            <div class="col-sm-9">\n' +
                '                     <textarea id="refusal" class="form-control" style="width: 100%;height: 200px"></textarea>'+
                '                            </div>\n' +
                '                        </div>\n' +
                '                       </div>' +
                '                   </div>' +
                '</div>'
            , btn: ['保存', '关闭']
            , btnAlign: 'c' //按钮居中
            , shade:  0.5 //不显示遮罩
            ,load:1
            , yes: function () {
                var vipEndTime =  $("#vipEndTime").val();
                if(vipEndTime==null || vipEndTime==''){
                    Feng.error("请选择会员到期时间!");
                    return;
                }
                data1.id = e;
                data1.vipEndTime = $("#vipEndTime").val();
                $.ajax({
                    url: Feng.ctxPath + "/vipDetail/refund",
                    type: "POST",
                    contentType: "application/json", // 设置请求头的 Content-Type
                    data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
                    success: function(response) {
                        Feng.success("操作成功!");
                        window.location.reload();
                        layer.closeAll();
                    },
                    error: function(xhr, status, error) {
                        var errorMessage = xhr.responseText ? xhr.responseText : "退费失败!";
                        Feng.error("退费失败!");
                    }
                });
            }
        });
        this.layerIndex = index;
        $("#status1").change(function () {
            this.value == 3 ? $(".refusal").show() : $(".refusal").hide();
        });
};
/**
 * 查询车辆管理列表
 */
TCompetition.search = function () {
    var queryData = {};
    queryData['appUserName'] = $("#appUserName").val();
    queryData['vipName'] = $("#vipName").val();
    queryData['phone'] = $("#phone").val();
    queryData['isRefund'] = $("#isRefund").val();
    queryData['time'] = $("#time").val();
    TCompetition.table.refresh({query: queryData});
};
TCompetition.resetSearch = function () {
    $("#appUserName").val("");
    $("#vipName").val("");
    $("#phone").val("");
    $("#isRefund").val("");
    $("#time").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);
    }
}