Browse Source

Merge branch '2022DoubleEleven' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 3 years ago
parent
commit
d75e996646
36 changed files with 716 additions and 528 deletions
  1. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempBuyDoubleElevenUserLogDao.java
  3. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java
  4. 0 95
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2021Dto.java
  5. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BuyDoubleEleven2022Dto.java
  6. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysConfigJsonDto.java
  7. 62 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempBuyDoubleElevenUserLog.java
  8. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  9. 0 5
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentStudentCourseDetailService.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  11. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  12. 12 4
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  13. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  14. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationShareProfitServiceImpl.java
  15. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawCountServiceImpl.java
  16. 45 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupCalenderRefundPeriodServiceImpl.java
  17. 43 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  18. 2 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentStudentCourseDetailServiceImpl.java
  19. 37 214
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  20. 5 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  21. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  22. 1 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  23. 188 25
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  24. 23 4
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  25. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  26. 2 2
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  27. 40 0
      mec-biz/src/main/resources/config/mybatis/TempBuyDoubleElevenUserLog.xml
  28. 26 0
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  29. 37 30
      mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java
  30. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java
  31. 1 4
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  32. 20 8
      mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java
  33. 2 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  34. 4 0
      mec-web/src/main/java/com/ym/mec/web/controller/CooperationShareProfitController.java
  35. 13 4
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java
  36. 29 38
      mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java

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

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

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.TempBuyDoubleElevenUserLog;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface TempBuyDoubleElevenUserLogDao extends BaseDAO<Integer, TempBuyDoubleElevenUserLog> {
+
+    Integer countGiveNum();
+}

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -1,13 +1,8 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
 import com.ym.mec.common.service.BaseService;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
 
 public interface MusicGroupPaymentStudentCourseDetailService extends BaseService<Long, MusicGroupPaymentStudentCourseDetail> {
 
-    String getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(String musicGroupId,Integer studentId,CourseSchedule.CourseScheduleType courseType,List<String> batchNos);
 }

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

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

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

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

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

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

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

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

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

@@ -77,6 +77,9 @@ public class CooperationShareProfitServiceImpl extends BaseServiceImpl<Integer,
 		}
 		List<CourseSchedule> courseSchedules = courseScheduleDao.findByCourseScheduleIds(courseIds);
 		List<String> musicGroupIds = courseSchedules.stream().map(e -> e.getMusicGroupId()).distinct().collect(Collectors.toList());
