From 8f37a2de432a8d4d77f94dcf45d0b86ce3006ee2 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 18 八月 2025 14:47:35 +0800
Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/PlayPai into 2.0

---
 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java  |    6 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java               |   18 +++
 cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java                        |    9 +
 cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java                |   10 +
 cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java                  |    4 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java                |   20 ++-
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java         |    6 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java |  236 +++++++++++++++++++++++++++++++++++++++
 cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java                         |    2 
 9 files changed, 294 insertions(+), 17 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
index 228d6a4..23c9176 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
@@ -474,7 +474,14 @@
             VipPaymentVO res = new VipPaymentVO();
             res.setHeadImg(appUser.getHeadImg());
             res.setName(appUser.getName());
-            res.setIsVip(appUser.getIsVip());
+            if (appUser.getVipEndTime()==null){
+                res.setIsVip(0);
+            }else if (appUser.getVipEndTime().before(new Date())){
+                res.setIsVip(0);
+            }else{
+                res.setIsVip(1);
+            }
+            appUserService.updateById(appUser);
             List<Vip> vips = vipClient.listAll();
             res.setVipList(vips);
         } catch (Exception e) {
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java
index eba6005..4f49cfb 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java
@@ -22,7 +22,7 @@
     @ApiModelProperty(value = "现金")
     private BigDecimal cash;
 
-    @ApiModelProperty(value = "兑换方式(1=积分,2=积分+现金)")
+    @ApiModelProperty(value = "兑换方式(1=积分,2=积分+现金 3=会员赠送)")
     private Integer exchangeType;
 
     @ApiModelProperty(value = "有效期开始时间")
@@ -37,11 +37,15 @@
     @ApiModelProperty(value = "商品类型  1实物 2课包 3门票 4优惠券")
     private Integer goodType;
 
+
     private Integer userId;
 
     private List<Integer> rid;
 
     private List<Integer> sid;
+    @ApiModelProperty(value = "当exchangeType=3会员赠送时存储1 门票二维码格式内容新增该字段 用于标明该门票为会员赠送" +
+            ",使用时存储门票记录")
+    private Integer isVipCode;
     @ApiModelProperty(value = "1日卡 2月卡 3季卡 4年卡")
     private Integer cardType;
 
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
index de91dd1..96ea547 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -1038,6 +1038,7 @@
 
 
                 }
+                detailsResponse.setIsVipCode(0);
                 responses.add(detailsResponse);
             }
             detailsVo.setDetailsResponses(responses);
@@ -1053,8 +1054,7 @@
                 detailsResponse.setGoodName(vipDetail.getTicketName());
                 detailsResponse.setStartTime(simpleDateFormat.format(vipDetail.getStartTime()));
                 detailsResponse.setEndTime(simpleDateFormat.format(vipDetail.getEndTime()));
-
-
+                detailsResponse.setIsVipCode(1);
                 detailsResponse.setUseStatus(vipDetail.getStatus());
                 detailsResponse.setGoodType(3);
                 // 表明是会员赠送的门票
@@ -1084,13 +1084,15 @@
                     detailsResponse.setIntegral(c.getIntegral().intValue());
                     detailsResponse.setCash(c.getCash());
                 }
+                if (userCoupon.getIsVipGrant()!=null && userCoupon.getIsVipGrant()==1){
+                    detailsResponse.setExchangeType(3);
+                }
                 detailsResponse.setStartTime(simpleDateFormat.format(c.getStartTime()));
                 detailsResponse.setEndTime(simpleDateFormat.format(c.getEndTime()));
                 detailsResponse.setUseStatus(userCoupon.getStatus() == 1 ? 2 : 1);
                 detailsResponse.setGoodType(4);
+                detailsResponse.setIsVipCode(0);
                 responses.add(detailsResponse);
-
-
             }
             Comparator<ExchangeDetailsResponse> comparator = Comparator.comparing(ExchangeDetailsResponse::getStartTime).reversed();
             Collections.sort(responses, comparator);
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java
index b1390ef..81d9384 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java
@@ -22,7 +22,7 @@
     @ApiModelProperty(value = "现金")
     private BigDecimal cash;
 
-    @ApiModelProperty(value = "兑换方式(1=积分,2=积分+现金)")
+    @ApiModelProperty(value = "兑换方式(1=积分,2=积分+现金 3=会员赠送)")
     private Integer exchangeType;
 
     @ApiModelProperty(value = "有效期开始时间")
@@ -45,6 +45,10 @@
 
     private List<Integer> sid;
 
