Parcourir la source

20240712 邀请会员

lwhhszx il y a 1 an
Parent
commit
e35f59700b
23 fichiers modifiés avec 656 ajouts et 127 suppressions
  1. 41 0
      src/main/java/com/example/xiaoshiweixinback/business/utils/commonUtil/ReflectionUtil.java
  2. 47 0
      src/main/java/com/example/xiaoshiweixinback/controller/ActivitiesController.java
  3. 19 4
      src/main/java/com/example/xiaoshiweixinback/controller/PayController.java
  4. 11 0
      src/main/java/com/example/xiaoshiweixinback/controller/VoucherManageController.java
  5. 11 0
      src/main/java/com/example/xiaoshiweixinback/entity/activity/ActivityQueryDTO.java
  6. 14 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/OrderDetailVO.java
  7. 10 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/OrderMessageVO.java
  8. 6 4
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinPayDTO.java
  9. 23 0
      src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/ActivitiesFactory.java
  10. 11 0
      src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/ActivitiesImp.java
  11. 34 0
      src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/ByVoucherActivities.java
  12. 68 0
      src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/FirstByVipActivites.java
  13. 26 0
      src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/InvitedActivities.java
  14. 18 15
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVipService.java
  15. 11 1
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVoucherService.java
  16. 3 1
      src/main/java/com/example/xiaoshiweixinback/mapper/ActivityMapper.java
  17. 80 20
      src/main/java/com/example/xiaoshiweixinback/service/ActivityService.java
  18. 74 7
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVipService.java
  19. 1 1
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVoucherService.java
  20. 18 20
      src/main/java/com/example/xiaoshiweixinback/service/InviteMessageService.java
  21. 99 28
      src/main/java/com/example/xiaoshiweixinback/service/OrderService.java
  22. 1 18
      src/main/java/com/example/xiaoshiweixinback/service/VipService.java
  23. 30 8
      src/main/resources/mapper/ActivityMapper.xml

+ 41 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/commonUtil/ReflectionUtil.java