+		if(CollectionUtils.isEmpty(musicGroupIds)){
+			return;
+		}
 		musicGroupIds.removeAll(cooperationShareProfitDao.queryNotShare(musicGroupIds));
 		musicGroupIds.removeAll(Collections.singleton(null));
 		if(CollectionUtils.isEmpty(musicGroupIds)){

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

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

+ 45 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupCalenderRefundPeriodServiceImpl.java

@@ -139,48 +139,53 @@ public class MusicGroupCalenderRefundPeriodServiceImpl extends BaseServiceImpl<I
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean calcRefundAmount(Long calenderId,String orderNo, BigDecimal amount) {
-        //获取回款周期
-        List<MusicGroupCalenderRefundPeriod> refundPeriods = musicGroupCalenderRefundPeriodDao.findByCalenderId(calenderId);
-        Date date = new Date();
-        BigDecimal subAmount = amount;
-        for (int i = 0; i < refundPeriods.size(); i++) {
-            MusicGroupCalenderRefundPeriod refundPeriod = refundPeriods.get(i);
-            if(i == refundPeriods.size() - 1 && refundPeriod.getRefundFlag()){
-                refundPeriod.setIncome(refundPeriod.getIncome().add(subAmount));
-                if(StringUtils.isEmpty(refundPeriod.getOrderNos())){
-                    refundPeriod.setOrderNos(orderNo);
-                }else {
-                    refundPeriod.setOrderNos(refundPeriod.getOrderNos() + "," + orderNo);
+        if(calenderId != null){
+            //获取回款周期
+            List<MusicGroupCalenderRefundPeriod> refundPeriods = musicGroupCalenderRefundPeriodDao.findByCalenderId(calenderId);
+            if(CollectionUtils.isNotEmpty(refundPeriods)){
+                Date date = new Date();
+                BigDecimal subAmount = amount;
+                for (int i = 0; i < refundPeriods.size(); i++) {
+                    MusicGroupCalenderRefundPeriod refundPeriod = refundPeriods.get(i);
+                    if(i == refundPeriods.size() - 1 && refundPeriod.getRefundFlag()){
+                        refundPeriod.setIncome(refundPeriod.getIncome().add(subAmount));
+                        if(StringUtils.isEmpty(refundPeriod.getOrderNos())){
+                            refundPeriod.setOrderNos(orderNo);
+                        }else {
+                            refundPeriod.setOrderNos(refundPeriod.getOrderNos() + "," + orderNo);
+                        }
+                        refundPeriod.setUpdateTime(date);
+                        break;
+                    }
+                    if(refundPeriod.getRefundFlag()){
+                        continue;
+                    }
+                    if(subAmount.compareTo(refundPeriod.getSubRefundAmount()) >= 0){
+                        if(i == refundPeriods.size() - 1){
+                            refundPeriod.setIncome(refundPeriod.getIncome().add(subAmount));
+                            subAmount = BigDecimal.ZERO;
+                        }else {
+                            refundPeriod.setIncome(refundPeriod.getIncome().add(refundPeriod.getSubRefundAmount()));
+                            subAmount = subAmount.subtract(refundPeriod.getSubRefundAmount());
+                        }
+                        refundPeriod.setSubRefundAmount(BigDecimal.ZERO);
+                        refundPeriod.setRefundFlag(true);
+                    }else {
+                        refundPeriod.setIncome(refundPeriod.getIncome().add(subAmount));
+                        refundPeriod.setSubRefundAmount(refundPeriod.getSubRefundAmount().subtract(subAmount));
+                        subAmount = BigDecimal.ZERO;
+                    }
+                    if(StringUtils.isEmpty(refundPeriod.getOrderNos())){
+                        refundPeriod.setOrderNos(orderNo);
+                    }else {
+                        refundPeriod.setOrderNos(refundPeriod.getOrderNos() + "," + orderNo);
+                    }
+                    refundPeriod.setUpdateTime(date);
                 }
-                refundPeriod.setUpdateTime(date);
-                break;
-            }
-            if(refundPeriod.getRefundFlag()){
-                continue;
-            }
-            if(subAmount.compareTo(refundPeriod.getSubRefundAmount()) >= 0){
-                if(i == refundPeriods.size() - 1){
-                    refundPeriod.setIncome(refundPeriod.getIncome().add(subAmount));
-                    subAmount = BigDecimal.ZERO;
-                }else {
-                    refundPeriod.setIncome(refundPeriod.getIncome().add(refundPeriod.getSubRefundAmount()));
-                    subAmount = subAmount.subtract(refundPeriod.getSubRefundAmount());
-                }
-                refundPeriod.setSubRefundAmount(BigDecimal.ZERO);
-                refundPeriod.setRefundFlag(true);
-            }else {
-                refundPeriod.setIncome(refundPeriod.getIncome().add(subAmount));
-                refundPeriod.setSubRefundAmount(refundPeriod.getSubRefundAmount().subtract(subAmount));
-                subAmount = BigDecimal.ZERO;
-            }
-            if(StringUtils.isEmpty(refundPeriod.getOrderNos())){
-                refundPeriod.setOrderNos(orderNo);
-            }else {
-                refundPeriod.setOrderNos(refundPeriod.getOrderNos() + "," + orderNo);
+                musicGroupCalenderRefundPeriodDao.batchUpdate(refundPeriods);
+                return refundPeriods.get(refundPeriods.size()-1).getRefundFlag();
             }
-            refundPeriod.setUpdateTime(date);
         }
-        musicGroupCalenderRefundPeriodDao.batchUpdate(refundPeriods);
-        return refundPeriods.get(refundPeriods.size()-1).getRefundFlag();
+        return false;
     }
 }

+ 43 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -122,6 +122,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     private OperatingReportCloudService operatingReportCloudService;
     @Autowired
     private MusicGroupCalenderRefundPeriodService musicGroupCalenderRefundPeriodService;
+    @Autowired
+    private ImGroupService imGroupService;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
 
     @Override
     public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() {
@@ -894,12 +898,12 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             }
             if (calender.getPaymentType() == ADD_STUDENT || calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) {
                 // 所有缴费项目已完成排课才能创建下一个缴费项目
-                List<String> batchNoList = new ArrayList<>();
-                batchNoList.add(batchNo);
-                String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(calender.getMusicGroupId(), null, null, batchNoList);
-                if (StringUtils.isNoneBlank(orignBatchNo)) {
-                    throw new BizException("{} 存在未排课的缴费项目,请先完成排课再操作", musicGroup.getName());
-                }
+//                List<String> batchNoList = new ArrayList<>();
+//                batchNoList.add(batchNo);
+//                String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(calender.getMusicGroupId(), null, null, batchNoList);
+//                if (StringUtils.isNoneBlank(orignBatchNo)) {
+//                    throw new BizException("{} 存在未排课的缴费项目,请先完成排课再操作", musicGroup.getName());
+//                }
                 List<Integer> userIds = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
                 //获取欠费学员列表
                 List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(calender.getMusicGroupId(), userIds,null);
@@ -930,6 +934,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                     }
                     //记录操作日志
                     musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroup.getId(), "报名缴费项目通过(费用审核中 -> 预报名)", sysUser.getId(), ""));
+                    this.createPreImGroup(musicGroup);
                 }
             } else if (calender.getPaymentType() == ADD_STUDENT) {
                 // 学生加到班级
@@ -968,6 +973,38 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         }
     }
 
