Browse Source

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

yonge 2 years ago
parent
commit
035b0d6b35
47 changed files with 996 additions and 399 deletions
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java
  3. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempBuyDoubleElevenUserLogDao.java
  5. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java
  6. 0 95
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2021Dto.java
  7. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2022Dto.java
  8. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysConfigJsonDto.java
  9. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LuckDrawCount.java
  10. 72 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempBuyDoubleElevenUserLog.java
  11. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  12. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/DoubleEleven2021QueryInfo.java
  13. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ActivityUserMapperService.java
  14. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OperatingReportCloudService.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  16. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  17. 12 4
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  18. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  19. 46 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java
  20. 2 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  21. 21 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  22. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawCountServiceImpl.java
  23. 9 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MarketActivityServiceImpl.java
  24. 5 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  25. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportCloudServiceImpl.java
  26. 5 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  27. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  28. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  29. 1 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  30. 261 67
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  31. 3 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  32. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleConvert.xml
  33. 2 2
      mec-biz/src/main/resources/config/mybatis/LuckDrawPrizeMapper.xml
  34. 1 1
      mec-biz/src/main/resources/config/mybatis/MarketActivityMapper.xml
  35. 8 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  36. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  37. 48 0
      mec-biz/src/main/resources/config/mybatis/TempBuyDoubleElevenUserLog.xml
  38. 50 5
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  39. 36 30
      mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java
  40. 120 16
      mec-student/src/main/java/com/ym/mec/student/controller/LuckDrawController.java
  41. 1 4
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  42. 27 33
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  43. 20 8
      mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java
  44. 2 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  45. 36 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  46. 13 4
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java
  47. 29 38
      mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -866,4 +866,6 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     * @date 2022/9/29 18:14 
     */
     Boolean hasConvertCourse(@Param("classIdList") List<Integer> classIdList);
+
+    void addClassTimes(@Param("classGroupId") Integer classGroupId, @Param("num") Integer num);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java

@@ -136,4 +136,6 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
      * @return
      */
     int clearRemainCourseMinutesByMusicGroupId(String musicGroupId);
+
+    void deleteByUserIdAndCalenderId(@Param("userId") Integer userId, @Param("calenderIds") List<Long> calenderIds);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -426,7 +426,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @author zx
      * @date 2021/10/27 10:27
      */
-    String queryStudentDoubleEleven2021Order(Integer userId);
+    String queryStudentDoubleElevenOrder(Integer userId);
 
     List<StudentPaymentOrder> findByCalenderId(@Param("calenderId") Long calenderId, @Param("userId") Integer userId);
 

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempBuyDoubleElevenUserLogDao.java

@@ -0,0 +1,12 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.TempBuyDoubleElevenUserLog;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+public interface TempBuyDoubleElevenUserLogDao extends BaseDAO<Integer, TempBuyDoubleElevenUserLog> {
+
+    Integer countGiveNum(@Param("userId") Integer userId);
+
+    TempBuyDoubleElevenUserLog findByOrderId(@Param("orderId") Long orderId);
+}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java

@@ -74,6 +74,7 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
 	* @date 2021/10/25 13:46
 	*/
     List<DoubleEleven2021ActivityDto> countActivityStatis();
+    List<DoubleEleven2021ActivityDto> count2022ActivityStatis();
 
 	/**
 	* @description: 双十一活动统计
@@ -84,6 +85,8 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
 	*/
     List<DoubleEleven2021ActivityDto> countOrganActivityStatis(@Param("organIdList") List<Integer> organIdList);
 
+    List<DoubleEleven2021ActivityDto> countOrgan2022ActivityStatis(@Param("organIdList") List<Integer> organIdList);
+
     /**
     * @description: 双十一活动统计
      * @param
@@ -92,6 +95,7 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
     * @date 2021/10/25 15:44
     */
 	DoubleEleven2021Dto countDoubleEleven2021Statis();
+	DoubleEleven2021Dto countDoubleEleven2022Statis();
 
     /**
     * @description: 双十一活动统计
@@ -102,6 +106,8 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
     */
 	List<DoubleEleven2021Dto> countOrganDoubleEleven2021Statis(@Param("organId") Integer organId);
 
+	List<DoubleEleven2021Dto> countOrganDoubleEleven2022Statis(@Param("organId") Integer organId);
+
 	/**
 	* @description: 双十一活动统计
 	 * @param

+ 0 - 95
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2021Dto.java

@@ -1,95 +0,0 @@
-package com.ym.mec.biz.dal.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-public class BuyDoubleEleven2021Dto {
-
-    @ApiModelProperty(value = "付款渠道")
-    private String paymentChannel;
-
-    @ApiModelProperty(value = "业务渠道")
-    private String paymentBusinessChannel;
-
-    @ApiModelProperty(value = "是否使用账户余额支付")
-    private boolean isUseBalancePayment;
-
-    @ApiModelProperty(value = "是否重新支付")
-    private boolean isRepeatPay;
-
-    @ApiModelProperty(value = "营销活动编号")
-    private String activityIdList;
-
-    @ApiModelProperty(value = "优惠券列表", required = false)
-    private List<Integer> couponIdList;
-
-    private Integer organId;
-
-    private Integer userId;
-
-    public String getActivityIdList() {
-        return activityIdList;
-    }
-
-    public void setActivityIdList(String activityIdList) {
-        this.activityIdList = activityIdList;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    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;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public String getPaymentChannel() {
-        return paymentChannel;
-    }
-
-    public void setPaymentChannel(String paymentChannel) {
-        this.paymentChannel = paymentChannel;
-    }
-
-    public String getPaymentBusinessChannel() {
-        return paymentBusinessChannel;
-    }
-
-    public void setPaymentBusinessChannel(String paymentBusinessChannel) {
-        this.paymentBusinessChannel = paymentBusinessChannel;
-    }
-}

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2022Dto.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class BuyDoubleEleven2022Dto extends PayParamBasicDto implements Serializable {
+
+    @ApiModelProperty(value = "营销活动编号")
+    private String activityIdList;
+
+    @ApiModelProperty(value = "分部")
+    private Integer organId;
+
+    @ApiModelProperty(value = "用户编号")
+    private Integer userId;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getActivityIdList() {
+        return activityIdList;
+    }
+
+    public void setActivityIdList(String activityIdList) {
+        this.activityIdList = activityIdList;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+}

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

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.dto;
+
+public class SysConfigJsonDto {
+    private String key;
+
+    private String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LuckDrawCount.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.entity;
 import java.math.BigDecimal;
 import java.util.Date;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ym.mec.common.entity.BaseEntity;
 
 public class LuckDrawCount extends BaseEntity {
@@ -16,8 +17,19 @@ public class LuckDrawCount extends BaseEntity {
 
 	private Date modifyOn;
 
+	@JsonProperty("HZFlag")
+	private Boolean HZFlag = false;
+
 	private Integer groupId;
 
+	public Boolean getHZFlag() {
+		return HZFlag;
+	}
+
+	public void setHZFlag(Boolean HZFlag) {
+		this.HZFlag = HZFlag;
+	}
+
 	public Integer getGroupId() {
 		return groupId;
 	}

+ 72 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempBuyDoubleElevenUserLog.java

@@ -0,0 +1,72 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.common.entity.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(temp_buy_double_eleven_user_log):
+ */
+public class TempBuyDoubleElevenUserLog extends BaseEntity {
+
+	private Integer id;
+
+	private Integer userId;
+
+	private Integer organId;
+
+	private Long orderId;
+
+	//是否达到赠送标准
+	private boolean giveFlag = false;
+
+	private Date createTime;
+
+	public Long getOrderId() {
+		return orderId;
+	}
+
+	public void setOrderId(Long orderId) {
+		this.orderId = orderId;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public boolean isGiveFlag() {
+		return giveFlag;
+	}
+
+	public void setGiveFlag(boolean giveFlag) {
+		this.giveFlag = giveFlag;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+}

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -11,8 +11,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     RENEW("RENEW", "乐团续费"),
     SPORADIC("SPORADIC", "缴费"),
     OTHER("OTHER", "其他订单"),
-    SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "VIP课报名"),
-    PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课报名"),
+    SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "VIP课购买"),
+    PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课购买"),
     PRACTICE_GROUP_RENEW("PRACTICE_GROUP_RENEW", "网管课续费"),
     COURSE_GROUP_BUY("COURSE_GROUP_BUY", "课程购买"),
     //余额充值活动

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/DoubleEleven2021QueryInfo.java

@@ -22,6 +22,16 @@ public class DoubleEleven2021QueryInfo extends QueryInfo {
 
     private Boolean giveMemberFlag;
 
+    private String year = "2021";
+
+    public String getYear() {
+        return year;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+
     public String getOrganId() {
         return organId;
     }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ActivityUserMapperService.java

@@ -210,4 +210,6 @@ public interface ActivityUserMapperService extends BaseService<Integer, Activity
     PageInfo<ActivityUserMapperDetailDto> queryDetailPage(ActivityUserMapperDetailQueryInfo queryInfo);
 
     PageInfo<ActivityUserMapperSumDto> querySumPage(ActivityUserMapperDetailQueryInfo queryInfo);
+
+    void saveToOrder(StudentPaymentOrder studentPaymentOrder,Integer teacherId);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/OperatingReportCloudService.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.biz.dal.entity.OperatingReportCloud;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -33,5 +34,7 @@ public interface OperatingReportCloudService extends BaseService<Integer, Operat
     */
     void updateSet(Long calenderId, List<Long> scheduleIdList);
 
+    public void updateSet(MusicGroupPaymentCalender calender,List<Long> scheduleIdList);
+
     void save(MusicGroupPaymentCalender musicGroupPaymentCalender);
 }

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

@@ -389,5 +389,5 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	//学生端网管课活动排课
 	HttpResponseResult studentCreateActivityPracticeGroup(PracticeGroupBuyDto practiceGroupBuyParams);
 
-	void checkActivity();
+	void checkActivity(String configName);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
@@ -29,6 +30,8 @@ import java.util.Map;
 
 public interface StudentPaymentOrderService extends BaseService<Long, StudentPaymentOrder> {
 
+    StudentPaymentOrderDao getDao();
+
     Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver) throws Exception;
 
     /**

+ 12 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.Date;
 import java.util.List;
@@ -397,17 +398,24 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     //机构云教室账户余额提醒
     String TENANT_CLOUD_ROOM_BALANCE_NOTICE = "tenant_cloud_room_balance_notice_";
 
-    static Date checkActivityDate(String startTimeStr, String endTimeStr) {
+    static void checkActivityDate(String startTimeStr, String endTimeStr) {
+        if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){
+            return;
+        }
+        checkActivityDate(DateUtil.stringToDate(startTimeStr),DateUtil.stringToDate(endTimeStr));
+    }
+
+    static void checkActivityDate(Date startTime, Date endTime) {
+        if(startTime == null || endTime == null){
+            return;
+        }
         Date now = new Date();
-        Date startTime = DateUtil.stringToDate(startTimeStr);
         if (startTime.compareTo(now) > 0) {
             throw new BizException("活动还未开始,谢谢关注");
         }
-        Date endTime = DateUtil.stringToDate(endTimeStr);
         if (endTime.compareTo(now) <= 0) {
             throw new BizException("活动已结束,谢谢关注");
         }
-        return now;
     }
 
     /**

+ 24 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -87,6 +88,24 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
     * @author zx
     * @date 2021/10/25 12:07
     */
+    List<DoubleEleven2021Dto> organDoubleEleven2022Statis(OrganDoubleEleven2021StatisDto queryInfo);
+
+    /**
+    * @description: 双11活动统计
+     * @param
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/25 12:07
+    */
+    DoubleEleven2021Dto doubleEleven2022Statis();
+
+    /**
+    * @description: 分部双11活动统计
+     * @param
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/25 12:07
+    */
     List<DoubleEleven2021Dto> organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto queryInfo);
 
     /**
@@ -96,7 +115,7 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
     * @author zx
     * @date 2021/10/25 12:07
     */
-    Object doubleEleven2021Statis();
+    DoubleEleven2021Dto doubleEleven2021Statis();
 
     /**
     * @description: 2021双十一学员购买详情
@@ -116,7 +135,11 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
     */
     HttpResponseResult buy(ActivityPayParamDto activityPayParamDto) throws Exception;
 
+    HttpResponseResult buyDoubleEleven(BuyDoubleEleven2022Dto buyDoubleEleven2022Dto) throws Exception;
+
     void orderCallback(StudentPaymentOrder studentPaymentOrder);
 
     void setActivityType(VipGroupActivity activity);