@@ -0,0 +1,41 @@
+package com.example.xiaoshiweixinback.business.utils.commonUtil;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+@Component
+public class ReflectionUtil {
+    @Autowired
+    private ApplicationContext applicationContext;
+    public  Object getClassObject(String className, String jarOrClassPath) {
+
+        if (jarOrClassPath != null&&!jarOrClassPath.equals("")) {
+            try {
+                //用路径创建Url
+                URL url = new URL("file:" + jarOrClassPath);
+                //通过Url加载外部的jar包
+                URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{url});
+                Class<?> clazz = urlClassLoader.loadClass(className);
+                return clazz.newInstance();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } else {
+            try {
+                return Class.forName(className).newInstance();
+            } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+
+
+}

+ 47 - 0
src/main/java/com/example/xiaoshiweixinback/controller/ActivitiesController.java

@@ -0,0 +1,47 @@
+package com.example.xiaoshiweixinback.controller;
+
+import com.example.xiaoshiweixinback.business.common.Constants;
+import com.example.xiaoshiweixinback.business.common.Response;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.domain.Activity;
+import com.example.xiaoshiweixinback.entity.activity.ActivityQueryDTO;
+import com.example.xiaoshiweixinback.entity.weixinPay.GetPayTicketVO;
+import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinPayDTO;
+import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinSuccessDTO;
+import com.example.xiaoshiweixinback.entity.weixinPay.WeixinSuccessVO;
+import com.example.xiaoshiweixinback.service.ActivityService;
+import com.example.xiaoshiweixinback.service.OrderService;
+import com.example.xiaoshiweixinback.service.weixinpay.AuthorizationService;
+import com.example.xiaoshiweixinback.service.weixinpay.WeixinPayService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+
+@RequestMapping(Constants.XIAOSHI_WEIXINBACK + "/activity")
+@RestController
+public class ActivitiesController {
+    @Autowired
+    private ActivityService activityService;
+
+
+    @Operation(summary = "查询活动")
+    @GetMapping("/queryActivities")
+    public String queryActivities(ActivityQueryDTO activityQueryDTO) throws IOException {
+        Records records = new Records();
+        try {
+
+            List<Activity> activityList = activityService.queryActivities(activityQueryDTO);
+            records.setData(activityList);
+        } catch (Exception e) {
+            return "";
+        }
+        return "success";
+    }
+
+
+}

+ 19 - 4
src/main/java/com/example/xiaoshiweixinback/controller/PayController.java

@@ -56,15 +56,15 @@ public class PayController {
         Records records = new Records();
         try {
             GetPayTicketVO getPayTicketVO = weixinPayService.getPayTickets(weiXinPayDTO);
-            if(getPayTicketVO==null){
-                return Response.error("901","支付成功");
+            if (getPayTicketVO == null) {
+                return Response.error("901", "支付成功");
             }
             records.setData(getPayTicketVO);
 
         } catch (Exception e) {
             e.printStackTrace();
-            if(e instanceof BusinessException) {
-                BusinessException e2 =(BusinessException) e;
+            if (e instanceof BusinessException) {
+                BusinessException e2 = (BusinessException) e;
                 return Response.error(e2.getErrorCode(), e2.getMessage());
             }
         }
@@ -101,4 +101,19 @@ public class PayController {
         }
         return "success";
     }
+
+    @Operation(summary = "查询订单详情")
+    @PostMapping("/getOrderDetail")
+    public Response getOrderDetail(@RequestBody WeiXinPayDTO weiXinPayDTO) throws IOException {
+        Records records = new Records();
+        try {
+            OrderDetailVO orderDetailVO = orderService.getOrderDetail(weiXinPayDTO);
+            records.setData(orderDetailVO);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Response.error(e.getMessage());
+        }
+        return Response.success(records);
+    }
+
 }

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/controller/VoucherManageController.java

@@ -3,9 +3,11 @@ package com.example.xiaoshiweixinback.controller;
 import com.example.xiaoshiweixinback.business.common.Constants;
 import com.example.xiaoshiweixinback.business.common.Response;
 import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.utils.commonUtil.ReflectionUtil;
 import com.example.xiaoshiweixinback.entity.assoPersonVoucher.PersonVoucherQueryDTO;
 import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
 import com.example.xiaoshiweixinback.entity.vouchar.*;
+import com.example.xiaoshiweixinback.service.ActivityService;
 import com.example.xiaoshiweixinback.service.AssoPersonVoucherService;
 import com.example.xiaoshiweixinback.service.VoucherService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -26,6 +28,7 @@ import java.util.List;
 public class VoucherManageController {
     private final VoucherService voucherService;
     private final AssoPersonVoucherService assoPersonVoucherService;
+    private final ActivityService activityService;
     @Operation(summary = "添加优惠券")
     @PostMapping("/addVoucher")
     public Response addVoucher  (@RequestBody VoucherAddDTO voucherAddDTO) {
@@ -97,4 +100,12 @@ public class VoucherManageController {
         }
         return Response.success(records);
     }
+
+
+    @GetMapping("/test")
+    public Response test () {
+     Object object=   activityService.executeActivity(null,-1,0,null);
+     System.out.println(object);
+        return Response.success("");
+    }
 }

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/entity/activity/ActivityQueryDTO.java

@@ -0,0 +1,11 @@
+package com.example.xiaoshiweixinback.entity.activity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ActivityQueryDTO {
+    private List<Integer> useScopes;
+    private Boolean ifAvailable;
+}

+ 14 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/OrderDetailVO.java

@@ -0,0 +1,14 @@
+package com.example.xiaoshiweixinback.entity.weixinPay;
+
+import com.example.xiaoshiweixinback.domain.Activity;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OrderDetailVO {
+   private List<GoodVO> goods;
+   private OrderMessageVO orderMessage;
+   private List<Integer> personVoucherIds;
+   List<Activity> Activities;
+}

+ 10 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/OrderMessageVO.java

@@ -0,0 +1,10 @@
+package com.example.xiaoshiweixinback.entity.weixinPay;
+
+import lombok.Data;
+
+@Data
+public class OrderMessageVO {
+    private Double price;
+    private Double finalPrice;
+    private Double discount;
+}

+ 6 - 4
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinPayDTO.java

@@ -8,17 +8,19 @@ import java.util.List;
 public class WeiXinPayDTO {
     private Integer goodType;
     private List<GoodVO> goods;
-    private  Double servicePrice;
+    private Double servicePrice;
     //总价格
     private Double price;
     //折扣
-    private  Double discount;
+    private Double discount;
+
     /**
      * 使用的已购买的优惠券id(人员和优惠券关联id)
      */
-    private  List<Integer> personVoucherIds;
+    private List<Integer> personVoucherIds;
     //最终价格
     private Double finalPrice;
-
+    private Integer orderId;
+    private Integer activityId;
 
 }

+ 23 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/ActivitiesFactory.java

@@ -0,0 +1,23 @@
+package com.example.xiaoshiweixinback.factorys.activeFactory;
+
+import com.example.xiaoshiweixinback.factorys.useFunctionFactory.UseFunctionImp;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+@Component
+public class ActivitiesFactory {
+    @Autowired
+    private Map<String, ActivitiesImp> activitiesImpMap;
+
+
+    public ActivitiesImp getClass(String functionClass) {
+        ActivitiesImp bean1 = activitiesImpMap.get(functionClass);
+        return bean1;
+    }
+}

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/ActivitiesImp.java

@@ -0,0 +1,11 @@
+package com.example.xiaoshiweixinback.factorys.activeFactory;
+
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+public interface ActivitiesImp {
+    public Object executeActivities(Object o);
+}

+ 34 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/ByVoucherActivities.java

@@ -0,0 +1,34 @@
+package com.example.xiaoshiweixinback.factorys.activeFactory;
+
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.domain.Order;
+import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinPayDTO;
+import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderGoodService;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ByVoucherActivities implements ActivitiesImp {
+    @Autowired
+    public  AssoPayOrderGoodService assoPayOrderGoodService;
+
+    @Override
+    public Object executeActivities(Object o) {
+        Double discount = 1d;
+        //根据orderId查询购买的产品
+        WeiXinPayDTO weiXinPayDTO = (WeiXinPayDTO) o;
+        Double price = weiXinPayDTO.getPrice();
+        if (price < 300d) {
+            discount = 1d;
+        } else if (price >= 300d && price < 500d) {
+            discount = 0.95d;
+        } else if (price > 500d) {
+            discount = 0.9d;
+        }
+        return discount;
+    }
+}

+ 68 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/FirstByVipActivites.java

@@ -0,0 +1,68 @@
+package com.example.xiaoshiweixinback.factorys.activeFactory;
+
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.domain.AssoPersonVip;
+import com.example.xiaoshiweixinback.domain.InviteMessage;
+import com.example.xiaoshiweixinback.domain.Order;
+import com.example.xiaoshiweixinback.service.AssoPersonVipService;
+import com.example.xiaoshiweixinback.service.InviteMessageService;
+import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderGoodService;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class FirstByVipActivites implements ActivitiesImp {
+       @Autowired
+    public  AssoPersonVipService assoPersonVipService;
+    @Lazy
+    @Autowired
+    public  InviteMessageService inviteMessageService;
+    @Autowired
+    public  AssoPayOrderGoodService assoPayOrderGoodService;
+
+    @Override
+    public Object executeActivities(Object o) {
+        Order order = (Order) o;
+        String personUuid = order.getPersonUuid();
+        AssoPersonVip assoPersonVip = assoPersonVipService.getPersonVip(personUuid);
+        if (assoPersonVip == null) {
+            this.addPersonVip(order);
+        } else {
+            //查询是否被邀请并且是否购买了会员
+            InviteMessage inviteMessage = inviteMessageService.getInvitedMessage(personUuid);
+            if (inviteMessage != null && !inviteMessage.getIfBuyVip()) {
+                this.addPersonVip(order);
+            }
+        }
+        return null;
+    }
+
+    public void addPersonVip(Order order) {
+        Integer orderId = order.getId();
+        String personUuid = order.getPersonUuid();
+        //查询产品信息
+        List<AssoPayOrderGood> assoPayOrderGoods = assoPayOrderGoodService.getPayOrderGoodByOrderId(orderId);
+        if (assoPayOrderGoods.size() == 0) {
+            return;
+        }
+        AssoPayOrderGood assoPayOrderGood = assoPayOrderGoods.get(0);
+        switch (assoPayOrderGood.getGoodUuid()) {
+            case "456":
+                assoPersonVipService.addPersonVipByTime(personUuid, 0, 7);
+                break;
+            case "789":
+                assoPersonVipService.addPersonVipByTime(personUuid, 1, 1);
+                break;
+            case "101112":
+                assoPersonVipService.addPersonVipByTime(personUuid, 1, 5);
+                break;
+        }
+
+    }
+}

+ 26 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/activeFactory/InvitedActivities.java

@@ -0,0 +1,26 @@
+package com.example.xiaoshiweixinback.factorys.activeFactory;
+
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.domain.InviteMessage;
+import com.example.xiaoshiweixinback.domain.Order;
+import com.example.xiaoshiweixinback.service.AssoPersonVipService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+@RequiredArgsConstructor
+public class InvitedActivities implements ActivitiesImp {
+    private final AssoPersonVipService assoPersonVipService;
+
+    @Override
+    public Object executeActivities(Object o) {
+        InviteMessage inviteMessage = (InviteMessage) o;
+        String inviteUuid = inviteMessage.getInvitePersonUuid();
+        String invitedUuid = inviteMessage.getInvitedPersonUuid();
+        assoPersonVipService.addAssoPersonVipByTime(inviteUuid, 1, 1);
+        assoPersonVipService.addAssoPersonVipByTime(invitedUuid, 1, 1);
+        //根据orderId查询购买的产品
+        return null;
+    }
+}

+ 18 - 15
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVipService.java

@@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -21,24 +22,26 @@ import java.util.stream.Collectors;
 public class GoodVipService implements GoodImp {
     private final VipService vipService;
     private final ActivityService activityService;
-    private static Integer ACTIVITY_SCOPE=-1;
-@Override
-public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods){
-AssoPayOrderGood assoPayOrderGood =assoPayOrderGoods.get(0);
-vipService.activateVIP(order,assoPayOrderGood.getGoodUuid());
-String personUuid =order.getPersonUuid();
- activityService.doingActivity(personUuid,ACTIVITY_SCOPE);
-}
+    private static Integer ACTIVITY_SCOPE = -1;
+
+    @Override
+    public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods) {
+        AssoPayOrderGood assoPayOrderGood = assoPayOrderGoods.get(0);
+        vipService.activateVIP(order, assoPayOrderGood.getGoodUuid());
+    }
 
     @Override
     public Double computePrice(List<GoodVO> goodVOs) {
         Double totalPrice = 0d;
-    String idStr =goodVOs.get(0).getId();
-    Vip vip =vipService.getVipByUuId(idStr);
-     if(vip==null){
-         throw  new BusinessException(ExceptionEnum.BUSINESS_ERROR,"会员不存在");
-     }
-     totalPrice+=vip.getFinalPrice();
-        return totalPrice;
+        BigDecimal totalPriceBig = new BigDecimal(totalPrice);
+        String idStr = goodVOs.get(0).getId();
+        Vip vip = vipService.getVipByUuId(idStr);
+        if (vip == null) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "会员不存在");
+        }
+        Double finalPrice = vip.getFinalPrice();
+        BigDecimal finalPriceBig = new BigDecimal(finalPrice);
+        totalPriceBig=totalPriceBig.add(finalPriceBig);
+        return totalPriceBig.doubleValue();
     }
 }