+    private void createPreImGroup(MusicGroup musicGroup){
+        // 创建群
+        imGroupService.create(musicGroup.getId(), null, "乐团预报名", null,
+                musicGroup.getName(), musicGroup.getName(), null, GroupType.MUSIC.getCode(), ImGroup.GroupTypeEnum.PARENT_MEETING);
+
+        Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
+
+        if (musicGroup.getTeamTeacherId() != null) {
+            userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
+        }
+        if (musicGroup.getEducationalTeacherId() != null) {
+            userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
+        }
+        if (musicGroup.getDirectorUserId() != null) {
+            userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+        }
+        if (musicGroup.getTransactionTeacherId() != null) {
+            userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+        }
+        // 添加成员
+        imGroupMemberService.join(musicGroup.getId(), userRoleMap);
+        //缴费老师推送消息
+        sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), null,
+                null, musicGroup.getEducationalTeacherId(), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS, musicGroup.getName());
+        Map<Integer, String> map = new HashMap<>(1);
+        map.put(musicGroup.getEducationalTeacherId(), musicGroup.getEducationalTeacherId().toString());
+        if (map != null && map.size() > 0) {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS,
+                    map, null, 0, null, "SYSTEM", musicGroup.getName());
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void auditRefuse(String batchNs, String auditMemo) {

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

@@ -1,16 +1,12 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
 import com.ym.mec.biz.service.MusicGroupPaymentStudentCourseDetailService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-
-import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 @Service
 public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentStudentCourseDetail>  implements MusicGroupPaymentStudentCourseDetailService {
@@ -22,9 +18,4 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 	public BaseDAO<Long, MusicGroupPaymentStudentCourseDetail> getDAO() {
 		return musicGroupPaymentStudentCourseDetailDao;
 	}
-
-    @Override
-    public String getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(String musicGroupId, Integer studentId, CourseSchedule.CourseScheduleType courseType, List<String> batchNos) {
-        return musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, studentId, courseType, batchNos);
-    }
 }