+
+    void checkActivity(VipGroupActivity activity,Integer userId,Integer organId);
 }

+ 46 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java

@@ -103,7 +103,9 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 	@Autowired
 	private MusicGroupPaymentCalenderActivityDao musicGroupPaymentCalenderActivityDao;
 	@Autowired
-	private CloudTeacherFreeCourseService cloudTeacherFreeCourseService;
+	private CloudTeacherOrderService cloudTeacherOrderService;
+	@Autowired
+	private TenantConfigService tenantConfigService;
 
 	@Override
 	public BaseDAO<Integer, ActivityUserMapper> getDAO() {
@@ -1205,4 +1207,47 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public void saveToOrder(StudentPaymentOrder studentPaymentOrder,Integer teacherId) {
+		String activityIds = studentPaymentOrder.getActivityId();
+		List<VipGroupActivity> activities = vipGroupActivityDao.queryByIds(activityIds);
+		BigDecimal reduce = activities.stream().map(e -> e.getMarketPrice()).reduce(ZERO, BigDecimal::add);
+		BigDecimal totalActual = studentPaymentOrder.getExpectAmount();
+		BigDecimal subActual = totalActual;
+		for (int i = 0; i < activities.size(); i++) {
+			VipGroupActivity activity = activities.get(i);
+			ActivityUserMapper activityUserMapper = new ActivityUserMapper();
+			activityUserMapper.setPaymentOrderId(studentPaymentOrder.getId());
+			activityUserMapper.setUserId(studentPaymentOrder.getUserId());
+			activityUserMapper.setActivityId(activity.getId());
+			activityUserMapper.setTeacherId(teacherId);
+			activityUserMapper.setAddMemo(activity.getName());
+			activityUserMapper.setOrganId(studentPaymentOrder.getOrganId());
+			if (i == activities.size() - 1) {
+				activityUserMapper.setActualPrice(subActual);
+			} else {
+				//获取比例
+				BigDecimal ratioAmount = activity.getMarketPrice().divide(reduce, 6, BigDecimal.ROUND_HALF_UP);
+				//获取分配的减免金额
+				BigDecimal multiply = ratioAmount.multiply(totalActual).setScale(2, BigDecimal.ROUND_HALF_UP);
+				subActual = subActual.subtract(multiply);
+				activityUserMapper.setActualPrice(multiply);
+			}
+			activityUserMapper.setSubNoCoursePrice(activityUserMapper.getActualPrice());
+			activityUserMapper.setTotalCourseNum(activity.getMinCourseNum());
+			activityUserMapper.setSubCourseNum(activity.getMinCourseNum());
+			activityUserMapper.setSingleCourseTime(activity.getSingleCourseTime());
+			//vip课
+			if(StringUtils.isNotEmpty(activity.getVipGroupCategoryIdList())){
+				activityUserMapper.setVipFlag(1);
+				activityUserMapper.setCategoryId(Integer.parseInt(activity.getVipGroupCategoryIdList()));
+			}else {
+				//网管课
+				activityUserMapper.setPracticeFlag(1);
+			}
+			activityUserMapperDao.insert(activityUserMapper);
+		}
+    }
 }

+ 2 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3765,18 +3765,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    @Transactional(rollbackFor = Exception.class)
     public boolean updateTotalClassTimes(Integer classGroupId, Integer num) {
-        ClassGroup classGroup = classGroupDao.lockClassGroup(classGroupId);
-        if (Objects.isNull(classGroup)) {
-            throw new BizException("班级不存在");
-        }
-        int totalClassTimes = classGroup.getTotalClassTimes() == null ? 0 : classGroup.getTotalClassTimes();
-        classGroup.setTotalClassTimes(totalClassTimes + num);
-        classGroup.setUpdateTime(new Date());
-
-        classGroupDao.update(classGroup);
-
+        classGroupDao.addClassTimes(classGroupId,num);
         return true;
     }
 

+ 21 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -391,8 +391,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
 		Map<Integer, List<CourseSchedule>> memberCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getMemberFlag));
-		List<Long> operatingCourse = new ArrayList<>();
-		Long calenderId = null;
+		Map<Long,List<Long>> courseCalenderMap = new HashMap<>(10);
 		for (Integer memberFlag : memberCourseMap.keySet()) {
 			List<CourseSchedule> courseScheduleList = memberCourseMap.get(memberFlag);
 			if(courseScheduleList != null && courseScheduleList.size() > 0){
@@ -462,10 +461,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 								CourseScheduleStudentPayment cssp = this.init(courseSchedule);
 								cssp.setUserId(studentId);
 								//扣除可排课时长
-								if(this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,cssp,musicGroupPaymentCalenders)){
-									//课程是否需要标记为云教练赠送
-									operatingCourse.add(courseSchedule.getId());
-								}
+								//处理经营报表
+								this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,cssp,musicGroupPaymentCalenders,courseCalenderMap);
 								typeCourseStudentPayments.add(cssp);
 							}
 							courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
@@ -476,15 +473,19 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				}
 			}
 		}
