From 4c07eb5512914ebd38e1c1e4455094577864c9f0 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 19 八月 2025 11:47:43 +0800 Subject: [PATCH] 会员支付相关 --- cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipPaymentController.java | 2 cloud-server-account/src/main/java/com/dsh/account/entity/VipPayment.java | 7 cloud-server-account/src/main/java/com/dsh/account/model/vo/VipPaymentListVO.java | 32 ++ cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java | 10 cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html | 68 ++++++ cloud-server-account/src/main/java/com/dsh/account/controller/FinanceController.java | 71 ++++++ cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipPaymentDto.java | 24 ++ cloud-server-management/src/main/webapp/static/modular/system/vipDetail/vipDetail.js | 2 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/CouponClient.java | 6 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentListVO.java | 2 cloud-server-account/src/main/java/com/dsh/account/model/dto/VipPaymentDto.java | 24 ++ cloud-server-account/src/main/java/com/dsh/account/model/dto/VipRefundDto.java | 16 + cloud-server-management/src/main/java/com/dsh/course/feignClient/account/VipPaymentClient.java | 8 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java | 76 +++++- cloud-server-management/src/main/webapp/static/modular/system/ball/ball.js | 1 cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js | 253 +++++++++++++++++++++++ cloud-server-activity/src/main/java/com/dsh/activity/model/VipPaymentVO.java | 2 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipRefundDto.java | 18 + cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipPaymentDto.java | 4 19 files changed, 588 insertions(+), 38 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/FinanceController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/FinanceController.java index 03dc7c6..9d646c1 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/FinanceController.java +++ b/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; + } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/VipPayment.java b/cloud-server-account/src/main/java/com/dsh/account/entity/VipPayment.java index c2257b7..7f6ad32 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/entity/VipPayment.java +++ b/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() { diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/dto/VipPaymentDto.java b/cloud-server-account/src/main/java/com/dsh/account/model/dto/VipPaymentDto.java new file mode 100644 index 0000000..cd1d1cc --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/dto/VipPaymentDto.java @@ -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; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/dto/VipRefundDto.java b/cloud-server-account/src/main/java/com/dsh/account/model/dto/VipRefundDto.java new file mode 100644 index 0000000..30ade03 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/dto/VipRefundDto.java @@ -0,0 +1,16 @@ +package com.dsh.account.model.dto; + +import lombok.Data; + +/** + * 会员退费DTO + */ +@Data +public class VipRefundDto { + + // 会员支付记录id + String id; + // 会员到期时间 + String endTime; + +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/VipPaymentListVO.java similarity index 60% 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 index 60d74e3..38bf1e0 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/VipPaymentListVO.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; } 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 fc7cf21..73af208 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 @@ -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; } + /** * 查询注册赠送优惠券 判断当前优惠券限领数量 */ diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/VipPaymentVO.java similarity index 96% 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 index 60d74e3..4760048 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/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; diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipPaymentDto.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipPaymentDto.java new file mode 100644 index 0000000..25d489c --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/VipPaymentDto.java @@ -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; + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/VipPaymentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/VipPaymentClient.java index 8876311..8dec03d 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/VipPaymentClient.java +++ b/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); + } 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 440ce62..3abbdf8 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 @@ -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); } 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 aa90268..ceecb47 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,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("退费失败"); + } } 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 9ae64a2..caeeeb5 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 @@ -46,7 +46,7 @@ private ITSiteService siteService; @Autowired private TOperatorService operatorService; - private String PREFIX = "/system/vip/"; + private String PREFIX = "/system/vipDetail/"; /** 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 index 258a988..9cb7d8a 100644 --- 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 @@ -18,8 +18,8 @@ // 是否退款 0否1是 Integer isRefund; // 下单时间开始 - String useStartTime; + String startTime; // 下单时间结束 - String useEndTime; + String endTime; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipRefundDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipRefundDto.java new file mode 100644 index 0000000..18d6273 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipRefundDto.java @@ -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; + +} 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/VipPaymentListVO.java similarity index 97% rename from cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentVO.java rename to cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/vo/VipPaymentListVO.java index 60d74e3..e0033d7 100644 --- 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/VipPaymentListVO.java @@ -11,7 +11,7 @@ * 会员订单列表 */ @Data -public class VipPaymentVO { +public class VipPaymentListVO { @ApiModelProperty(value = "主键") private Integer id; @ApiModelProperty(value = "订单编号") 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 new file mode 100644 index 0000000..1f2e5a2 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/vipPayment/vip_payment.html @@ -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> + +@} diff --git a/cloud-server-management/src/main/webapp/static/modular/system/ball/ball.js b/cloud-server-management/src/main/webapp/static/modular/system/ball/ball.js index d88e64c..dbb608e 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/ball/ball.js +++ b/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: '设备二维码' 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 53f20c6..390dfca 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 @@ -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(); 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 new file mode 100644 index 0000000..93419c2 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/vipPayment/vipPayment.js @@ -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); + } +} \ No newline at end of file -- Gitblit v1.7.1