Selaa lähdekoodia

Merge branch 'online1' of http://git.dayaedu.com/yonge/mec into mec_update_2021-11-02

 Conflicts:
	mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityUserMapperDao.java
	mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
	mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
	mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
zouxuan 3 vuotta sitten
vanhempi
commit
b8ba075397
58 muutettua tiedostoa jossa 2109 lisäystä ja 229 poistoa
  1. 21 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityUserMapperDao.java
  2. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LuckDrawCountDao.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LuckDrawPrizeDao.java
  4. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MarketActivityDao.java
  5. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  6. 72 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java
  7. 95 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2021Dto.java
  8. 52 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DoubleEleven2021ActivityDto.java
  9. 185 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DoubleEleven2021Dto.java
  10. 87 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DoubleEleven2021OrderDetailDto.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HorseRaceLampDto.java
  12. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java
  13. 106 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityDetailDto.java
  14. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LuckDrawCount.java
  15. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  16. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentRouteOrder.java
  17. 22 18
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  18. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java
  19. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  20. 64 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/DoubleEleven2021QueryInfo.java
  21. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/LuckDrawQueryInfo.java
  22. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ActivityUserMapperService.java
  23. 21 1
      mec-biz/src/main/java/com/ym/mec/biz/service/LuckDrawCountService.java
  24. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/service/LuckDrawPrizeService.java
  25. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MarketActivityService.java
  26. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  27. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  28. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java
  29. 17 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  30. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawCountServiceImpl.java
  31. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawPrizeServiceImpl.java
  32. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MarketActivityServiceImpl.java
  33. 15 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  34. 344 59
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  35. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  36. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  37. 16 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  38. 197 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  39. 4 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  40. 19 3
      mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml
  41. 15 5
      mec-biz/src/main/resources/config/mybatis/LuckDrawCountMapper.xml
  42. 43 37
      mec-biz/src/main/resources/config/mybatis/LuckDrawLogMapper.xml
  43. 6 0
      mec-biz/src/main/resources/config/mybatis/LuckDrawPrizeMapper.xml
  44. 20 0
      mec-biz/src/main/resources/config/mybatis/MarketActivityMapper.xml
  45. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupSubjectGoodsGroupMapper.xml
  46. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  47. 11 7
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  48. 1 0
      mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml
  49. 124 3
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  50. 117 5
      mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java
  51. 19 18
      mec-student/src/main/java/com/ym/mec/student/controller/LuckDrawController.java
  52. 8 4
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  53. 2 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  54. 123 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  55. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/LuckDrawController.java
  56. 23 0
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java
  57. 4 4
      mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java
  58. 13 9
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduSchoolController.java

+ 21 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityUserMapperDao.java

@@ -58,14 +58,31 @@ public interface ActivityUserMapperDao extends BaseDAO<Integer, ActivityUserMapp
             @Param("groupId") Long groupId);
 
     /**
+    * @description: 批量新增
+     * @param activityUserMappers
+    * @return void
+    * @author zx
+    * @date 2021/10/20 13:38
+    */
+    void batchInsert(@Param("activityUserMappers") List<ActivityUserMapper> activityUserMappers);
+
+    /**
      * @description:
      * @param groupId
-     * @param groupType
-     * @return com.ym.mec.biz.dal.entity.ActivityUserMapper
-     * @author zx
-     * @date 2021/10/22 17:36
+ * @param groupType
+    * @return com.ym.mec.biz.dal.entity.ActivityUserMapper
      */
     ActivityUserMapper findVipUserMapper(@Param("groupId") Long groupId,
                                          @Param("groupType") String groupType,
                                          @Param("studentId") Integer studentId);
+
+    /**
+     * @description: 修改指导老师
+     * @param userId
+     * @param teacherId
+     * @return void
+     * @author zx
+     * @date 2021/11/1 16:21
+     */
+    void updateTeacherId(@Param("userId") Integer userId, @Param("teacherId") Integer teacherId);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LuckDrawCountDao.java

@@ -2,8 +2,13 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.LuckDrawCount;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 public interface LuckDrawCountDao extends BaseDAO<Long, LuckDrawCount> {
 
 	public LuckDrawCount getLock(Long userId);
+
+	LuckDrawCount findByIdAndGroupId(@Param("userId") Integer userId, @Param("groupId") int groupId);
+
+	LuckDrawCount findLockByIdAndGroupId(@Param("userId") Integer userId, @Param("groupId") int groupId);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LuckDrawPrizeDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import java.util.List;
 
+import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.entity.LuckDrawPrize;
 import com.ym.mec.common.dal.BaseDAO;
 
@@ -34,4 +35,13 @@ public interface LuckDrawPrizeDao extends BaseDAO<Integer, LuckDrawPrize> {
 	 * @return
 	 */
 	List<LuckDrawPrize> queryDefaultPrize(int group);
+
+	/**
+	* @description: 获取双十一活动跑马灯
+	 * @param groupId
+	* @return java.util.List<com.ym.mec.biz.dal.dto.HorseRaceLampDto>
+	* @author zx
+	* @date 2021/10/19 15:35
+	*/
+    List<HorseRaceLampDto> queryHorseRaceLampDto(int groupId);
 }

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

@@ -1,9 +1,21 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.entity.ActivityDetailDto;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.MarketActivity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface MarketActivityDao extends BaseDAO<Integer, MarketActivity> {
 
-	
+
+    /**
+    * @description: 根据营销活动编号,获取活动详情列表
+     * @param marketPriceId
+    * @return java.util.List<com.ym.mec.biz.dal.entity.ActivityDetailDto>
+    * @author zx
+    * @date 2021/10/19 15:50
+    */
+    List<ActivityDetailDto> queryActivity(@Param("marketPriceId") Integer marketPriceId, @Param("organId") Integer organId);
 }

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

@@ -465,4 +465,13 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     * @date 2021/10/20 18:56
     */
     List<Map<Integer, BigDecimal>> queryStudentCourseAmountMap(Long vipGroupId);
+
+    /**
+    * @description: 获取学员购买的双十一活动信息
+     * @param userId
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/27 10:27
+    */
+    String queryStudentDoubleEleven2021Order(Integer userId);
 }

+ 72 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java

@@ -1,9 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.dto.ActivityQueryDto;
-import com.ym.mec.biz.dal.dto.ActivityWaitCourseStudentNumDto;
-import com.ym.mec.biz.dal.dto.ExportVipGroupActivityDto;
-import com.ym.mec.biz.dal.dto.WaitCourseActivityDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -67,4 +64,75 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
     */
 	List<ActivityWaitCourseStudentNumDto> getActivityStudentCanCourseNum(@Param("userId") Integer userId, @Param("activityId") Integer activityId);
 
+	/**
+	* @description: 双十一活动统计
+	 * @param
+	* @return java.util.List<com.ym.mec.biz.dal.dto.DoubleEleven2021ActivityDto>
+	* @author zx
+	* @date 2021/10/25 13:46
+	*/
+    List<DoubleEleven2021ActivityDto> countActivityStatis();
+
+	/**
+	* @description: 双十一活动统计
+	 * @param
+	* @return java.util.List<com.ym.mec.biz.dal.dto.DoubleEleven2021ActivityDto>
+	* @author zx
+	* @date 2021/10/25 13:46
+	*/
+    List<DoubleEleven2021ActivityDto> countOrganActivityStatis(@Param("organIdList") List<Integer> organIdList);
+
+    /**
+    * @description: 双十一活动统计
+     * @param
+    * @return com.ym.mec.biz.dal.dto.DoubleEleven2021Dto
+    * @author zx
+    * @date 2021/10/25 15:44
+    */
+	DoubleEleven2021Dto countDoubleEleven2021Statis();
+
+    /**
+    * @description: 双十一活动统计
+     * @param
+    * @return com.ym.mec.biz.dal.dto.DoubleEleven2021Dto
+    * @author zx
+    * @date 2021/10/25 15:44
+    */
+	List<DoubleEleven2021Dto> countOrganDoubleEleven2021Statis(@Param("organId") Integer organId);
+
+	/**
+	* @description: 双十一活动统计
+	 * @param
+	* @return int
+	* @author zx
+	* @date 2021/10/25 15:54
+	*/
+	Integer countGiveMemberNum();
+
+	/**
+	* @description: 双十一活动统计
+	 * @param
+	* @return int
+	* @author zx
+	* @date 2021/10/25 15:54
+	*/
+	List<Map<Long,Long>> countOrganGiveMemberNum(@Param("organIdList") List<Integer> organIdList);
+
+	/**
+	* @description: 双十一活动统计学员列表
+	 * @param params
+	* @return java.util.List<com.ym.mec.biz.dal.dto.DoubleEleven2021OrderDetailDto>
+	* @author zx
+	* @date 2021/10/27 13:31
+	*/
+    List<DoubleEleven2021OrderDetailDto> queryDoubleEleven2021OrderDetail(Map<String, Object> params);
+
+    /**
+    * @description: 双十一活动统计学员列表
+     * @param params
+    * @return int
+    * @author zx
+    * @date 2021/10/27 13:32
+    */
+	int countDoubleEleven2021OrderDetail(Map<String, Object> params);
 }

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

@@ -0,0 +1,95 @@
+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;
+    }
+}

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DoubleEleven2021ActivityDto.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class DoubleEleven2021ActivityDto {
+
+    @ApiModelProperty(value = "成交额",required = false)
+    private BigDecimal buyAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "总购买数",required = false)
+    private int buyNum = 0;
+
+    @ApiModelProperty(value = "购买的活动类型1、1v1 20节,2、1v1 40节,3、1v2 20节,4、1v2 40节,5、乐理课",required = false)
+    private Integer type;
+
+    private Integer organId;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public BigDecimal getBuyAmount() {
+        return buyAmount;
+    }
+
+    public void setBuyAmount(BigDecimal buyAmount) {
+        this.buyAmount = buyAmount;
+    }
+
+    public int getBuyNum() {
+        return buyNum;
+    }
+
+    public void setBuyNum(int buyNum) {
+        this.buyNum = buyNum;
+    }
+}

+ 185 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DoubleEleven2021Dto.java

@@ -0,0 +1,185 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public class DoubleEleven2021Dto {
+
+    private Integer organId;
+
+    @ApiModelProperty(value = "分部",required = false)
+    private String organName;
+
+    @ApiModelProperty(value = "总成交额",required = false)
+    private BigDecimal totalBuyAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "总购买数",required = false)
+    private Integer totalBuyNum = 0;
+
+    @ApiModelProperty(value = "人均购买金额",required = false)
+    private BigDecimal avgBuyAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "赠送会员人数",required = false)
+    private Long giveMemberNum = 0l;
+
+    @ApiModelProperty(value = "1v1 20节课购买金额",required = false)
+    private BigDecimal vip1V120Amount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "1v1 20节课购买人数",required = false)
+    private int vip1V120Num = 0;
+
+    @ApiModelProperty(value = "1v1 40节课购买金额",required = false)
+    private BigDecimal vip1V140Amount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "1v1 40节课购买人数",required = false)
+    private Integer vip1V140Num = 0;
+
+    @ApiModelProperty(value = "1v2 20节课购买金额",required = false)
+    private BigDecimal vip1V220Amount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "1v2 20节课购买人数",required = false)
+    private Integer vip1V220Num = 0;
+
+    @ApiModelProperty(value = "1v2 40节课购买金额",required = false)
+    private BigDecimal vip1V240Amount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "1v2 40节课购买人数",required = false)
+    private Integer vip1V240Num = 0;
+
+    @ApiModelProperty(value = "乐理课购买金额",required = false)
+    private BigDecimal musicTheoryAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "乐理课购买人数",required = false)
+    private Integer musicTheoryNum = 0;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public BigDecimal getTotalBuyAmount() {
+        return totalBuyAmount;
+    }
+
+    public void setTotalBuyAmount(BigDecimal totalBuyAmount) {
+        this.totalBuyAmount = totalBuyAmount;
+    }
+
+    public Integer getTotalBuyNum() {
+        return totalBuyNum;
+    }
+
+    public void setTotalBuyNum(Integer totalBuyNum) {
+        this.totalBuyNum = totalBuyNum;
+    }
+
+    public BigDecimal getAvgBuyAmount() {
+        return avgBuyAmount;
+    }
+
+    public void setAvgBuyAmount(BigDecimal avgBuyAmount) {
+        this.avgBuyAmount = avgBuyAmount;
+    }
+
+    public Long getGiveMemberNum() {
+        return giveMemberNum;
+    }
+
+    public void setGiveMemberNum(Long giveMemberNum) {
+        this.giveMemberNum = giveMemberNum;
+    }
+
+    public BigDecimal getVip1V120Amount() {
+        return vip1V120Amount;
+    }
+
+    public void setVip1V120Amount(BigDecimal vip1V120Amount) {
+        this.vip1V120Amount = vip1V120Amount;
+    }
+
+    public int getVip1V120Num() {
+        return vip1V120Num;
+    }
+
+    public void setVip1V120Num(int vip1V120Num) {
+        this.vip1V120Num = vip1V120Num;
+    }
+
+    public BigDecimal getVip1V140Amount() {
+        return vip1V140Amount;
+    }
+
+    public void setVip1V140Amount(BigDecimal vip1V140Amount) {
+        this.vip1V140Amount = vip1V140Amount;
+    }
+
+    public Integer getVip1V140Num() {
+        return vip1V140Num;
+    }
+
+    public void setVip1V140Num(Integer vip1V140Num) {
+        this.vip1V140Num = vip1V140Num;
+    }
+
+    public BigDecimal getVip1V220Amount() {
+        return vip1V220Amount;
+    }
+
+    public void setVip1V220Amount(BigDecimal vip1V220Amount) {
+        this.vip1V220Amount = vip1V220Amount;
+    }
+
+    public Integer getVip1V220Num() {
+        return vip1V220Num;
+    }
+
+    public void setVip1V220Num(Integer vip1V220Num) {
+        this.vip1V220Num = vip1V220Num;
+    }
+
+    public BigDecimal getVip1V240Amount() {
+        return vip1V240Amount;
+    }
+
+    public void setVip1V240Amount(BigDecimal vip1V240Amount) {
+        this.vip1V240Amount = vip1V240Amount;
+    }
+
+    public Integer getVip1V240Num() {
+        return vip1V240Num;
+    }
+
+    public void setVip1V240Num(Integer vip1V240Num) {
+        this.vip1V240Num = vip1V240Num;
+    }
+
+    public BigDecimal getMusicTheoryAmount() {
+        return musicTheoryAmount;
+    }
+
+    public void setMusicTheoryAmount(BigDecimal musicTheoryAmount) {
+        this.musicTheoryAmount = musicTheoryAmount;
+    }
+
+    public Integer getMusicTheoryNum() {
+        return musicTheoryNum;
+    }
+
+    public void setMusicTheoryNum(Integer musicTheoryNum) {
+        this.musicTheoryNum = musicTheoryNum;
+    }
+}