-		if(!CollectionUtils.isEmpty(operatingCourse)){
-			operatingReportCloudService.updateSet(calenderId,operatingCourse);
+		if(!CollectionUtils.isEmpty(courseCalenderMap)){
+			for (Long calenderId : courseCalenderMap.keySet()) {
+				List<Long> courseIds = courseCalenderMap.get(calenderId);
+				operatingReportCloudService.updateSet(calenderId,courseIds);
+			}
 		}
 	}
 
 	private Boolean calcCourseMinutes(List<MusicGroupPaymentStudentCourseDetail> courseDetails,
 									  Integer courseDuration,
 									  CourseScheduleStudentPayment studentPayment,
-									  List<MusicGroupPaymentCalender> musicGroupPaymentCalenders){
+									  List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,
+									  Map<Long,List<Long>> courseCalenderMap){
 		Boolean result = true;
 		Integer courseMinutes = courseDuration;
 		Map<Long, List<MusicGroupPaymentCalender>> calenderMap = musicGroupPaymentCalenders.stream().collect(Collectors.groupingBy(MusicGroupPaymentCalender::getId));
@@ -526,6 +527,17 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				if(MusicGroupPaymentCalender.PayUserType.SCHOOL.equals(calender.getPayUserType())){
 					studentPayment.setExpectPrice(BigDecimal.ZERO);
 				}
+				//处理经营报表缴费项目相关数据,线上存在问题,先让用户排课
+				if(result){
+					List<Long> courseIds = courseCalenderMap.get(calender.getId());
+					if(CollectionUtils.isEmpty(courseIds)){
+						courseIds = new ArrayList<>();
+					}
+					courseIds.add(studentPayment.getCourseScheduleId());
+//					ArrayList<Long> courseIds = new ArrayList<>();
+//					courseIds.add(studentPayment.getCourseScheduleId());
+//					operatingReportCloudService.updateSet(calender,courseIds);
+				}
 				if(courseMinutes == 0){
 					return result;
 				}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawCountServiceImpl.java

@@ -33,6 +33,9 @@ public class LuckDrawCountServiceImpl extends BaseServiceImpl<Long, LuckDrawCoun
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public boolean freeGive(Long userId, int times,Integer groupId) {
+		if(times == 0){
+			return true;
+		}
 		boolean isInsert = false;
 		LuckDrawCount luckDrawCount = luckDrawCountDao.getLock(userId);
 		if (luckDrawCount == null) {

+ 9 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MarketActivityServiceImpl.java

@@ -1,18 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.MarketActivityDao;
-import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
 import com.ym.mec.biz.dal.entity.ActivityDetailDto;
 import com.ym.mec.biz.dal.entity.MarketActivity;
-import com.ym.mec.biz.dal.entity.VipGroupDefaultClassesUnitPrice;
 import com.ym.mec.biz.service.MarketActivityService;
 import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.List;
 
@@ -21,8 +17,8 @@ public class MarketActivityServiceImpl extends BaseServiceImpl<Integer, MarketAc
 	
 	@Autowired
 	private MarketActivityDao marketActivityDao;
-	@Autowired
-	private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
+//	@Autowired
+//	private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
 
 	@Override
 	public BaseDAO<Integer, MarketActivity> getDAO() {
@@ -33,13 +29,13 @@ public class MarketActivityServiceImpl extends BaseServiceImpl<Integer, MarketAc
     public List<ActivityDetailDto> queryActivity(Integer marketPriceId,Integer organId) {
 		List<ActivityDetailDto> activityDetailDtos = marketActivityDao.queryActivity(marketPriceId,organId);
 		activityDetailDtos.removeAll(Collections.singleton(null));
-		for (ActivityDetailDto activityDetailDto : activityDetailDtos) {
-			VipGroupDefaultClassesUnitPrice category = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(activityDetailDto.getCategoryId(), organId);
-			if(category == null){
-				throw new BizException("请设置分部收费标准");
-			}
-			activityDetailDto.setOriginalPrice(activityDetailDto.getCourseNum().multiply(category.getOnlineClassesUnitPrice()).setScale(0, BigDecimal.ROUND_CEILING));
-		}
+//		for (ActivityDetailDto activityDetailDto : activityDetailDtos) {
+//			VipGroupDefaultClassesUnitPrice category = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(activityDetailDto.getCategoryId(), organId);
+//			if(category == null){
+//				throw new BizException("请设置分部收费标准");
+//			}
+//			activityDetailDto.setOriginalPrice(activityDetailDto.getCourseNum().multiply(category.getOnlineClassesUnitPrice()).setScale(0, BigDecimal.ROUND_CEILING));
+//		}
 		return activityDetailDtos;
     }
 }

+ 5 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2158,7 +2158,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Long id = reqMusicGroupQuit.getId();
         ApprovalStatus status = reqMusicGroupQuit.getStatus();
         String reason = reqMusicGroupQuit.getReason();
-        Date visitDate = reqMusicGroupQuit.getVisitTime();
         MusicGroupReturnFeeDto returnFeeDto = reqMusicGroupQuit.getReturnFeeDto();
 
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
@@ -2225,18 +2224,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		musicGroupQuit.setVisitTime(reqMusicGroupQuit.getVisitTime());
 		musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
 
-
-/*        if (visitDate != null) {
-            musicGroupQuit.setVisitTime(visitDate);
-            musicGroupQuit.setIsVisit(true);
-        } else {
-            musicGroupQuit.setIsVisit(false);
-        }
-
-        if (StringUtils.isBlank(musicGroupQuit.getUserComment())) {
-            musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
-        }*/
-
         BigDecimal returnTotalFee = BigDecimal.ZERO;
 
         if (returnFeeDto == null) {
@@ -2252,9 +2239,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (returnFeeDto.getIsReturnMaintenanceFee()) {
             returnTotalFee = returnTotalFee.add(returnFeeDto.getMaintenanceFee());
         }
-//        if (returnFeeDto.getIsReturnMemberFee()) {
-//            returnTotalFee = returnTotalFee.add(returnFeeDto.getMemberFee());
-//        }
         if (returnFeeDto.getIsReturnMusicalFee()) {
             returnTotalFee = returnTotalFee.add(returnFeeDto.getMusicalFee());
         }
@@ -2316,7 +2300,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupPaymentCalenderDetailDao.delete(mgpcd.getId());
             }
             //删除用户购买的课程记录
-            musicGroupPaymentStudentCourseDetailDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
+            List<MusicGroupPaymentCalender> paymentCalenders = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
+            if(CollectionUtils.isNotEmpty(paymentCalenders)){
+                List<Long> calenderIds = paymentCalenders.stream().map(e -> e.getId()).collect(Collectors.toList());
+                musicGroupPaymentStudentCourseDetailDao.deleteByUserIdAndCalenderId(userId, calenderIds);
+            }
 
             BigDecimal amount = new BigDecimal(0);
 

+ 9 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportCloudServiceImpl.java

@@ -106,17 +106,24 @@ public class OperatingReportCloudServiceImpl extends BaseServiceImpl<Integer, Op
 	public void updateSet(Long calenderId,List<Long> scheduleIdList) {
 		//如果是进行中加学员,全部算在当月云教练结转。不用摊到课程
 		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(calenderId);
+		this.updateSet(calender,scheduleIdList);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateSet(MusicGroupPaymentCalender calender,List<Long> scheduleIdList) {
+		//如果是进行中加学员,全部算在当月云教练结转。不用摊到课程
 		if(calender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_STUDENT){
 			return;
 		}
-		OperatingReportCloud reportCloud = operatingReportCloudDao.findByCalenderId(calenderId);
+		OperatingReportCloud reportCloud = operatingReportCloudDao.findByCalenderId(calender.getId());
 		if(Objects.isNull(reportCloud)){
 			throw new BizException("操作失败,请联系管理员");
 		}
 		if(reportCloud.getSettlementFlag()){
 			return;
 		}
-		cloudTeacherFreeCourseService.batchInsert(scheduleIdList,calenderId);
+		cloudTeacherFreeCourseService.batchInsert(scheduleIdList,calender.getId());
 		//计算课程预收
 		BigDecimal costPrice = organCourseTypeOriginalCostDao.getCourseCostPrice(StringUtils.join(scheduleIdList,","));
 		if(Objects.isNull(costPrice)){

+ 5 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -4401,17 +4401,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public Object buyActivityPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception {
         Student student = studentDao.getLocked(practiceGroupBuyParams.getUserId());
-        this.checkActivity();
+        this.checkActivity("2022_cloud_activity_config");
         Integer activityId = practiceGroupBuyParams.getActivityId();
         VipGroupActivity activity = vipGroupActivityDao.get(activityId);
-//        Integer studentMaxUsedTimes = activity.getStudentMaxUsedTimes();
-//        if (studentMaxUsedTimes != -1) {
-//            //获取活动购买次数
-//            int activityBuyNum = activityUserMapperService.countActivityBuyNum(activityId, practiceGroupBuyParams.getUserId());
-//            if (activityBuyNum >= studentMaxUsedTimes) {
-//                throw new BizException("当前活动最多课购买{}次,感谢您的参与", studentMaxUsedTimes);
-//            }
-//        }
 
         //判断用户是否已存在订单
         // 判断是否存在支付中的记录
@@ -4422,10 +4414,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 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);
         BigDecimal activityFee = activity.getMarketPrice().multiply(activity.getDiscount()).
                 divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, ROUND_DOWN);
         //计算订单金额
@@ -4904,9 +4892,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
-    public void checkActivity() {
+    public void checkActivity(String configName) {
         SysUser sysUser = sysUserService.getUser();
-        String activeConfig = sysConfigDao.findConfigValue("2022_cloud_activity_config");
+        String activeConfig = sysConfigDao.findConfigValue(configName);
         List<Cloud2022ActivityDto> cloud2022ActivityDtos = JSONArray.parseArray(activeConfig, Cloud2022ActivityDto.class);
         List<Cloud2022ActivityDto> activityDtos = cloud2022ActivityDtos.stream().
                 filter(e -> Arrays.stream(e.getOrganId().split(",")).collect(Collectors.toList()).
@@ -4916,15 +4904,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         Integer activityId = Integer.parseInt(activityDtos.get(0).getActivityId().split(",")[0]);
         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("活动已结束,感谢您的参与");
-        }
+        //校验活动时间
+        SysConfigService.checkActivityDate(activity.getStartTime(),activity.getEndTime());
         //只允许购买一次
         int num = studentPaymentOrderDao.countByActivityIds(activityDtos.stream().map(e->e.getActivityId()).collect(Collectors.toList()),sysUser.getId());
         if(num > 0){

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -139,6 +139,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private final static Logger LOGGER = LoggerFactory.getLogger(StudentPaymentOrderServiceImpl.class);
 
     @Override
+    public StudentPaymentOrderDao getDao() {
+        return studentPaymentOrderDao;
+    }
+
+    @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver) throws Exception {
 
@@ -869,7 +874,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 activityUserMapper.setMemberFlag(1);
                 activityUserMapper.setMemberOrderId(cloudTeacherOrder.getId());
             }
-//            activityUserMapperService.copyProperty(activityUserMapper,activity,false,true);
 
             //是否达到满赠标准
             if (activity.getFullMinusCourseTimes() == -1 || studentPaymentOrder.getActivityBuyNum() < activity.getFullMinusCourseTimes()) {

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -704,11 +704,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     maintenanceGoodsId = goodsGroup.getGoodsIdList();
                 }
                 
-                if(goodsGroup.getOrganShareProfit() != null){
+                if(goodsGroup.getOrganShareProfit() != null && goodsGroup.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP){
                 	organShareProfit = organShareProfit.add(goodsGroup.getOrganShareProfit());
                 }
             }
-            
             //分部分润
             if(organShareProfit.compareTo(BigDecimal.ZERO) > 0) {
             	StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -335,12 +335,10 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
             if (userCashAccount.getBalance().subtract(amount).doubleValue() >= 0) {
                 studentPaymentRouteOrderService.addRouteOrder(studentPaymentOrder.getOrderNo(), studentPaymentOrder.getOrganId(),amount);
                 // 更新订单信息
-                studentPaymentOrder.setActualAmount(new BigDecimal(0));
+                studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
                 studentPaymentOrder.setBalancePaymentAmount(amount);
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                 studentPaymentOrder.setRoutingOrganId(studentPaymentOrder.getOrganId());
-//                studentPaymentOrderService.orderCallback(studentPaymentOrder);
-
                 this.updateBalance(studentPaymentOrder.getUserId(), amount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, studentPaymentOrder.getMemo());
                 return true;
             } else {

+ 261 - 67
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
@@ -10,7 +11,6 @@ import com.ym.mec.biz.dal.page.ActivityStudentQueryInfo;
 import com.ym.mec.biz.dal.page.DoubleEleven2021QueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 import com.ym.mec.biz.service.*;
-import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -21,6 +21,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,11 +31,12 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
-import static java.math.BigDecimal.ROUND_DOWN;
 import static java.math.BigDecimal.ROUND_UP;
+import static java.math.BigDecimal.ZERO;
 
 @Service
 public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGroupActivity>  implements VipGroupActivityService {
@@ -79,6 +81,10 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	private StudentDao studentDao;
 	@Autowired
 	private TenantConfigService tenantConfigService;
+	@Autowired
+	private LuckDrawCountService luckDrawCountService;
+	@Autowired
+	private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
 
 	@Override
 	public BaseDAO<Integer, VipGroupActivity> getDAO() {
@@ -284,21 +290,57 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		return pageInfo;
 	}
 
-    @Override
+	@Override
+	public List<DoubleEleven2021Dto> organDoubleEleven2022Statis(OrganDoubleEleven2021StatisDto queryInfo) {
+		List<DoubleEleven2021Dto> doubleEleven2022Dtos = vipGroupActivityDao.countOrganDoubleEleven2022Statis(queryInfo.getOrganId());
+		return this.sumDoubleEleven(doubleEleven2022Dtos,queryInfo,
+				vipGroupActivityDao::countOrgan2022ActivityStatis,
+				null);
+	}
+
+	@Override
+	public DoubleEleven2021Dto doubleEleven2022Statis() {
+		DoubleEleven2021Dto doubleEleven2022Dto = vipGroupActivityDao.countDoubleEleven2022Statis();
+		if(doubleEleven2022Dto.getTotalBuyAmount().compareTo(ZERO) > 0){
+			doubleEleven2022Dto.setAvgBuyAmount(
+					doubleEleven2022Dto.getTotalBuyAmount().divide(new BigDecimal(doubleEleven2022Dto.getTotalBuyNum()),2,BigDecimal.ROUND_CEILING));
+		}
+		//获取活动成交数据
+		this.groupTypeConvert(vipGroupActivityDao.count2022ActivityStatis(),doubleEleven2022Dto);
+		//获取赠送会员数
+		Integer giveMemberNum = tempBuyDoubleElevenUserLogDao.countGiveNum(null);
+		doubleEleven2022Dto.setGiveMemberNum(giveMemberNum==null?0l:giveMemberNum.longValue());
+		return doubleEleven2022Dto;
+	}
+
+	@Override
     public List<DoubleEleven2021Dto> organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto statisDto) {
-		String order = statisDto.getOrder();
-		String sort = statisDto.getSort();
 		List<DoubleEleven2021Dto> doubleEleven2021Dtos = vipGroupActivityDao.countOrganDoubleEleven2021Statis(statisDto.getOrganId());
-		if(doubleEleven2021Dtos != null && doubleEleven2021Dtos.size() > 0){
+		return this.sumDoubleEleven(doubleEleven2021Dtos,statisDto,
+				vipGroupActivityDao::countOrganActivityStatis,
+				vipGroupActivityDao::countOrganGiveMemberNum);
+    }
+
+	private List<DoubleEleven2021Dto> sumDoubleEleven(List<DoubleEleven2021Dto> doubleEleven2021Dtos,
+													  OrganDoubleEleven2021StatisDto statisDto,
+													  Function<List<Integer>,List<DoubleEleven2021ActivityDto>> funOne,
+													  Function<List<Integer>,List<Map<Long,Long>>> funTwo){
+		if(!CollectionUtils.isEmpty(doubleEleven2021Dtos)){
+			String order = statisDto.getOrder();
+			String sort = statisDto.getSort();
 			List<Integer> organIdList = doubleEleven2021Dtos.stream().map(e -> e.getOrganId()).collect(Collectors.toList());
-			List<DoubleEleven2021ActivityDto> activityDtoList = vipGroupActivityDao.countOrganActivityStatis(organIdList);
+
+			List<DoubleEleven2021ActivityDto> activityDtoList = funOne.apply(organIdList);;
 			Map<Integer, List<DoubleEleven2021ActivityDto>> collect = new HashMap<>();
 			if(activityDtoList != null && activityDtoList.size() > 0){
 				collect = activityDtoList.stream().collect(Collectors.groupingBy(DoubleEleven2021ActivityDto::getOrganId));
 			}
-			Map<Long, Long> maps = MapUtil.convertIntegerMap(vipGroupActivityDao.countOrganGiveMemberNum(organIdList));
+			Map<Long, Long> maps = new HashMap<>();
+			if(funTwo != null){
+				maps = MapUtil.convertIntegerMap(funTwo.apply(organIdList));
+			}
 			for (DoubleEleven2021Dto doubleEleven2021Dto : doubleEleven2021Dtos) {
-				if(doubleEleven2021Dto.getTotalBuyAmount().compareTo(BigDecimal.ZERO) > 0){
+				if(doubleEleven2021Dto.getTotalBuyAmount().compareTo(ZERO) > 0){
 					doubleEleven2021Dto.setAvgBuyAmount(
 							doubleEleven2021Dto.getTotalBuyAmount().divide(new BigDecimal(doubleEleven2021Dto.getTotalBuyNum()),2,BigDecimal.ROUND_CEILING));
 				}
@@ -413,19 +455,26 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 			}
 		}
 		return doubleEleven2021Dtos;
-    }
+	}
 
 	@Override
-	public Object doubleEleven2021Statis() {
+	public DoubleEleven2021Dto doubleEleven2021Statis() {
 		//获取总成交数据
 		DoubleEleven2021Dto doubleEleven2021Dto = vipGroupActivityDao.countDoubleEleven2021Statis();
-		if(doubleEleven2021Dto.getTotalBuyAmount().compareTo(BigDecimal.ZERO) > 0){
+		if(doubleEleven2021Dto.getTotalBuyAmount().compareTo(ZERO) > 0){
 			doubleEleven2021Dto.setAvgBuyAmount(
 					doubleEleven2021Dto.getTotalBuyAmount().divide(new BigDecimal(doubleEleven2021Dto.getTotalBuyNum()),2,BigDecimal.ROUND_CEILING));
 		}
 		//获取活动成交数据
-		List<DoubleEleven2021ActivityDto> activityDtos = vipGroupActivityDao.countActivityStatis();
-		if(activityDtos != null && activityDtos.size() > 0){
+		this.groupTypeConvert(vipGroupActivityDao.countActivityStatis(),doubleEleven2021Dto);
+		//获取赠送会员数
+		Integer giveMemberNum = vipGroupActivityDao.countGiveMemberNum();
+		doubleEleven2021Dto.setGiveMemberNum(giveMemberNum==null?0l:giveMemberNum.longValue());
+		return doubleEleven2021Dto;
+	}
+
+	private void groupTypeConvert(List<DoubleEleven2021ActivityDto> activityDtos,DoubleEleven2021Dto doubleEleven2021Dto){
+		if(!CollectionUtils.isEmpty(activityDtos)){
 			for (DoubleEleven2021ActivityDto activityDto : activityDtos) {
 				if(activityDto.getType() == 1){
 					doubleEleven2021Dto.setVip1V120Amount(activityDto.getBuyAmount());
@@ -445,10 +494,6 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 				}
 			}
 		}
-		//获取赠送会员数
-		Integer giveMemberNum = vipGroupActivityDao.countGiveMemberNum();
-		doubleEleven2021Dto.setGiveMemberNum(giveMemberNum==null?0l:giveMemberNum.longValue());
-		return doubleEleven2021Dto;
 	}
 
 	@Override
@@ -560,17 +605,16 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		}
 
 		BigDecimal amount = studentPaymentOrder.getActualAmount();
-		BigDecimal balance = BigDecimal.ZERO;
 		String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 		//分类费用 course,instrument,accessories,other
 		Map<String, BigDecimal> classFee = new HashMap<>();
 		classFee.put("course", amount);
-		classFee.put("instrument", BigDecimal.ZERO);
-		classFee.put("accessories", BigDecimal.ZERO);
-		classFee.put("other", BigDecimal.ZERO);
+		classFee.put("instrument", ZERO);
+		classFee.put("accessories", ZERO);
+		classFee.put("other", ZERO);
 		Map<String, Object> payMap = payService.getPayMap(
 				amount,
-				balance,
+				studentPaymentOrder.getBalancePaymentAmount(),
 				orderNo,
 				baseApiUrl + "/api-student/studentOrder/callback",
 				baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
@@ -597,15 +641,18 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		}
 		if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
 			Student student = studentDao.get(studentPaymentOrder.getUserId());
-			//活动赠送
-			studentPaymentOrderService.activityGive(Integer.parseInt(studentPaymentOrder.getActivityId()), studentPaymentOrder,
-					null, null, student.getTeacherId());
+			//处理双十一活动特殊赠送
+			boolean elevenFlag = this.doubleElevenGive(studentPaymentOrder, student.getTeacherId());
+			if(!elevenFlag){
+				studentPaymentOrderService.activityGive(Integer.parseInt(studentPaymentOrder.getActivityId()), studentPaymentOrder,
+						null, null, student.getTeacherId());
+			}
 			//保存账户信息
 			sysUserCashAccountDetailService.saveSysUserCashAccountDetail(studentPaymentOrder,studentPaymentOrder.getMemo());
 			//发送短信
 			this.sendSuccessMsg(studentPaymentOrder);
 		}else {
-			if (Objects.nonNull(studentPaymentOrder.getBalancePaymentAmount()) && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+			if (Objects.nonNull(studentPaymentOrder.getBalancePaymentAmount()) && studentPaymentOrder.getBalancePaymentAmount().compareTo(ZERO) > 0) {
 				sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, studentPaymentOrder.getMemo() + "支付失败,退还余额");
 			}
 			sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
@@ -613,6 +660,56 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		}
 	}
 
+	//处理双十一活动特殊赠送
+	private boolean doubleElevenGive(StudentPaymentOrder studentPaymentOrder,Integer teacherId){
+		String[] split = studentPaymentOrder.getActivityId().split(",");
+		String activeConfig = sysConfigDao.findConfigValue("2022_double_eleven_give_config");
+		String giveStartTime = sysConfigDao.findConfigValue("2021_double_eleven_give_member_start_time");
+		String giveEndTime = sysConfigDao.findConfigValue("2021_double_eleven_give_member_end_time");
+		Boolean doubleElevenFlag = false;
+		for (String activityId : split) {
+			List<SysConfigJsonDto> cloud2022ActivityDtos = JSONArray.parseArray(activeConfig, SysConfigJsonDto.class);
+			List<SysConfigJsonDto> activityDtos = cloud2022ActivityDtos.stream().
+					filter(e -> Arrays.stream(e.getKey().split(",")).collect(Collectors.toList()).
+							contains(activityId)).collect(Collectors.toList());
+			if(!CollectionUtils.isEmpty(activityDtos)){
+				doubleElevenFlag = true;
+				SysConfigJsonDto jsonDto = activityDtos.get(0);
+				//处理双十一活动特殊处理
+				Date now = new Date();
+				TempBuyDoubleElevenUserLog doubleElevenUserLog = new TempBuyDoubleElevenUserLog();
+				doubleElevenUserLog.setOrderId(studentPaymentOrder.getId());
+				doubleElevenUserLog.setUserId(studentPaymentOrder.getUserId());
+				doubleElevenUserLog.setCreateTime(now);
+				doubleElevenUserLog.setOrganId(studentPaymentOrder.getOrganId());
+				//杭州不送保养套装
+				if(studentPaymentOrder.getOrganId().equals(4)){
+					if(DateUtil.contents(giveStartTime,giveEndTime,now)){
+						//赠送抽奖机会
+						luckDrawCountService.freeGive(studentPaymentOrder.getUserId().longValue(),Integer.parseInt(jsonDto.getValue()),4);
+					}
+				}else {
+					if(DateUtil.contents(giveStartTime,giveEndTime,now)){
+						Integer giveNum = tempBuyDoubleElevenUserLogDao.countGiveNum(studentPaymentOrder.getUserId());
+						if(giveNum == null || giveNum == 0){
+							//符合赠送条件,赠送乐保套装
+							doubleElevenUserLog.setGiveFlag(true);
+						}
+					}
+					//赠送抽奖机会
+					luckDrawCountService.freeGive(studentPaymentOrder.getUserId().longValue(),Integer.parseInt(jsonDto.getValue()),3);
+				}
+				tempBuyDoubleElevenUserLogDao.insert(doubleElevenUserLog);
+
+			}
+		}
+		if (doubleElevenFlag){
+			//处理活动特殊排课资格
+			activityUserMapperService.saveToOrder(studentPaymentOrder,teacherId);
+		}
+		return doubleElevenFlag;
+	}
+
     @Override
     public void setActivityType(VipGroupActivity activity) {
 		//如果是会员活动
@@ -639,47 +736,113 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		}
     }
 
-    private void sendSuccessMsg(StudentPaymentOrder studentPaymentOrder){
-		Integer userId = studentPaymentOrder.getUserId();
-		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(Integer.parseInt(studentPaymentOrder.getActivityId()));
-		String activityName = vipGroupActivity.getName();
-		if(vipGroupActivity.getActivityType().equals(0)) {
-			SysUser user = teacherDao.getUser(userId);
-			String username = StringUtils.isEmpty(user.getUsername()) ? user.getRealName() : user.getUsername();
-			Map<Integer, String> map = new HashMap<>(1);
-			map.put(userId, userId.toString());
-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_STUDENT_BUY_ACTIVITY, map, null, 0, null, "STUDENT",
-					activityName);
-			//获取乐团主管
-			Map<Integer, String> eduMap = MapUtil.convertMybatisMap(studentRegistrationDao.queryStudentEduMap(userId));
-			if (CollectionUtils.isEmpty(eduMap)) {
-				Set<Integer> integers = employeePositionService.queryUserIdByRoleId(new SysUserRoleEnum[]{ORGAN_MANAGER}, studentPaymentOrder.getOrganId());
-				eduMap = new HashMap<>(integers.size());
-				if (!CollectionUtils.isEmpty(integers)) {
-					for (Integer integer : integers) {
-						eduMap.put(integer, integer.toString());
-					}
-				}
-			}
-			if (!CollectionUtils.isEmpty(eduMap)) {
-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_SYSTEM_ACTIVITY_COURSE,
-						eduMap, null, 0, null, "SYSTEM", username, activityName);
+	@Override
+	@Transactional( rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+	public HttpResponseResult buyDoubleEleven(BuyDoubleEleven2022Dto payParam) throws Exception {
+		String activityIdList = payParam.getActivityIdList();
+		List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(activityIdList);
+		Student student = studentDao.getLocked(payParam.getUserId());
+		BigDecimal activityFee = ZERO;
+		for (VipGroupActivity activity : vipGroupActivities) {
+			//校验活动购买条件
+			this.checkActivity(activity,payParam.getUserId(),payParam.getOrganId());
+			activityFee = activityFee.add(activity.getMarketPrice());
+		}
+		// 判断是否存在支付中的记录
+		List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.ACTIVITY,null,student.getUserId(),DealStatusEnum.ING,OrderTypeEnum.SMALL_CLASS_TO_BUY);
+		if (list.size() > 0) {
+			StudentPaymentOrder applyOrder = list.get(list.size() - 1);
+			//校验重复支付
+			HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrder, payParam.getRepeatPay());
+			if (result.getCode() != 200) {
+				return result;
 			}
-			Student student = studentDao.get(userId);
-			if (Objects.nonNull(student) && student.getTeacherId() != null) {
-				Map<Integer, String> teacherMap = new HashMap<>(1);
-				teacherMap.put(student.getTeacherId(), student.getTeacherId().toString());
-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_TEACHER_ACTIVITY_COURSE,
-						teacherMap, null, 0, null, "TEACHER", username, activityName);
+		}
+
+		//计算订单金额
+		StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(payParam.getCouponIdList(), activityFee, true);
+		if (studentPaymentOrder.getActualAmount().compareTo(payParam.getAmount()) != 0) {
+			throw new BizException("非法请求");
+		}
+		String orderNo = idGeneratorService.generatorId("payment") + "";
+		studentPaymentOrder.setMemo("2022双十一活动购买");
+		studentPaymentOrder.setPaymentChannel("BALANCE");
+		studentPaymentOrder.setUserId(student.getUserId());
+		studentPaymentOrder.setGroupType(GroupType.ACTIVITY);
+		studentPaymentOrder.setOrderNo(orderNo);
+		studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
+		studentPaymentOrder.setStatus(DealStatusEnum.ING);
+		studentPaymentOrder.setRemitFee(ZERO);
+		studentPaymentOrder.setCourseRemitFee(ZERO);
+		studentPaymentOrder.setOrganId(payParam.getOrganId());
+		studentPaymentOrder.setRoutingOrganId(payParam.getOrganId());
+		studentPaymentOrder.setActivityId(activityIdList);
+		studentPaymentOrder.setMusicGroupId(activityIdList);
+		studentPaymentOrder.setVersion(0);
+		studentPaymentOrderService.insert(studentPaymentOrder);
+
+		//消耗余额
+		Boolean success = sysUserCashAccountService.use(payParam,studentPaymentOrder);
+		if(success){
+			this.orderCallback(studentPaymentOrder);
+			Map<String, Object> result = new HashMap<>();
+			result.put("orderNo", studentPaymentOrder.getOrderNo());
+			return BaseController.succeed(result);
+		}
+
+		String orderSubject = "2022双十一活动";
+		String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+		Map payMap = payService.getPayMap(
+				studentPaymentOrder.getActualAmount(),
+				studentPaymentOrder.getBalancePaymentAmount(),
+				orderNo,
+				baseApiUrl + "/api-student/studentOrder/notify",
+				baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+				orderSubject,
+				orderSubject,
+				studentPaymentOrder.getOrganId(),
+				"vip"
+		);
+
+		studentPaymentOrder.setOrganId(studentPaymentOrder.getOrganId());
+		studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+		studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+		studentPaymentOrderService.update(studentPaymentOrder);
+		return BaseController.succeed(payMap);
+	}
+
+	@Override
+	public void checkActivity(VipGroupActivity activity,Integer userId,Integer organId){
+		//校验分部
+		String activityOrganIds = activity.getOrganId();
+		if(StringUtils.isNotEmpty(activityOrganIds) && !activityOrganIds.contains(organId.toString())){
+			throw new BizException("当前分部暂不支持此活动");
+		}
+		//校验活动有效时间
+		SysConfigService.checkActivityDate(activity.getStartTime(),activity.getEndTime());
+		Integer studentMaxUsedTimes = activity.getStudentMaxUsedTimes();
+		if(studentMaxUsedTimes != -1){
+			//获取活动购买次数
+			int activityBuyNum = activityUserMapperService.countActivityBuyNum(activity.getId(),userId);
+			if(activityBuyNum >= studentMaxUsedTimes){
+				throw new BizException("{}活动最多课购买{}次,感谢您的参与",activity.getName(),studentMaxUsedTimes);
 			}
-		}else {
-			SysUser user = teacherDao.getUser(userId);
-			String username = StringUtils.isEmpty(user.getUsername()) ? user.getRealName() : user.getUsername();
-			Map<Integer, String> map = new HashMap<>(1);
-			map.put(userId, userId.toString());
-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_STUDENT_BUY_MEMBER_ACTIVITY, map, null, 0, null, "STUDENT",
-					activityName);
-			if(!tenantConfigService.autoActivationFlag(user.getTenantId())){
+		}
+	}
+
+    private void sendSuccessMsg(StudentPaymentOrder studentPaymentOrder){
+		Integer userId = studentPaymentOrder.getUserId();
+		String[] split = studentPaymentOrder.getActivityId().split(",");
+		for (String activityId : split) {
+			VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(Integer.parseInt(activityId));
+			String activityName = vipGroupActivity.getName();
+			if(vipGroupActivity.getActivityType().equals(0)) {
+				SysUser user = teacherDao.getUser(userId);
+				String username = StringUtils.isEmpty(user.getUsername()) ? user.getRealName() : user.getUsername();
+				Map<Integer, String> map = new HashMap<>(1);
+				map.put(userId, userId.toString());
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_STUDENT_BUY_ACTIVITY, map, null, 0, null, "STUDENT",
+						activityName);
 				//获取乐团主管
 				Map<Integer, String> eduMap = MapUtil.convertMybatisMap(studentRegistrationDao.queryStudentEduMap(userId));
 				if (CollectionUtils.isEmpty(eduMap)) {
@@ -692,9 +855,40 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 					}
 				}
 				if (!CollectionUtils.isEmpty(eduMap)) {
-					sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_SYSTEM_ACTIVITY_MEMBER,
+					sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_SYSTEM_ACTIVITY_COURSE,
 							eduMap, null, 0, null, "SYSTEM", username, activityName);
 				}
+				Student student = studentDao.get(userId);
+				if (Objects.nonNull(student) && student.getTeacherId() != null) {
+					Map<Integer, String> teacherMap = new HashMap<>(1);
+					teacherMap.put(student.getTeacherId(), student.getTeacherId().toString());
+					sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_TEACHER_ACTIVITY_COURSE,
+							teacherMap, null, 0, null, "TEACHER", username, activityName);
+				}
+			}else {
+				SysUser user = teacherDao.getUser(userId);
+				String username = StringUtils.isEmpty(user.getUsername()) ? user.getRealName() : user.getUsername();
+				Map<Integer, String> map = new HashMap<>(1);
+				map.put(userId, userId.toString());
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_STUDENT_BUY_MEMBER_ACTIVITY, map, null, 0, null, "STUDENT",
+						activityName);
+				if(!tenantConfigService.autoActivationFlag(user.getTenantId())){
+					//获取乐团主管
+					Map<Integer, String> eduMap = MapUtil.convertMybatisMap(studentRegistrationDao.queryStudentEduMap(userId));
+					if (CollectionUtils.isEmpty(eduMap)) {
+						Set<Integer> integers = employeePositionService.queryUserIdByRoleId(new SysUserRoleEnum[]{ORGAN_MANAGER}, studentPaymentOrder.getOrganId());
+						eduMap = new HashMap<>(integers.size());
+						if (!CollectionUtils.isEmpty(integers)) {
+							for (Integer integer : integers) {
+								eduMap.put(integer, integer.toString());
+							}
+						}
+					}
+					if (!CollectionUtils.isEmpty(eduMap)) {
+						sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PUSH_SYSTEM_ACTIVITY_MEMBER,
+								eduMap, null, 0, null, "SYSTEM", username, activityName);
+					}
+				}
 			}
 		}
 	}

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -87,6 +87,9 @@
             <if test="tenantId!=null">#{tenantId},</if>
         </trim>
     </insert>
+    <update id="addClassTimes">
+        UPDATE class_group SET total_class_times_ = total_class_times_ + #{num} where id_ = #{classGroupId}
+    </update>
 
     <delete id="deleteByGroup">
         DELETE FROM class_group WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleConvert.xml

@@ -49,7 +49,7 @@
         </foreach>
     </select>
     <select id="queryStudents" resultType="com.ym.mec.biz.dal.dto.BasicUserDto">
-        select cssp.user_id_ userId,su.username_ name,su.phone_ phone from course_schedule_student_payment cssp
+        select cssp.user_id_ userId,su.username_ name,su.phone_ phone,su.gender_ gender from course_schedule_student_payment cssp
         LEFT JOIN sys_user su ON su.id_ = cssp.user_id_
         where cssp.course_schedule_id_ IN
         <foreach collection="courseIdList" item="id" open="(" close=")" separator=",">

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/LuckDrawPrizeMapper.xml

@@ -86,7 +86,7 @@
 		(#{item.id,jdbcType=INTEGER}, #{item.name,jdbcType=VARCHAR},
 		#{item.chances,jdbcType=DOUBLE}, #{item.stock,jdbcType=INTEGER}, 
 		#{item.enabled,jdbcType=BIT},#{item.rewardType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		#{item.memo,jdbcType=VARCHAR}, #{item.groupId,jdbcType=INTEGER}, #{item.isDefault}, now(), now(),#{tenantId})
+		#{item.memo,jdbcType=VARCHAR}, #{item.groupId,jdbcType=INTEGER}, #{item.isDefault}, now(), now(),#{item.tenantId})
 		</foreach>
 	</insert>
 
@@ -189,7 +189,7 @@
 		SELECT su.username_,ldp.name_ prize_name_ FROM luck_draw_log ldl
 		LEFT JOIN sys_user su ON su.id_ = ldl.user_id_
 		LEFT JOIN luck_draw_prize ldp ON ldp.id_ = ldl.prize_id_
-		WHERE ldl.group_id_ = #{groupId} AND ldl.prize_id_ != 8
+		WHERE ldl.group_id_ = #{groupId} AND ldp.is_default_ = 0
 	</select>
 	<select id="findByGroupId" resultMap="BaseResultMap">
 		SELECT * FROM luck_draw_prize WHERE group_id_ = #{groupId}

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/MarketActivityMapper.xml

@@ -83,7 +83,7 @@
 	</resultMap>
     <select id="queryActivity" resultMap="ActivityDetailDto">
 		SELECT vga.id_,vga.name_,vga.description_,vga.market_price_,vgc.name_ category_name_,
-		vgc.id_ category_id_,vga.min_course_num_ course_num_,vga.start_time_,vga.end_time_
+		vgc.id_ category_id_,vga.min_course_num_ course_num_,vga.start_time_,vga.end_time_,vga.original_price_
 		FROM market_activity ma
 		LEFT JOIN vip_group_activity vga ON FIND_IN_SET(vga.id_,ma.activity_ids_)
 		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -277,6 +277,14 @@
             WHERE music_group_id_ = #{musicGroupId}
         )
     </delete>
+    <delete id="deleteByUserIdAndCalenderId">
+        DELETE
+        FROM music_group_payment_student_course_detail
+        WHERE user_id_ = #{userId} AND music_group_payment_calender_id_ IN
+        <foreach collection="calenderIds" open="(" close=")" item="id" separator=",">
+            #{id}
+        </foreach>
+    </delete>
 
     <resultMap id="StudentSubTotalCourseTimesDto" type="com.ym.mec.biz.dal.dto.StudentSubTotalCourseTimesDto">
         <result property="userId" column="user_id_"/>

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -992,9 +992,9 @@
         WHERE status_ = 'SUCCESS' AND music_group_id_ = #{vipGroupId}
         GROUP BY user_id_
     </select>
-    <select id="queryStudentDoubleEleven2021Order" resultType="java.lang.String">
+    <select id="queryStudentDoubleElevenOrder" resultType="java.lang.String">
         SELECT GROUP_CONCAT(activity_id_) FROM student_payment_order
-        WHERE type_ = 'DOUBLE_ELEVEN2021' AND status_ = 'SUCCESS' AND user_id_ = #{userId}
+        WHERE type_ = 'SMALL_CLASS_TO_BUY' AND group_type_ = 'ACTIVITY' AND memo_ = '2022双十一活动购买' AND status_ = 'SUCCESS' AND user_id_ = #{userId}
     </select>
     <select id="findByCalenderId" resultMap="StudentPaymentOrder">
         SELECT * FROM student_payment_order WHERE calender_id_ = #{calenderId} AND status_ = 'SUCCESS' AND user_id_ = #{userId}

+ 48 - 0
mec-biz/src/main/resources/config/mybatis/TempBuyDoubleElevenUserLog.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.TempBuyDoubleElevenUserLogDao">
+
+    <resultMap type="com.ym.mec.biz.dal.entity.TempBuyDoubleElevenUserLog" id="TempBuyDoubleElevenUserLog">
+        <result column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="order_id_" property="orderId"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="give_flag_" property="giveFlag"/>
+        <result column="create_time_" property="createTime"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="TempBuyDoubleElevenUserLog">
+        SELECT *
+        FROM temp_buy_double_eleven_user_log
+        WHERE id_ = #{id}
+    </select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="TempBuyDoubleElevenUserLog">
+        SELECT *
+        FROM temp_buy_double_eleven_user_log
+        ORDER BY id_
+    </select>
+    <select id="countGiveNum" resultType="java.lang.Integer">
+        select count(distinct user_id_)
+        from temp_buy_double_eleven_user_log where give_flag_ = 1
+        <if test="userId != null">
+            AND user_id_ = #{userId}
+        </if>
+    </select>
+    <select id="findByOrderId" resultMap="TempBuyDoubleElevenUserLog">
+        SELECT * FROM temp_buy_double_eleven_user_log where order_id_ = #{orderId} limit 1
+    </select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse" useGeneratedKeys="true"
+            keyColumn="id" keyProperty="id">
+        INSERT INTO temp_buy_double_eleven_user_log (user_id_,organ_id_,order_id_, give_flag_, create_time_)
+        VALUES (#{userId}, #{organId}, #{orderId}, #{giveFlag}, NOW())
+    </insert>
+</mapper>

+ 50 - 5
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -403,7 +403,17 @@
 				 LEFT JOIN activity_user_mapper aum ON spo.id_ = aum.payment_order_id_ AND spo.user_id_ = aum.user_id_
 				 LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
 		WHERE spo.type_ = 'DOUBLE_ELEVEN2021' AND spo.status_ = 'SUCCESS'
-		  AND spo.organ_id_ NOT IN (36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,2,27,22,24)
+		  AND spo.organ_id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
+		GROUP BY aum.activity_id_,aum.user_id_) c GROUP BY c.type_
+	</select>
+	<select id="count2022ActivityStatis" resultMap="DoubleEleven2021ActivityDto">
+		SELECT SUM(c.buy_amount_) buy_amount_,SUM(c.buy_num_) buy_num_,c.type_ FROM (
+		SELECT SUM(aum.actual_price_) buy_amount_,COUNT(DISTINCT aum.user_id_) buy_num_,vga.code_ type_
+		FROM student_payment_order spo
+				 LEFT JOIN activity_user_mapper aum ON spo.id_ = aum.payment_order_id_ AND spo.user_id_ = aum.user_id_
+				 LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
+		WHERE spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		  AND spo.organ_id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
 		GROUP BY aum.activity_id_,aum.user_id_) c GROUP BY c.type_
 	</select>
 	<resultMap id="DoubleEleven2021Dto" type="com.ym.mec.biz.dal.dto.DoubleEleven2021Dto">
@@ -415,11 +425,16 @@
 	<select id="countDoubleEleven2021Statis" resultMap="DoubleEleven2021Dto">
 		SELECT SUM(expect_amount_) total_buy_amount_,COUNT(DISTINCT user_id_) total_buy_num_ FROM student_payment_order
 		WHERE type_ = 'DOUBLE_ELEVEN2021' AND status_ = 'SUCCESS'
-		AND organ_id_ NOT IN (36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,2,27,22,24)
+		AND organ_id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
+	</select>
+	<select id="countDoubleEleven2022Statis" resultMap="DoubleEleven2021Dto">
+		SELECT SUM(spo.expect_amount_) total_buy_amount_,COUNT(DISTINCT spo.user_id_) total_buy_num_ FROM student_payment_order spo
+		WHERE spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		AND spo.organ_id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
 	</select>
 	<select id="countGiveMemberNum" resultType="java.lang.Integer">
 		SELECT COUNT(DISTINCT student_id_) FROM cloud_teacher_order WHERE remark_ = '双十一活动赠送会员'
-		AND organ_id_ NOT IN (36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,2,27,22,24)
+		AND organ_id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
 	</select>
 	<select id="countOrganGiveMemberNum" resultType="map">
 		SELECT organ_id_ 'key',COUNT(DISTINCT student_id_) 'value'
@@ -443,11 +458,35 @@
 		</foreach>
 		GROUP BY spo.organ_id_,aum.activity_id_,aum.user_id_)c GROUP BY c.organ_id_,c.type_
 	</select>
+	<select id="countOrgan2022ActivityStatis" resultMap="DoubleEleven2021ActivityDto">
+		SELECT SUM(c.buy_amount_) buy_amount_,SUM(c.buy_num_) buy_num_,c.type_,c.organ_id_ FROM (
+		SELECT SUM(aum.actual_price_) buy_amount_,COUNT(DISTINCT aum.user_id_) buy_num_,vga.code_ type_,spo.organ_id_
+		FROM student_payment_order spo
+		LEFT JOIN activity_user_mapper aum ON spo.id_ = aum.payment_order_id_ AND spo.user_id_ = aum.user_id_
+		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
+		WHERE spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		AND spo.organ_id_ IN
+		<foreach collection="organIdList" open="(" close=")" item="organId" separator=",">
+			#{organId}
+		</foreach>
+		GROUP BY spo.organ_id_,aum.activity_id_,aum.user_id_)c GROUP BY c.organ_id_,c.type_
+	</select>
 	<select id="countOrganDoubleEleven2021Statis" resultMap="DoubleEleven2021Dto">
 		SELECT SUM(spo.expect_amount_) total_buy_amount_,COUNT(DISTINCT spo.user_id_) total_buy_num_,o.name_ organ_name_,o.id_ organ_id_
 		FROM organization o
 		LEFT JOIN student_payment_order spo ON o.id_ = spo.organ_id_ AND spo.type_ = 'DOUBLE_ELEVEN2021' AND spo.status_ = 'SUCCESS'
-		WHERE o.id_ NOT IN (36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,2,27,22,24)
+		WHERE o.id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
+		<if test="organId != null">
+			AND o.id_ = #{organId}
+		</if>
+		GROUP BY o.id_
+	</select>
+	<select id="countOrganDoubleEleven2022Statis" resultMap="DoubleEleven2021Dto">
+		SELECT SUM(spo.expect_amount_) total_buy_amount_,COUNT(DISTINCT spo.user_id_) total_buy_num_,o.name_ organ_name_,o.id_ organ_id_
+		FROM organization o
+		LEFT JOIN student_payment_order spo ON o.id_ = spo.organ_id_
+		AND spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		WHERE o.id_ IN (10,11,12,13,14,19,21,23,26,28,34,1,7,9,17,20,37,40,6,3,57,58,8,15,16,4)
 		<if test="organId != null">
 			AND o.id_ = #{organId}
 		</if>
@@ -464,7 +503,13 @@
 		<result property="type" column="type_"/>
 	</resultMap>
 	<sql id="queryDoubleEleven2021OrderDetailSql">
-		WHERE spo.status_ = 'SUCCESS' AND spo.type_ = 'DOUBLE_ELEVEN2021' and spo.tenant_id_ = #{tenantId}
+		WHERE
+		<if test="year == '2021'">
+			spo.status_ = 'SUCCESS' AND spo.type_ = 'DOUBLE_ELEVEN2021' and spo.tenant_id_ = #{tenantId}
+		</if>
+		<if test="year == '2022'">
+			spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		</if>
 		<if test="search != null and search != ''">
 			AND su.id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR spo.order_no_ LIKE CONCAT('%',#{search},'%')
 		</if>

+ 36 - 30
mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java

@@ -6,26 +6,20 @@ import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
-import com.ym.mec.biz.dal.dto.ActivityPayParamDto;
-import com.ym.mec.biz.dal.dto.ActivityQueryDto;
-import com.ym.mec.biz.dal.dto.Cloud2022ActivityDto;
-import com.ym.mec.biz.dal.dto.ConditionDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ActivityDetailDto;
 import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
-import com.ym.mec.biz.service.MarketActivityService;
-import com.ym.mec.biz.service.SporadicChargeInfoService;
-import com.ym.mec.biz.service.SysUserService;
-import com.ym.mec.biz.service.VipGroupActivityService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -54,6 +48,29 @@ public class ActivityController extends BaseController {
     @Autowired
     private VipGroupCategoryDao vipGroupCategoryDao;
 
+    @ApiOperation("活动购买")
+    @PostMapping(value = "/buy")
+    @AuditLogAnnotation(operateName = "学生端活动购买")
+    public HttpResponseResult buy(@RequestBody ActivityPayParamDto activityPayParamDto) throws Exception {
+        SysUser user = sysUserService.getUser();
+        activityPayParamDto.setUserId(user.getId());
+        activityPayParamDto.setOrganId(user.getOrganId());
+        return vipGroupActivityService.buy(activityPayParamDto);
+    }
+
+    @ApiOperation("2022双十一活动购买")
+    @PostMapping(value = "/buyDoubleEleven")
+    @AuditLogAnnotation(operateName = "2022双十一活动购买")
+    public HttpResponseResult buyDoubleEleven(@RequestBody BuyDoubleEleven2022Dto buyDoubleEleven2022Dto) throws Exception {
+        if(StringUtils.isEmpty(buyDoubleEleven2022Dto.getActivityIdList())){
+            throw new BizException("请选择活动");
+        }
+        SysUser sysUser = sysUserService.getUser();
+        buyDoubleEleven2022Dto.setOrganId(sysUser.getOrganId());
+        buyDoubleEleven2022Dto.setUserId(sysUser.getId());
+        return vipGroupActivityService.buyDoubleEleven(buyDoubleEleven2022Dto);
+    }
+
     @ApiOperation(value = "分部双11活动信息")
     @GetMapping("/doubleEleven2020")
     public HttpResponseResult<List<SporadicChargeInfo>> doubleEleven2020(){
@@ -69,14 +86,16 @@ public class ActivityController extends BaseController {
     }
 
     @ApiOperation(value = "分部双11活动信息")
-    @RequestMapping("/doubleEleven2021")
-    public HttpResponseResult doubleEleven2021(){
+    @RequestMapping("/doubleEleven2022")
+    public HttpResponseResult doubleEleven2022(){
         SysUser sysUser = sysUserService.getUser();
-        Map<String,Object> resultMap = new HashMap<>(1);
-        List<ActivityDetailDto> activityDetailDtos = marketActivityService.queryActivity(2, sysUser.getOrganId());
+        Map<String,Object> resultMap = new HashMap<>(6);
+        List<ActivityDetailDto> activityDetailDtos = marketActivityService.queryActivity(4, sysUser.getOrganId());
         resultMap.put("activityDetailList",activityDetailDtos);
         resultMap.put("startTime",null);
         resultMap.put("endTime",null);
+        //是否是杭州分部
+        resultMap.put("HZFlag",sysUser.getOrganId().equals(4));
         if(activityDetailDtos != null && activityDetailDtos.size() > 0){
             ActivityDetailDto activityDetailDto = activityDetailDtos.get(0);
             resultMap.put("startTime",activityDetailDto.getStartTime());
@@ -85,16 +104,6 @@ public class ActivityController extends BaseController {
         return succeed(resultMap);
     }
 
-    @ApiOperation("活动购买")
-    @PostMapping(value = "/buy")
-    @AuditLogAnnotation(operateName = "活动购买")
-    public HttpResponseResult buy(@RequestBody ActivityPayParamDto activityPayParamDto) throws Exception {
-        SysUser user = sysUserService.getUser();
-        activityPayParamDto.setUserId(user.getId());
-        activityPayParamDto.setOrganId(user.getOrganId());
-        return vipGroupActivityService.buy(activityPayParamDto);
-    }
-
     @ApiOperation("获取2022云教练活动列表")
     @PostMapping(value = "/queryActivity")
     @AuditLogAnnotation(operateName = "获取2022云教练活动列表")
@@ -106,11 +115,11 @@ public class ActivityController extends BaseController {
     }
 
     @ApiOperation(value = "学员已购买的双十一活动信息")
-    @GetMapping("/queryStudentDoubleEleven2021Order")
-    public Object queryStudentDoubleEleven2021Order() {
+    @GetMapping("/queryStudentDoubleEleven2022Order")
+    public Object queryStudentDoubleEleven2022Order() {
         SysUser user = sysUserService.getUser();
-        List<ActivityDetailDto> activityDetailDtos = marketActivityService.queryActivity(2, user.getOrganId());
-        String activitys = studentPaymentOrderDao.queryStudentDoubleEleven2021Order(user.getId());
+        List<ActivityDetailDto> activityDetailDtos = marketActivityService.queryActivity(4, user.getOrganId());
+        String activitys = studentPaymentOrderDao.queryStudentDoubleElevenOrder(user.getId());
         List<Integer> activityList = new ArrayList<>();
         if(StringUtils.isNotEmpty(activitys)){
             for (ActivityDetailDto activityDetailDto : activityDetailDtos) {
@@ -129,9 +138,6 @@ public class ActivityController extends BaseController {
                             activityList.add(4);
                         }
                     }
-                    if(activityDetailDto.getCategoryName().equals("乐理课")){
-                        activityList.add(5);
-                    }
                 }
             }
             return succeed(StringUtils.join(activityList,","));

+ 120 - 16
mec-student/src/main/java/com/ym/mec/student/controller/LuckDrawController.java

@@ -1,14 +1,18 @@
 package com.ym.mec.student.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.entity.LuckDrawCount;
 import com.ym.mec.biz.dal.entity.LuckDrawLog;
 import com.ym.mec.biz.dal.page.LuckDrawQueryInfo;
 import com.ym.mec.biz.service.LuckDrawCountService;
 import com.ym.mec.biz.service.LuckDrawLogService;
 import com.ym.mec.biz.service.LuckDrawPrizeService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.string.ValueUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -18,6 +22,10 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
 @Api(tags = "抽奖")
 @RestController
 @RequestMapping(value = "luckDraw")
@@ -33,51 +41,147 @@ public class LuckDrawController extends BaseController {
 	private LuckDrawCountService luckDrawCountService;
 
 	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	private SysUserService sysUserService;
+
+	@Autowired
+	private SysConfigDao sysConfigDao;
 
 	@ApiOperation(value = "查询抽奖记录")
 	@GetMapping(value = "/list")
 	public Object list(LuckDrawQueryInfo queryInfo) {
+		SysUser user = sysUserService.getUser();
 		if(!queryInfo.getAllFlag()){
-			SysUser sysUser = sysUserFeignService.queryUserInfo();
-			queryInfo.setUserId(sysUser.getId());
+			queryInfo.setUserId(user.getId());
+		}
+		if(queryInfo.getGroupId().equals(3) && user.getOrganId().equals(4)){
+			queryInfo.setGroupId(4);
 		}
 		PageInfo<LuckDrawLog> pageInfo = luckDrawLogService.queryPage(queryInfo);
 		for (LuckDrawLog log : pageInfo.getRows()) {
 			log.getUser().setPhone(ValueUtil.fuzzyMobile(log.getUser().getPhone()));
 		}
+		if(queryInfo.getAllFlag() && pageInfo.getTotal() < 30){
+			String startTime = sysConfigDao.findConfigValue("start_time_of_1111");
+			String endTime = sysConfigDao.findConfigValue("end_time_of_1111");
+			if(DateUtil.contents(startTime,endTime,new Date())){
+				List<LuckDrawLog> log;
+				if(user.getOrganId().equals(4)){
+					log = JSONObject.parseArray(str, LuckDrawLog.class);
+				}else {
+					log = JSONObject.parseArray(str2, LuckDrawLog.class);
+				}
+				pageInfo.getRows().addAll(log);
+				pageInfo.setTotal(pageInfo.getTotal() + log.size());
+			}
+		}
 		return succeed(pageInfo);
 	}
 
 	@ApiOperation(value = "查询我的抽奖记录")
 	@GetMapping(value = "/myList")
 	public Object myList(LuckDrawQueryInfo queryInfo) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("用户信息获取失败");
+		SysUser user = sysUserService.getUser();
+		if(queryInfo.getGroupId().equals(3) && user.getOrganId().equals(4)){
+			queryInfo.setGroupId(4);
 		}
-		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setUserId(user.getId());
 		return succeed(luckDrawLogService.queryPage(queryInfo));
 	}
 
 	@ApiOperation(value = "抽奖")
 	@PostMapping(value = "/draw")
 	public Object draw(Integer groupId) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("用户信息获取失败");
+		SysUser user = sysUserService.getUser();
+		if(groupId.equals(3) && user.getOrganId().equals(4)){
+			groupId = 4;
 		}
-		return succeed(luckDrawPrizeService.draw((long) sysUser.getId(), groupId));
+		return succeed(luckDrawPrizeService.draw((long) user.getId(), groupId));
 	}
 
 	@ApiOperation(value = "查询个人抽奖机会")
 	@GetMapping(value = "/queryCount")
 	public Object queryCount(Integer groupId) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("用户信息获取失败");
+		SysUser user = sysUserService.getUser();
+		if(groupId.equals(3) && user.getOrganId().equals(4)){
+			groupId = 4;
+		}
+		LuckDrawCount luckDrawCount = luckDrawCountService.findByIdAndGroupId(user.getId(), groupId);
+		if(Objects.isNull(luckDrawCount)){
+			luckDrawCount = new LuckDrawCount();
+			luckDrawCount.setUserId(user.getId().longValue());
+			luckDrawCount.setAvailableCount(0);
 		}
-		return succeed(luckDrawCountService.findByIdAndGroupId(sysUser.getId(),groupId));
+		luckDrawCount.setHZFlag(user.getOrganId().equals(4));
+		return succeed(luckDrawCount);
 	}
 
+	private static String str = "[\n" +
+			"    {\"user\": {\"username\": \"陈昊然\"},\"luckDrawPrize\":{\"name\": \"瑞士双肩背带\"}},\n" +
+			"    {\"user\": {\"username\": \"王木槿\"},\"luckDrawPrize\":{\"name\": \"镀金号嘴\"}},\n" +
+			"    {\"user\": {\"username\": \"刘天钧\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"刘天宇\"},\"luckDrawPrize\":{\"name\": \"精美长笛包\"}},\n" +
+			"    {\"user\": {\"username\": \"刘润玉\"},\"luckDrawPrize\":{\"name\": \"瑞夫纳帽卡\"}},\n" +
+			"    {\"user\": {\"username\": \"李暮词\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}},\n" +
+			"    {\"user\": {\"username\": \"陈叶开\"},\"luckDrawPrize\":{\"name\": \"瑞士双肩背带\"}},\n" +
+			"    {\"user\": {\"username\": \"赵崇光\"},\"luckDrawPrize\":{\"name\": \"镀金号嘴\"}},\n" +
+			"    {\"user\": {\"username\": \"赵绮年\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"吴玉堂\"},\"luckDrawPrize\":{\"name\": \"瑞夫纳帽卡\"}},\n" +
+			"    {\"user\": {\"username\": \"吴勇师\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}},\n" +
+			"    {\"user\": {\"username\": \"陈康文\"},\"luckDrawPrize\":{\"name\": \"瑞士双肩背带\"}},\n" +
+			"    {\"user\": {\"username\": \"赵康健\"},\"luckDrawPrize\":{\"name\": \"镀金号嘴\"}},\n" +
+			"    {\"user\": {\"username\": \"赵高轩\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"赵玉书\"},\"luckDrawPrize\":{\"name\": \"瑞夫纳帽卡\"}},\n" +
+			"    {\"user\": {\"username\": \"赵叶欢\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}},\n" +
+			"    {\"user\": {\"username\": \"李高兴\"},\"luckDrawPrize\":{\"name\": \"瑞士双肩背带\"}},\n" +
+			"    {\"user\": {\"username\": \"吴文瑞\"},\"luckDrawPrize\":{\"name\": \"镀金号嘴\"}},\n" +
+			"    {\"user\": {\"username\": \"高勇\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"李艺彤\"},\"luckDrawPrize\":{\"name\": \"精美长笛包\"}},\n" +
+			"    {\"user\": {\"username\": \"邹辰悦\"},\"luckDrawPrize\":{\"name\": \"瑞夫纳帽卡\"}},\n" +
+			"    {\"user\": {\"username\": \"王笑笑\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}},\n" +
+			"    {\"user\": {\"username\": \"肖国庆\"},\"luckDrawPrize\":{\"name\": \"瑞士双肩背带\"}},\n" +
+			"    {\"user\": {\"username\": \"李红旗\"},\"luckDrawPrize\":{\"name\": \"镀金号嘴\"}},\n" +
+			"    {\"user\": {\"username\": \"王乐乐\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"孙朵朵\"},\"luckDrawPrize\":{\"name\": \"瑞夫纳帽卡\"}},\n" +
+			"    {\"user\": {\"username\": \"孙雨轩\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}},\n" +
+			"    {\"user\": {\"username\": \"孙文睿\"},\"luckDrawPrize\":{\"name\": \"瑞士双肩背带\"}},\n" +
+			"    {\"user\": {\"username\": \"高可心\"},\"luckDrawPrize\":{\"name\": \"镀金号嘴\"}},\n" +
+			"    {\"user\": {\"username\": \"高可云\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"王胜利\"},\"luckDrawPrize\":{\"name\": \"瑞夫纳帽卡\"}},\n" +
+			"    {\"user\": {\"username\": \"李木子\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}}\n" +
+			"]";
+	private static String str2 = "[\n" +
+			"    {\"user\": {\"username\": \"陈昊然\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"王木槿\"},\"luckDrawPrize\":{\"name\": \"宇航员蓝牙音箱\"}},\n" +
+			"    {\"user\": {\"username\": \"刘天钧\"},\"luckDrawPrize\":{\"name\": \"喜马拉雅会员\"}},\n" +
+			"    {\"user\": {\"username\": \"刘天宇\"},\"luckDrawPrize\":{\"name\": \"喜马拉雅会员\"}},\n" +
+			"    {\"user\": {\"username\": \"刘润玉\"},\"luckDrawPrize\":{\"name\": \"有道词典笔\"}},\n" +
+			"    {\"user\": {\"username\": \"李暮词\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"陈叶开\"},\"luckDrawPrize\":{\"name\": \"百科全书\"}},\n" +
+			"    {\"user\": {\"username\": \"赵崇光\"},\"luckDrawPrize\":{\"name\": \"百科全书\"}},\n" +
+			"    {\"user\": {\"username\": \"赵绮年\"},\"luckDrawPrize\":{\"name\": \"小度G1\"}},\n" +
+			"    {\"user\": {\"username\": \"吴玉堂\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"吴勇师\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"陈康文\"},\"luckDrawPrize\":{\"name\": \"喜马拉雅会员\"}},\n" +
+			"    {\"user\": {\"username\": \"赵康健\"},\"luckDrawPrize\":{\"name\": \"百科全书\"}},\n" +
+			"    {\"user\": {\"username\": \"赵高轩\"},\"luckDrawPrize\":{\"name\": \"小度G1\"}},\n" +
+			"    {\"user\": {\"username\": \"赵玉书\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"赵叶欢\"},\"luckDrawPrize\":{\"name\": \"弯得林优选笛头\"}},\n" +
+			"    {\"user\": {\"username\": \"李高兴\"},\"luckDrawPrize\":{\"name\": \"喜马拉雅会员\"}},\n" +
+			"    {\"user\": {\"username\": \"吴文瑞\"},\"luckDrawPrize\":{\"name\": \"喜马拉雅会员\"}},\n" +
+			"    {\"user\": {\"username\": \"高勇\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"李艺彤\"},\"luckDrawPrize\":{\"name\": \"宇航员蓝牙音箱\"}},\n" +
+			"    {\"user\": {\"username\": \"邹辰悦\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"王笑笑\"},\"luckDrawPrize\":{\"name\": \"20节vip小课\"}},\n" +
+			"    {\"user\": {\"username\": \"肖国庆\"},\"luckDrawPrize\":{\"name\": \"有道词典笔\"}},\n" +
+			"    {\"user\": {\"username\": \"李红旗\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"王乐乐\"},\"luckDrawPrize\":{\"name\": \"乐器清洁套装\"}},\n" +
+			"    {\"user\": {\"username\": \"孙朵朵\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"孙雨轩\"},\"luckDrawPrize\":{\"name\": \"百科全书\"}},\n" +
+			"    {\"user\": {\"username\": \"孙文睿\"},\"luckDrawPrize\":{\"name\": \"宇航员蓝牙音箱\"}},\n" +
+			"    {\"user\": {\"username\": \"高可心\"},\"luckDrawPrize\":{\"name\": \"SoonyAngle盲盒\"}},\n" +
+			"    {\"user\": {\"username\": \"高可云\"},\"luckDrawPrize\":{\"name\": \"宇航员蓝牙音箱\"}},\n" +
+			"    {\"user\": {\"username\": \"王胜利\"},\"luckDrawPrize\":{\"name\": \"有道词典笔\"}},\n" +
+			"    {\"user\": {\"username\": \"李木子\"},\"luckDrawPrize\":{\"name\": \"百科全书\"}}\n" +
+			"]";
+
 }

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

@@ -233,9 +233,6 @@ public class PracticeGroupController extends BaseController {
     @PostMapping(value = "/buyActivity")
     @AuditLogAnnotation(operateName = "营销活动购买")
     public HttpResponseResult buyActivity(@RequestBody PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception {
-//        if(CollectionUtils.isNotEmpty(practiceGroupBuyParams.getCouponIdList())){
-//            throw new BizException("当前活动不支持优惠券");
-//        }
         SysUser sysUser = sysUserService.getUser();
         practiceGroupBuyParams.setUserId(sysUser.getId());
         practiceGroupBuyParams.setOrganId(sysUser.getOrganId());
@@ -245,7 +242,7 @@ public class PracticeGroupController extends BaseController {
     @ApiOperation("是否可以购买活动")
     @GetMapping(value = "/checkActivity")
     public HttpResponseResult checkActivity(){
-        practiceGroupService.checkActivity();
+        practiceGroupService.checkActivity("2022_cloud_activity_config");
         return succeed();
     }
 

+ 27 - 33
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,6 +1,7 @@
 package com.ym.mec.student.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
@@ -104,6 +105,8 @@ public class StudentOrderController extends BaseController {
     private OrganizationService organizationService;
     @Autowired
     private VipGroupCategoryDao vipGroupCategoryDao;
+    @Autowired
+    private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -316,12 +319,36 @@ public class StudentOrderController extends BaseController {
         } else if (orderByOrderNo.getGroupType().equals(GroupType.ACTIVITY)) {
             List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.getDao().queryByIds(orderByOrderNo.getActivityId());
             if(CollectionUtils.isNotEmpty(vipGroupActivities)){
+                String activeConfig = sysConfigDao.findConfigValue("2022_double_eleven_give_config");
+                String giveStartTime = sysConfigDao.findConfigValue("2021_double_eleven_give_member_start_time");
+                String giveEndTime = sysConfigDao.findConfigValue("2021_double_eleven_give_member_end_time");
                 Map<String, String> categoryMap = vipGroupCategoryDao.findConditionCategorys().stream().collect(Collectors.toMap(e-> e.getId().toString(), ConditionDto::getName));
+                Integer drawTimes = 0;
                 for (VipGroupActivity vipGroupActivity : vipGroupActivities) {
                     vipGroupActivity.setVipGroupCategoryNames(categoryMap.get(vipGroupActivity.getVipGroupCategoryIdList()));
                     vipGroupActivity.setGiveCategoryName(categoryMap.get(vipGroupActivity.getGiveCategoryId()));
                     vipGroupActivityService.setActivityType(vipGroupActivity);
+                    if(orderByOrderNo.getOrganId().equals(4)){
+                        if(!DateUtil.contents(giveStartTime,giveEndTime,orderByOrderNo.getPayTime() == null?orderByOrderNo.getCreateTime():orderByOrderNo.getPayTime())){
+                            continue;
+                        }
+                    }
+                    List<SysConfigJsonDto> cloud2022ActivityDtos = JSONArray.parseArray(activeConfig, SysConfigJsonDto.class);
+                    List<SysConfigJsonDto> activityDtos = cloud2022ActivityDtos.stream().
+                            filter(e -> Arrays.stream(e.getKey().split(",")).collect(Collectors.toList()).
+                                    contains(vipGroupActivity.getId().toString())).collect(Collectors.toList());
+                    if(CollectionUtils.isNotEmpty(activityDtos)){
+                        SysConfigJsonDto jsonDto = activityDtos.get(0);
+                        drawTimes += Integer.parseInt(jsonDto.getValue());
+                    }
+                }
+                TempBuyDoubleElevenUserLog doubleElevenUserLog = tempBuyDoubleElevenUserLogDao.findByOrderId(orderByOrderNo.getId());
+                if(Objects.nonNull(doubleElevenUserLog) && doubleElevenUserLog.isGiveFlag()){
+                    VipGroupActivity vipGroupActivity = new VipGroupActivity();
+                    vipGroupActivity.setName("乐器清洁保养服务1次");
+                    vipGroupActivities.add(vipGroupActivity);
                 }
+                orderDetail.put("drawTimes",drawTimes);
             }
             orderDetail.put("detail", vipGroupActivities);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.MEMBER)) {
@@ -635,11 +662,6 @@ public class StudentOrderController extends BaseController {
         Date nowDate = new Date();
         Integer tenantId = TenantContextHolder.getTenantId();
         List<Organization> organs = organizationDao.findAllOrgans(tenantId);
-        //除去禁止的体验人数
-//        List<Practice4OrganDto> organTryNums = courseScheduleEvaluateDao.getTryNums();
-//        List<Practice4OrganDto> organPracticeTryNums = courseScheduleEvaluateDao.getPracticeTryNums();
-//        List<Practice4OrganDto> organVipTryNums = courseScheduleEvaluateDao.getVipTryNums();
-//        List<Practice4OrganDto> organPracticeAndVipTryNums = courseScheduleEvaluateDao.getPracticeAndVipTryNums();
         List<Practice4OrganDto> allTryNums = courseScheduleEvaluateDao.getAllTryNums(tenantId);
 
         List<Practice4OrganDto> practiceBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(nowDate, null, tenantId);
@@ -673,34 +695,6 @@ public class StudentOrderController extends BaseController {
             Practice4OrganDto practice4OrganDto = new Practice4OrganDto();
             practice4OrganDto.setOrganName(organ.getName());
             practice4OrganDto.setOrganId(organ.getId());
-            //体验人数(除去禁止)
-//            for (Practice4OrganDto organTryNum : organTryNums) {
-//                if (organ.getId().equals(organTryNum.getOrganId())) {
-//                    practice4OrganDto.setTryNum(practice4OrganDto.getTryNum() + organTryNum.getTryNum());
-//                    break;
-//                }
-//            }
-//            //网管课体验人数(禁止)
-//            for (Practice4OrganDto organPracticeTryNum : organPracticeTryNums) {
-//                if (organ.getId().equals(organPracticeTryNum.getOrganId())) {
-//                    practice4OrganDto.setTryNum(practice4OrganDto.getTryNum() + organPracticeTryNum.getTryNum());
-//                    break;
-//                }
-//            }
-//            //vip课体验人数(禁止)
-//            for (Practice4OrganDto organVipTryNum : organVipTryNums) {
-//                if (organ.getId().equals(organVipTryNum.getOrganId())) {
-//                    practice4OrganDto.setTryNum(practice4OrganDto.getTryNum() + organVipTryNum.getTryNum());
-//                    break;
-//                }
-//            }
-//            //减去vip中在网管课的人数
-//            for (Practice4OrganDto organPracticeAndVipTryNum : organPracticeAndVipTryNums) {
-//                if (organ.getId().equals(organPracticeAndVipTryNum.getOrganId())) {
-//                    practice4OrganDto.setTryNum(practice4OrganDto.getTryNum() - organPracticeAndVipTryNum.getTryNum());
-//                    break;
-//                }
-//            }
 
             for (Practice4OrganDto allTryNum : allTryNums) {
                 if (organ.getId().equals(allTryNum.getOrganId())) {

+ 20 - 8
mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java

@@ -1159,6 +1159,16 @@ public class DateUtil {
 		return false;
 	}
 
+
+	public static boolean contents(String startTimeStr, String endTimeStr, Date now) {
+		Date startTime = DateUtil.stringToDate(startTimeStr, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+		Date endTime = DateUtil.stringToDate(endTimeStr, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+		if(startTime.compareTo(now) <= 0 && endTime.compareTo(now) >= 0){
+			return true;
+		}
+		return false;
+	}
+
 	/**
 	 * @describe 时间区段辅助类
 	 * @author Joburgess
@@ -1305,14 +1315,16 @@ public class DateUtil {
 
 	public static void main(String[] args) throws ParseException {
 		// DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-		DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//		DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 //		 System.out.println(daysBetween(df.parse("2017-07-20 10:07:42"), df.parse(df.format(new Date()))));
-		System.out.println(getWeekMondayWithDate(new Date()));
-		System.out.println(getNextWeekMonday(new Date()));
-		System.out.println(getNextWeekSunday(new Date()));
-		System.out.println(dayEnd(new Date()));
-		System.out.println(format(getLastDayOfMonth(new Date()),CHINESE_DATA_FORMAT));
-		System.out.println(monthsBetween(df1.parse("2020-01-18 12:00:00"),df1.parse("2020-04-19 12:00:00")));
-		System.out.println(getNextWeekMonday(new Date()));
+//		System.out.println(getWeekMondayWithDate(new Date()));
+//		System.out.println(getNextWeekMonday(new Date()));
+//		System.out.println(getNextWeekSunday(new Date()));
+//		System.out.println(dayEnd(new Date()));
+//		System.out.println(format(getLastDayOfMonth(new Date()),CHINESE_DATA_FORMAT));
+//		System.out.println(monthsBetween(df1.parse("2020-01-18 12:00:00"),df1.parse("2020-04-19 12:00:00")));
+//		System.out.println(getNextWeekMonday(new Date()));
+
+		contents("2022-10-25 10:11:11","2022-10-25 11:11:11",new Date());
 	}
 }

+ 2 - 1
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -37,7 +37,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/replacementInstrumentActivity/queryReplacementsStat", "/eduStudentRegistration/queryPreApplyList",
                         "/eduSubject/findSubSubjects", "/eduFinancialExpenditure/batchAdd", "/eduSendNotice/*",
                         "/oaContracts/*", "/eduStudent/organStudentOverView", "/activity/countCloudTeacherActive",
-                        "/activity/organDoubleEleven2021Statis", "/activity/doubleEleven2021Statis", "/questionnaireTopic/getDetail", "/questionnaireUserResult/add",
+                        "/activity/organDoubleEleven2021Statis", "/activity/doubleEleven2021Statis", "/activity/organDoubleEleven2022Statis", "/activity/doubleEleven2022Statis",
+                        "/questionnaireTopic/getDetail", "/questionnaireUserResult/add",
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
                         "/eduOrganization/queryAllOrgan","/eduOrganization/getOrganCooperation","/import/oaUploadFile",

+ 36 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -548,6 +548,42 @@ public class ExportController extends BaseController {
         }
     }
 
+    @ApiOperation(value = "分部2022双11活动统计导出")
+    @RequestMapping("export/organDoubleEleven2022Statis")
+    @PreAuthorize("@pcs.hasPermissions('export/organDoubleEleven2022Statis')")
+    public void organDoubleEleven2022Statis(HttpServletResponse response, OrganDoubleEleven2021StatisDto statisDto) throws IOException {
+        List<DoubleEleven2021Dto> rows = vipGroupActivityService.organDoubleEleven2022Statis(statisDto);
+        if (rows.size() < 1) {
+            throw new BizException("没有可导出数据");
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "总成交金额", "总购买人数", "人均购买金额",
+                    "20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数",
+                    "40节1v2成交金额", "40节1v2成交人数"}, new String[]{
+                    "organName", "totalBuyAmount", "totalBuyNum", "avgBuyAmount", "vip1V120Amount", "vip1V120Num", "vip1V140Amount",
+                    "vip1V140Num", "vip1V220Amount", "vip1V220Num", "vip1V240Amount"
+                    , "vip1V240Num"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
+
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
     @ApiOperation(value = "学生个人账户余额导出")
     @PostMapping("export/userCashAccountDetail")
     @PreAuthorize("@pcs.hasPermissions('export/userCashAccountDetail')")

+ 13 - 4
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java

@@ -1,6 +1,5 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
@@ -19,7 +18,6 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
@@ -28,8 +26,6 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -60,6 +56,13 @@ public class VipGroupActivityController extends BaseController {
         return succeed(vipGroupActivityService.organDoubleEleven2021Statis(queryInfo));
     }
 
+    @ApiOperation(value = "分部双11活动统计")
+    @GetMapping("/organDoubleEleven2022Statis")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/organDoubleEleven2022Statis')")
+    public HttpResponseResult organDoubleEleven2022Statis(OrganDoubleEleven2021StatisDto queryInfo){
+        return succeed(vipGroupActivityService.organDoubleEleven2022Statis(queryInfo));
+    }
+
     @ApiOperation(value = "分部2021双11活动学员列表")
     @GetMapping("/doubleEleven2021OrderDetail")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/doubleEleven2021OrderDetail')")
@@ -73,6 +76,12 @@ public class VipGroupActivityController extends BaseController {
     public HttpResponseResult doubleEleven2021Statis(){
         return succeed(vipGroupActivityService.doubleEleven2021Statis());
     }
+    @ApiOperation(value = "双11活动统计")
+    @GetMapping("/doubleEleven2022Statis")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/doubleEleven2022Statis')")
+    public HttpResponseResult doubleEleven2022Statis(){
+        return succeed(vipGroupActivityService.doubleEleven2022Statis());
+    }
 
     @ApiOperation(value = "新增vip课活动方案")
     @PostMapping("/addVipGroupActivity")

+ 29 - 38
mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java

@@ -3,22 +3,31 @@ package com.ym.mec.web.controller.education;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.dal.page.ActivityStudentQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -42,49 +51,23 @@ public class ActivityController extends BaseController {
     @Autowired
     private VipGroupActivityService vipGroupActivityService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private EmployeeDao employeeDao;
-    @Autowired
-    private TeacherDao teacherDao;
-    @Autowired
-    private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
-    @Autowired
-    private VipGroupService vipGroupService;
-    @Autowired
-    private PracticeGroupService practiceGroupService;
 
     @ApiOperation(value = "获取待排课的活动方案列表")
     @RequestMapping("/queryWaitCourseActivity")
     public Object queryWaitCourseActivity(String organId){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        Employee employee = employeeDao.get(sysUser.getId());
-        if (organId == null) {
-            organId = employee.getOrganIdList();
-        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-            return failed("用户所在分部异常");
-        }else {
-            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-            if(!list.containsAll(Arrays.asList(organId.split(",")))){
-                return failed("非法请求");
-            }
-        }
+        organId = organizationService.getEmployeeOrgan(organId);
         return succeed(vipGroupActivityService.queryWaitCourseActivity(null,organId));
     }
 
     @ApiOperation(value = "获取活动待排课学员数量")
     @RequestMapping("/getActivityWaitCourseStudentNum")
     public Object getActivityWaitCourseStudentNum(Integer activityId){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("用户信息获取失败");
-        }
         ActivityWaitCourseStudentNumDto courseStudentNum = vipGroupActivityService.getActivityWaitCourseStudentNum(null, activityId);
         VipGroupActivity vipGroupActivity = courseStudentNum.getVipGroupActivity();
-        Employee employee = employeeDao.get(sysUser.getId());
+        Employee employee = employeeDao.get(sysUserService.getUserId());
         List<Integer> activityOrgans = Arrays.stream(vipGroupActivity.getOrganId().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
         if(StringUtils.isEmpty(employee.getOrganIdList())){
             courseStudentNum.setEmployeeAndActivityOrganIds(StringUtils.join(activityOrgans,","));
@@ -99,14 +82,22 @@ public class ActivityController extends BaseController {
     @ApiOperation(value = "获取活动学员课排课次数")
     @RequestMapping("/getActivityStudentCanCourseNum")
     public Object getActivityStudentCanCourseNum(ActivityStudentQueryInfo queryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("用户信息获取失败");
-        }
         return succeed(vipGroupActivityService.getActivityStudentCanCourseNum(queryInfo));
     }
 
     @ApiOperation(value = "分部双11活动统计")
+    @GetMapping("/organDoubleEleven2022Statis")
+    public HttpResponseResult organDoubleEleven2022Statis(OrganDoubleEleven2021StatisDto queryInfo){
+        return succeed(vipGroupActivityService.organDoubleEleven2022Statis(queryInfo));
+    }
+
+    @ApiOperation(value = "双11活动统计")
+    @GetMapping("/doubleEleven2022Statis")
+    public HttpResponseResult doubleEleven2022Statis(){
+        return succeed(vipGroupActivityService.doubleEleven2022Statis());
+    }
+
+    @ApiOperation(value = "分部双11活动统计")
     @GetMapping("/organDoubleEleven2021Statis")
     public HttpResponseResult organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto queryInfo){
         return succeed(vipGroupActivityService.organDoubleEleven2021Statis(queryInfo));