+ 11 - 1
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVoucherService.java

@@ -9,6 +9,7 @@ import com.example.xiaoshiweixinback.domain.Order;
 import com.example.xiaoshiweixinback.domain.Voucher;
 import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
 import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
+import com.example.xiaoshiweixinback.service.ActivityService;
 import com.example.xiaoshiweixinback.service.AssoPersonVoucherService;
 import com.example.xiaoshiweixinback.service.VoucherService;
 import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderVoucherService;
@@ -16,6 +17,7 @@ import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -25,6 +27,7 @@ import java.util.stream.Collectors;
 public class GoodVoucherService implements GoodImp {
     private final AssoPersonVoucherService assoPersonVoucherService;
     private final VoucherService voucherService;
+    private final ActivityService activityService;
 
     @Override
     public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods) {
@@ -50,6 +53,8 @@ public class GoodVoucherService implements GoodImp {
     @Override
     public Double computePrice(List<GoodVO> goodVOs) {
         Double totalPrice = 0d;
+        BigDecimal totalPriceBig = new BigDecimal(totalPrice.toString());
+
         List<String> idStrs = goodVOs.stream().map(GoodVO::getId).distinct().collect(Collectors.toList());
         List<Integer> ids = FormatUtil.StringTOIntegerList(idStrs);
 
@@ -68,9 +73,14 @@ public class GoodVoucherService implements GoodImp {
                 throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "优惠券使用错误");
             }
             Double price = voucher.getSellingPrice();
+            BigDecimal priceBig = new BigDecimal(price);
             Integer num = goodVO.getNum();
-            totalPrice += price * num;
+            BigDecimal numBig = new BigDecimal(num.toString());
+            BigDecimal singlePriceBig = priceBig.multiply(numBig);
+            totalPriceBig = totalPriceBig.add(singlePriceBig);
+
         }
+        totalPrice = totalPriceBig.doubleValue();
         return totalPrice;
     }
 }