+ 37 - 214
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1,200 +1,22 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.ACCESSORIES;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.MAINTENANCE;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.MUSICAL;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.TEACHING;
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
-import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ChargeTypeDao;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
-import com.ym.mec.biz.dal.dao.CooperationOrganDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.GoodsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderStudentDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
-import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSchoolTermCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSchoolTermStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.SchoolDao;
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentInstrumentDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentVisitDao;
-import com.ym.mec.biz.dal.dao.SubjectChangeDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountLogDao;
-import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
-import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
-import com.ym.mec.biz.dal.dto.HighClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicCardDto;
-import com.ym.mec.biz.dal.dto.MusicGroupApplyGoodsDto;
-import com.ym.mec.biz.dal.dto.MusicGroupBasicDto;
-import com.ym.mec.biz.dal.dto.MusicGroupGoodsAndDiscountDto;
-import com.ym.mec.biz.dal.dto.MusicGroupQuitDto;
-import com.ym.mec.biz.dal.dto.RegisterPayDto;
-import com.ym.mec.biz.dal.dto.SporadicPayDto;
-import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
-import com.ym.mec.biz.dal.dto.StudentImportDto;
-import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
-import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
-import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
-import com.ym.mec.biz.dal.entity.ApprovalStatus;
-import com.ym.mec.biz.dal.entity.ChargeType;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
-import com.ym.mec.biz.dal.entity.CouponPayParam;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
-import com.ym.mec.biz.dal.entity.FinancialExpenditure;
-import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.ImGroup;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
-import com.ym.mec.biz.dal.entity.MusicGroupQuit;
-import com.ym.mec.biz.dal.entity.MusicGroupReturnFeeDto;
-import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
-import com.ym.mec.biz.dal.entity.MusicMemberDto;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.School;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentInstrument;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
-import com.ym.mec.biz.dal.entity.StudentPreRegistration;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.entity.SubjectChange;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountLog;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.GradeTypeEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
-import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
-import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ClassGroupStudentMapperService;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
-import com.ym.mec.biz.service.GoodsService;
-import com.ym.mec.biz.service.ImGroupMemberService;
-import com.ym.mec.biz.service.ImGroupService;
-import com.ym.mec.biz.service.ImUserFriendService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.biz.service.MusicGroupService;
-import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
-import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
-import com.ym.mec.biz.service.StudentRegistrationService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysCouponCodeService;
-import com.ym.mec.biz.service.SysEmployeePositionService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysTenantConfigService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -210,6 +32,33 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
 import com.ym.mec.util.validator.CommonValidator;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
+import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
 
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
@@ -1602,7 +1451,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getStatus() != MusicGroupStatusEnum.DRAFT && musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT_FAILED) {
             throw new BizException("当前乐团状态不支持此操作");
         }
-        
+        List<MusicGroupSubjectPlan> musicSubjectClassPlan = musicGroupSubjectPlanDao.getMusicSubjectClassPlan(musicGroupId);
+        if(CollectionUtils.isEmpty(musicSubjectClassPlan)){
+            throw new BizException("请填写乐团声部信息");
+        }
+
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "提交审核(草稿 -> 审核中)", sysUser.getId(), ""));
         musicGroup.setStatus(MusicGroupStatusEnum.AUDIT);
@@ -1748,36 +1601,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             });
             
             musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenderList);