+ 87 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DoubleEleven2021OrderDetailDto.java

@@ -0,0 +1,87 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class DoubleEleven2021OrderDetailDto {
+
+    private Integer userId;
+
+    private String username;
+
+    private String orderNo;
+
+    private BigDecimal amount = BigDecimal.ZERO;
+
+    private Date createTime;
+
+    private Date payTime;
+
+    private String type;
+
+    private Boolean giveMember;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getPayTime() {
+        return payTime;
+    }
+
+    public void setPayTime(Date payTime) {
+        this.payTime = payTime;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Boolean getGiveMember() {
+        return giveMember;
+    }
+
+    public void setGiveMember(Boolean giveMember) {
+        this.giveMember = giveMember;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HorseRaceLampDto.java

@@ -10,6 +10,16 @@ public class HorseRaceLampDto {
 
     private String username;
 
+    private String prizeName;
+
+    public String getPrizeName() {
+        return prizeName;
+    }
+
+    public void setPrizeName(String prizeName) {
+        this.prizeName = prizeName;
+    }
+
     public Integer getNum() {
         return num;
     }

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java

@@ -87,6 +87,8 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
 
     //分润中的服务费用
     private BigDecimal serviceAmount = BigDecimal.ZERO;
+    
+    private BigDecimal serviceFee = BigDecimal.ZERO;
 
     private String feeFlag;
 
@@ -335,7 +337,15 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.serviceAmount = serviceAmount;
     }
 
-    public BigDecimal getMaintenanceFee() {
+    public BigDecimal getServiceFee() {
+		return serviceFee;
+	}
+
+	public void setServiceFee(BigDecimal serviceFee) {
+		this.serviceFee = serviceFee;
+	}
+
+	public BigDecimal getMaintenanceFee() {
         return maintenanceFee;
     }
 

+ 106 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityDetailDto.java

@@ -0,0 +1,106 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class ActivityDetailDto {
+	private Integer activityId;
+
+	private String activityName;
+
+	private String activityDesc;
+
+	private BigDecimal currentPrice;
+
+	private BigDecimal originalPrice;
+
+	private String categoryName;
+
+	private Integer categoryId;
+
+	private BigDecimal courseNum;
+
+	private Date startTime;
+
+	private Date endTime;
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public BigDecimal getCourseNum() {
+		return courseNum;
+	}
+
+	public void setCourseNum(BigDecimal courseNum) {
+		this.courseNum = courseNum;
+	}
+
+	public Integer getCategoryId() {
+		return categoryId;
+	}
+
+	public void setCategoryId(Integer categoryId) {
+		this.categoryId = categoryId;
+	}
+
+	public Integer getActivityId() {
+		return activityId;
+	}
+
+	public void setActivityId(Integer activityId) {
+		this.activityId = activityId;
+	}
+
+	public String getActivityName() {
+		return activityName;
+	}
+
+	public void setActivityName(String activityName) {
+		this.activityName = activityName;
+	}
+
+	public String getActivityDesc() {
+		return activityDesc;
+	}
+
+	public void setActivityDesc(String activityDesc) {
+		this.activityDesc = activityDesc;
+	}
+
+	public BigDecimal getCurrentPrice() {
+		return currentPrice;
+	}
+
+	public void setCurrentPrice(BigDecimal currentPrice) {
+		this.currentPrice = currentPrice;
+	}
+
+	public BigDecimal getOriginalPrice() {
+		return originalPrice;
+	}
+
+	public void setOriginalPrice(BigDecimal originalPrice) {
+		this.originalPrice = originalPrice;
+	}
+
+	public String getCategoryName() {
+		return categoryName;
+	}
+
+	public void setCategoryName(String categoryName) {
+		this.categoryName = categoryName;
+	}
+}

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

@@ -14,6 +14,16 @@ public class LuckDrawCount {
 
 	private Date modifyOn;
 
+	private Integer groupId;
+
+	public Integer getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(Integer groupId) {
+		this.groupId = groupId;
+	}
+
 	public Long getUserId() {
 		return userId;
 	}

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -128,7 +128,7 @@ public class StudentPaymentOrder {
 	@ApiModelProperty(value = "优惠券减免总额",required = true)
 	private BigDecimal couponRemitFee = BigDecimal.ZERO;
 
-	private Integer activityId;
+	private String activityId;
 
 	private Integer activityBuyNum = 0;
 
@@ -140,11 +140,11 @@ public class StudentPaymentOrder {
 		this.activityBuyNum = activityBuyNum;
 	}
 
-	public Integer getActivityId() {
+	public String getActivityId() {
 		return activityId;
 	}
 
-	public void setActivityId(Integer activityId) {
+	public void setActivityId(String activityId) {
 		this.activityId = activityId;
 	}
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentRouteOrder.java

@@ -59,6 +59,8 @@ public class StudentPaymentRouteOrder {
     
     private BigDecimal serviceAmount;
     
+    private BigDecimal serviceFee;
+    
     private String memo;
     
     private String goodsIds;
@@ -201,6 +203,14 @@ public class StudentPaymentRouteOrder {
 		this.serviceAmount = serviceAmount;
 	}
 
+	public BigDecimal getServiceFee() {
+		return serviceFee;
+	}
+
+	public void setServiceFee(BigDecimal serviceFee) {
+		this.serviceFee = serviceFee;
+	}
+
 	public String getMemo() {
 		return memo;
 	}

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

@@ -89,27 +89,12 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "赠送会员时长")
 	private Integer giveMemberTime = 0;
 
+	@ApiModelProperty(value = "赠送抽奖次数")
+	private Integer givePrizeNum = 0;
+
 	@ApiModelProperty(value = "是否充值到余额")
 	private boolean isPayToBalance = true;
 
-//	@ApiModelProperty(value = "活动变量1")
-//	private String attribute1;
-//
-//	@ApiModelProperty(value = "活动变量2")
-//	private String attribute2;
-//
-//	@ApiModelProperty(value = "活动变量3")
-//	private String attribute3;
-
-//	@ApiModelProperty(value = "薪水只读标识(1-只读 0-可写)")
-//	private Integer salaryReadonlyFlag = 0;
-//
-//	@ApiModelProperty(value = "单节课程费用只读标识")
-//	private Integer paymentReadonlyFlag = 1;
-
-//	@ApiModelProperty(value = "赠送课时支付薪水标识(1-计课酬  0-不计课酬)")
-//	private Integer giveClassPaySalaryFlag = 1;
-
 	@ApiModelProperty(value = "创建时间")
 	private java.util.Date createTime;
 
@@ -169,6 +154,25 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "活动价格")
 	private BigDecimal marketPrice = BigDecimal.ZERO;
 
+	//用于标记活动类型,购买的活动类型1、1v1 20节,2、1v1 40节,3、1v2 20节,4、1v2 40节,5、乐理课
+	private Integer code;
+
+	public Integer getCode() {
+		return code;
+	}
+
+	public void setCode(Integer code) {
+		this.code = code;
+	}
+
+	public Integer getGivePrizeNum() {
+		return givePrizeNum;
+	}
+
+	public void setGivePrizeNum(Integer givePrizeNum) {
+		this.givePrizeNum = givePrizeNum;
+	}
+
 	public Integer getGiveAllowOnlineToOffline() {
 		return giveAllowOnlineToOffline;
 	}

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java

@@ -16,6 +16,7 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	MAINTENANCE("乐保"),
 	REPLACEMENT("乐器置换"),
 	DEGREE("6.1考级活动"),
+	ACTIVITY("活动购买"),
 	MEMBER("购买会员");
 
 	private String desc;

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

@@ -17,6 +17,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	COURSE_GROUP_BUY("COURSE_GROUP_BUY","对外课程购买"),
 	LUCK("LUCK", "福袋活动"),
 	DOUBLE_ELEVEN2020("DOUBLE_ELEVEN2020","2020双十一活动"),
+	DOUBLE_ELEVEN2021("DOUBLE_ELEVEN2021","2021双十一活动"),
 	TENANT_RECHARGE("TENANT_RECHARGE","租户充值"),
 	GOODS_SELL("GOODS_SELL","商品销售"),
 	OUTORDER("OUTORDER", "外部订单"),

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

@@ -0,0 +1,64 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+* @author zx
+* @date 2021/9/26 15:52
+*/
+public class DoubleEleven2021QueryInfo extends QueryInfo {
+
+    private String organId;
+
+    @ApiModelProperty(value = "购买的活动类型1、1v1 20节,2、1v1 40节,3、1v2 20节,4、1v2 40节,5、乐理课",required = false)
+    private Integer type;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private Boolean giveMemberFlag;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Boolean getGiveMemberFlag() {
+        return giveMemberFlag;
+    }
+
+    public void setGiveMemberFlag(Boolean giveMemberFlag) {
+        this.giveMemberFlag = giveMemberFlag;
+    }
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/LuckDrawQueryInfo.java

@@ -20,6 +20,26 @@ public class LuckDrawQueryInfo extends QueryInfo {
 	
 	private Integer organId;
 
+	private Boolean defaultFlag;
+
+	private Boolean allFlag = true;
+
+	public Boolean getAllFlag() {
+		return allFlag;
+	}
+
+	public void setAllFlag(Boolean allFlag) {
+		this.allFlag = allFlag;
+	}
+
+	public Boolean getDefaultFlag() {
+		return defaultFlag;
+	}
+
+	public void setDefaultFlag(Boolean defaultFlag) {
+		this.defaultFlag = defaultFlag;
+	}
+
 	public String getName() {
 		return name;
 	}

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

@@ -51,6 +51,15 @@ public interface ActivityUserMapperService extends BaseService<Integer, Activity
     int countActivityBuyNum(Integer activityId, Integer userId);
 
     /**
+    * @description: 批量新增
+     * @param activityUserMappers
+    * @return void
+    * @author zx
+    * @date 2021/10/20 13:37
+    */
+    void batchInsert(List<ActivityUserMapper> activityUserMappers);
+
+    /**
     * @description:
      * @param groupId
      * @param groupType

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

@@ -13,7 +13,7 @@ public interface LuckDrawCountService extends BaseService<Long, LuckDrawCount> {
 	 * @param times
 	 * @return
 	 */
-	public boolean freeGive(Long userId, int times);
+	public boolean freeGive(Long userId, int times,Integer groupId);
 
 	/**
 	 * 更新抽奖次数
@@ -30,4 +30,24 @@ public interface LuckDrawCountService extends BaseService<Long, LuckDrawCount> {
 	 * @return
 	 */
 	public boolean updateAmount(Long userId, Long amount);
+
+	/**
+	* @description:
+	 * @param userId
+	 * @param groupId
+	* @return com.ym.mec.biz.dal.entity.LuckDrawCount
+	* @author zx
+	* @date 2021/10/19 16:16
+	*/
+	LuckDrawCount findByIdAndGroupId(Integer userId, int groupId);
+
+	/**
+	* @description:
+	 * @param userId
+	 * @param groupId
+	* @return com.ym.mec.biz.dal.entity.LuckDrawCount
+	* @author zx
+	* @date 2021/10/19 16:16
+	*/
+	LuckDrawCount findLockByIdAndGroupId(Integer userId, int groupId);
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import java.util.List;
 
+import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.entity.LuckDrawPrize;
 import com.ym.mec.common.service.BaseService;
 
@@ -20,5 +21,14 @@ public interface LuckDrawPrizeService extends BaseService<Integer, LuckDrawPrize
 	 * @param group 奖品组
 	 * @return
 	 */
-	public LuckDrawPrize draw(Long userId, int group);
+	LuckDrawPrize draw(Long userId, int group);
+
+	/**
+	* @description: 获取双十一活动跑马灯
+	 * @param groupId
+	* @return java.util.List<com.ym.mec.biz.dal.dto.HorseRaceLampDto>
+	* @author zx
+	* @date 2021/10/19 15:33
+	*/
+    List<HorseRaceLampDto> queryHorseRaceLampDto(int groupId);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MarketActivityService.java

@@ -1,8 +1,19 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.entity.ActivityDetailDto;
 import com.ym.mec.biz.dal.entity.MarketActivity;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface MarketActivityService extends BaseService<Integer, MarketActivity> {
 
+    /**
+    * @description: 根据营销活动编号,获取活动详情列表
+     * @param marketPriceId
+    * @return java.util.List<com.ym.mec.biz.dal.entity.ActivityDetailDto>
+    * @author zx
+    * @date 2021/10/19 15:40
+    */
+    List<ActivityDetailDto> queryActivity(Integer marketPriceId,Integer organId);
 }

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

@@ -232,6 +232,15 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
     */
 	void activityOrderCallback(StudentPaymentOrder order);
 
+    /**
+    * @description: 2021双十一活动订单回调
+     * @param order
+    * @return void
+    * @author zx
+    * @date 2021/10/13 19:52
+    */
+	void doubleEleven2021OrderCallback(StudentPaymentOrder order);
+
 	/**
 	 * @describe 获取用户历史购买的陪练课
 	 * @author Joburgess
@@ -404,6 +413,15 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	Object getPracticeGroupPayInfo(Long practiceGroupId, Integer userId);
 
 	/**
+	* @description: 2021双十一活动购买
+	 * @param buyDoubleEleven2021Dto
+	* @return java.lang.Object
+	* @author zx
+	* @date 2021/10/20 10:39
+	*/
+	HttpResponseResult buyDoubleEleven2021(BuyDoubleEleven2021Dto buyDoubleEleven2021Dto) throws Exception;
+
+	/**
 	* @description: 获取学生指定网管课的剩余课时费用
 	 * @param practiceGroupId
 	* @return java.lang.Object

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.page.DoubleEleven2021QueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -66,4 +68,31 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
     * @date 2021/10/11 15:00
     */
     List<ActivityWaitCourseStudentNumDto> getActivityStudentCanCourseNum(Integer userId, Integer activityId);
+
+    /**
+    * @description: 分部双11活动统计
+     * @param
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/25 12:07
+    */
+    List<DoubleEleven2021Dto> organDoubleEleven2021Statis(String order,String sort,Integer organId);
+
+    /**
+    * @description: 双11活动统计
+     * @param
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/25 12:07
+    */
+    Object doubleEleven2021Statis();
+
+    /**
+    * @description: 2021双十一学员购买详情
+     * @param queryInfo
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/26 11:38
+    */
+    PageInfo<DoubleEleven2021OrderDetailDto> doubleEleven2021OrderDetail(DoubleEleven2021QueryInfo queryInfo);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java

@@ -41,6 +41,11 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 		return activityUserMapperDao.countActivityBuyNum(activityId,userId);
 	}
 
+    @Override
+    public void batchInsert(List<ActivityUserMapper> activityUserMappers) {
+		activityUserMapperDao.batchInsert(activityUserMappers);
+    }
+
 	@Override
 	public ActivityUserMapper findVipUserMapper(Long groupId, String groupType,Integer studentId) {
 		return activityUserMapperDao.findVipUserMapper(groupId,groupType,studentId);

+ 17 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -399,20 +399,24 @@ public class ExportServiceImpl implements ExportService {
 					++times;
 				}
             	orderCountMap.put(row.getOrderNo(), times);
+            	
+            	currentFee = row.getServiceFee();
                 
-                transferFee = serviceChargeMap.get(row.getOrderNo());
-                if(transferFee == null){
-                	transferFee = BigDecimal.ZERO;
-                }
-                
-                currentFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-                totalFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-                if(totalFee.subtract(transferFee.add(currentFee)).doubleValue() < 0 || times == countFeeFlagNum.getTotalNum()){
-                	currentFee = totalFee.subtract(transferFee);
-                	serviceChargeMap.put(row.getOrderNo(), totalFee);
-                }else{
-                	serviceChargeMap.put(row.getOrderNo(), transferFee.add(currentFee));
-                }
+				if (currentFee == null || currentFee.floatValue() == 0) {
+					transferFee = serviceChargeMap.get(row.getOrderNo());
+					if (transferFee == null) {
+						transferFee = BigDecimal.ZERO;
+					}
+
+					currentFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+					totalFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+					if (totalFee.subtract(transferFee.add(currentFee)).doubleValue() < 0 || times == countFeeFlagNum.getTotalNum()) {
+						currentFee = totalFee.subtract(transferFee);
+						serviceChargeMap.put(row.getOrderNo(), totalFee);
+					} else {
+						serviceChargeMap.put(row.getOrderNo(), transferFee.add(currentFee));
+					}
+				}
                 
                 /*if (countFeeFlagNum.getTotalNum() > countFeeFlagNum.getYesNum() && row.getFeeFlag().equals("Y")) {
                     transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawCountServiceImpl.java

@@ -32,7 +32,7 @@ public class LuckDrawCountServiceImpl extends BaseServiceImpl<Long, LuckDrawCoun
 
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean freeGive(Long userId, int times) {
+	public boolean freeGive(Long userId, int times,Integer groupId) {
 		boolean isInsert = false;
 		LuckDrawCount luckDrawCount = luckDrawCountDao.getLock(userId);
 		if (luckDrawCount == null) {
@@ -40,6 +40,7 @@ public class LuckDrawCountServiceImpl extends BaseServiceImpl<Long, LuckDrawCoun
 			luckDrawCount.setUserId(userId);
 			isInsert = true;
 		}
+		luckDrawCount.setGroupId(groupId);
 		luckDrawCount.setAvailableCount(luckDrawCount.getAvailableCount() + times);
 		luckDrawCount.setModifyOn(new Date());
 
@@ -79,4 +80,14 @@ public class LuckDrawCountServiceImpl extends BaseServiceImpl<Long, LuckDrawCoun
 		return isInsert ? insert(luckDrawCount) > 0 : update(luckDrawCount) > 0;
 	}
 
+	@Override
+	public LuckDrawCount findByIdAndGroupId(Integer userId, int groupId) {
+		return luckDrawCountDao.findByIdAndGroupId(userId,groupId);
+	}
+
+	@Override
+	public LuckDrawCount findLockByIdAndGroupId(Integer userId, int groupId) {
+		return luckDrawCountDao.findLockByIdAndGroupId(userId,groupId);
+	}
+
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawPrizeServiceImpl.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import java.util.Date;
 import java.util.List;
 
+import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -135,4 +136,8 @@ public class LuckDrawPrizeServiceImpl extends BaseServiceImpl<Integer, LuckDrawP
 		return null;
 	}
 
+    @Override
+    public List<HorseRaceLampDto> queryHorseRaceLampDto(int groupId) {
+        return luckDrawPrizeDao.queryHorseRaceLampDto(groupId);
+    }
 }

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

@@ -1,22 +1,45 @@
 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;
+
 @Service
 public class MarketActivityServiceImpl extends BaseServiceImpl<Integer, MarketActivity>  implements MarketActivityService {
 	
 	@Autowired
 	private MarketActivityDao marketActivityDao;
+	@Autowired
+	private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
 
 	@Override
 	public BaseDAO<Integer, MarketActivity> getDAO() {
 		return marketActivityDao;
 	}
-	
+
+    @Override
+    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));
+		}
+		return activityDetailDtos;
+    }
 }

+ 15 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -616,18 +616,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         OrderTypeEnum type = OrderTypeEnum.SPORADIC;
         if (chargeInfo.getChargeType().equals(SporadicChargeTypeEnum.DOUBLE_ELEVEN2020)) {
-            type = OrderTypeEnum.DOUBLE_ELEVEN2020;
-
-            String startTimeStr = sysConfigDao.findConfigValue(SysConfigService.START_TIME_OF_1111);
-            String endTimeStr = sysConfigDao.findConfigValue(SysConfigService.END_TIME_OF_1111);
-            Date startTime = sdf_ymdhms.parse(startTimeStr);
-            Date endTime = sdf_ymdhms.parse(endTimeStr);
-            if (date.before(startTime)) {
-                throw new Exception("活动暂未开始,请您耐心等待!");
-            }
-            if (date.after(endTime)) {
-                throw new Exception("活动已结束,谢谢您的支持!");
-            }
+            throw new Exception("活动已结束,谢谢您的支持!");
+//            type = OrderTypeEnum.DOUBLE_ELEVEN2020;
+//
+//            String startTimeStr = sysConfigDao.findConfigValue(SysConfigService.START_TIME_OF_1111);
+//            String endTimeStr = sysConfigDao.findConfigValue(SysConfigService.END_TIME_OF_1111);
+//            Date startTime = sdf_ymdhms.parse(startTimeStr);
+//            Date endTime = sdf_ymdhms.parse(endTimeStr);
+//            if (date.before(startTime)) {
+//                throw new Exception("活动暂未开始,请您耐心等待!");
+//            }
+//            if (date.after(endTime)) {
+//                throw new Exception("活动已结束,谢谢您的支持!");
+//            }
         }
 
         Integer userId = sporadicPayDto.getUserId();
@@ -793,7 +794,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
                 	List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
                 	for(Goods goods : goodsList){
-                		orderAmount = orderAmount.add(goods.getMarketPrice());
+                		orderAmount = orderAmount.add(goods.getDiscountPrice());
                 	}
                 }
             }else{
@@ -1074,7 +1075,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
                 	List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
                 	for(Goods goods : goodsList){
-                		orderAmount = orderAmount.add(goods.getMarketPrice());
+                		orderAmount = orderAmount.add(goods.getDiscountPrice());
                 	}
                 }
             }else{

+ 344 - 59
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -20,6 +20,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
@@ -32,6 +33,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -56,8 +58,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Autowired
     private PracticeGroupDao practiceGroupDao;
     @Autowired
-    private SysConfigService sysConfigService;
-    @Autowired
     private SubjectDao subjectDao;
     @Autowired
     private OrganizationDao organizationDao;
@@ -146,6 +146,10 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
+    private RedisCache<String, Object> redisCache;
+    @Autowired
+    private LuckDrawCountService luckDrawCountService;
+    @Autowired
     private VipGroupDao vipGroupDao;
     @Autowired
     private VipGroupCategoryDao vipGroupCategoryDao;
@@ -254,7 +258,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Override
     public Map<String, Object> checkCanApplyFreePracticeGroup(Integer userId) {
         Map<String, Object> result = new HashMap<>();
-        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
         result.put("practiceFreeApplyExpireDate", practiceFreeApplyExpireDateConfig.getParanValue());
         return result;
     }
@@ -288,7 +292,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
 
         boolean checkTeacherLeaveDate = true;
-        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        SysConfig allTeacherLeaveDataConfig = sysConfigDao.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
         JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
         JSONObject organTeacherLeaveData = null;
         if (Objects.nonNull(allTeacherLeaveData)) {
@@ -298,7 +302,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             checkTeacherLeaveDate = false;
         }
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         List<Integer> teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
         teacherDao.lockTeachers(teacherIds);
@@ -570,7 +574,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         teacherDao.lockTeachers(teacherIds);
 
         boolean checkTeacherLeaveDate = true;
-        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        SysConfig allTeacherLeaveDataConfig = sysConfigDao.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
         JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
         JSONObject organTeacherLeaveData = null;
         if (Objects.nonNull(allTeacherLeaveData)) {
@@ -580,7 +584,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             checkTeacherLeaveDate = false;
         }
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         Date now = new Date();
         if (now.before(applyStartDay)) {
@@ -772,12 +776,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Override
     public Map getPracticeApplyParams(Integer userId) {
         Map result = new HashMap();
-        SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
-        SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
-        SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
-        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
-        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        SysConfig practiceSubjectIdListConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
+        SysConfig practiceApplyStartTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
+        SysConfig practiceApplyEndTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
+        SysConfig practiceApplyIntervalTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
         Student student = studentDao.get(userId);
         List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
         List<Integer> subjectIds = Arrays.asList(practiceSubjectIdListConfig.getParanValue().split(",")).stream().mapToInt(idStr -> Integer.valueOf(idStr)).boxed().collect(Collectors.toList());
@@ -802,7 +806,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     @Override
     public Object getPracticeApplySubjects() {
-        SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
+        SysConfig practiceSubjectIdListConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
         List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
         return subjects;
     }
@@ -825,7 +829,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
 
         Integer practiceCourseMinutes = 25;
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         if (Objects.nonNull(practiceCourseMinutesConfig)) {
             practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         }
@@ -914,11 +918,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         Map result = new HashMap();
         Set<Date> allTeacherFreeDates = new HashSet<>();
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
 
         boolean checkTeacherLeaveDate = true;
-        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        SysConfig allTeacherLeaveDataConfig = sysConfigDao.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
         JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
         if (Objects.isNull(allTeacherLeaveData)) {
             checkTeacherLeaveDate = false;
@@ -978,7 +982,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return result;
         }
 
-        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
         Date practiceFreeApplyExpireDate = DateUtil.stringToDate(practiceFreeApplyExpireDateConfig.getParanValue());
 
         Date now = new Date();
@@ -1343,7 +1347,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         Map result = new HashMap();
         Set<Date> allTeacherFreeDates = new HashSet<>();
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         List<Integer> teacherIds = new ArrayList<>();
 
@@ -1372,7 +1376,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         teacherDao.lockTeachers(teacherIds);
 
         boolean checkTeacherLeaveDate = true;
-        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        SysConfig allTeacherLeaveDataConfig = sysConfigDao.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
         JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
         JSONObject organTeacherLeaveData = null;
         if (Objects.nonNull(allTeacherLeaveData)) {
@@ -1382,7 +1386,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             checkTeacherLeaveDate = false;
         }
 
-        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
         Date practiceFreeApplyExpireDate = DateUtil.stringToDate(practiceFreeApplyExpireDateConfig.getParanValue());
 
         Date now = new Date();
@@ -1642,9 +1646,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         calendar.add(Calendar.DATE, -1);
         calendar.set(Calendar.SECOND, 0);
         calendar.set(Calendar.MILLISECOND, 0);
-        SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
-        SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
-        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
+        SysConfig practiceApplyStartTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
+        SysConfig practiceApplyEndTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
+        SysConfig practiceApplyIntervalTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
         String enableStartTimeStr = practiceApplyStartTimeConfig.getParanValue();
         String enableEndTimeStr = practiceApplyEndTimeConfig.getParanValue();
         Integer practiceApplyIntervalMinutes = practiceApplyIntervalTimeConfig.getParanValue(Integer.class);
@@ -1675,9 +1679,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         calendar.add(Calendar.DATE, -1);
         calendar.set(Calendar.SECOND, 0);
         calendar.set(Calendar.MILLISECOND, 0);
-        SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
-        SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
-        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
+        SysConfig practiceApplyStartTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
+        SysConfig practiceApplyEndTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
+        SysConfig practiceApplyIntervalTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
         String enableStartTimeStr = practiceApplyStartTimeConfig.getParanValue();
         String enableEndTimeStr = practiceApplyEndTimeConfig.getParanValue();
         Integer practiceApplyIntervalMinutes = practiceApplyIntervalTimeConfig.getParanValue(Integer.class);
@@ -1718,7 +1722,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("请选择老师");
         }
         Map result = new HashMap();
-        SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
+        SysConfig practiceSubjectIdListConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
         if (Objects.isNull(practiceGroup.getSubjectId())
                 || !Arrays.asList(practiceSubjectIdListConfig.getParanValue().split(",")).contains(practiceGroup.getSubjectId().toString())) {
             result.put("status", "DISABLE_SUBJECT");
@@ -1726,11 +1730,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return result;
         }
         Integer practiceCourseMinutes = 25;
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         if (Objects.nonNull(practiceCourseMinutesConfig)) {
             practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         }
-        SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+        SysConfig practiceCourseSalaryConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
         Date now = new Date();
         if (practiceGroup.getFirstCourseTime().after(practiceGroup.getSecondCourseTime())) {
             Date tmp = practiceGroup.getSecondCourseTime();
@@ -2344,15 +2348,15 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Override
     public Map getPayPracticeApplyParams(Integer userId, Integer organId) {
         Map result = new HashMap();
-        SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
-        SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
-        SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
-        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
-        SysConfig practicePayMaxMonthConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PAY_MAX_MONTH);
-        SysConfig practicePayDrillTimesOnOneWeekConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PAY_DRILL_TIMES_ON_ONE_WEEK);
-        SysConfig practicePromotionActivityStartDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
-        SysConfig practiceBuyActivityExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_BUY_ACTIVITY_EXPIRE_DATE);
+        SysConfig practiceSubjectIdListConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
+        SysConfig practiceApplyStartTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
+        SysConfig practiceApplyEndTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
+        SysConfig practiceApplyIntervalTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practicePayMaxMonthConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_PAY_MAX_MONTH);
+        SysConfig practicePayDrillTimesOnOneWeekConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_PAY_DRILL_TIMES_ON_ONE_WEEK);
+        SysConfig practicePromotionActivityStartDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
+        SysConfig practiceBuyActivityExpireDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_BUY_ACTIVITY_EXPIRE_DATE);
         SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
         Student student = studentDao.get(userId);
         List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
@@ -2398,7 +2402,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 //        }
 
         Integer practiceCourseMinutes = 25;
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         if (Objects.nonNull(practiceCourseMinutesConfig)) {
             practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         }
@@ -2485,7 +2489,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Override
     public Map<Integer, List<String>> getEnableApplyDatesWithWeek() {
         Map<Integer, List<String>> result = new HashMap<>();
-        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
+        SysConfig practiceApplyIntervalTimeConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
         Integer practiceApplyIntervalMinutes = practiceApplyIntervalTimeConfig.getParanValue(Integer.class);
         LocalTime dayStartTime = LocalTime.parse("00:00:00", DateUtil.timeFormatter);
         LocalTime dayEndTime = LocalTime.parse("00:00:00", DateUtil.timeFormatter);
@@ -2529,11 +2533,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         Map result = new HashMap();
         Set<Integer> disableApplyWeekDay = new HashSet<>();
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
 
         boolean checkTeacherLeaveDate = true;
-        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        SysConfig allTeacherLeaveDataConfig = sysConfigDao.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
         JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
         if (Objects.isNull(allTeacherLeaveData)) {
             checkTeacherLeaveDate = false;
@@ -2848,12 +2852,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("老师不存在");
         }
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
-        SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
-        SysConfig practiceBuyActivityExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_BUY_ACTIVITY_EXPIRE_DATE);
+        SysConfig practiceCourseSalaryConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+        SysConfig practiceBuyActivityExpireDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_BUY_ACTIVITY_EXPIRE_DATE);
         Date practiceBuyActivityExpireDate = DateUtil.stringToDate(practiceBuyActivityExpireDateConfig.getParanValue(), "yyyy-MM-dd HH:mm:ss");
-        SysConfig practicePromotionActivityStartDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
+        SysConfig practicePromotionActivityStartDateConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
         Date practicePromotionActivityStartDate = DateUtil.stringToDate(practicePromotionActivityStartDateConfig.getParanValue(), "yyyy-MM-dd HH:mm:ss");
 
         Date now = new Date();
@@ -3286,9 +3290,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("老师不存在");
         }
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
-        SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+        SysConfig practiceCourseSalaryConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
 
         Date now = new Date();
 
@@ -3878,7 +3882,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         BigDecimal divide = actualPrice.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN);
         BigDecimal firstAmount = actualPrice.subtract(divide.multiply(new BigDecimal(courseSchedules.size()))).add(divide);
 
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
 
         TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(practiceGroup.getUserId(),practiceCourseMinutes);
@@ -3959,7 +3963,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
             Date now = new Date();
             Student student = studentDao.get(order.getUserId());
-            Integer activityId = order.getActivityId();
+            Integer activityId = Integer.parseInt(order.getActivityId());
             VipGroupActivity activity = vipGroupActivityDao.get(activityId);
             ActivityUserMapper activityUserMapper = new ActivityUserMapper();
             activityUserMapper.setActivityId(activityId);
@@ -4143,6 +4147,156 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public void doubleEleven2021OrderCallback(StudentPaymentOrder studentPaymentOrder) {
+        Integer userId = studentPaymentOrder.getUserId();
+        StudentPaymentOrder order = studentPaymentOrderDao.lockOrder(studentPaymentOrder.getId());
+        if(!order.getStatus().equals(DealStatusEnum.ING)){
+            return;
+        }
+        //更新订单状态
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+        if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
+            Date now = new Date();
+            Student student = studentDao.get(order.getUserId());
+            List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(order.getActivityId());
+            List<ActivityUserMapper> activityUserMappers = new ArrayList<>();
+            Integer times = 0;
+
+            BigDecimal couponRemitFee = order.getCouponRemitFee();
+            BigDecimal subCouponRemitFee = couponRemitFee;
+            BigDecimal totalMarketPrice = vipGroupActivities.stream().map(e -> e.getMarketPrice()).reduce(ZERO, BigDecimal::add);
+
+            String startTimeStr = sysConfigDao.findConfigValue("2021_double_eleven_give_member_start_time");
+            Date startTime = DateUtil.stringToDate(startTimeStr);
+            String endTimeStr = sysConfigDao.findConfigValue("2021_double_eleven_give_member_end_time");
+            Date endTime = DateUtil.stringToDate(endTimeStr);
+            for (int i = 0; i < vipGroupActivities.size(); i++) {
+                VipGroupActivity activity = vipGroupActivities.get(i);
+                ActivityUserMapper activityUserMapper = new ActivityUserMapper();
+                activityUserMapper.setActivityId(activity.getId());
+                activityUserMapper.setUserId(order.getUserId());
+                activityUserMapper.setPaymentOrderId(order.getId());
+                activityUserMapper.setTeacherId(student.getTeacherId());
+                activityUserMapper.setVipFlag(1);
+                if(couponRemitFee.compareTo(ZERO) > 0){
+                    if(i == vipGroupActivities.size() - 1){
+                        activityUserMapper.setActualPrice(activity.getMarketPrice().subtract(subCouponRemitFee));
+                    }else {
+                        //获取比例
+                        BigDecimal ratioAmount = activity.getMarketPrice().divide(totalMarketPrice, 6, BigDecimal.ROUND_HALF_UP);
+                        //获取分配的减免金额
+                        BigDecimal multiply = ratioAmount.multiply(couponRemitFee).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        subCouponRemitFee = subCouponRemitFee.subtract(multiply);
+                        activityUserMapper.setActualPrice(activity.getMarketPrice().subtract(multiply));
+                    }
+                }else {
+                    activityUserMapper.setActualPrice(activity.getMarketPrice());
+                }
+                activityUserMappers.add(activityUserMapper);
+                times = times + activity.getGivePrizeNum();
+                //是否进入课程余额
+                if(activity.isPayToBalance()){
+                    boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, activityUserMapper.getActualPrice(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "2021双11活动");
+                    if (!appendCourseBalance) {
+                        throw new BizException("增加用户课程余额失败");
+                    }
+                }
+                if(!activity.getCode().equals(5)){
+                    if (order.getCreateTime().compareTo(startTime) >= 0 && order.getCreateTime().compareTo(endTime) <= 0 ) {
+                        //赠送一次抽奖机会
+                        luckDrawCountService.freeGive(order.getUserId().longValue(),1,2);
+                    }
+                }
+            }
+            //赠送抽奖机会
+            if(times > 0){
+                luckDrawCountService.freeGive(order.getUserId().longValue(),times,2);
+            }
+            activityUserMapperService.batchInsert(activityUserMappers);
+
+            SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId);
+            //插入缴费明细
+            //收入
+            SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+            sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
+            sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+            sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount());
+            sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount()));
+            sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
+            sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
+            sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+            //支出
+            SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail();
+            sysUserExpendCashAccountDetail.setUserId(order.getUserId());
+            sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+            sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
+            sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
+            sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
+            sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+
+            if (studentPaymentOrder.getComAmount() != null) {
+                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+            }
+            if (studentPaymentOrder.getPerAmount() != null) {
+                sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
+            }
+
+            sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
+            sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
+
+            try {
+                contractService.transferProduceContract(userId, null, null);
+            } catch (Exception e) {
+                LOGGER.error("产品协议生成失败", e);
+            }
+            studentDao.updateStudentServiceTag(userId, null, YesOrNoEnum.YES.getCode());
+            //是否指定满足赠送会员的条件
+            //是否赠送过会员
+            String memberKey = "2021_double_eleven" + order.getUserId();
+            Boolean aBoolean = redisCache.exists(memberKey);
+            if(!aBoolean){
+                if (order.getCreateTime().compareTo(startTime) >= 0 && order.getCreateTime().compareTo(endTime) <= 0 ) {
+                    //赠送会员
+                    CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+                    Date addDate = now;
+                    if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
+                        cloudTeacherOrder.setStartTime(now);
+                    } else {
+                        addDate = student.getMembershipEndTime();
+                        cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
+                    }
+                    cloudTeacherOrder.setEndTime(DateUtil.addDays(DateUtil.addMonths(addDate, 1),1));
+                    cloudTeacherOrder.setRemark("双十一活动赠送会员");
+                    cloudTeacherOrder.setStatus(2);
+                    cloudTeacherOrder.setOrderId(order.getId());
+                    cloudTeacherOrder.setType(2);
+                    cloudTeacherOrder.setAmount(BigDecimal.ZERO);
+                    cloudTeacherOrder.setLevel(1);
+                    cloudTeacherOrder.setStudentId(userId);
+                    cloudTeacherOrder.setOrganId(order.getOrganId());
+                    cloudTeacherOrder.setTime(1);
+                    cloudTeacherOrderDao.insert(cloudTeacherOrder);
+                    studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
+                    redisCache.put(memberKey,userId);
+                }
+            }
+        }
+        if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "报名缴费失败");
+            }
+            sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
+        }
+    }
+
+    @Override
     public List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId, Long groupId, PracticeGroupType type) {
         List<PracticeCourseDto> userPracticeGroups;
         if (Objects.nonNull(groupId)) {
@@ -4159,7 +4313,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (CollectionUtils.isEmpty(userPracticeGroups)) {
             return new ArrayList<>();
         }
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         for (PracticeCourseDto userPracticeGroup : userPracticeGroups) {
             JSONArray coursesArry = new JSONArray();
@@ -4216,7 +4370,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (order.getStatus().equals(DealStatusEnum.FAILED) || order.getGroupType().equals(GroupType.REPAIR)||Objects.isNull(order.getMusicGroupId())) {
             return practiceBuyResult;
         }
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(order.getMusicGroupId()));
         if(Objects.nonNull(practiceGroup.getType())&&(PracticeGroupType.CARE_PACKAGE.equals(practiceGroup.getType())||PracticeGroupType.COME_ON_PACKAGE.equals(practiceGroup.getType()))){
@@ -4606,7 +4760,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if(Objects.isNull(teacherId)){
             throw new BizException("请指定教师");
         }
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(teacherId,practiceCourseMinutes);
 
@@ -4665,7 +4819,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if(Objects.isNull(teacherId)){
             throw new BizException("请指定教师");
         }
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceCourseMinutesConfig = sysConfigDao.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(teacherId,practiceCourseMinutes);
 
@@ -5006,8 +5160,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         //是否消耗课程余额
         if(activity.isPayToBalance() && !giveFlag){
             ActivityUserMapper activityUserMapper = activityUserMappers.get(0);
-            StudentPaymentOrder order = studentPaymentOrderDao.get(activityUserMapper.getPaymentOrderId());
-            sysUserCashAccountService.appendCourseBalance(studentId,order.getExpectAmount().negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"活动排课消耗课程余额");
+            sysUserCashAccountService.appendCourseBalance(studentId,activityUserMapper.getActualPrice().negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"活动排课消耗课程余额");
         }
 
         //创建班级信息
@@ -5237,7 +5390,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         studentPaymentOrder.setClassGroupId(classGroup.getId());
         studentPaymentOrder.setOrganId(practiceGroup.getOrganId());
         studentPaymentOrder.setVersion(0);
-        studentPaymentOrder.setActivityId(practiceGroup.getVipGroupActivityId());
+        Integer vipGroupActivityId = practiceGroup.getVipGroupActivityId();
+        studentPaymentOrder.setActivityId(vipGroupActivityId==null?"":vipGroupActivityId.toString());
         studentPaymentOrder.setActivityBuyNum(practiceGroup.getAllCourseNum());
         studentPaymentOrderDao.insert(studentPaymentOrder);
 
@@ -5442,7 +5596,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         studentPaymentOrder.setRoutingOrganId(practiceGroupBuyParams.getOrganId());
         studentPaymentOrder.setCreateTime(nowDate);
         studentPaymentOrder.setUpdateTime(nowDate);
-        studentPaymentOrder.setActivityId(activityId);
+        studentPaymentOrder.setActivityId(activityId.toString());
         studentPaymentOrder.setActivityBuyNum(buyNum);
         studentPaymentOrderService.insert(studentPaymentOrder);
 
@@ -5512,6 +5666,137 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    public HttpResponseResult buyDoubleEleven2021(BuyDoubleEleven2021Dto buyDoubleEleven2021Dto) throws Exception {
+        String activityIdList = buyDoubleEleven2021Dto.getActivityIdList();
+        List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(activityIdList);
+        Date now = new Date();
+        Student student = studentDao.getLocked(buyDoubleEleven2021Dto.getUserId());
+        BigDecimal activityFee = ZERO;
+        for (int i = 0; i < vipGroupActivities.size(); i++) {
+            VipGroupActivity activity = vipGroupActivities.get(i);
+            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("活动已结束,感谢您的参与");
+            }
+            Integer studentMaxUsedTimes = activity.getStudentMaxUsedTimes();
+            if(studentMaxUsedTimes != -1){
+                //获取活动购买次数
+                int activityBuyNum = activityUserMapperService.countActivityBuyNum(activity.getId(), buyDoubleEleven2021Dto.getUserId());
+                if(activityBuyNum >= studentMaxUsedTimes){
+                    throw new BizException("{}活动最多课购买{}次,感谢您的参与",activity.getName(),studentMaxUsedTimes);
+                }
+            }
+            activityFee = activityFee.add(activity.getMarketPrice());
+        }
+
+        //判断用户是否已存在订单
+        // 判断是否存在支付中的记录
+        List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.ACTIVITY,null,student.getUserId(),DealStatusEnum.ING,OrderTypeEnum.DOUBLE_ELEVEN2021);
+        if (list.size() > 0) {
+            StudentPaymentOrder order = list.get(0);
+            // 查询订单状态
+            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(order.getPaymentChannel(), order.getOrderNo(), order.getTransNo());
+            if(payStatus == PayStatus.SUCCESSED){
+                throw new BizException("订单已支付成功,请勿重复支付");
+            }else if(payStatus == PayStatus.PAYING){
+                throw new BizException("订单还在交易中,请稍后重试");
+            }
+            if(buyDoubleEleven2021Dto.isRepeatPay()){
+                //处理关闭订单
+                order.setStatus(DealStatusEnum.CLOSE);
+                order.setMemo("关闭2021双十一活动订单");
+                if (order.getBalancePaymentAmount() != null && order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(),
+                            PlatformCashAccountDetailTypeEnum.REFUNDS, "2021双十一活动支付失败");
+                }
+                studentPaymentOrderService.update(order);
+                sysCouponCodeService.quit(order.getCouponCodeId());
+            }else {
+                return BaseController.failed(HttpStatus.CONTINUE,"您有待支付的订单,是否继续支付");
+            }
+        }
+        //计算订单金额
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(buyDoubleEleven2021Dto.getCouponIdList(), activityFee, true);
+        activityFee = studentPaymentOrder.getActualAmount();
+
+        String channelType = "";
+        Date nowDate = new Date();
+
+        BigDecimal balance = BigDecimal.ZERO;
+        if (buyDoubleEleven2021Dto.isUseBalancePayment() && activityFee.compareTo(BigDecimal.ZERO) > 0) {
+            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(student.getUserId());
+            if (userCashAccount == null) {
+                throw new BizException("用户账户找不到");
+            }
+            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+                balance = activityFee.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : activityFee;
+                activityFee = activityFee.subtract(balance);
+                studentPaymentOrder.setActualAmount(activityFee);
+                studentPaymentOrder.setBalancePaymentAmount(balance);
+                sysUserCashAccountService.updateBalance(student.getUserId(), balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "2021双十一活动购买");
+            }
+        }
+
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        studentPaymentOrder.setUserId(student.getUserId());
+        studentPaymentOrder.setGroupType(GroupType.ACTIVITY);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.DOUBLE_ELEVEN2021);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setOrganId(buyDoubleEleven2021Dto.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(buyDoubleEleven2021Dto.getOrganId());
+        studentPaymentOrder.setActivityId(activityIdList);
+        studentPaymentOrder.setCreateTime(nowDate);
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        studentPaymentOrder.setVersion(0);
+        if (activityFee.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, buyDoubleEleven2021Dto.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return BaseController.failed(HttpStatus.CREATED, notifyMap,"恭喜您,购买成功!");
+        }
+
+        String orderSubject = "2021双十一活动";
+        String receiver = "vip";
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map payMap = payService.getPayMap(
+                activityFee,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                orderSubject,
+                orderSubject,
+                studentPaymentOrder.getOrganId(),
+                receiver
+        );
+
+        studentPaymentOrder.setOrganId(studentPaymentOrder.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return BaseController.succeed(payMap);
+    }
+
+    @Override
     public Map<String, BigDecimal> getStudentSurplusCourseFee(Long practiceGroupId) {
         if(Objects.isNull(practiceGroupId)){
             throw new BizException("请指定课程");

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

@@ -102,6 +102,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private EmployeeDao employeeDao;
     @Autowired
     private OrganizationDegreeCourseFeeDao organizationDegreeCourseFeeDao;
+    @Autowired
+    private ActivityUserMapperDao activityUserMapperDao;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -735,6 +737,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         student.setOperatingTempTag(0);
         student.setServiceTag(student.getServiceTag() == 0 ? 2 : 1);
         student.setTeacherId(student.getTeacherId());
+        activityUserMapperDao.updateTeacherId(student.getUserId(),student.getTeacherId());
         if(Objects.nonNull(student.getCarePackage())||Objects.nonNull(student.getComeOnPackage())){
             Student oldStudent = studentDao.get(userId);
             if(Objects.nonNull(oldStudent.getCarePackage())&&oldStudent.getCarePackage().equals(2)){

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

@@ -390,6 +390,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     private Boolean confirmOrder(StudentPaymentOrder order) {
+    	Date date = new Date();
         List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
         for (StudentPaymentRouteOrder routeOrder : routeOrders) {
             Map<String, Object> divMember = new HashMap<>();
@@ -410,6 +411,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             try {
                 Map<String, Object> map = Payment.createConfirm(confirm);
                 LOGGER.info("分账信息返回:{}",map);
+                routeOrder.setServiceFee(new BigDecimal(map.get("fee_amt").toString()));
+                routeOrder.setUpdateTime(date);
+                studentPaymentRouteOrderDao.update(routeOrder);
             } catch (Exception e) {
                 continue;
             }
@@ -485,6 +489,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         	memberRankSettingService.orderCallback(order);
         }else if (order.getType().equals(OrderTypeEnum.ACTIVITY)) {
             practiceGroupService.activityOrderCallback(order);
+        }else if (order.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2021)) {
+            practiceGroupService.doubleEleven2021OrderCallback(order);
         }
     }
 

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

@@ -640,7 +640,22 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     type = OrderDetailTypeEnum.TEACHING;
                 }
                 studentPaymentOrderDetail4goodsGroup.setType(type);
-                studentPaymentOrderDetail4goodsGroup.setPrice(goodsGroup.getPrice());
+                
+                BigDecimal goodsPrice = new BigDecimal(0);
+                
+                if(studentRegistration.getOrganId() == 55 && (newCourses == null || newCourses.size() == 0) && !(buyCloudTeacher || buyCloudTeacherPlus)){
+                	//取商品零售价
+                    if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
+                    	List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
+                    	for(Goods goods : goodsList){
+                    		goodsPrice = goodsPrice.add(goods.getDiscountPrice());
+                    	}
+                    }
+                }else{
+                	goodsPrice = goodsGroup.getPrice();
+                }
+                studentPaymentOrderDetail4goodsGroup.setPrice(goodsPrice);
+                
                 studentPaymentOrderDetail4goodsGroup.setGoodsIdList(goodsGroup.getGoodsIdList());
                 studentPaymentOrderDetail4goodsGroup.setCreateTime(date);
                 studentPaymentOrderDetail4goodsGroup.setUpdateTime(date);

+ 197 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -1,19 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.biz.dal.dao.ActivityApplyStudentTypeDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
-import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ActivityApplyStudentType;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
+import com.ym.mec.biz.dal.page.DoubleEleven2021QueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -21,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -35,6 +35,8 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	private TeacherDao teacherDao;
 	@Autowired
 	private VipGroupCategoryDao vipGroupCategoryDao;
+	@Autowired
+	private SysConfigDao sysConfigDao;
 
 	@Override
 	public BaseDAO<Integer, VipGroupActivity> getDAO() {
@@ -191,4 +193,195 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	public List<ActivityWaitCourseStudentNumDto> getActivityStudentCanCourseNum(Integer userId, Integer activityId) {
 		return vipGroupActivityDao.getActivityStudentCanCourseNum(userId,activityId);
 	}
+
+    @Override
+    public List<DoubleEleven2021Dto> organDoubleEleven2021Statis(String order,String sort,Integer organId) {
+		if(StringUtils.isEmpty(order)){
+			order = "DESC";
+		}
+		if(StringUtils.isEmpty(sort)){
+			sort = "totalBuyAmount";
+		}
+		List<DoubleEleven2021Dto> doubleEleven2021Dtos = vipGroupActivityDao.countOrganDoubleEleven2021Statis(organId);
+		if(doubleEleven2021Dtos != null && doubleEleven2021Dtos.size() > 0){
+			List<Integer> organIdList = doubleEleven2021Dtos.stream().map(e -> e.getOrganId()).collect(Collectors.toList());
+			List<DoubleEleven2021ActivityDto> activityDtoList = vipGroupActivityDao.countOrganActivityStatis(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));
+			for (DoubleEleven2021Dto doubleEleven2021Dto : doubleEleven2021Dtos) {
+				if(doubleEleven2021Dto.getTotalBuyAmount().compareTo(BigDecimal.ZERO) > 0){
+					doubleEleven2021Dto.setAvgBuyAmount(
+							doubleEleven2021Dto.getTotalBuyAmount().divide(new BigDecimal(doubleEleven2021Dto.getTotalBuyNum()),2,BigDecimal.ROUND_CEILING));
+				}
+				List<DoubleEleven2021ActivityDto> activityDtos = collect.get(doubleEleven2021Dto.getOrganId());
+				if(activityDtos != null && activityDtos.size() > 0){
+					for (DoubleEleven2021ActivityDto activityDto : activityDtos) {
+						if(activityDto.getType() == 1){
+							doubleEleven2021Dto.setVip1V120Amount(activityDto.getBuyAmount());
+							doubleEleven2021Dto.setVip1V120Num(activityDto.getBuyNum());
+						}else if (activityDto.getType() == 2){
+							doubleEleven2021Dto.setVip1V140Amount(activityDto.getBuyAmount());
+							doubleEleven2021Dto.setVip1V140Num(activityDto.getBuyNum());
+						}else if (activityDto.getType() == 3){
+							doubleEleven2021Dto.setVip1V220Amount(activityDto.getBuyAmount());
+							doubleEleven2021Dto.setVip1V220Num(activityDto.getBuyNum());
+						}else if (activityDto.getType() == 4){
+							doubleEleven2021Dto.setVip1V240Amount(activityDto.getBuyAmount());
+							doubleEleven2021Dto.setVip1V240Num(activityDto.getBuyNum());
+						}else if (activityDto.getType() == 5){
+							doubleEleven2021Dto.setMusicTheoryAmount(activityDto.getBuyAmount());
+							doubleEleven2021Dto.setMusicTheoryNum(activityDto.getBuyNum());
+						}
+					}
+				}
+				Long giveNum = maps.get(doubleEleven2021Dto.getOrganId().longValue());
+				doubleEleven2021Dto.setGiveMemberNum(giveNum == null?0l:giveNum);
+			}
+			if(sort.equals("totalBuyAmount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getTotalBuyAmount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getTotalBuyAmount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("totalBuyNum")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getTotalBuyNum)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getTotalBuyNum).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("avgBuyAmount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getAvgBuyAmount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getAvgBuyAmount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("giveMemberNum")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getGiveMemberNum)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getGiveMemberNum).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v120Amount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V120Amount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V120Amount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v140Amount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V140Amount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V140Amount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v220Amount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V220Amount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V220Amount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v240Amount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V240Amount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V240Amount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("musicTheoryAmount")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getMusicTheoryAmount)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getMusicTheoryAmount).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v120Num")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V120Num)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V120Num).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v140Num")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V140Num)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V140Num).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v220Num")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V220Num)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V220Num).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("vip1v240Num")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V240Num)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getVip1V240Num).reversed()).collect(Collectors.toList());
+				}
+			}else if(sort.equals("musicTheoryNum")){
+				if(order.equals("ASC")){
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getMusicTheoryNum)).collect(Collectors.toList());
+				}else {
+					doubleEleven2021Dtos = doubleEleven2021Dtos.stream().sorted(Comparator.comparing(DoubleEleven2021Dto::getMusicTheoryNum).reversed()).collect(Collectors.toList());
+				}
+			}
+		}
+		return doubleEleven2021Dtos;
+    }
+
+	@Override
+	public Object doubleEleven2021Statis() {
+		//获取总成交数据
+		DoubleEleven2021Dto doubleEleven2021Dto = vipGroupActivityDao.countDoubleEleven2021Statis();
+		if(doubleEleven2021Dto.getTotalBuyAmount().compareTo(BigDecimal.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){
+			for (DoubleEleven2021ActivityDto activityDto : activityDtos) {
+				if(activityDto.getType() == 1){
+					doubleEleven2021Dto.setVip1V120Amount(activityDto.getBuyAmount());
+					doubleEleven2021Dto.setVip1V120Num(activityDto.getBuyNum());
+				}else if (activityDto.getType() == 2){
+					doubleEleven2021Dto.setVip1V140Amount(activityDto.getBuyAmount());
+					doubleEleven2021Dto.setVip1V140Num(activityDto.getBuyNum());
+				}else if (activityDto.getType() == 3){
+					doubleEleven2021Dto.setVip1V220Amount(activityDto.getBuyAmount());
+					doubleEleven2021Dto.setVip1V220Num(activityDto.getBuyNum());
+				}else if (activityDto.getType() == 4){
+					doubleEleven2021Dto.setVip1V240Amount(activityDto.getBuyAmount());
+					doubleEleven2021Dto.setVip1V240Num(activityDto.getBuyNum());
+				}else if (activityDto.getType() == 5){
+					doubleEleven2021Dto.setMusicTheoryAmount(activityDto.getBuyAmount());
+					doubleEleven2021Dto.setMusicTheoryNum(activityDto.getBuyNum());
+				}
+			}
+		}
+		//获取赠送会员数
+		Integer giveMemberNum = vipGroupActivityDao.countGiveMemberNum();
+		doubleEleven2021Dto.setGiveMemberNum(giveMemberNum==null?0l:giveMemberNum.longValue());
+		return doubleEleven2021Dto;
+	}
+
+	@Override
+	public PageInfo<DoubleEleven2021OrderDetailDto> doubleEleven2021OrderDetail(DoubleEleven2021QueryInfo queryInfo) {
+		PageInfo<DoubleEleven2021OrderDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<DoubleEleven2021OrderDetailDto> dataList = null;
+		int count = vipGroupActivityDao.countDoubleEleven2021OrderDetail(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = vipGroupActivityDao.queryDoubleEleven2021OrderDetail(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

+ 4 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1336,10 +1336,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 		//是否消耗课程余额
 		if(activity.isPayToBalance() && !giveFlag){
-			ActivityUserMapper activityUserMapper = activityUserMappers.get(0);
-			StudentPaymentOrder order = studentPaymentOrderDao.get(activityUserMapper.getPaymentOrderId());
-			for (Integer studentId : studentIdList) {
-				sysUserCashAccountService.appendCourseBalance(studentId,order.getExpectAmount().negate(),
+			for (ActivityUserMapper userMapper : activityUserMappers) {
+				sysUserCashAccountService.appendCourseBalance(userMapper.getUserId(),userMapper.getActualPrice().negate(),
 						PlatformCashAccountDetailTypeEnum.PAY_FEE,"活动排课消耗课程余额");
 			}
 		}
@@ -2697,7 +2695,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentPaymentOrder.setOrganId(vipGroup.getOrganId());
 		studentPaymentOrder.setVersion(0);
 		studentPaymentOrder.setActivityBuyNum(vipGroup.getOnlineClassesNum() + vipGroup.getOfflineClassesNum());
-		studentPaymentOrder.setActivityId(vipGroup.getVipGroupActivityId());
+		Integer vipGroupActivityId = vipGroup.getVipGroupActivityId();
+		studentPaymentOrder.setActivityId(vipGroupActivityId==null?"":vipGroupActivityId.toString());
 		studentPaymentOrderDao.insert(studentPaymentOrder);
 
 		BigDecimal amount=studentPaymentOrder.getActualAmount();

+ 19 - 3
mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml

@@ -51,8 +51,21 @@
 		                                         #{giveVipGroupId},#{practiceGroupId},#{givePracticeGroupId},#{returnFee},
 		                                         #{memberOrderId},#{giveMemberOrderId},#{teacherId},#{actualPrice})
 	</insert>
-	
-	<!-- 根据主键查询一条记录 -->
+    <insert id="batchInsert">
+		INSERT INTO activity_user_mapper (activity_id_,user_id_,vip_flag_,give_vip_flag_,
+		practice_flag_,give_practice_flag_,member_flag_,give_member_flag_,create_time_,update_time_,payment_order_id_,
+		vip_group_id_,give_vip_group_id_,practice_group_id_,give_practice_group_id_,return_fee_,member_order_id_,
+		                                  give_member_order_id_,teacher_id_,actual_price_)
+		VALUES
+		<foreach collection="activityUserMappers" item="item" separator=",">
+			(#{item.activityId},#{item.userId},#{item.vipFlag},#{item.giveVipFlag},#{item.practiceFlag},
+			#{item.givePracticeFlag},#{item.memberFlag},#{item.giveMemberFlag},NOW(),NOW(),#{item.paymentOrderId},#{item.vipGroupId},
+			#{item.giveVipGroupId},#{item.practiceGroupId},#{item.givePracticeGroupId},#{item.returnFee},
+			 #{item.memberOrderId},#{item.giveMemberOrderId},#{item.teacherId},#{item.actualPrice})
+		</foreach>
+	</insert>
+
+    <!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ActivityUserMapper">
 		UPDATE activity_user_mapper
 		<set>
@@ -133,8 +146,11 @@
 		</if>
 		AND FIND_IN_SET(id_,#{activityUserMapperIds}) AND FIND_IN_SET(user_id_,#{studentIds}) AND return_fee_ = 0
 	</update>
+    <update id="updateTeacherId">
+		UPDATE activity_user_mapper SET teacher_id_ = #{teacherId} WHERE user_id_ = #{userId}
+	</update>
 
-	<!-- 根据主键删除一条记录 -->
+    <!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM activity_user_mapper WHERE id_ = #{id} 
 	</delete>

+ 15 - 5
mec-biz/src/main/resources/config/mybatis/LuckDrawCountMapper.xml

@@ -7,9 +7,10 @@
     <result column="available_count_" property="availableCount" jdbcType="INTEGER" />
     <result column="available_amount_" property="availableAmount" jdbcType="BIGINT" />
     <result column="modify_on_" property="modifyOn" jdbcType="TIMESTAMP" />
+    <result column="group_id_" property="groupId"/>
   </resultMap>
   <sql id="Base_Column_List" >
-    user_id_, used_count_, available_count_, available_amount_, modify_on_
+    user_id_, used_count_, available_count_, available_amount_, modify_on_,group_id_
   </sql>
   
   <select id="get" resultMap="BaseResultMap" parameterType="java.lang.Long" >
@@ -29,7 +30,13 @@
   <select id="findAll" resultMap="BaseResultMap">
     select * from luck_draw_count
   </select>
-  
+  <select id="findByIdAndGroupId" resultMap="BaseResultMap">
+    SELECT * FROM luck_draw_count WHERE user_id_ = #{userId} AND group_id_ = #{groupId}
+  </select>
+  <select id="findLockByIdAndGroupId" resultMap="BaseResultMap">
+    SELECT * FROM luck_draw_count WHERE user_id_ = #{userId} AND group_id_ = #{groupId} FOR UPDATE
+  </select>
+
   <delete id="delete" parameterType="java.lang.Long" >
     delete from luck_draw_count
     where user_id_ = #{userId,jdbcType=BIGINT}
@@ -37,14 +44,17 @@
   
   <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.LuckDrawCount" >
     insert into luck_draw_count (user_id_, used_count_, available_count_, available_amount_,
-      modify_on_)
-    values (#{userId,jdbcType=BIGINT}, #{usedCount,jdbcType=INTEGER}, #{availableCount,jdbcType=INTEGER}, #{availableAmount,jdbcType=BIGINT},
-      #{modifyOn,jdbcType=TIMESTAMP})
+      modify_on_,group_id_)
+    values (#{userId}, #{usedCount}, #{availableCount}, #{availableAmount},
+      NOW(),#{groupId})
   </insert>
   
   <update id="update" parameterType="com.ym.mec.biz.dal.entity.LuckDrawCount" >
     update luck_draw_count
     <set >
+      <if test="groupId != null" >
+        group_id_ = #{groupId},
+      </if>
       <if test="usedCount != null" >
         used_count_ = #{usedCount,jdbcType=INTEGER},
       </if>

+ 43 - 37
mec-biz/src/main/resources/config/mybatis/LuckDrawLogMapper.xml

@@ -21,35 +21,6 @@
 		l.id_,l.group_id_, l.prize_id_,d.name_,d.reward_type_, l.user_id_, l.create_on_
 	</sql>
 
-	<sql id="queryCondition">
-		<where>
-			<if test="prizeId != null">
-				and l.prize_id_ = #{id}
-			</if>
-			<if test="userId != null">
-				and l.user_id_ = #{userId}
-			</if>
-			<if test="name != null">
-				and d.name_ like concat('%',#{name},'%')
-			</if>
-			<if test="rewardType != null">
-				and d.reward_type_ like concat('%',#{rewardType},'%')
-			</if>
-			<if test="groupId != null">
-				and l.group_id_ = #{groupId}
-			</if>
-			<if test="startDate != null">
-				and l.create_on_ &gt;= #{startDate}
-			</if>
-			<if test="endDate != null">
-				and l.create_on_ &lt;= #{endDate}
-			</if>
-			<if test="organId != null">
-				and u.organ_id_ = #{organId}
-			</if>
-		</where>
-	</sql>
-
 	<select id="get" resultMap="BaseResultMap" parameterType="java.lang.Long">
 		select
 		<include refid="Base_Column_List" />
@@ -94,19 +65,54 @@
 	</update>
 
 	<select id="queryCount" parameterType="map" resultType="int">
-		select count(*) from luck_draw_log l 
-		left join luck_draw_prize d on l.prize_id_ = d.id_ 
-		left join sys_user u on u.id_=l.user_id_
+		SELECT COUNT(*) FROM luck_draw_log l
+		LEFT JOIN luck_draw_prize d ON l.prize_id_ = d.id_
+		LEFT JOIN sys_user u ON u.id_=l.user_id_
 		<include refid="queryCondition" />
 	</select>
 
 	<select id="queryPage" parameterType="map" resultMap="BaseResultMapExt">
-		select <include refid="Base_Column_List" />,u.username_,u.phone_,o.name_ organ_name_ from luck_draw_log l 
-		left join luck_draw_prize d on l.prize_id_ = d.id_ 
-		left join sys_user u on u.id_=l.user_id_
-		left join organization o on o.id_ = u.organ_id_
+		SELECT <include refid="Base_Column_List" />,u.username_,u.phone_,o.name_ organ_name_ FROM luck_draw_log l
+		LEFT JOIN luck_draw_prize d ON l.prize_id_ = d.id_
+		LEFT JOIN sys_user u ON u.id_=l.user_id_
+		LEFT JOIN organization o ON o.id_ = u.organ_id_
 		<include refid="queryCondition" />
-		order by l.create_on_ desc
+		ORDER BY l.create_on_ DESC
 		<include refid="global.limit" />
 	</select>
+
+	<sql id="queryCondition">
+		<where>
+			<if test="prizeId != null">
+				AND l.prize_id_ = #{id}
+			</if>
+			<if test="userId != null">
+				AND l.user_id_ = #{userId}
+			</if>
+			<if test="rewardType != null">
+				AND d.reward_type_ LIKE CONCAT('%',#{rewardType},'%')
+			</if>
+			<if test="groupId != null">
+				AND l.group_id_ = #{groupId}
+			</if>
+			<if test="name != null and name != ''">
+				AND d.name_ = #{name}
+			</if>
+			<if test="startDate != null">
+				AND l.create_on_ &gt;= #{startDate}
+			</if>
+			<if test="endDate != null">
+				AND l.create_on_ &lt;= #{endDate}
+			</if>
+			<if test="organId != null">
+				AND u.organ_id_ = #{organId}
+			</if>
+			<if test="defaultFlag != null">
+				AND d.is_default_ = #{defaultFlag}
+			</if>
+			<if test="search != null and search != ''">
+				AND (u.username_ LIKE CONCAT('%',#{search},'%') OR u.id_ = #{search})
+			</if>
+		</where>
+	</sql>
 </mapper>

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

@@ -141,4 +141,10 @@
 		from luck_draw_prize
 		where enabled_ = 1 and group_id_ = #{group} and is_default_ = 1 order by id_ asc
 	</select>
+    <select id="queryHorseRaceLampDto" resultMap="com.ym.mec.biz.dal.dao.SysCouponCodeDao.HorseRaceLampDto">
+		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
+	</select>
 </mapper>

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

@@ -68,4 +68,24 @@
 		SELECT COUNT(*) FROM market_activity
 		<include refid="queryPageSql"/>
 	</select>
+	<resultMap id="ActivityDetailDto" type="com.ym.mec.biz.dal.entity.ActivityDetailDto">
+		<result property="activityId" column="id_"/>
+		<result property="activityName" column="name_"/>
+		<result property="currentPrice" column="market_price_"/>
+		<result property="originalPrice" column="original_price_"/>
+		<result property="activityDesc" column="description_"/>
+		<result property="categoryName" column="category_name_"/>
+		<result property="categoryId" column="category_id_"/>
+		<result property="courseNum" column="course_num_"/>
+		<result property="startTime" column="start_time_"/>
+		<result property="endTime" column="end_time_"/>
+	</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_
+		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_
+		WHERE ma.id_ = #{marketPriceId} AND FIND_IN_SET(#{organId},vga.organ_id_)
+	</select>
 </mapper>

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

@@ -118,7 +118,7 @@
     </resultMap>
     <select id="findGoodsGroup" resultMap="findGoodsGroupMap">
         SELECT mgs.*, g.id_ g_id_,g.name_ g_name_,g.image_ g_image_,g.brief_ g_brief_, g.group_purchase_price_ g_group_purchase_price_,
-        g.specification_ g_specification_,g.brand_ g_brand,g.desc_ g_desc, g.market_price_ g_market_price_,g.complement_goods_id_list_
+        g.specification_ g_specification_,g.brand_ g_brand,g.desc_ g_desc, g.market_price_ g_market_price_, g.discount_price_ g_discount_price_,g.complement_goods_id_list_
         g_complement_goods_id_list_
         FROM music_group_subject_goods_group mgs,goods g
         WHERE FIND_IN_SET (g.id_ ,mgs.goods_id_list_)

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

@@ -619,6 +619,7 @@
         <result column="routeBalance" property="routeBalance"/>
         <result column="sale_amount_" property="saleAmount"/>
         <result column="service_amount_" property="serviceAmount"/>
+        <result column="service_fee_" property="serviceFee"/>
         <result column="routeBalance" property="routeBalance"/>
         <result column="feeFlag" property="feeFlag"/>
         <collection property="orderDetailList" ofType="com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail">
@@ -1030,4 +1031,8 @@
         WHERE status_ = 'SUCCESS' AND music_group_id_ = #{vipGroupId}
         GROUP BY user_id_
     </select>
+    <select id="queryStudentDoubleEleven2021Order" resultType="java.lang.String">
+        SELECT GROUP_CONCAT(activity_id_) FROM student_payment_order
+        WHERE type_ = 'DOUBLE_ELEVEN2021' AND status_ = 'SUCCESS' AND user_id_ = #{userId}
+    </select>
 </mapper>

+ 11 - 7
mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml

@@ -17,6 +17,7 @@
         <result column="pay_time_" property="payTime"/>
         <result column="sale_amount_" property="saleAmount"/>
         <result column="service_amount_" property="serviceAmount"/>
+        <result column="service_fee_" property="serviceFee"/>
         <result column="memo_" property="memo"/>
         <result column="goods_json_" property="goodsJson"/>
         <result column="audit_status_" property="auditStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
@@ -51,7 +52,7 @@
 
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id_, route_organ_id_, route_amount_,route_balance_amount_, mer_no_, order_no_, fee_flag_,user_id_,school_id_,trans_no_,pay_time_,sale_amount_,service_amount_,memo_,goods_json_,audit_status_,audit_comment_,calender_id_,create_time_,create_by_,update_time_,update_by_
+        id_, route_organ_id_, route_amount_,route_balance_amount_, mer_no_, order_no_, fee_flag_,user_id_,school_id_,trans_no_,pay_time_,sale_amount_,service_amount_,service_fee_,memo_,goods_json_,audit_status_,audit_comment_,calender_id_,create_time_,create_by_,update_time_,update_by_
     </sql>
     <select id="get" parameterType="java.lang.Long" resultMap="StudentPaymentRouteOrderMap">
         <!--@mbg.generated-->
@@ -71,8 +72,8 @@
             parameterType="com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder" useGeneratedKeys="true">
         <!--@mbg.generated-->
         insert into student_payment_route_order (route_organ_id_, route_amount_,route_balance_amount_, mer_no_,
-        order_no_, fee_flag_,user_id_,school_id_,trans_no_,pay_time_,sale_amount_,service_amount_,memo_,goods_json_,audit_status_,audit_comment_,calender_id_,create_time_,update_time_,create_by_,update_by_)
-        values (#{routeOrganId}, #{routeAmount},#{routeBalanceAmount}, #{merNo}, #{orderNo}, #{feeFlag},#{userId},#{schoolId},#{transNo},#{payTime},#{saleAmount},#{serviceAmount},#{memo},#{goodsJson},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{auditComment},#{calenderId},#{createTime},#{updateTime},#{createBy},#{updateBy})
+        order_no_, fee_flag_,user_id_,school_id_,trans_no_,pay_time_,sale_amount_,service_amount_,service_fee_,memo_,goods_json_,audit_status_,audit_comment_,calender_id_,create_time_,update_time_,create_by_,update_by_)
+        values (#{routeOrganId}, #{routeAmount},#{routeBalanceAmount}, #{merNo}, #{orderNo}, #{feeFlag},#{userId},#{schoolId},#{transNo},#{payTime},#{saleAmount},#{serviceAmount},#{serviceFee},#{memo},#{goodsJson},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{auditComment},#{calenderId},#{createTime},#{updateTime},#{createBy},#{updateBy})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder">
         <!--@mbg.generated-->
@@ -111,6 +112,9 @@
             </if>
                 sale_amount_ = #{saleAmount},
                 service_amount_ = #{serviceAmount},
+            <if test="serviceFee != null">
+                service_fee_ = #{serviceFee},
+            </if>
             <if test="memo != null">
                 memo_ = #{memo},
             </if>
@@ -144,14 +148,14 @@
             keyProperty="id">
         INSERT INTO student_payment_route_order
         (order_no_,route_organ_id_, route_amount_,route_balance_amount_, mer_no_,fee_flag_,user_id_,
-        school_id_,trans_no_,pay_time_,sale_amount_,service_amount_,memo_,goods_json_,audit_status_,
+        school_id_,trans_no_,pay_time_,sale_amount_,service_amount_,service_fee_,memo_,goods_json_,audit_status_,
         audit_comment_,calender_id_,create_time_,update_time_,create_by_,update_by_)
         VALUE
         <foreach collection="routeOrders" item="routeOrder" separator=",">
             (#{routeOrder.orderNo},#{routeOrder.routeOrganId},#{routeOrder.routeAmount},
             #{routeOrder.routeBalanceAmount},#{routeOrder.merNo},#{routeOrder.feeFlag},
             #{routeOrder.userId},#{routeOrder.schoolId},#{routeOrder.transNo},#{routeOrder.payTime},
-            #{routeOrder.saleAmount},#{routeOrder.serviceAmount},#{routeOrder.memo},#{routeOrder.goodsJson},
+            #{routeOrder.saleAmount},#{routeOrder.serviceAmount},#{routeOrder.serviceFee},#{routeOrder.memo},#{routeOrder.goodsJson},
             #{routeOrder.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{routeOrder.auditComment},
             #{routeOrder.calenderId},NOW(),NOW(),#{routeOrder.createBy},#{routeOrder.updateBy})
         </foreach>
@@ -285,7 +289,7 @@
         SELECT spo.*,u.username_,spod.id_ detail_id_,spod.type_ detail_type_,spod.price_
         detail_price_,spod.kit_group_purchase_type_ detail_kit_group_purchase_type_,
         sci.charge_type_,g.id_ goods_id, g.name_ goods_name,o.name_ organ_name,spro.route_amount_
-        routeAmount,spro.route_balance_amount_ routeBalance,spro.sale_amount_,spro.service_amount_,
+        routeAmount,spro.route_balance_amount_ routeBalance,spro.sale_amount_,spro.service_amount_,spro.service_fee_,
         spro.mer_no_ routeMerNo,spro.fee_flag_ feeFlag
         FROM student_payment_order spo
         LEFT JOIN student_payment_route_order spro ON spro.order_no_ = spo.order_no_
@@ -295,7 +299,7 @@
         LEFT JOIN sporadic_charge_info sci on spo.music_group_id_ = sci.id_
         LEFT JOIN goods g on FIND_IN_SET(g.id_,spod.goods_id_list_)
         <include refid="queryPaymentOrder"/>
-        ORDER BY spro.id_ DESC
+        ORDER BY spro.id_ asc
     </select>
     <select id="countByTransNo" resultType="java.lang.String">
         SELECT trans_no_ FROM student_payment_route_order WHERE trans_no_ IN

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

@@ -210,6 +210,7 @@
 		<result property="username" column="username_"/>
 		<result property="num" column="num_"/>
 		<result property="faceValue" column="face_value_"/>
+		<result property="prizeName" column="prize_name_"/>
 	</resultMap>
 	<select id="queryHorseRaceLampDtoList" resultMap="HorseRaceLampDto">
 		SELECT COUNT(suc.coupon_id_) num_,sc.face_value_,su.username_ FROM sys_coupon_code suc

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

@@ -36,6 +36,7 @@
 		<result property="giveCourseNum" column="give_course_num_"/>
 		<result property="giveMemberRankId" column="give_member_rank_id_"/>
 		<result property="giveMemberTime" column="give_member_time_"/>
+		<result property="givePrizeNum" column="give_prize_num_"/>
 		<result property="giveAllowOnlineToOffline" column="give_allow_online_to_offline_"/>
 		<result property="memberRankId" column="member_rank_id_"/>
 		<result property="memberTime" column="member_time_"/>
@@ -50,6 +51,7 @@
 		<result property="status" column="status_"/>
 		<result property="marketPrice" column="market_price_"/>
 		<result property="enable" column="enable_"/>
+		<result property="code" column="code_"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -71,13 +73,13 @@
 										single_course_time_,discount_,full_minus_course_times_,give_course_type_,give_category_id_,give_course_num_
 										,member_rank_id_,member_time_,give_member_rank_id_,give_member_time_,course_type_,
 		                                activity_type_,give_sign_course_time_,is_pay_to_balance_,teach_mode_,give_teach_mode_,
-		                                period_,give_period_,status_,market_price_,give_allow_online_to_offline_)
+		                                period_,give_period_,status_,market_price_,give_allow_online_to_offline_,give_prize_num_)
 		VALUES(#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},
 		       now(),now(),#{salarySettlementJson},#{delFlag},#{onlineClassJoinGradientRewards},
 		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes},#{applyToStudentType},#{allowOnlineToOffline},
 			   #{singleCourseTime},#{discount},#{fullMinusCourseTimes},#{giveCourseType},#{giveCategoryId},#{giveCourseNum}
 				  ,#{memberRankId},#{memberTime},#{giveMemberRankId},#{giveMemberTime},#{courseType},#{activityType},#{giveSingleCourseTime},
-		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum},#{givePeriodEnum},#{status},#{marketPrice},#{giveAllowOnlineToOffline})
+		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum},#{givePeriodEnum},#{status},#{marketPrice},#{giveAllowOnlineToOffline},#{givePrizeNum})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -96,7 +98,7 @@
 		online_class_join_gradient_rewards_=#{onlineClassJoinGradientRewards},
 		offline_class_join_gradient_rewards_=#{offlineClassJoinGradientRewards},min_course_num_=#{minCourseNum},
 		max_course_num_=#{maxCourseNum},student_max_used_times_=#{studentMaxUsedTimes},apply_to_student_type_=#{applyToStudentType},
-		allow_online_to_offline_=#{allowOnlineToOffline},end_time_ = #{endTime},market_price_ = #{marketPrice},update_time_ = NOW(),give_allow_online_to_offline_ = #{giveAllowOnlineToOffline} WHERE id_ = #{id}
+		allow_online_to_offline_=#{allowOnlineToOffline},end_time_ = #{endTime},market_price_ = #{marketPrice},update_time_ = NOW(),give_allow_online_to_offline_ = #{giveAllowOnlineToOffline},give_prize_num_ = #{givePrizeNum} WHERE id_ = #{id}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
@@ -329,4 +331,123 @@
 		</if>
 		GROUP BY aum.user_id_
 	</select>
+	<resultMap id="DoubleEleven2021ActivityDto" type="com.ym.mec.biz.dal.dto.DoubleEleven2021ActivityDto">
+		<result property="buyNum" column="buy_num_"/>
+		<result property="buyAmount" column="buy_amount_"/>
+		<result property="type" column="type_"/>
+		<result property="organId" column="organ_id_"/>
+	</resultMap>
+	<select id="countActivityStatis" 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.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)
+		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">
+		<result property="totalBuyAmount" column="total_buy_amount_"/>
+		<result property="totalBuyNum" column="total_buy_num_"/>
+		<result property="organName" column="organ_name_"/>
+		<result property="organId" column="organ_id_"/>
+	</resultMap>
+	<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)
+	</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)
+	</select>
+	<select id="countOrganGiveMemberNum" resultType="map">
+		SELECT organ_id_ 'key',COUNT(DISTINCT student_id_) 'value'
+		FROM cloud_teacher_order WHERE remark_ = '双十一活动赠送会员'
+		AND organ_id_ IN
+		<foreach collection="organIdList" open="(" close=")" item="organId" separator=",">
+			#{organId}
+		</foreach>
+		GROUP BY organ_id_
+	</select>
+	<select id="countOrganActivityStatis" 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.type_ = 'DOUBLE_ELEVEN2021' AND spo.status_ = 'SUCCESS'
+		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)
+		<if test="organId != null">
+			AND o.id_ = #{organId}
+		</if>
+		GROUP BY o.id_
+	</select>
+	<resultMap id="DoubleEleven2021OrderDetailDto" type="com.ym.mec.biz.dal.dto.DoubleEleven2021OrderDetailDto">
+		<result property="userId" column="user_id_"/>
+		<result property="username" column="username_"/>
+		<result property="amount" column="amount_"/>
+		<result property="createTime" column="create_time_"/>
+		<result property="giveMember" column="give_member_"/>
+		<result property="orderNo" column="order_no_"/>
+		<result property="payTime" column="pay_time_"/>
+		<result property="type" column="type_"/>
+	</resultMap>
+	<sql id="queryDoubleEleven2021OrderDetailSql">
+		WHERE spo.status_ = 'SUCCESS' AND spo.type_ = 'DOUBLE_ELEVEN2021'
+		<if test="search != null and search != ''">
+			AND su.id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR spo.order_no_ LIKE CONCAT('%',#{search},'%')
+		</if>
+		<if test="organId != null and organId != ''">
+			AND spo.organ_id_ = #{organId}
+		</if>
+		<if test="startTime != null">
+			AND spo.pay_time_ >= #{startTime}
+		</if>
+		<if test="endTime != null">
+			AND spo.pay_time_ &lt;= #{endTime}
+		</if>
+		<if test="type != null">
+			AND vga.code_ = #{type}
+		</if>
+		<if test="giveMemberFlag != null and giveMemberFlag == 1">
+			AND cto.id_ IS NOT NULL
+		</if>
+		<if test="giveMemberFlag != null and giveMemberFlag == 0">
+			AND cto.id_ IS NULL
+		</if>
+	</sql>
+	<select id="queryDoubleEleven2021OrderDetail" resultMap="DoubleEleven2021OrderDetailDto">
+		SELECT spo.user_id_,su.username_,spo.order_no_,SUM(aum.actual_price_) amount_,spo.create_time_,spo.pay_time_,GROUP_CONCAT(vga.attribute1_) type_,
+			   CASE WHEN cto.id_ IS NULL THEN 0 ELSE 1 END give_member_
+		FROM student_payment_order spo
+				 LEFT JOIN activity_user_mapper aum ON spo.id_ = aum.payment_order_id_
+				 LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
+				 LEFT JOIN sys_user su ON su.id_ = spo.user_id_
+				 LEFT JOIN cloud_teacher_order cto ON cto.order_id_ = spo.id_
+		<include refid="queryDoubleEleven2021OrderDetailSql"/>
+		GROUP BY spo.id_
+		ORDER BY spo.pay_time_ DESC
+		<include refid="global.limit"/>
+	</select>
+	<select id="countDoubleEleven2021OrderDetail" resultType="java.lang.Integer">
+		SELECT COUNT(DISTINCT spo.id_)
+		FROM student_payment_order spo
+		LEFT JOIN sys_user su ON su.id_ = spo.user_id_
+		LEFT JOIN activity_user_mapper aum ON spo.id_ = aum.payment_order_id_
+		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
+		LEFT JOIN cloud_teacher_order cto ON cto.order_id_ = spo.id_
+		<include refid="queryDoubleEleven2021OrderDetailSql"/>
+	</select>
 </mapper>

+ 117 - 5
mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java

@@ -2,18 +2,28 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dto.BuyDoubleEleven2021Dto;
+import com.ym.mec.biz.dal.entity.ActivityDetailDto;
 import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.service.MarketActivityService;
+import com.ym.mec.biz.service.PracticeGroupService;
 import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.util.date.DateUtil;
+import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import java.util.Comparator;
-import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
 
 @RequestMapping("activity")
 @Api(tags = "活动")
@@ -23,6 +33,14 @@ public class ActivityController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private SporadicChargeInfoService sporadicChargeInfoService;
+    @Autowired
+    private MarketActivityService marketActivityService;
+    @Autowired
+    private PracticeGroupService practiceGroupService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
 
     @ApiOperation(value = "分部双11活动信息")
     @GetMapping("/doubleEleven2020")
@@ -43,4 +61,98 @@ public class ActivityController extends BaseController {
         }
         return succeed(activeInfos);
     }
+
+    @ApiOperation(value = "分部双11活动信息")
+    @RequestMapping("/doubleEleven2021")
+    public HttpResponseResult doubleEleven2021(){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed("请先登录");
+        }
+        if (sysUser.getOrganId() == null) {
+            return failed("用户信息有误,没有分部信息");
+        }
+        Map<String,Object> resultMap = new HashMap<>(1);
+        List<ActivityDetailDto> activityDetailDtos = marketActivityService.queryActivity(2, sysUser.getOrganId());
+        resultMap.put("activityDetailList",activityDetailDtos);
+        resultMap.put("startTime",null);
+        resultMap.put("endTime",null);
+        if(activityDetailDtos != null && activityDetailDtos.size() > 0){
+            ActivityDetailDto activityDetailDto = activityDetailDtos.get(0);
+            resultMap.put("startTime",activityDetailDto.getStartTime());
+            resultMap.put("endTime",activityDetailDto.getEndTime());
+        }
+//        resultMap.put("horseRaceLampList",luckDrawPrizeService.queryHorseRaceLampDto(2));
+//        LuckDrawCount luckDrawCount = luckDrawCountService.findByIdAndGroupId(sysUser.getId(),2);
+//        if(luckDrawCount != null){
+//            resultMap.put("drawNum",luckDrawCount.getAvailableCount());
+//        }else {
+//            resultMap.put("drawNum",0);
+//        }
+        return succeed(resultMap);
+    }
+
+    @ApiOperation("2021双十一活动购买")
+    @PostMapping(value = "/buyDoubleEleven2021")
+    @AuditLogAnnotation(operateName = "2021双十一活动购买")
+    public HttpResponseResult buyDoubleEleven2021(@RequestBody BuyDoubleEleven2021Dto buyDoubleEleven2021Dto) throws Exception {
+        Date nowTime = new Date();
+        String startTimeStr = sysConfigDao.findConfigValue(SysConfigService.START_TIME_OF_1111);
+        Date startTime = DateUtil.stringToDate(startTimeStr);
+        if (startTime.compareTo(nowTime) > 0) {
+            throw new BizException("活动还未开始,谢谢关注");
+        }
+        String endTimeStr = sysConfigDao.findConfigValue(SysConfigService.END_TIME_OF_1111);
+        Date endTime = DateUtil.stringToDate(endTimeStr);
+        if (endTime.compareTo(nowTime) <= 0) {
+            throw new BizException("活动已结束,谢谢关注");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(StringUtils.isEmpty(buyDoubleEleven2021Dto.getActivityIdList())){
+            throw new BizException("请选择活动");
+        }
+        buyDoubleEleven2021Dto.setOrganId(sysUser.getOrganId());
+        buyDoubleEleven2021Dto.setUserId(sysUser.getId());
+        return practiceGroupService.buyDoubleEleven2021(buyDoubleEleven2021Dto);
+    }
+
+    @ApiOperation(value = "学员已购买的双十一活动信息")
+    @GetMapping("/queryStudentDoubleEleven2021Order")
+    public Object queryStudentDoubleEleven2021Order() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        List<ActivityDetailDto> activityDetailDtos = marketActivityService.queryActivity(2, user.getOrganId());
+        String activitys = studentPaymentOrderDao.queryStudentDoubleEleven2021Order(user.getId());
+        List<Integer> activityList = new ArrayList<>();
+        if(StringUtils.isNotEmpty(activitys)){
+            for (ActivityDetailDto activityDetailDto : activityDetailDtos) {
+                if(activitys.contains(activityDetailDto.getActivityId().toString())){
+                    if(activityDetailDto.getCategoryName().equals("1v1")){
+                        if(activityDetailDto.getCourseNum().intValue() == 20){
+                            activityList.add(1);
+                        }else {
+                            activityList.add(2);
+                        }
+                    }
+                    if(activityDetailDto.getCategoryName().equals("1v2")){
+                        if(activityDetailDto.getCourseNum().intValue() == 20){
+                            activityList.add(3);
+                        }else {
+                            activityList.add(4);
+                        }
+                    }
+                    if(activityDetailDto.getCategoryName().equals("乐理课")){
+                        activityList.add(5);
+                    }
+                }
+            }
+            return succeed(StringUtils.join(activityList,","));
+        }
+        return succeed("");
+    }
 }

+ 19 - 18
mec-student/src/main/java/com/ym/mec/student/controller/LuckDrawController.java

@@ -1,15 +1,5 @@
 package com.ym.mec.student.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.LuckDrawLog;
@@ -20,6 +10,13 @@ import com.ym.mec.biz.service.LuckDrawPrizeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.util.string.ValueUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 @Api(tags = "抽奖")
 @RestController
@@ -39,8 +36,12 @@ public class LuckDrawController extends BaseController {
 	private SysUserFeignService sysUserFeignService;
 
 	@ApiOperation(value = "查询抽奖记录")
-	@GetMapping(value = "/list", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@GetMapping(value = "/list")
 	public Object list(LuckDrawQueryInfo queryInfo) {
+		if(!queryInfo.getAllFlag()){
+			SysUser sysUser = sysUserFeignService.queryUserInfo();
+			queryInfo.setUserId(sysUser.getId());
+		}
 		PageInfo<LuckDrawLog> pageInfo = luckDrawLogService.queryPage(queryInfo);
 		for (LuckDrawLog log : pageInfo.getRows()) {
 			log.getUser().setPhone(ValueUtil.fuzzyMobile(log.getUser().getPhone()));
@@ -49,7 +50,7 @@ public class LuckDrawController extends BaseController {
 	}
 
 	@ApiOperation(value = "查询我的抽奖记录")
-	@GetMapping(value = "/myList", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@GetMapping(value = "/myList")
 	public Object myList(LuckDrawQueryInfo queryInfo) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
@@ -60,23 +61,23 @@ public class LuckDrawController extends BaseController {
 	}
 
 	@ApiOperation(value = "抽奖")
-	@PostMapping(value = "/draw", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	public Object draw(int group) {
+	@PostMapping(value = "/draw")
+	public Object draw(Integer groupId) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			return failed("用户信息获取失败");
 		}
-		return succeed(luckDrawPrizeService.draw((long) sysUser.getId(), group));
+		return succeed(luckDrawPrizeService.draw((long) sysUser.getId(), groupId));
 	}
 
 	@ApiOperation(value = "查询个人抽奖机会")
-	@GetMapping(value = "/queryCount", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	public Object queryCount() {
+	@GetMapping(value = "/queryCount")
+	public Object queryCount(Integer groupId) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			return failed("用户信息获取失败");
 		}
-		return succeed(luckDrawCountService.get((long) sysUser.getId()));
+		return succeed(luckDrawCountService.findByIdAndGroupId(sysUser.getId(),groupId));
 	}
 
 }

+ 8 - 4
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -128,14 +128,14 @@ public class StudentOrderController extends BaseController {
     private ReplacementInstrumentActivityDao replacementInstrumentActivityDao;
     @Autowired
     private ChildrenDayDegreeDetailDao childrenDayDegreeDetailDao;
-
     @Autowired
     private CloudTeacherOrderService cloudTeacherOrderService;
     @Autowired
     private SysCouponCodeDao sysCouponCodeDao;
     @Autowired
     private StudentRegistrationDao studentRegistrationDao;
-
+    @Autowired
+    private VipGroupActivityDao vipGroupActivityDao;
     @Autowired
     private SellOrderService sellOrderService;
 
@@ -233,8 +233,10 @@ public class StudentOrderController extends BaseController {
                 orderDetail.put("member", cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId()));
             }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP)) {
-            VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
-            orderDetail.put("detail", vipBuyResultInfo);
+            if(StringUtils.isNotEmpty(orderByOrderNo.getMusicGroupId())){
+                VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
+                orderDetail.put("detail", vipBuyResultInfo);
+            }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
             if (Objects.nonNull(orderByOrderNo.getMusicGroupId())) {
                 SporadicChargeInfo info = sporadicChargeInfoService.get(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
@@ -257,6 +259,8 @@ public class StudentOrderController extends BaseController {
             orderDetail.put("detail", replacementInstrumentActivityDao.getInfo(Integer.parseInt(orderByOrderNo.getMusicGroupId())));
         } else if (orderByOrderNo.getGroupType().equals(GroupType.DEGREE)) {
             orderDetail.put("detail", childrenDayDegreeDetailDao.getByOrderId(orderByOrderNo.getId()));
+        } else if (orderByOrderNo.getGroupType().equals(GroupType.ACTIVITY)) {
+            orderDetail.put("detail", vipGroupActivityDao.queryByIds(orderByOrderNo.getActivityId()));
         } else if (orderByOrderNo.getGroupType().equals(GroupType.MEMBER)) {
             CloudTeacherOrderDto orderDto = cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId());
             orderDetail.put("detail",orderDto);

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

@@ -37,7 +37,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/uploadFile", "/eduContracts/queryProduceContract", "/activity/doubleEleven2020Statis", "/replacementInstrument/queryPage",
                         "/replacementInstrumentActivity/queryReplacementsStat", "/eduStudentRegistration/queryPreApplyList",
                         "/eduSubject/findSubSubjects", "/eduFinancialExpenditure/batchAdd", "/eduSendNotice/*",
-                        "/oaContracts/*", "/eduStudent/organStudentOverView", "/activity/countCloudTeacherActive").permitAll().anyRequest().authenticated().and().httpBasic();
+                        "/oaContracts/*", "/eduStudent/organStudentOverView", "/activity/countCloudTeacherActive",
+                        "/activity/organDoubleEleven2021Statis", "/activity/doubleEleven2021Statis").permitAll().anyRequest().authenticated().and().httpBasic();
     }
 
     @Override

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

@@ -249,6 +249,129 @@ public class ExportController extends BaseController {
         }
     }
 
+    @ApiOperation(value = "2021双十一学员购买详情")
+    @RequestMapping("export/doubleEleven2021OrderDetail")
+    @PreAuthorize("@pcs.hasPermissions('export/doubleEleven2021OrderDetail')")
+    public void doubleEleven2021OrderDetail(HttpServletResponse response,DoubleEleven2021QueryInfo queryInfo) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        List<DoubleEleven2021OrderDetailDto> rows = vipGroupActivityService.doubleEleven2021OrderDetail(queryInfo).getRows();
+        if(rows.size() < 1){
+            throw new BizException("没有可导出数据");
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "学员姓名","订单号", "交易金额",
+                    "交易时间", "订单创建时间", "购买课程", "赠送会员"}, new String[]{
+                    "userId", "username", "orderNo","amount", "payTime", "createTime","type",
+                    "giveMember==0?'否':'是'"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            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 = "分部2021双11活动统计导出")
+    @RequestMapping("export/organDoubleEleven2021Statis")
+    @PreAuthorize("@pcs.hasPermissions('export/organDoubleEleven2021Statis')")
+    public void organDoubleEleven2021Statis(HttpServletResponse response,Integer organId,String order, String sort) throws IOException {
+        List<DoubleEleven2021Dto> rows = vipGroupActivityService.organDoubleEleven2021Statis(order, sort,organId);
+        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","musicTheoryAmount","musicTheoryNum","giveMemberNum"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            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 = "21年暑期考级活动统计页面详情导出")
+    @PostMapping("export/statisticsDetail")
+    @PreAuthorize("@pcs.hasPermissions('export/statisticsDetail')")
+    public void statisticsDetail(HttpServletResponse response, ChildrenReserveQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        List<ChildrenStatisticsDetailDto> rows = childrenDayReserveService.exportStatisticsDetail(queryInfo);
+        if(rows.size() < 1){
+            throw new BizException("没有可导出数据");
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "合作单位", "乐团","学员编号", "学员姓名", "手机号","声部","所在班级","指导老师", "是否预约", "器乐等级", "乐理等级", "是否购买VIP","是否购买乐理课"}, new String[]{
+                    "organName", "cooperationOrganName", "musicGroupName","userId", "username", "phone","subjectName",
+                    "currentClass", "realName", "isReserve == true ?'是':'否'","gradeLeave"
+                    ,"theoryLevel","buyVipFlag == true ?'是':'否'","buyTheoryCourseFlag == true ?'是':'否'"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            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 = "21年暑期考级活动统计页面详情导出")
     @PostMapping("export/statisticsDetailPage")

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/LuckDrawController.java

@@ -123,7 +123,7 @@ public class LuckDrawController extends BaseController {
 	}
 
 	@ApiOperation(value = "查询抽奖列表")
-	@GetMapping(value = "luckDrawLog/rewardlist", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@GetMapping(value = "luckDrawLog/rewardlist")
 	@PreAuthorize("@pcs.hasPermissions('luckDrawLog/rewardlist')")
 	public Object rewardlist(LuckDrawQueryInfo queryInfo) {
 		return succeed(luckDrawLogService.queryPage(queryInfo));

+ 23 - 0
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java

@@ -10,9 +10,11 @@ import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.page.DoubleEleven2021QueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 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.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -48,6 +50,27 @@ public class VipGroupActivityController extends BaseController {
 	@Autowired
     private StudentDao studentDao;
 
+    @ApiOperation(value = "分部双11活动统计")
+    @GetMapping("/organDoubleEleven2021Statis")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/organDoubleEleven2021Statis')")
+    public HttpResponseResult organDoubleEleven2021Statis(String order, String sort,Integer organId){
+        return succeed(vipGroupActivityService.organDoubleEleven2021Statis(order,sort,organId));
+    }
+
+    @ApiOperation(value = "分部2021双11活动学员列表")
+    @GetMapping("/doubleEleven2021OrderDetail")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/doubleEleven2021OrderDetail')")
+    public HttpResponseResult doubleEleven2021OrderDetail(DoubleEleven2021QueryInfo queryInfo){
+        return succeed(vipGroupActivityService.doubleEleven2021OrderDetail(queryInfo));
+    }
+
+    @ApiOperation(value = "双11活动统计")
+    @GetMapping("/doubleEleven2021Statis")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/doubleEleven2021Statis')")
+    public HttpResponseResult doubleEleven2021Statis(){
+        return succeed(vipGroupActivityService.doubleEleven2021Statis());
+    }
+
     @ApiOperation(value = "新增vip课活动方案")
     @PostMapping("/addVipGroupActivity")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/addVipGroupActivity')")

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

@@ -160,14 +160,14 @@ public class ActivityController extends BaseController {
 
     @ApiOperation(value = "分部双11活动统计")
     @GetMapping("/organDoubleEleven2021Statis")
-    public HttpResponseResult<LuckStatisDto> organDoubleEleven2021Statis(){
-        return null;
+    public HttpResponseResult organDoubleEleven2021Statis(String order,String sort,Integer organId){
+        return succeed(vipGroupActivityService.organDoubleEleven2021Statis(order,sort,organId));
     }
 
     @ApiOperation(value = "双11活动统计")
     @GetMapping("/doubleEleven2021Statis")
-    public HttpResponseResult<LuckStatisDto> doubleEleven2021Statis(){
-        return null;
+    public HttpResponseResult doubleEleven2021Statis(){
+        return succeed(vipGroupActivityService.doubleEleven2021Statis());
     }
 
     @ApiOperation(value = "分部双11活动统计")

+ 13 - 9
mec-web/src/main/java/com/ym/mec/web/controller/education/EduSchoolController.java

@@ -55,20 +55,24 @@ public class EduSchoolController extends BaseController {
 
     @ApiOperation(value = "获取教师vip课教学点")
     @GetMapping("/findVipSchoolByTeacher2")
-    public Object findVipSchoolByTeacher2(Integer isDefault){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed(HttpStatus.FORBIDDEN,"请登录");
+    public Object findVipSchoolByTeacher2(Integer userId,Integer isDefault){
+        Teacher teacher = null;
+        if(userId != null){
+            teacher = teacherDao.get(userId);
+        }else {
+            SysUser sysUser = sysUserFeignService.queryUserInfo();
+            if(sysUser == null){
+                return failed(HttpStatus.FORBIDDEN,"请登录");
+            }
+            teacher = teacherDao.get(sysUser.getId());
         }
-        Teacher teacher = teacherDao.get(sysUser.getId());
-        if(teacher == null){
-            return failed("非法访问");
+        if (teacher == null) {
+            return failed("用户信息获取失败");
         }
-
         String organIdList = teacher.getTeacherOrganId().toString();
         if (StringUtils.isNoneBlank(teacher.getFlowOrganRange())) {
             organIdList += "," + teacher.getFlowOrganRange();
         }
-        return succeed(schoolService.findVipSchoolByTeacher(sysUser.getId(),organIdList,isDefault));
+        return succeed(schoolService.findVipSchoolByTeacher(teacher.getId(),organIdList,isDefault));
     }
 }