+ 3 - 1
src/main/java/com/example/xiaoshiweixinback/mapper/ActivityMapper.java

@@ -2,6 +2,7 @@ package com.example.xiaoshiweixinback.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.example.xiaoshiweixinback.domain.Activity;
+import com.example.xiaoshiweixinback.entity.activity.ActivityQueryDTO;
 
 import java.util.List;
 
@@ -12,7 +13,8 @@ import java.util.List;
 * @Entity com/example/xiaoshiweixinback.domain.Activity
 */
 public interface ActivityMapper extends BaseMapper<Activity> {
-  public List<Activity> queryScopeActivity(Integer scope);
+  public List<Activity> queryScopeActivity(Integer useScope,Integer type);
+  public List<Activity> queryScopeActivities(ActivityQueryDTO activityQueryDTO);
 }
 
 

+ 80 - 20
src/main/java/com/example/xiaoshiweixinback/service/ActivityService.java

@@ -1,16 +1,23 @@
 package com.example.xiaoshiweixinback.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.utils.commonUtil.ReflectionUtil;
 import com.example.xiaoshiweixinback.domain.Activity;
 import com.example.xiaoshiweixinback.domain.AssoActivityVoucher;
 import com.example.xiaoshiweixinback.domain.AssoPersonVoucher;
 import com.example.xiaoshiweixinback.domain.AssoVipVoucher;
+import com.example.xiaoshiweixinback.entity.activity.ActivityQueryDTO;
 import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