-            
-            // 创建群
-            imGroupService.create(musicGroupId, null, "乐团预报名", null,
-                    musicGroup.getName(), musicGroup.getName(), null, GroupType.MUSIC.getCode(), ImGroup.GroupTypeEnum.PARENT_MEETING);
-            
-            Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
-
-            if (musicGroup.getTeamTeacherId() != null) {
-                userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
-            }
-            if (musicGroup.getEducationalTeacherId() != null) {
-                userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
-            }
-            if (musicGroup.getDirectorUserId() != null) {
-                userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
-            }
-            if (musicGroup.getTransactionTeacherId() != null) {
-                userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
-            }
-            // 添加成员
-            imGroupMemberService.join(musicGroupId, userRoleMap);
-            //缴费老师推送消息
-            sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), null,
-                    null, musicGroup.getEducationalTeacherId(), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS, musicGroup.getName());
-            Map<Integer, String> map = new HashMap<>(1);
-            map.put(musicGroup.getEducationalTeacherId(), musicGroup.getEducationalTeacherId().toString());
-            if (map != null && map.size() > 0) {
-                sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS,
-                        map, null, 0, null, "SYSTEM", musicGroup.getName());
-            }
         }
         musicGroup.setUpdateTime(date);
         musicGroupDao.update(musicGroup);

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

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

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

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

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

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

+ 188 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

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

+ 23 - 4
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -218,6 +218,27 @@
         where tenant_id_ = #{tenantId}
     </select>
 
+    <select id="getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes" resultType="string">
+        SELECT
+        mgpc.batch_no_
+        FROM music_group_payment_calender mgpc
+        LEFT JOIN music_group_payment_student_course_detail mgpscd ON mgpscd.music_group_payment_calender_id_ = mgpc.id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.sub_course_minutes_ > 0
+        <if test="studentId != null">
+            AND mgpscd.user_id_ = #{studentId}
+        </if>
+        <if test="batchNos != null">
+            AND mgpc.batch_no_ NOT IN
+            <foreach collection="batchNos" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="courseType != null">
+            AND mgpscd.course_type_ = #{courseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
+        GROUP BY mgpc.batch_no_ ORDER BY MIN(mgpc.id_) LIMIT 1;
+    </select>
+
     <select id="getUnUseWithStudentAndCourseTypeAndCourseMinutes" resultMap="MusicGroupPaymentStudentCourseDetail">
         SELECT mgpscd.*
         FROM music_group_payment_student_course_detail mgpscd
@@ -273,9 +294,7 @@
         SELECT mgpscd.user_id_,
                su.username_,
                su.phone_,
-               mgpscd.course_type_ 'key', SUM(CASE
-                                                  WHEN mgpscd.used_course_minutes_ = 0 THEN mgpscd.total_course_minutes_
-                                                  ELSE 0 END) 'value'
+               mgpscd.course_type_ 'key', SUM(mgpscd.sub_course_minutes_) 'value'
         FROM music_group_payment_student_course_detail mgpscd
                  LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
         WHERE mgpscd.music_group_id_ = #{musicGroupId}
@@ -327,7 +346,7 @@
             SELECT
                 mgpscd.user_id_,su.username_,su.phone_,
                 mgpscd.course_type_ 'key',
