Selaa lähdekoodia

Merge branch '2022_cloud_activity' of http://git.dayaedu.com/yonge/mec into saas

zouxuan 3 vuotta sitten
vanhempi
commit
529ca45d66

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityMemberPayParamDto.java

@@ -0,0 +1,50 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+public class ActivityMemberPayParamDto extends PayParamBasicDto implements Serializable {
+
+    //前端录入实际缴费金额
+    private BigDecimal amount;
+
+    private Long paymentId;
+
+    //购买数量
+    private Integer val;
+
+    //如果isRepeatPay = true 则需要传入订单号
+    private String orderNo;
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public Long getPaymentId() {
+        return paymentId;
+    }
+
+    public void setPaymentId(Long paymentId) {
+        this.paymentId = paymentId;
+    }
+
+    public Integer getVal() {
+        return val;
+    }
+
+    public void setVal(Integer val) {
+        this.val = val;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/Cloud2022ActivityDto.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.dto;
+
+public class Cloud2022ActivityDto {
+    private String organId;
+
+    private String activityId;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public String getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(String activityId) {
+        this.activityId = activityId;
+    }
+}

+ 2 - 36
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupBuyParamsDto.java

@@ -3,9 +3,8 @@ package com.ym.mec.biz.dal.dto;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
-import java.util.List;
 
-public class PracticeGroupBuyParamsDto {
+public class PracticeGroupBuyParamsDto extends PayParamBasicDto{
 
     @ApiModelProperty(value = "课程组ID")
     private Long practiceGroupId;
@@ -16,24 +15,15 @@ public class PracticeGroupBuyParamsDto {
     @ApiModelProperty(value = "业务渠道")
     private String paymentBusinessChannel;
 
-    @ApiModelProperty(value = "是否使用账户余额支付")
-    private boolean isUseBalancePayment;
-
-    @ApiModelProperty(value = "是否重新支付")
-    private boolean isRepeatPay;
-
     @ApiModelProperty(value = "营销活动编号")
     private Integer activityId;
 
-    @ApiModelProperty(value = "优惠券列表", required = false)
-    private List<Integer> couponIdList;
-
     private BigDecimal amount;
 
     private Integer organId;
 
     @ApiModelProperty(value = "购买的会员数量")
-    private Integer buyMemberNum;
+    private Integer buyMemberNum = 1;
 
     public Integer getBuyMemberNum() {
         return buyMemberNum;
@@ -75,30 +65,6 @@ public class PracticeGroupBuyParamsDto {
         this.practiceGroupId = practiceGroupId;
     }
 
-    public List<Integer> getCouponIdList() {
-        return couponIdList;
-    }
-
-    public void setCouponIdList(List<Integer> couponIdList) {
-        this.couponIdList = couponIdList;
-    }
-
-    public boolean isRepeatPay() {
-        return isRepeatPay;
-    }
-
-    public void setRepeatPay(boolean repeatPay) {
-        isRepeatPay = repeatPay;
-    }
-
-    public boolean isUseBalancePayment() {
-        return isUseBalancePayment;
-    }
-
-    public void setUseBalancePayment(boolean useBalancePayment) {
-        isUseBalancePayment = useBalancePayment;
-    }
-
     private Integer userId;
 
     public Integer getUserId() {

+ 12 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityUserMapper.java

@@ -1,8 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
 import com.ym.mec.common.entity.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
 
@@ -69,6 +68,17 @@ public class ActivityUserMapper extends BaseEntity {
 	/**  */
 	private java.util.Date updateTime;
 
+	//赠送的优惠券编号
+	private Integer giveCouponId;
+
+	public Integer getGiveCouponId() {
+		return giveCouponId;
+	}
+
+	public void setGiveCouponId(Integer giveCouponId) {
+		this.giveCouponId = giveCouponId;
+	}
+
 	public String getAddMemo() {
 		return addMemo;
 	}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -165,6 +165,28 @@ public class VipGroupActivity extends BaseEntity {
 	@ApiModelProperty(value = "活动渠道,1乐团渠道,2常规活动")
 	private Integer activityChannel;
 
+	@ApiModelProperty(value = "赠送的优惠券的编号")
+	private Integer giveCouponId;
+
+	@ApiModelProperty(value = "赠送的优惠券的数量")
+	private Integer giveCouponNum;
+
+	public Integer getGiveCouponId() {
+		return giveCouponId;
+	}
+
+	public void setGiveCouponId(Integer giveCouponId) {
+		this.giveCouponId = giveCouponId;
+	}
+
+	public Integer getGiveCouponNum() {
+		return giveCouponNum;
+	}
+
+	public void setGiveCouponNum(Integer giveCouponNum) {
+		this.giveCouponNum = giveCouponNum;
+	}
+
 	public BigDecimal getOriginalPrice() {
 		return originalPrice;
 	}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

@@ -348,6 +348,15 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
     */
 	HttpResponseResult buyTeacherPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception;
 
+    /**
+    * @description: 营销活动网管课购买
+     * @param practiceGroupBuyParams
+    * @return com.ym.mec.common.entity.HttpResponseResult
+    * @author zx
+    * @date 2021/10/13 15:12
+    */
+	Object buyActivityPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception;
+
 	/**
 	* @description: 获取学生端网管课购买详情
 	 * @param groupId

+ 76 - 38
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -2,9 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
-import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
@@ -75,6 +73,12 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     private SysConfigDao sysConfigDao;
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private VipGroupActivityDao vipGroupActivityDao;
+    @Autowired
+    private TenantConfigService tenantConfigService;
+    @Autowired
+    private ActivityUserMapperDao activityUserMapperDao;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -426,48 +430,82 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 
         // 支付成功
         if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
-            //齐齐哈尔购买成功默认激活
-            // 活动时间:
-            // 1. 2022年2月8日上线预热
-            // 2. 2022年2月15日开始销售
-            // 3. 暂无结束时间,长期有效
-            //查询redis证明是活动购买
-            RBucket<Object> cache = redissonClient.getBucket(BUY_2_QQHE_LOCK + studentPaymentOrder.getOrderNo());
-            //查询活动时间
-            String activityDateStr = sysConfigDao.findConfigValue("qqhe_2022_buy_member_activity");
-            //获取活动时间
-            Date activityDate = DateUtil.stringToDate(activityDateStr, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-            logger.info("orderCallback >>> member param organId {}   orderTime {} activityDate {}  cache {}", sysUser.getOrganId(), studentPaymentOrder.getCreateTime(), activityDate, cache.isExists());
-            //分部编号59 并且下单时间大于等于activityDateStr  todo 并且redis能查询到的就算齐齐哈尔活动购买的
-            if (sysUser.getOrganId() == 59 && studentPaymentOrder.getCreateTime().after(activityDate) && cache.isExists()) {
-                //齐齐哈尔会员活动
-                qqheMemberActivity(studentPaymentOrder, student, sysUser, cache);
-                //删除标记
-                cache.delete();
-            } else {
-                CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(Long.parseLong(studentPaymentOrder.getMusicGroupId()));
-                StudentCloudCoachPaymentDetails coachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(cloudCoachPaymentProgram.getId(), studentPaymentOrder.getUserId());
+            //是否通过活动购买的团练宝
+            if(Objects.nonNull(studentPaymentOrder.getActivityId())){
+                VipGroupActivity activity = vipGroupActivityDao.get(Integer.parseInt(studentPaymentOrder.getActivityId()));
                 //保存团练宝数据
                 CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
                 cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
-                cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
+                cloudTeacherOrder.setLevel(1);
                 cloudTeacherOrder.setStatus(1);
-                cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
-                cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
-                cloudTeacherOrder.setStudentId(coachPaymentDetails.getUserId());
+                cloudTeacherOrder.setType(activity.getPeriodEnum());
+                if(activity.getGiveCouponNum() == 1 && activity.getPeriodEnum() == PeriodEnum.MONTH){
+                    cloudTeacherOrder.setTime(studentPaymentOrder.getActivityBuyNum() * 2);
+                }else {
+                    cloudTeacherOrder.setTime(studentPaymentOrder.getActivityBuyNum());
+                }
+                cloudTeacherOrder.setStudentId(studentPaymentOrder.getUserId());
                 cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
                 cloudTeacherOrder.setAmount(studentPaymentOrder.getExpectAmount());
-                cloudTeacherOrderService.save(cloudTeacherOrder,cloudCoachPaymentProgram.getAutoActivationFlag());
-
-                //修改缴费状态
-                coachPaymentDetails.setPaymentStatus(1);
-                coachPaymentDetails.setPaymentOrderId(studentPaymentOrder.getId());
-                studentCloudCoachPaymentDetailsService.update(coachPaymentDetails);
-                //修改实际缴费人数
-                cloudCoachPaymentProgram.setPaymentUserNum(cloudCoachPaymentProgram.getPaymentUserNum() + 1);
-                cloudCoachPaymentProgramService.update(cloudCoachPaymentProgram);
+                cloudTeacherOrderService.save(cloudTeacherOrder,tenantConfigService.autoActivationFlag(cloudTeacherOrder.getTenantId()));
+                ActivityUserMapper activityUserMapper = new ActivityUserMapper();
+                activityUserMapper.setPaymentOrderId(studentPaymentOrder.getId());
+                activityUserMapper.setUserId(studentPaymentOrder.getUserId());
+                activityUserMapper.setActivityId(activity.getId());
+                activityUserMapper.setActualPrice(studentPaymentOrder.getExpectAmount());
+                activityUserMapper.setGiveCouponId(activity.getGiveCouponId());
+                activityUserMapper.setReturnFee(false);
+                activityUserMapperDao.insert(activityUserMapper);
+                //赠送优惠券
+                Integer giveCouponId = activity.getGiveCouponId();
+                Integer giveCouponNum = activity.getGiveCouponNum();
+                if(Objects.nonNull(giveCouponId) && Objects.nonNull(giveCouponNum)){
+                    sysCouponCodeService.exchangeCoupon(userId,giveCouponId,
+                            studentPaymentOrder.getId(),giveCouponNum,2,null);
+                }
+            }else {
+                //齐齐哈尔购买成功默认激活
+                // 活动时间:
+                // 1. 2022年2月8日上线预热
+                // 2. 2022年2月15日开始销售
+                // 3. 暂无结束时间,长期有效
+                //查询redis证明是活动购买
+                RBucket<Object> cache = redissonClient.getBucket(BUY_2_QQHE_LOCK + studentPaymentOrder.getOrderNo());
+                //查询活动时间
+                String activityDateStr = sysConfigDao.findConfigValue("qqhe_2022_buy_member_activity");
+                //获取活动时间
+                Date activityDate = DateUtil.stringToDate(activityDateStr, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+                logger.info("orderCallback >>> member param organId {}   orderTime {} activityDate {}  cache {}", sysUser.getOrganId(), studentPaymentOrder.getCreateTime(), activityDate, cache.isExists());
+                //分部编号59 并且下单时间大于等于activityDateStr  todo 并且redis能查询到的就算齐齐哈尔活动购买的
+                if (sysUser.getOrganId() == 59 && studentPaymentOrder.getCreateTime().after(activityDate) && cache.isExists()) {
+                    //齐齐哈尔会员活动
+                    qqheMemberActivity(studentPaymentOrder, student, sysUser, cache);
+                    //删除标记
+                    cache.delete();
+                } else {
+                    CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(Long.parseLong(studentPaymentOrder.getMusicGroupId()));
+                    StudentCloudCoachPaymentDetails coachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(cloudCoachPaymentProgram.getId(), studentPaymentOrder.getUserId());
+                    //保存团练宝数据
+                    CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+                    cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
+                    cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
+                    cloudTeacherOrder.setStatus(1);
+                    cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
+                    cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
+                    cloudTeacherOrder.setStudentId(coachPaymentDetails.getUserId());
+                    cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
+                    cloudTeacherOrder.setAmount(studentPaymentOrder.getExpectAmount());
+                    cloudTeacherOrderService.save(cloudTeacherOrder,cloudCoachPaymentProgram.getAutoActivationFlag());
+
+                    //修改缴费状态
+                    coachPaymentDetails.setPaymentStatus(1);
+                    coachPaymentDetails.setPaymentOrderId(studentPaymentOrder.getId());
+                    studentCloudCoachPaymentDetailsService.update(coachPaymentDetails);
+                    //修改实际缴费人数
+                    cloudCoachPaymentProgram.setPaymentUserNum(cloudCoachPaymentProgram.getPaymentUserNum() + 1);
+                    cloudCoachPaymentProgramService.update(cloudCoachPaymentProgram);
+                }
             }
-
             // 插入交易明细
             sysUserCashAccountDetailService.saveSysUserCashAccountDetail(studentPaymentOrder, "购买会员");
             try {

+ 123 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -258,6 +258,10 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private VipGroupCategoryDao vipGroupCategoryDao;
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
+    @Autowired
+    private MemberFeeSettingDao memberFeeSettingDao;
+    @Autowired
+    private MemberFeeSettingService memberFeeSettingService;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -4546,7 +4550,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             }/*else if(payStatus == PayStatus.PAYING){
                 throw new BizException("订单还在交易中,请稍后重试");
             }*/
-            if (!practiceGroupBuyParams.isRepeatPay()) {
+            if (!practiceGroupBuyParams.getRepeatPay()) {
                 return BaseController.failed(HttpStatus.CONTINUE, "您有待支付的订单");
             }
             //处理关闭订单
@@ -4614,7 +4618,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         BigDecimal amount = studentPaymentOrder.getActualAmount();
         BigDecimal balance = BigDecimal.ZERO;
-        if (practiceGroupBuyParams.isUseBalancePayment() || amount.doubleValue() == 0) {
+        if (practiceGroupBuyParams.getUseBalancePayment() || amount.doubleValue() == 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(user.getId());
             if (userCashAccount == null) {
                 throw new BizException("用户账户找不到");
@@ -4686,6 +4690,123 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public Object buyActivityPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception {
+        Integer activityId = practiceGroupBuyParams.getActivityId();
+        VipGroupActivity activity = vipGroupActivityDao.get(activityId);
+        Date now = new Date();
+        Date startTime = activity.getStartTime();
+        Date endTime = activity.getEndTime();
+        if (startTime != null && startTime.compareTo(now) > 0) {
+            throw new BizException("活动尚未开始,感谢您的关注");
+        }
+        if (endTime != null && endTime.compareTo(now) <= 0) {
+            throw new BizException("活动已结束,感谢您的参与");
+        }
+        Student student = studentDao.getLocked(practiceGroupBuyParams.getUserId());
+        Integer studentMaxUsedTimes = activity.getStudentMaxUsedTimes();
+        if (studentMaxUsedTimes != -1) {
+            //获取活动购买次数
+            int activityBuyNum = activityUserMapperService.countActivityBuyNum(activityId, practiceGroupBuyParams.getUserId());
+            if (activityBuyNum >= studentMaxUsedTimes) {
+                throw new BizException("当前活动最多课购买{}次,感谢您的参与", studentMaxUsedTimes);
+            }
+        }
+
+        //判断用户是否已存在订单
+        // 判断是否存在支付中的记录
+        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.queryByCondition(GroupType.MEMBER, null, student.getUserId(), DealStatusEnum.ING, OrderTypeEnum.MEMBER);
+        if (org.apache.commons.collections.CollectionUtils.isNotEmpty(applyOrderList)) {
+            HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrderList.get(0), practiceGroupBuyParams.getRepeatPay());
+            if (result.getCode() != 200) {
+                return result;
+            }
+        }
+        //现价
+        Integer buyNum = practiceGroupBuyParams.getBuyMemberNum();
+        BigDecimal activityFee = activity.getMarketPrice().multiply(new BigDecimal(buyNum)).
+                multiply(activity.getDiscount()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, ROUND_DOWN);
+        //计算订单金额
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), activityFee, true);
+        activityFee = studentPaymentOrder.getActualAmount();
+        if (practiceGroupBuyParams.getAmount().compareTo(activityFee) != 0) {
+            throw new BizException("非法访问");
+        }
+
+        String channelType = "";
+        Date nowDate = new Date();
+
+        BigDecimal balance = BigDecimal.ZERO;
+        if (practiceGroupBuyParams.getUseBalancePayment() && activityFee.compareTo(BigDecimal.ZERO) > 0) {
+            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(student.getUserId());
+            if (userCashAccount == null) {
+                throw new BizException("用户账户找不到");
+            }
+            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+                balance = activityFee.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : activityFee;
+                activityFee = activityFee.subtract(balance);
+                studentPaymentOrder.setActualAmount(activityFee);
+                studentPaymentOrder.setBalancePaymentAmount(balance);
+                sysUserCashAccountService.updateBalance(student.getUserId(), balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "营销活动购买");
+            }
+        }
+
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        studentPaymentOrder.setUserId(student.getUserId());
+        studentPaymentOrder.setGroupType(GroupType.MEMBER);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.MEMBER);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setOrganId(practiceGroupBuyParams.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(practiceGroupBuyParams.getOrganId());
+        studentPaymentOrder.setCreateTime(nowDate);
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrder.setActivityId(activityId.toString());
+        studentPaymentOrder.setActivityBuyNum(buyNum);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        studentPaymentOrder.setVersion(0);
+        if (activityFee.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, practiceGroupBuyParams.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return notifyMap;
+        }
+
+        String orderSubject = "营销活动";
+        String receiver = "activity";
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map payMap = payService.getPayMap(
+                activityFee,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                orderSubject,
+                orderSubject,
+                studentPaymentOrder.getOrganId(),
+                receiver
+        );
+
+        studentPaymentOrder.setOrganId(studentPaymentOrder.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return payMap;
+    }
+
+    @Override
     public StudentVipGroupDetailDto getPracticeGroupDetail(Long groupId) {
         return practiceGroupDao.getPracticeGroupDetail(groupId);
     }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -748,6 +748,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     activityUserMapper.setGivePracticeFlag(1);
                 }
             }
+            //是否赠送优惠券
+            if (activity.getGiveCouponNum() != null && activity.getGiveCouponNum() > 0) {
+                activityUserMapper.setGiveCouponId(activity.getGiveCouponId());
+            }
             //是否赠送会员(会员立即生效)
             if (activity.getGiveMemberTime() > 0) {
                 Date now = new Date();

+ 9 - 4
mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml

@@ -28,6 +28,7 @@
 		<result column="actual_price_" property="actualPrice" />
 		<result column="add_memo_" property="addMemo" />
 		<result column="cut_memo_" property="cutMemo" />
+		<result column="give_coupon_id_" property="giveCouponId" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
@@ -48,23 +49,24 @@
 		INSERT INTO activity_user_mapper (activity_id_,user_id_,vip_flag_,give_vip_flag_,
 		                                  practice_flag_,give_practice_flag_,member_flag_,give_member_flag_,create_time_,update_time_,payment_order_id_,
 										  vip_group_id_,give_vip_group_id_,practice_group_id_,give_practice_group_id_,return_fee_,
-		                                  member_order_id_,give_member_order_id_,teacher_id_,actual_price_,add_memo_,cut_memo_,tenant_id_)
+		                                  member_order_id_,give_member_order_id_,teacher_id_,actual_price_,add_memo_,cut_memo_,tenant_id_,give_coupon_id_)
 		                                  VALUES(#{activityId},#{userId},#{vipFlag},#{giveVipFlag},#{practiceFlag},
 		                                         #{givePracticeFlag},#{memberFlag},#{giveMemberFlag},NOW(),NOW(),#{paymentOrderId},#{vipGroupId},
 		                                         #{giveVipGroupId},#{practiceGroupId},#{givePracticeGroupId},#{returnFee},
-		                                         #{memberOrderId},#{giveMemberOrderId},#{teacherId},#{actualPrice},#{addMemo},#{cutMemo},#{tenantId})
+		                                         #{memberOrderId},#{giveMemberOrderId},#{teacherId},#{actualPrice},#{addMemo},#{cutMemo},#{tenantId},#{giveCouponId})
 	</insert>
     <insert id="batchInsert">
 		INSERT INTO activity_user_mapper (activity_id_,user_id_,vip_flag_,give_vip_flag_,
 		practice_flag_,give_practice_flag_,member_flag_,give_member_flag_,create_time_,update_time_,payment_order_id_,
 		vip_group_id_,give_vip_group_id_,practice_group_id_,give_practice_group_id_,return_fee_,member_order_id_,
-		                                  give_member_order_id_,teacher_id_,actual_price_,add_memo_,cut_memo_,tenant_id_)
+		                                  give_member_order_id_,teacher_id_,actual_price_,add_memo_,cut_memo_,tenant_id_,give_coupon_id_)
 		VALUES
 		<foreach collection="activityUserMappers" item="item" separator=",">
 			(#{item.activityId},#{item.userId},#{item.vipFlag},#{item.giveVipFlag},#{item.practiceFlag},
 			#{item.givePracticeFlag},#{item.memberFlag},#{item.giveMemberFlag},NOW(),NOW(),#{item.paymentOrderId},#{item.vipGroupId},
 			#{item.giveVipGroupId},#{item.practiceGroupId},#{item.givePracticeGroupId},#{item.returnFee},
-			 #{item.memberOrderId},#{item.giveMemberOrderId},#{item.teacherId},#{item.actualPrice},#{item.addMemo},#{item.cutMemo},#{item.tenantId})
+			 #{item.memberOrderId},#{item.giveMemberOrderId},#{item.teacherId},#{item.actualPrice},#{item.addMemo},#{item.cutMemo},
+			 #{item.tenantId},#{item.giveCouponId})
 		</foreach>
 	</insert>
 
@@ -72,6 +74,9 @@
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ActivityUserMapper">
 		UPDATE activity_user_mapper
 		<set>
+			<if test="giveCouponId != null">
+				give_coupon_id_ = #{giveCouponId},
+			</if>
 			<if test="cutMemo != null">
 				cut_memo_ = #{cutMemo},
 			</if>

+ 8 - 3
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -38,6 +38,8 @@
 		<result property="giveMemberTime" column="give_member_time_"/>
 		<result property="givePrizeNum" column="give_prize_num_"/>
 		<result property="giveAllowOnlineToOffline" column="give_allow_online_to_offline_"/>
+		<result property="giveCouponId" column="give_coupon_id_"/>
+		<result property="giveCouponNum" column="give_coupon_num_"/>
 		<result property="memberRankId" column="member_rank_id_"/>
 		<result property="memberTime" column="member_time_"/>
 		<result property="courseType" column="course_type_"/>
@@ -76,14 +78,15 @@
 										single_course_time_,discount_,full_minus_course_times_,give_course_type_,give_category_id_,give_course_num_
 										,member_rank_id_,member_time_,give_member_rank_id_,give_member_time_,course_type_,
 		                                activity_type_,give_sign_course_time_,is_pay_to_balance_,teach_mode_,give_teach_mode_,
-		                                period_,give_period_,status_,market_price_,give_allow_online_to_offline_,give_prize_num_,activity_channel_,original_price_,tenant_id_)
+		                                period_,give_period_,status_,market_price_,give_allow_online_to_offline_,give_prize_num_,
+		                                activity_channel_,original_price_,tenant_id_,give_coupon_id_,give_coupon_num_)
 		VALUES(#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},
 		       now(),now(),#{salarySettlementJson},#{delFlag},#{onlineClassJoinGradientRewards},
 		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes},#{applyToStudentType},#{allowOnlineToOffline},
 			   #{singleCourseTime},#{discount},#{fullMinusCourseTimes},#{giveCourseType},#{giveCategoryId},#{giveCourseNum}
 				  ,#{memberRankId},#{memberTime},#{giveMemberRankId},#{giveMemberTime},#{courseType},#{activityType},#{giveSingleCourseTime},
 		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{givePeriodEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{status},
-		       #{marketPrice},#{giveAllowOnlineToOffline},#{givePrizeNum},#{activityChannel},#{originalPrice},#{tenantId})
+		       #{marketPrice},#{giveAllowOnlineToOffline},#{givePrizeNum},#{activityChannel},#{originalPrice},#{tenantId},#{giveCouponId},#{giveCouponNum})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -104,7 +107,9 @@
 		max_course_num_=#{maxCourseNum},student_max_used_times_=#{studentMaxUsedTimes},apply_to_student_type_=#{applyToStudentType},
 		allow_online_to_offline_=#{allowOnlineToOffline},end_time_ = #{endTime},market_price_ = #{marketPrice},update_time_ = NOW(),
 		give_allow_online_to_offline_ = #{giveAllowOnlineToOffline},
-		give_prize_num_ = #{givePrizeNum},activity_channel_ = #{activityChannel},original_price_ = #{originalPrice} WHERE id_ = #{id} and tenant_id_ = #{tenantId}
+		give_prize_num_ = #{givePrizeNum},activity_channel_ = #{activityChannel},original_price_ = #{originalPrice} ,
+									  give_coupon_id_ = #{giveCouponId} ,give_coupon_num_ = #{giveCouponNum}
+		WHERE id_ = #{id} and tenant_id_ = #{tenantId}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->

+ 58 - 1
mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java

@@ -1,17 +1,23 @@
 package com.ym.mec.student.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
 import com.ym.mec.biz.dal.dto.BuyDoubleEleven2021Dto;
+import com.ym.mec.biz.dal.dto.Cloud2022ActivityDto;
 import com.ym.mec.biz.dal.entity.ActivityDetailDto;
 import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.service.ActivityUserMapperService;
 import com.ym.mec.biz.service.MarketActivityService;
-import com.ym.mec.biz.service.PracticeGroupService;
 import com.ym.mec.biz.service.SporadicChargeInfoService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.util.date.DateUtil;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,6 +27,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RequestMapping("activity")
 @Api(tags = "活动")
@@ -29,11 +36,17 @@ public class ActivityController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
     private SporadicChargeInfoService sporadicChargeInfoService;
     @Autowired
     private MarketActivityService marketActivityService;
     @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private VipGroupActivityDao vipGroupActivityDao;
+    @Autowired
+    private ActivityUserMapperService activityUserMapperService;
 
     @ApiOperation(value = "分部双11活动信息")
     @GetMapping("/doubleEleven2020")
@@ -93,6 +106,50 @@ public class ActivityController extends BaseController {
         return failed("购买入口已关闭,请联系管理员");
     }
 
+    @ApiOperation("获取2022云教练活动列表")
+    @PostMapping(value = "/queryActivity")
+    @AuditLogAnnotation(operateName = "获取2022云教练活动列表")
+    public HttpResponseResult<List<VipGroupActivity>> queryActivity() throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        Date nowTime = new Date();
+        String startTimeStr = sysConfigDao.findConfigValue("2022_cloud_activity_start_time");
+        Date startTime = DateUtil.stringToDate(startTimeStr);
+        if (startTime.compareTo(nowTime) > 0) {
+            throw new BizException("活动还未开始,谢谢关注");
+        }
+        String endTimeStr = sysConfigDao.findConfigValue("2022_cloud_activity_end_time");
+        Date endTime = DateUtil.stringToDate(endTimeStr);
+        if (endTime.compareTo(nowTime) <= 0) {
+            throw new BizException("活动已结束,谢谢关注");
+        }
+        String configValue = sysConfigDao.findConfigValue("2022_cloud_activity_config");
+        List<Cloud2022ActivityDto> cloud2022ActivityDtos = JSONArray.parseArray(configValue, Cloud2022ActivityDto.class);
+        for (Cloud2022ActivityDto cloud2022ActivityDto : cloud2022ActivityDtos) {
+            String[] split = cloud2022ActivityDto.getOrganId().split(",");
+            long count = Arrays.stream(split).filter(e -> Objects.equals(e, user.getOrganId().toString())).count();
+            if(count > 0l){
+                List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(cloud2022ActivityDto.getActivityId());
+                for (VipGroupActivity vipGroupActivity : vipGroupActivities) {
+                    Integer studentMaxUsedTimes = vipGroupActivity.getStudentMaxUsedTimes();
+                    if (studentMaxUsedTimes != -1) {
+                        //获取活动购买次数
+                        int activityBuyNum = activityUserMapperService.countActivityBuyNum(vipGroupActivity.getId(),user.getId());
+                        //查看学员是否还可以购买活动
+                        vipGroupActivity.setEnable(true);
+                        if (activityBuyNum >= studentMaxUsedTimes) {
+                            vipGroupActivity.setEnable(false);
+                        }
+                    }
+                }
+                return succeed(vipGroupActivities.stream().sorted(Comparator.comparing(VipGroupActivity::getMarketPrice)).collect(Collectors.toList()));
+            }
+        }
+        return failed("当前分部不参与此活动,请联系管理员");
+    }
+
     @ApiOperation(value = "学员已购买的双十一活动信息")
     @GetMapping("/queryStudentDoubleEleven2021Order")
     public Object queryStudentDoubleEleven2021Order() {

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/MemberRankController.java

@@ -160,7 +160,7 @@ public class MemberRankController extends BaseController {
         if (user == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(cloudTeacherOrderService.queryActiveOrderPage(user.getId(), 202109, null));
+        return succeed(cloudTeacherOrderService.queryActiveOrderPage(user.getId(), 202203, null));
     }
 
 }

+ 11 - 3
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -24,9 +24,9 @@ import com.ym.mec.util.http.HttpUtil;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalTime;
@@ -276,8 +276,16 @@ public class PracticeGroupController extends BaseController {
     @PostMapping(value = "/buyActivity")
     @AuditLogAnnotation(operateName = "营销活动购买")
     public HttpResponseResult buyActivity(@RequestBody PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception {
-//        return succeed(practiceGroupService.buyActivityPracticeGroup(practiceGroupBuyParams));
-        return failed("购买入口已关闭,请联系管理员");
+        if(CollectionUtils.isNotEmpty(practiceGroupBuyParams.getCouponIdList())){
+            throw new BizException("当前活动不支持优惠券");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (null == sysUser) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        practiceGroupBuyParams.setUserId(sysUser.getId());
+        practiceGroupBuyParams.setOrganId(sysUser.getOrganId());
+        return succeed(practiceGroupService.buyActivityPracticeGroup(practiceGroupBuyParams));
     }
 
     @ApiOperation(value = "购买指导老师创建的网管课")