+    @ApiModelProperty(value = "当exchangeType=3会员赠送时存储1 门票二维码格式内容新增该字段 用于标明该门票为会员赠送" +
+            ",使用时存储门票记录")
+    private Integer isVipCode;
+
     @ApiModelProperty(value = "1日卡 2月卡 3季卡 4年卡")
     private Integer cardType;
 
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java
index 07d0245..21b24b2 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java
@@ -19,7 +19,7 @@
     /**
      * 体验券名称
      */
-    @ApiModelProperty("体验券名称 ")
+    @ApiModelProperty("体验券名称/抵扣券商品名称 ")
     String experienceName;
 
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java
index a33a3fc..ec7445b 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java
@@ -13,8 +13,10 @@
 
     @ApiModelProperty("优惠券名称")
     private String name;
+    @ApiModelProperty("商品名称")
+    private String goodsName;
 
-    @ApiModelProperty("优惠券类型(1=满减券,2=代金券,3=体验券)")
+    @ApiModelProperty("优惠券类型(1=满减券,2=代金券,3=体验券,4=体验券)")
     private Integer type;
 
     @ApiModelProperty("适用范围1全国通用 2指定城市可用 3指定门店可用")
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
index 12804de..dd8e9f2 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
@@ -4,10 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-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.StudentClient;
 import com.dsh.activity.feignclient.account.model.AppUser;
@@ -17,10 +14,7 @@
 import com.dsh.activity.feignclient.other.StoreClient;
 import com.dsh.activity.feignclient.other.model.Site;
 import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
-import com.dsh.activity.mapper.CouponCityMapper;
-import com.dsh.activity.mapper.CouponMapper;
-import com.dsh.activity.mapper.CouponStoreMapper;
-import com.dsh.activity.mapper.UserCouponMapper;
+import com.dsh.activity.mapper.*;
 import com.dsh.activity.model.ConponJsonRuleModel;
 import com.dsh.activity.model.CouponListVo;
 import com.dsh.activity.model.request.CouponPackageReq;
@@ -54,6 +48,8 @@
 
     @Autowired
     private GDMapGeocodingUtil gdMapGeocodingUtil;
+    @Autowired
+    private PointsMerchandiseMapper pointsMerchandiseMapper;
 
     @Resource
     private AppUserClient appClient;
@@ -255,6 +251,14 @@
                             ruleModel.setDeductionAmount("");
                             ruleModel.setExperienceName(jsonObject.getString("experienceName"));
                             break;
+                            case 4:
+//                            抵扣券
+                                Integer goodsId = coupon.getGoodsId();
+                                PointsMerchandise pointsMerchandise = pointsMerchandiseMapper.selectById(goodsId);
+                                ruleModel.setConditionalAmount("");
+                            ruleModel.setDeductionAmount("");
+                            ruleModel.setExperienceName(pointsMerchandise.getName());
+                            break;
                         default:
                             break;
                     }
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
new file mode 100644
index 0000000..f6db7eb
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipDetailController.java
@@ -0,0 +1,236 @@
+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.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.AppUserClient;
+import com.dsh.course.feignClient.account.model.QueryByNamePhone;
+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.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.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/1 14:02
+ */
+@Controller
+@RequestMapping("/vipDetail")
+public class TVipDetailController extends BaseController {
+
+    @Autowired
+    private IVipService vipService;
+    @Autowired
+    private CouponClient couponClient;
+    @Autowired
+    private IStoreService storeService;
+    @Autowired
+    private AppUserClient appUserClient;
+    private String PREFIX = "/system/vip/";
+
+
+    /**
+     * 跳转到优惠券管理首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+
+        return PREFIX + "vipDetail.html";
+    }
+
+    /**
+     * 获取 会员权益使用明细列表
+     */
+    @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
+        if (StringUtils.hasLength(vipName)){
+            List<Integer> vipIds = vipService.lambdaQuery().like(Vip::getVipName, vipName)
+                    .list().stream().map(Vip::getId).collect(Collectors.toList());
+        }
+//        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;
+//            }
+//        }
+        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/model/dto/VipDetailDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java
new file mode 100644
index 0000000..28e7e41
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/VipDetailDto.java
@@ -0,0 +1,18 @@
+package com.dsh.guns.modular.system.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 会员权益明细
+ */
+@Data
+public class VipDetailDto {
+    List<Integer> vipIds;
+    List<Integer> userIds;
+    String store;
+    String site;
+    Integer type;
+    Integer id;
+}

--
Gitblit v1.7.1