-                SUM(CASE WHEN mgpscd.used_course_minutes_ = 0 THEN mgpscd.total_course_minutes_ ELSE 0 END) 'value'
+                SUM(mgpscd.sub_course_minutes_) 'value'
             FROM music_group_payment_student_course_detail mgpscd
             LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
             left join (

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

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

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

@@ -50,10 +50,10 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicScore" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO sys_music_score (music_score_categories_id_,name_,type_,speed_,url_,metronome_url_,midi_url_,create_user_id_,order_,
-		                             update_time_,create_time_,client_type_,rank_ids_,render_from_,enable_evaluation_,show_flag_,play_mode_,muse_score_url_,muse_score_memo_)
+		                             update_time_,create_time_,client_type_,rank_ids_,render_from_,enable_evaluation_,show_flag_,play_mode_,muse_score_url_,muse_score_memo_,ext_config_json_)
 		VALUES(#{musicScoreCategoriesId},#{name},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		       #{speed},#{url},#{metronomeUrl},#{midiUrl},#{createUserId},#{order},NOW(),NOW(),#{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		       #{rankIds},#{renderFrom},#{enableEvaluation},#{showFlag},#{playMode},#{museScoreUrl},#{museScoreMemo})
+		       #{rankIds},#{renderFrom},#{enableEvaluation},#{showFlag},#{playMode},#{museScoreUrl},#{museScoreMemo},#{extConfigJson})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->

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

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

+ 26 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -406,6 +406,16 @@
 		  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>
+	<select id="count2022ActivityStatis" resultMap="DoubleEleven2021ActivityDto">
+		SELECT SUM(c.buy_amount_) buy_amount_,SUM(c.buy_num_) buy_num_,c.type_ FROM (
+		SELECT SUM(aum.actual_price_) buy_amount_,COUNT(DISTINCT aum.user_id_) buy_num_,vga.code_ type_
+		FROM student_payment_order spo
+				 LEFT JOIN activity_user_mapper aum ON spo.id_ = aum.payment_order_id_ AND spo.user_id_ = aum.user_id_
+				 LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
+		WHERE spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		  AND spo.organ_id_ 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_"/>
@@ -417,6 +427,11 @@
 		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="countDoubleEleven2022Statis" resultMap="DoubleEleven2021Dto">
+		SELECT SUM(spo.expect_amount_) total_buy_amount_,COUNT(DISTINCT spo.user_id_) total_buy_num_ FROM student_payment_order spo
+		WHERE spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		AND spo.organ_id_ 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)
@@ -453,6 +468,17 @@
 		</if>
 		GROUP BY o.id_
 	</select>
+	<select id="countOrganDoubleEleven2022Statis" resultMap="DoubleEleven2021Dto">
+		SELECT SUM(spo.expect_amount_) total_buy_amount_,COUNT(DISTINCT spo.user_id_) total_buy_num_,o.name_ organ_name_,o.id_ organ_id_
+		FROM organization o
+		LEFT JOIN student_payment_order spo ON o.id_ = spo.organ_id_
+		AND spo.group_type_ = 'ACTIVITY' AND spo.type_ = 'SMALL_CLASS_TO_BUY' AND spo.status_ = 'SUCCESS' AND spo.memo_ = '2022双十一活动购买'
+		WHERE o.id_ 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_"/>

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

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

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java

@@ -50,12 +50,12 @@ public class MusicGroupRegisterController extends BaseController {
         if (musicGroup == null) {
             return failed("乐团信息不存在");
         }
-        if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
+        /*if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
             boolean hasMemberGroup = studentRegistrationDao.checkHasMemberGroup(musicGroup.getId(), userId);
             if(hasMemberGroup){
                 throw new BizException("您已在其他会员团中,不可报名该乐团,请联系乐团主管");
             }
-        }
+        }*/
 
         if (date.compareTo(DateUtil.getLastTimeWithDay(musicGroup.getApplyExpireDate())) > 0 && studentRegistration.getId() == null) {
             return failed("乐团已截止报名");

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

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

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

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

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

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

+ 4 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CooperationShareProfitController.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.entity.CooperationShareProfit;
 import com.ym.mec.biz.dal.entity.CooperationShareProfitDto;
 import com.ym.mec.biz.dal.page.CooperationShareProfitQueryInfo;
 import com.ym.mec.biz.service.CooperationShareProfitService;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
@@ -23,11 +24,14 @@ public class CooperationShareProfitController extends BaseController {
 
     @Autowired
     private CooperationShareProfitService cooperationShareProfitService;
+    @Autowired
+    private OrganizationService organizationService;
 
     @ApiOperation(value = "获取合作单位分润列表")
     @PostMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('cooperationShareProfit/queryPage')")
     public HttpResponseResult<PageInfo<CooperationShareProfitDto>> queryPage(@RequestBody CooperationShareProfitQueryInfo queryInfo) throws Exception {
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(cooperationShareProfitService.queryDtoPage(queryInfo));
     }
 

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

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

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

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