瀏覽代碼

发放优惠券

gongfuzhu 10 月之前
父節點
當前提交
8fbadf1b4a

+ 23 - 0
SpringBatchServiceClient/src/main/java/com/zswl/cloud/springBatch/client/model/xiaoju/ActivityModel.java

@@ -0,0 +1,23 @@
+package com.zswl.cloud.springBatch.client.model.xiaoju;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ActivityModel {
+
+    private String id;
+
+    private String name;
+
+    private String activityId;
+
+    private List<String> planningId;
+
+    private String description;
+}

+ 6 - 0
SpringBatchServiceServer/pom.xml

@@ -104,6 +104,12 @@
             <artifactId>MongodbData</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.zhongshu</groupId>
+            <artifactId>VipClient</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 10 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/config/feign/VipCenterConfig.java

@@ -0,0 +1,10 @@
+package com.zswl.cloud.springBtach.server.core.config.feign;
+
+import com.zhongshu.vip.client.config.VipCenterClientConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+@Configuration
+@Import(VipCenterClientConfiguration.class)
+public class VipCenterConfig {
+}

+ 18 - 7
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/controller/XiaoJuController.java

@@ -1,5 +1,6 @@
 package com.zswl.cloud.springBtach.server.core.controller;
 
+import com.github.microservice.auth.client.constant.AuthConstant;
 import com.github.microservice.auth.client.content.ResultContent;
 import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.auth.security.annotations.ResourceAuth;
@@ -12,7 +13,9 @@ import com.xiaoju.open.oil.interfaces.request.QueryApiOrderListRequest;
 import com.xiaoju.open.oil.interfaces.request.QueryGetPromotionRequest;
 import com.xiaoju.open.oil.interfaces.response.*;
 import com.zswl.cloud.springBatch.client.model.request.*;
+import com.zswl.cloud.springBatch.client.model.xiaoju.ActivityModel;
 import com.zswl.cloud.springBatch.client.model.xiaoju.QueryApiStorePriceRequest;
+import com.zswl.cloud.springBtach.server.core.domain.XiaoJuActivity;
 import com.zswl.cloud.springBtach.server.core.domain.XiaoJuStore;
 import com.zswl.cloud.springBtach.server.core.service.impl.XiaoJuServiceImpl;
 import io.swagger.annotations.ApiOperation;