+import com.example.xiaoshiweixinback.factorys.activeFactory.ActivitiesFactory;
+import com.example.xiaoshiweixinback.factorys.activeFactory.ActivitiesImp;
 import com.example.xiaoshiweixinback.mapper.ActivityMapper;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -22,40 +29,48 @@ import java.util.List;
 @Service
 @RequiredArgsConstructor
 public class ActivityService extends ServiceImpl<ActivityMapper, Activity> {
+
+    private String ACTIVITIES_PATH = "com.example.xiaoshiweixinback.factorys.activeFactory.";
+    @Value("${activity.jar-path}")
+    private String JAR_PATH;
     @Autowired
     private AssoActivityVoucherService assoActivityVoucherService;
     @Autowired
     private AssoPersonVoucherService assoPersonVoucherService;
+      @Autowired
+      private ReflectionUtil reflectionUtil;
+    @Autowired
+    private ActivitiesFactory activitiesFactory;
     //根据使用场景id查询活动
     public List<Activity> getActivities(Integer useScope) {
-        List<Activity> activities = this.getBaseMapper().queryScopeActivity(useScope);
-        if(activities.size()==0){
+        List<Activity> activities = this.getBaseMapper().queryScopeActivity(useScope, 0);
+        if (activities.size() == 0) {
             return null;
         }
-        Activity activity =activities.get(0);
+        Activity activity = activities.get(0);
         return activities;
     }
 
 
     public void sendVoucherToPerson(String personUuid, Integer activityId) {
-   List<AssoActivityVoucher> assoActivityVouchers =  assoActivityVoucherService.getAssoActivityVoucher(activityId);
- if(assoActivityVouchers.size()==0){
-     return;
- }
-SendVoucherToPersonVO sendVoucherToPersonVO =this.loadSendVoucherToPersonVO(assoActivityVouchers,personUuid);
+        List<AssoActivityVoucher> assoActivityVouchers = assoActivityVoucherService.getAssoActivityVoucher(activityId);
+        if (assoActivityVouchers.size() == 0) {
+            return;
+        }
+        SendVoucherToPersonVO sendVoucherToPersonVO = this.loadSendVoucherToPersonVO(assoActivityVouchers, personUuid);
 
         assoPersonVoucherService.sendVoucherToPerson(sendVoucherToPersonVO);
     }
 
-    private SendVoucherToPersonVO loadSendVoucherToPersonVO(List<AssoActivityVoucher> assoActivityVoucher, String personUuid ) {
-        SendVoucherToPersonVO sendVoucherToPersonVO =new SendVoucherToPersonVO();
+    private SendVoucherToPersonVO loadSendVoucherToPersonVO(List<AssoActivityVoucher> assoActivityVoucher, String personUuid) {
+        SendVoucherToPersonVO sendVoucherToPersonVO = new SendVoucherToPersonVO();
         sendVoucherToPersonVO.setGetWay(0);
-        List<String> personIds =new ArrayList<>();
+        List<String> personIds = new ArrayList<>();
         personIds.add(personUuid);
         sendVoucherToPersonVO.setPersonUuids(personIds);
-        List<SendVoucherToPersonVO.InAddVoucherVO> inAddVoucherVOS =new ArrayList<>();
-        assoActivityVoucher.forEach(item->{
-            SendVoucherToPersonVO.InAddVoucherVO inAddVoucherVO =new SendVoucherToPersonVO.InAddVoucherVO();
+        List<SendVoucherToPersonVO.InAddVoucherVO> inAddVoucherVOS = new ArrayList<>();
+        assoActivityVoucher.forEach(item -> {
+            SendVoucherToPersonVO.InAddVoucherVO inAddVoucherVO = new SendVoucherToPersonVO.InAddVoucherVO();
             inAddVoucherVO.setVoucherId(item.getVoucherId());
             inAddVoucherVO.setNumber(item.getVoucherNum());
             inAddVoucherVOS.add(inAddVoucherVO);
@@ -64,15 +79,60 @@ SendVoucherToPersonVO sendVoucherToPersonVO =this.loadSendVoucherToPersonVO(asso
         return sendVoucherToPersonVO;
     }
 
-    public void doingActivity(String personUuid,Integer useScope){
-    List<Activity> activities =    this.getActivities(useScope);
-        if(activities==null||activities.size()==0){
+    public void doingActivity(String personUuid, Integer useScope) {
+        List<Activity> activities = this.getActivities(useScope);
+        if (activities == null || activities.size() == 0) {
             return;
         }
-        Activity activity =activities.get(0);
-        Integer activityId =activity.getId();
-        this.sendVoucherToPerson(personUuid,activityId);
+        Activity activity = activities.get(0);
+        Integer activityId = activity.getId();
+        this.sendVoucherToPerson(personUuid, activityId);
     }
+
+    public Object executeActivity(Object o, Integer useScope, Integer type, Integer activityId) {
+        Object reActivities = null;
+        try {
+            List<Activity> activities = new ArrayList<>();
+       activities=this.getActivities(activityId,useScope,type);
+            if (activities.size() == 0) {
+                return null;
+            }
+            Activity activity = activities.get(0);
+            //获得活动的业务类
+            String activityName = activity.getActiveClass();
+//            activityName = ACTIVITIES_PATH + activityName;
+//            Object activityClass = reflectionUtil.getClassObject(activityName, JAR_PATH);
+//            Method method = activityClass.getClass().getMethod("executeActivities", Object.class);
+//            reActivities = method.invoke(activityClass, o);
+        ActivitiesImp activitiesImp =    activitiesFactory.getClass(activityName);
+        activitiesImp.executeActivities(o);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return reActivities;
+    }
+
+    public List<Activity> queryActivities(ActivityQueryDTO activityQueryDTO) {
+        List<Activity> activities = this.getBaseMapper().queryScopeActivities(activityQueryDTO);
+        if (activities.size() == 0) {
+            return null;
+        }
+        Activity activity = activities.get(0);
+        return activities;
+    }
+
+    public List<Activity> getActivities(Integer activityId, Integer useScope, Integer type) {
+        List<Activity> activities = new ArrayList<>();
+        //根据场景查询可使用的活动
+        if (activityId != null) {
+            LambdaQueryWrapper<Activity> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Activity::getId, activityId);
+            activities = this.list(queryWrapper);
+        }
+        activities = this.getBaseMapper().queryScopeActivity(useScope, type);
+        return activities;
+    }
+
 }
 
 

+ 74 - 7
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVipService.java

@@ -19,7 +19,7 @@ import java.util.Date;
 @Service
 public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoPersonVip> {
 
-    public AssoPersonVip getAsso(String personUuid,Vip vip) {
+    public AssoPersonVip getAsso(String personUuid, Vip vip) {
         AssoPersonVip assoPersonVip = new AssoPersonVip();
         LambdaQueryWrapper<AssoPersonVip> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoPersonVip::getPersonUuid, personUuid)
@@ -27,10 +27,10 @@ public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoP
                 .orderByDesc(AssoPersonVip::getExpiryTime);
         assoPersonVip = this.getOne(queryWrapper, false);
         if (assoPersonVip != null) {
-          this.updateAssoPersonVip(assoPersonVip,personUuid,vip);
+            this.updateAssoPersonVip(assoPersonVip, personUuid, vip);
+        } else {
+            assoPersonVip = this.addAssoPersonVip(personUuid, vip);
         }
-        else {
-        assoPersonVip = this.addAssoPersonVip(personUuid, vip);}
         return assoPersonVip;
     }
 
@@ -69,13 +69,12 @@ public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoP
     }
 
     /**
-     *
      * @param personUuid
-     * @param dateType 0天 1月 2年
+     * @param dateType   0天 1月 2年
      * @param lastTime
      * @return
      */
-    public AssoPersonVip addAssoPersonVipByTime(String personUuid,Integer dateType,Integer lastTime) {
+    public AssoPersonVip addAssoPersonVipByTime(String personUuid, Integer dateType, Integer lastTime) {
         Date date = new Date();
         AssoPersonVip assoPersonVip = new AssoPersonVip();
         assoPersonVip.setCreateTime(date);
@@ -87,6 +86,74 @@ public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoP
         return assoPersonVip;
     }
 
+    public AssoPersonVip getPersonVip(String personUuid) {
+        AssoPersonVip assoPersonVip = new AssoPersonVip();
+        LambdaQueryWrapper<AssoPersonVip> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonVip::getPersonUuid, personUuid);
+        assoPersonVip = this.getOne(queryWrapper, false);
+        return assoPersonVip;
+    }
+
+    /**
+     * @param personUuid
+     * @param dateType   0天 1月 2年
+     * @param lastTime
+     * @return
+     */
+    public AssoPersonVip addPersonVipByTime(String personUuid, Integer dateType, Integer lastTime) {
+        //查询当前登录人是否有vip
+
+        AssoPersonVip assoPersonVip = this.getPersonVip(personUuid);
+        if (assoPersonVip == null) {
+        this.addAssoPersonVip(personUuid,dateType,lastTime);
+        }
+
+        else {
+            this.updateAssoPersonVip(assoPersonVip,dateType,lastTime);
+        }
+
+
+        return assoPersonVip;
+    }
+
+    public AssoPersonVip addAssoPersonVip(String personUuid, Integer dateType, Integer lastTime) {
+        Date date = new Date();
+        Date expiryDate = null;
+        switch (dateType) {
+            case 0:
+                expiryDate = DateUtils.getPlusDayDate(date, lastTime);
+                break;
+            case 1:
+                expiryDate = DateUtils.getPlusMonthDate(date, lastTime);
+                break;
+        }
+     AssoPersonVip   assoPersonVip = new AssoPersonVip();
+        assoPersonVip.setExpiryTime(expiryDate);
+        assoPersonVip.setPersonUuid(personUuid);
+        assoPersonVip.setVipType(1);
+        assoPersonVip.insert();
+        return assoPersonVip;
+    }
+
+    public AssoPersonVip updateAssoPersonVip(AssoPersonVip assoPersonVip, Integer dateType, Integer lastTime) {
+        Date date = new Date();
+        if(assoPersonVip.getExpiryTime().compareTo(date)>=0){
+            date =assoPersonVip.getExpiryTime();
+        }
+        Date expiryDate = null;
+        switch (dateType) {
+            case 0:
+                expiryDate = DateUtils.getPlusDayDate(date, lastTime);
+                break;
+            case 1:
+                expiryDate = DateUtils.getPlusMonthDate(date, lastTime);
+                break;
+        }
+        assoPersonVip.setExpiryTime(expiryDate);
+        assoPersonVip.setVipType(1);
+        assoPersonVip.updateById();
+        return assoPersonVip;
+    }
 }
 
 

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVoucherService.java

@@ -172,7 +172,7 @@ public class AssoPersonVoucherService extends ServiceImpl<AssoPersonVoucherMappe
     public Double verifyVouchers(List<Integer> assoVoucherIds, PersonnelVO personnelVO) {
 
         Double price = 0d;
-        if(assoVoucherIds==null){
+        if(assoVoucherIds==null||assoVoucherIds.size()==0){
             return price;
         }
         String personId = personnelVO.getUuid();

+ 18 - 20
src/main/java/com/example/xiaoshiweixinback/service/InviteMessageService.java

@@ -15,7 +15,9 @@ import com.example.xiaoshiweixinback.entity.person.PersonQueryVO;
 import com.example.xiaoshiweixinback.entity.person.PersonVO;
 import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
 import com.example.xiaoshiweixinback.mapper.InviteMessageMapper;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -31,6 +33,7 @@ public class InviteMessageService extends ServiceImpl<InviteMessageMapper, Invit
     private final PersonService personService;
     public  final CacheUtil cacheUtil;
     private final  AssoPersonVipService assoPersonVipService;
+    @Lazy
     private final ActivityService activityService;
     private final Integer ACTIVITY_SCOPE=-2;
     public void checkInvite(String inviteNode) {
@@ -56,34 +59,22 @@ public class InviteMessageService extends ServiceImpl<InviteMessageMapper, Invit
         inviteMessage.setIfBuyVip(false);
         inviteMessage.setInvitedPersonUuid(personUuid);
         inviteMessage.insert();
-        assoPersonVipService.addAssoPersonVipByTime(personUuid,0,3);
+
+        activityService.executeActivity(inviteMessage,ACTIVITY_SCOPE,1,null);
+
     }
 
-    public Integer getInviteGiveVoucher(String personUuid) {
+    public InviteMessage updateInvite(String personUuid) {
         //查询人员是否被邀请
         LambdaQueryWrapper<InviteMessage> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(InviteMessage::getInvitedPersonUuid, personUuid)
                 .eq(InviteMessage::getIfBuyVip, false);
         InviteMessage inviteMessage = this.getOne(queryWrapper, false);
-
-        if (inviteMessage == null) {
-            return 0;
-        } else {
-            String inviteId = inviteMessage.getInvitePersonUuid();
-            LambdaQueryWrapper<InviteMessage> queryWrapper1 = new LambdaQueryWrapper<>();
-            queryWrapper1.eq(InviteMessage::getInvitePersonUuid, inviteId)
-                    .eq(InviteMessage::getIfBuyVip, true);
-            Long count = this.count(queryWrapper1);
-            if (count >= 5) {
-                return 0;
-            } else {
-                //TODO 给邀请人赠送优惠券
-                activityService.doingActivity(inviteMessage.getInvitePersonUuid() ,ACTIVITY_SCOPE);
-                inviteMessage.setIfBuyVip(true);
-                inviteMessage.updateById();
-                return 3;
-            }
+        if(inviteMessage!=null) {
+            inviteMessage.setIfBuyVip(true);
+            inviteMessage.updateById();
         }
+        return  inviteMessage;
     }
 
 
@@ -101,6 +92,13 @@ public class InviteMessageService extends ServiceImpl<InviteMessageMapper, Invit
         records.setCurrent(current);
         return records;
     }
+
+    public InviteMessage getInvitedMessage(String InvitedId) {
+         LambdaQueryWrapper<InviteMessage> queryWrapper =new LambdaQueryWrapper<>();
+         queryWrapper.eq(InviteMessage::getInvitedPersonUuid,InvitedId);
+         InviteMessage inviteMessage =this.getOne(queryWrapper);
+        return inviteMessage;
+    }
 }
 
 

+ 99 - 28
src/main/java/com/example/xiaoshiweixinback/service/OrderService.java

@@ -6,21 +6,22 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
 import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.BatchNoUtil;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
 import com.example.xiaoshiweixinback.domain.*;
 
 import com.example.xiaoshiweixinback.entity.dto.ticket.TicketProcessUpDTO;
 import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
 import com.example.xiaoshiweixinback.entity.vo.person.PersonVO;
-import com.example.xiaoshiweixinback.entity.weixinPay.GetPayTicketVO;
-import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
-import com.example.xiaoshiweixinback.entity.weixinPay.JsApiDTO;
-import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinPayDTO;
+import com.example.xiaoshiweixinback.entity.weixinPay.*;
 import com.example.xiaoshiweixinback.factorys.goodFactory.GoodFactory;
 import com.example.xiaoshiweixinback.factorys.goodFactory.GoodImp;
 import com.example.xiaoshiweixinback.mapper.AssoPersonProductMapper;
 import com.example.xiaoshiweixinback.mapper.OrderMapper;
 import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderGoodService;
 import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderVoucherService;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -41,7 +42,7 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
     private VipService vipService;
 
     @Autowired
-    private TicketService ticketService;
+    private InviteMessageService inviteMessageService;
 
     @Autowired
     private AssoPayOrderGoodService assoPayOrderGoodService;
@@ -51,10 +52,14 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
     private GoodFactory goodFactory;
     @Autowired
     private AssoPersonVoucherService assoPersonVoucherService;
+    @Autowired
+    private ActivityService activityService;
+    @Autowired
+    private CacheUtil cacheUtil;
 
     @Transactional(rollbackFor = Exception.class)
     public Order addOrder(WeiXinPayDTO weiXinPayDTO, String tradeNo, PersonnelVO personVO) {
-         this.verifyPrice(weiXinPayDTO,personVO);
+        this.verifyPrice(weiXinPayDTO, personVO);
         Integer type = weiXinPayDTO.getGoodType();
         Double price = weiXinPayDTO.getPrice();
         Double finalPrice = weiXinPayDTO.getFinalPrice();
@@ -92,12 +97,21 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
         }
         order.setOrderState(1);
         order.updateById();
+
         List<AssoPayOrderGood> assoPayOrderGoods = assoPayOrderGoodService.getPayOrderGoodByOrderId(order.getId());
-        Integer orderType =assoPayOrderGoods.get(0).getGoodType();
+        Integer orderType = assoPayOrderGoods.get(0).getGoodType();
+
+        //执行活动逻辑
+        activityService.executeActivity(order, orderType, 1, null);
         GoodImp goodImp = goodFactory.getClass(orderType);
         goodImp.activeGood(order, assoPayOrderGoods);
         List<Integer> assoPersonVoucherIds = assoPayOrderVoucherService.getAssoVoucherIdsByOrder(order.getId());
         assoPersonVoucherService.useVoucher(assoPersonVoucherIds, 1);
+
+
+        if (orderType.equals(-1)) {
+            inviteMessageService.updateInvite(order.getPersonUuid());
+        }
     }
 
 
@@ -111,35 +125,92 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
         List<Integer> assoVoucherIds = weiXinPayDTO.getPersonVoucherIds();
         Double price = weiXinPayDTO.getFinalPrice();
         Double discount = weiXinPayDTO.getDiscount();
-        if(discount==null){
-            discount=1d;
+
+        if (discount == null) {
+            discount = 1d;
         }
         //校验优惠卷是否能使用
         Double voucherMon = assoPersonVoucherService.verifyVouchers(assoVoucherIds, personVO);
 
         //计算商品价格
         GoodImp goodImp = goodFactory.getClass(type);
-        Double allPrice =  goodImp.computePrice(goodVOS);
-        System.out.println("总价"+allPrice);
-        System.out.println("卷值"+voucherMon);
-        BigDecimal allPriceBig =new BigDecimal(allPrice.toString());
-        BigDecimal   voucherMonBig    =new BigDecimal(voucherMon.toString());
-     BigDecimal withVocherPriceBig =allPriceBig.subtract(voucherMonBig);
-        BigDecimal discontBig =new BigDecimal(discount.toString());
-
-     if(withVocherPriceBig.doubleValue()<=0){
-         withVocherPriceBig=new BigDecimal("0");
-     }
+        Double allPrice = goodImp.computePrice(goodVOS);
+        WeiXinPayDTO weiXinPayDTO1 = new WeiXinPayDTO();
+        BeanUtils.copyProperties(weiXinPayDTO, weiXinPayDTO1);
+        weiXinPayDTO1.setFinalPrice(allPrice);
+        Object obj = activityService.executeActivity(weiXinPayDTO, type, 0, null);
+        Double trueDiscount = (Double) obj;
+        if (trueDiscount == null) {
+            trueDiscount = 1d;
+        }
+        System.out.println("总价" + allPrice);
+        System.out.println("卷值" + voucherMon);
+        BigDecimal allPriceBig = new BigDecimal(allPrice.toString());
+        BigDecimal voucherMonBig = new BigDecimal(voucherMon.toString());
+        BigDecimal withVocherPriceBig = allPriceBig.subtract(voucherMonBig);
+        BigDecimal discontBig = new BigDecimal(trueDiscount.toString());
+
+        if (withVocherPriceBig.doubleValue() <= 0) {
+            withVocherPriceBig = new BigDecimal("0");
+        }
         //查看是否有折扣
         // 计算价格 (商品总价格-优惠券) *折扣
-        BigDecimal truePriceBig =withVocherPriceBig.multiply(discontBig);
-     System.out.println("价格"+truePriceBig);
-
-     System.out.println("折扣"+discontBig);
-     Double truePrice=truePriceBig.doubleValue();
-     System.out.println("总价"+truePrice);
-        if(!truePrice.equals(price)){
-            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR,"价格错误");
+        BigDecimal truePriceBig = withVocherPriceBig.multiply(discontBig);
+        System.out.println("价格" + truePriceBig);
+
+        System.out.println("折扣" + discontBig);
+        Double truePrice = truePriceBig.doubleValue();
+        System.out.println("总价" + truePrice);
+        if (!truePrice.equals(price)) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "价格错误");
         }
     }
+
+    private OrderMessageVO getOrderMessage(WeiXinPayDTO weiXinPayDTO, PersonnelVO personVO) {
+        OrderMessageVO orderMessageVO = new OrderMessageVO();
+        List<GoodVO> goodVOS = weiXinPayDTO.getGoods();
+        List<Integer> assoVoucherIds = weiXinPayDTO.getPersonVoucherIds();
+        Integer type = weiXinPayDTO.getGoodType();
+        Integer activityId = weiXinPayDTO.getActivityId();
+        //校验优惠卷是否能使用
+        Double voucherMon = assoPersonVoucherService.verifyVouchers(assoVoucherIds, personVO);
+        GoodImp goodImp = goodFactory.getClass(type);
+        Double allPrice = goodImp.computePrice(goodVOS);
+
+        orderMessageVO.setPrice(allPrice);
+
+
+        BigDecimal allPriceBig = new BigDecimal(allPrice.toString());
+        BigDecimal voucherMonBig = new BigDecimal(voucherMon.toString());
+        BigDecimal withVocherPriceBig = allPriceBig.subtract(voucherMonBig);
+        weiXinPayDTO.setPrice(withVocherPriceBig.doubleValue());
+        Object obj = activityService.executeActivity(weiXinPayDTO, type, 0, activityId);
+        Double trueDiscount = (Double) obj;
+        if (trueDiscount == null) {
+            trueDiscount = 1d;
+        }
+        orderMessageVO.setDiscount(trueDiscount);
+        BigDecimal discontBig = new BigDecimal(trueDiscount.toString());
+        if (withVocherPriceBig.doubleValue() <= 0) {
+            withVocherPriceBig = new BigDecimal("0");
+        }
+        BigDecimal truePriceBig = withVocherPriceBig.multiply(discontBig);
+        orderMessageVO.setFinalPrice(truePriceBig.doubleValue());
+        return orderMessageVO;
+    }
+
+    public OrderDetailVO getOrderDetail(WeiXinPayDTO weiXinPayDTO) {
+        Integer type = weiXinPayDTO.getGoodType();
+        Integer activityId = weiXinPayDTO.getActivityId();
+        OrderDetailVO orderDetailVO = new OrderDetailVO();
+        List<GoodVO> goodVOS = weiXinPayDTO.getGoods();
+        List<Activity> activities = activityService.getActivities(activityId, type, 0);
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        OrderMessageVO orderMessageVO = this.getOrderMessage(weiXinPayDTO, personnelVO);
+        orderDetailVO.setOrderMessage(orderMessageVO);
+        orderDetailVO.setActivities(activities);
+        orderDetailVO.setGoods(goodVOS);
+        orderDetailVO.setPersonVoucherIds(weiXinPayDTO.getPersonVoucherIds());
+        return orderDetailVO;
+    }
 }

+ 1 - 18
src/main/java/com/example/xiaoshiweixinback/service/VipService.java

@@ -78,25 +78,8 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
         String personUuId = order.getPersonUuid();
         Vip vip = this.getVipByUuId(uuid);
         AssoPersonVip assoPersonVip = assoPersonVipService.getAsso(personUuId, vip);
-        //    //查询vip相关权益
-        //     List<AssoVipFunction> assoVipFunctions = assoVipFunctionService.getVipFunctionByVipUuid(uuid);
-//        //将权益赋值给人员
-//        List<AssoPersonFunction> assoPersonFunctions = new ArrayList<>();
-//        assoVipFunctions.forEach(item -> {
-//            AssoPersonFunction assoPersonFunction = new AssoPersonFunction();
-//            assoPersonFunction.setFunctionUuid(item.getFunctionUuid());
-//            assoPersonFunction.setExpiryTime(assoPersonVip.getExpiryTime());
-//            assoPersonFunction.setCreateTime(assoPersonVip.getCreateTime());
-//            assoPersonFunction.setFunctionParameter(item.getFunctionParameter());
-//            assoPersonFunction.setVipType(vip.getVipType());
-//            assoPersonFunction.setVipUuid(vip.getVipUuid());
-//            assoPersonFunction.setPersonUuid(personUuId);
-//            assoPersonFunctions.add(assoPersonFunction);
-//        });
-//        assoPersonFunctionService.saveBatch(assoPersonFunctions);
-
         //添加优惠券
-        inviteMessageService.getInviteGiveVoucher(personUuId);
+//        inviteMessageService.getInviteGiveVoucher(personUuId);
     }
 
 

+ 30 - 8
src/main/resources/mapper/ActivityMapper.xml

@@ -4,15 +4,37 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.example.xiaoshiweixinback.mapper.ActivityMapper">
     <select id="queryScopeActivity" resultType="com.example.xiaoshiweixinback.domain.Activity">
-    select
-    * from activity
-    <where>
-         (expiration_time &gt; now() or expiration_time is null)
-        <if test="useScope!=null">
-            and
+        select
+        * from activity
+        <where>
+            (expiration_time &gt; now() or expiration_time is null)
+            <if test="useScope!=null">
+                and
                 find_in_set(#{useScope},use_scope)
-        </if>
-    </where>
+            </if>
+            <if test="type!=null">
+                and  type=#{type}
+            </if>
+        </where>
+
+    </select>
+
+
+    <select id="queryScopeActivities" resultType="com.example.xiaoshiweixinback.domain.Activity">
+        select
+        * from activity
+        <where>
+            (expiration_time &gt; now() or expiration_time is null)
+            <if test="voucherQueryDTO.useScopes!=null and voucherQueryDTO.useScopes.size()>0">
+                and
+                <foreach collection="voucherQueryDTO.useScopes" item="item" open="(" close=")" separator=" or ">
+                    find_in_set(#{item},use_scope)
+                </foreach>
+            </if>
+            <if test="type!=null">
+                and  type=#{type}
+            </if>
+        </where>
 
     </select>
 </mapper>