@@ -109,7 +112,7 @@ public class XiaoJuController {
     @ResourceAuth(value = "user", type = AuthType.User)
     public ResultContent<List<AllowancePromotionInfo>> queryOrderPromotionList(@RequestBody XiaoJuQueryOrderPromotionListModel xiaoJuQueryOrderPromotionListModel) {
         ResultContent<List<AllowancePromotionInfo>> listResultContent = xiaoJuService.queryOrderPromotionList(xiaoJuQueryOrderPromotionListModel);
-        return ResultContent.buildContent(listResultContent);
+        return listResultContent;
     }
 
     @ApiOperation("查询多个门店可用券")
@@ -117,7 +120,7 @@ public class XiaoJuController {
     @ResourceAuth(value = "user", type = AuthType.User)
     public ResultContent<List<AllowancePromotionInfo>> queryStorePromotionList(@RequestBody List<String> storeIdList) {
         ResultContent<List<AllowancePromotionInfo>> listResultContent = xiaoJuService.queryStorePromotionList(storeIdList);
-        return ResultContent.buildContent(listResultContent);
+        return listResultContent;
     }
 
     @ApiOperation("查询用户所有券列表")
@@ -125,15 +128,23 @@ public class XiaoJuController {
     @ResourceAuth(value = "user", type = AuthType.User)
     public ResultContent<QueryUserPromotionListResponse> queryUserPromotionList(@RequestBody XiaoJuQueryUserPromotionListModel xiaoJuQueryUserPromotionListModel) {
         ResultContent<QueryUserPromotionListResponse> listResultContent = xiaoJuService.queryUserPromotionList(xiaoJuQueryUserPromotionListModel);
-        return ResultContent.buildContent(listResultContent);
+        return listResultContent;
     }
 
     @ApiOperation("券发放")
-    @RequestMapping(value = "getPromotion", method = RequestMethod.POST)
+    @RequestMapping(value = "getPromotion/{activityId}", method = RequestMethod.GET)
     @ResourceAuth(value = "user", type = AuthType.User)
-    public ResultContent<List<GenPromotionInfo>> getPromotion(@RequestBody QueryGetPromotionRequest queryGetPromotionRequest) {
-        ResultContent<List<GenPromotionInfo>> listResultContent = xiaoJuService.getPromotion(queryGetPromotionRequest);
-        return ResultContent.buildContent(listResultContent);
+    public ResultContent<List<GenPromotionInfo>> getPromotion(@PathVariable("activityId") String activityId) {
+        ResultContent<List<GenPromotionInfo>> listResultContent = xiaoJuService.getPromotion(activityId);
+        return listResultContent;
+    }
+
+
+    @ApiOperation("添加活动")
+    @RequestMapping(value = "addActivity", method = RequestMethod.POST)
+    @ResourceAuth(value = AuthConstant.SuperAdmin, type = AuthType.Platform)
+    public ResultContent<XiaoJuActivity> addActivity(@RequestBody ActivityModel activityModel) {
+        return xiaoJuService.addActivity(activityModel);
     }
 
 

+ 9 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/dao/XiaoJuActivityDao.java

@@ -0,0 +1,9 @@
+package com.zswl.cloud.springBtach.server.core.dao;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zswl.cloud.springBtach.server.core.domain.XiaoJuActivity;
+
+public interface XiaoJuActivityDao  extends MongoDao<XiaoJuActivity> {
+
+    XiaoJuActivity findByActivityId(String activityId);
+}

+ 13 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/dao/XiaoJuActivityReceiverDao.java

@@ -0,0 +1,13 @@
+package com.zswl.cloud.springBtach.server.core.dao;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zswl.cloud.springBtach.server.core.domain.XiaoJuActivityReceiver;
+
+import java.util.List;
+
+public interface XiaoJuActivityReceiverDao extends MongoDao<XiaoJuActivityReceiver> {
+
+    List<XiaoJuActivityReceiver> findByCreateTimeAfter(Long createTime);
+
+    List<XiaoJuActivityReceiver> findByUserIdAndCreateTimeAfter(String userId,Long createTime);
+}

+ 28 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/domain/XiaoJuActivity.java

@@ -0,0 +1,28 @@
+package com.zswl.cloud.springBtach.server.core.domain;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.List;
+
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class XiaoJuActivity extends SuperEntity {
+
+    private String name;
+
+    @Indexed(unique = true)
+    private String activityId;
+
+    private List<String> planningId;
+
+    private String description;
+}

+ 22 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/domain/XiaoJuActivityReceiver.java

@@ -0,0 +1,22 @@
+package com.zswl.cloud.springBtach.server.core.domain;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class XiaoJuActivityReceiver extends SuperEntity {
+
+    private String userId;
+
+    private String activityId;
+
+    private Long expirationTime;
+}

+ 83 - 11
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/service/impl/XiaoJuServiceImpl.java

@@ -1,6 +1,8 @@
 package com.zswl.cloud.springBtach.server.core.service.impl;
 
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONObject;
@@ -16,6 +18,9 @@ import com.xiaoju.open.oil.core.QueryClientFactory;
 import com.xiaoju.open.oil.core.executor.ResponseDTO;
 import com.xiaoju.open.oil.interfaces.domain.*;
 import com.xiaoju.open.oil.interfaces.request.*;
+import com.zhongshu.vip.client.model.VipUserModel;
+import com.zhongshu.vip.client.service.VipUserService;
+import com.zswl.cloud.springBatch.client.model.xiaoju.ActivityModel;
 import com.zswl.cloud.springBatch.client.model.xiaoju.QueryApiStorePriceRequest;
 import com.xiaoju.open.oil.interfaces.request.miniprogram.MiniCancelOrderStatusRequest;
 import com.xiaoju.open.oil.interfaces.response.*;
@@ -30,22 +35,17 @@ import com.zswl.cloud.shop.client.dto.life.TripartiteShopDto;
 import com.zswl.cloud.shop.client.service.ShopService;
 import com.zswl.cloud.springBatch.client.model.request.*;
 import com.zswl.cloud.springBatch.client.service.XiaoJuService;
-import com.zswl.cloud.springBtach.server.core.dao.ApiLogDao;
-import com.zswl.cloud.springBtach.server.core.dao.XiaoJuOrderDao;
-import com.zswl.cloud.springBtach.server.core.dao.XiaoJuStoreDao;
-import com.zswl.cloud.springBtach.server.core.domain.ApiLog;
-import com.zswl.cloud.springBtach.server.core.domain.XiaoJuOrder;
-import com.zswl.cloud.springBtach.server.core.domain.XiaoJuStore;
+import com.zswl.cloud.springBtach.server.core.dao.*;
+import com.zswl.cloud.springBtach.server.core.domain.*;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 @Log4j2
 @Service
@@ -70,11 +70,20 @@ public class XiaoJuServiceImpl implements XiaoJuService {
     @Autowired
     ApiLogDao apiLogDao;
 
+    @Autowired
+    XiaoJuActivityDao xiaoJuActivityDao;
+
     @Autowired
     private ShopService shopService;
+
     @Autowired
     private OrderService2 orderService2;
 
+    @Autowired
+    private VipUserService vipUserService;
+    @Autowired
+    private XiaoJuActivityReceiverDao xiaoJuActivityReceiverDao;
+
     // 同步加油站
     public ResponseDTO notificationPushStoreInfoRequest(OilRequest oilRequest) {
 
@@ -667,7 +676,54 @@ public class XiaoJuServiceImpl implements XiaoJuService {
     }
 
     // 券发放
-    public ResultContent<List<GenPromotionInfo>> getPromotion(QueryGetPromotionRequest queryGetPromotionRequest) {
+    public ResultContent<List<GenPromotionInfo>> getPromotion(String activityId) {
+        AuthDetails currentUser = authHelper.getCurrentUser();
+        XiaoJuActivity byActivityId = xiaoJuActivityDao.findByActivityId(activityId);
+        if (byActivityId == null) {
+            return ResultContent.build(ResultState.Fail, "活动不存在");
+        }
+
+        AtomicBoolean grant = new AtomicBoolean(false);
+        List<String> planningId = byActivityId.getPlanningId();
+
+        planningId.forEach(it -> {
+            ResultContent<List<VipUserModel>> listResultContent = vipUserService.userInfo(currentUser.getPhone());
+            List<VipUserModel> content = listResultContent.getContent();
+            List<String> collect = content.stream().map(vipUserModel -> vipUserModel.getPlanningId()).collect(Collectors.toList());
+            for (String s : planningId) {
+                grant.set(collect.remove(s));
+            }
+        });
+
+        if (!grant.get()) {
+            return ResultContent.build(ResultState.Fail, "当前会员不能领取");
+        }
+        DateTime dateTime = DateUtil.beginOfMonth(new Date());
+        List<XiaoJuActivityReceiver> xiaoJuActivityReceivers = xiaoJuActivityReceiverDao.findByUserIdAndCreateTimeAfter(currentUser.getUserId(), dateTime.getTime());
+        if (xiaoJuActivityReceivers.size() >= 3) {
+            return ResultContent.build(ResultState.Fail, "当月已经领取3次");
+
+        }
+
+        XiaoJuQueryUserPromotionListModel xiaoJuQueryUserPromotionListModel = new XiaoJuQueryUserPromotionListModel();
+        xiaoJuQueryUserPromotionListModel.setPageIndex(0);
+        xiaoJuQueryUserPromotionListModel.setPageSize(20);
+        xiaoJuQueryUserPromotionListModel.setStatus(5);
+
+        ResultContent<QueryUserPromotionListResponse> queryUserPromotionListResponseResultContent = queryUserPromotionList(xiaoJuQueryUserPromotionListModel);
+        QueryUserPromotionListResponse queryUserPromotionListResponse = queryUserPromotionListResponseResultContent.getContent();
+
+        if (queryUserPromotionListResponse != null) {
+            return ResultContent.build(ResultState.Fail, "有未消费的优惠券,请先使用");
+        }
+
+
+        QueryGetPromotionRequest queryGetPromotionRequest = new QueryGetPromotionRequest();
+        queryGetPromotionRequest.setActivityId(activityId);
+        queryGetPromotionRequest.setOutUserId(currentUser.getUserId());
+        queryGetPromotionRequest.setMobile(currentUser.getPhone());
+
+
         QueryClient queryClient = QueryClientFactory.create(oilConfig);
 
         ApiLog apiLog = new ApiLog();
@@ -689,6 +745,22 @@ public class XiaoJuServiceImpl implements XiaoJuService {
     }
 
 
+    public ResultContent<XiaoJuActivity> addActivity(ActivityModel addActivityModel) {
+        if (ObjectUtil.isEmpty(addActivityModel.getId())) {
+            XiaoJuActivity xiaoJuActivity = new XiaoJuActivity();
+            BeanUtils.copyProperties(addActivityModel, xiaoJuActivity);
+            return ResultContent.build(ResultState.Success, xiaoJuActivityDao.save(xiaoJuActivity));
+        }
+        Optional<XiaoJuActivity> byId = xiaoJuActivityDao.findById(addActivityModel.getId());
+        if (byId.isPresent()) {
+            XiaoJuActivity xiaoJuActivity = byId.get();
+            BeanUtils.copyProperties(addActivityModel, xiaoJuActivity);
+            return ResultContent.build(ResultState.Success, xiaoJuActivityDao.save(xiaoJuActivity));
+        }
+        return ResultContent.build(ResultState.Fail, "数据不存在");
+    }
+
+
     private void updateOrder(String orderNo, UpdateGoodsModel updateGoodsModel) {
 
         ResultContent<List<GoodsResultModel>> listResultContent = orderService2.goodsDetail(orderNo);