Просмотр исходного кода

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

yonge 3 лет назад
Родитель
Сommit
4935467b3d
25 измененных файлов с 587 добавлено и 111 удалено
  1. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysEmailDao.java
  2. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupCategoryDao.java
  3. 120 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysEmail.java
  4. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreCategories.java
  5. 11 11
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  6. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysEmailService.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/AppRedemptionCodeServiceImpl.java
  8. 63 38
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  9. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysEmailServiceImpl.java
  10. 45 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  11. 2 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreCategoriesServiceImpl.java
  12. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupCategoryServiceImpl.java
  13. 17 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  15. 28 0
      mec-biz/src/main/resources/config/mybatis/SysEmailMapper.xml
  16. 11 7
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml
  17. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupCategoryMapper.xml
  18. 96 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/entity/SysEmail.java
  19. 20 12
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/MessageSenderPluginContext.java
  20. 11 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/CommEmailPlugin.java
  21. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/AppRedemptionCodeController.java
  22. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java
  23. 20 4
      mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java
  24. 28 0
      mec-web/src/main/java/com/ym/mec/web/controller/SysEmailController.java
  25. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupCategoryController.java

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysEmailDao.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.SysEmail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * (SysEmail)表数据库访问层
+ *
+ * @author makejava
+ * @since 2022-01-04 17:07:43
+ */
+public interface SysEmailDao extends BaseMapper<SysEmail> {
+
+   int insertBatch(@Param("entities") List<SysEmail> entities);
+   
+}
+

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

@@ -3,12 +3,13 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 public interface VipGroupCategoryDao extends BaseDAO<Integer, VipGroupCategory> {
 
-    List<VipGroupCategory> findAllByOrgan(String organId);
+    List<VipGroupCategory> findAllByOrgan(@Param("organId") String organId, @Param("cloudRoomUpLimit") Integer cloudRoomUpLimit);
 
     List<VipGroupCategory> findTeacherDefaultSalary(Integer userId);
 

+ 120 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysEmail.java

@@ -0,0 +1,120 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * (SysEmail)表实体类
+ *
+ * @author makejava
+ * @since 2022-01-04 17:07:43
+ */
+@ApiModel(value = "sys_email-${tableInfo.comment}")
+public class SysEmail implements Serializable {
+   @TableId(value = "id_", type = IdType.AUTO)
+     @ApiModelProperty(value = "${column.comment}")
+    private Integer id;
+    
+  @TableField("host_name_")
+     @ApiModelProperty(value = "SMTP服务器")
+    private String hostName;
+    
+  @TableField("smtp_port_")
+     @ApiModelProperty(value = "SMTP服务器端口")
+    private Integer smtpPort;
+    
+  @TableField("user_name_")
+     @ApiModelProperty(value = "SMTP服务器认证用户名")
+    private String userName;
+    
+  @TableField("password_")
+     @ApiModelProperty(value = "SMTP服务器认证密码")
+    private String password;
+    
+  @TableField("from_")
+     @ApiModelProperty(value = "发件人邮箱")
+    private String from;
+    
+  @TableField("from_name_")
+     @ApiModelProperty(value = "落款")
+    private String fromName;
+    
+  @TableField("tenant_id_")
+     @ApiModelProperty(value = "${column.comment}")
+    private Integer tenantId;
+    
+    private static final long serialVersionUID = 1L;
+    
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getHostName() {
+        return hostName;
+    }
+
+    public void setHostName(String hostName) {
+        this.hostName = hostName;
+    }
+
+    public Integer getSmtpPort() {
+        return smtpPort;
+    }
+
+    public void setSmtpPort(Integer smtpPort) {
+        this.smtpPort = smtpPort;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getFromName() {
+        return fromName;
+    }
+
+    public void setFromName(String fromName) {
+        this.fromName = fromName;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+
+}
+

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreCategories.java

@@ -41,6 +41,8 @@ public class SysMusicScoreCategories {
 	private Integer order;
 
 	private Integer musicScoreNum;
+
+	private Integer musicScoreNumSum;
 	
 	private String soundResource;
 
@@ -171,4 +173,11 @@ public class SysMusicScoreCategories {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public Integer getMusicScoreNumSum() {
+		return musicScoreNumSum;
+	}
+
+	public void setMusicScoreNumSum(Integer musicScoreNumSum) {
+		this.musicScoreNumSum = musicScoreNumSum;
+	}
 }

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

@@ -1,11 +1,8 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.MapDto;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
-import com.ym.mec.biz.dal.page.OrganizationQueryInfo;
 import com.ym.mec.common.entity.Mapper;
-import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.*;
@@ -15,13 +12,6 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     Set<Integer>  EXCLUDE_ORGAN_IDS = new HashSet<>(Arrays.asList(36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,2,27,22,24));
 
     /**
-     * 获取节点树状结构
-     * @param queryInfo
-     * @return
-     */
-    PageInfo<Organization> queryTreePage(OrganizationQueryInfo queryInfo);
-
-    /**
      * 获取员工坐在分部列表
      * @return
      */
@@ -49,7 +39,7 @@ public interface OrganizationService extends BaseService<Integer, Organization>
 
     Long add(Organization organization);
 
-    Map<String,List<Mapper>> getOrganRole(Integer id);
+    Map<String,List<Mapper>> getOrganRole(List<Integer> organIds);
 
     /**
     * @description: 获取分部的管理人员
@@ -60,4 +50,14 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     * @date 2022/1/4 11:36
     */
     Set<Integer> queryUserIdByRoleId(SysUserRoleEnum[] roleArr, Integer organId);
+
+    /**
+    * @description: 获取员工能访问的分部列表
+     * @param userId
+     * @param organIds
+    * @return java.lang.String
+    * @author zx
+    * @date 2022/1/5 12:44
+    */
+    String getEmployeeOrgan(Integer userId,String organIds,Boolean isSuper);
 }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysEmailService.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.SysEmail;
+
+/**
+ * (SysEmail)表服务接口
+ *
+ * @author makejava
+ * @since 2022-01-04 17:07:43
+ */
+public interface SysEmailService extends IService<SysEmail> {
+
+}
+

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

@@ -120,7 +120,7 @@ public class AppRedemptionCodeServiceImpl extends ServiceImpl<RedemptionCodeDao,
     @Override
     public void checkLowVolume() {
         Integer volume = redemptionCodeDao.findNull();
-        if (volume == null || volume < 10) {
+        if (volume == null || volume < 10000) {
             Map<Integer, String> receivers = new HashMap<>(1);
             receivers.put(0, "13512341234");
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,

+ 63 - 38
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java

@@ -1,33 +1,29 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.MapDto;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.Mapper;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
-import com.ym.mec.util.json.JsonUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.page.OrganizationQueryInfo;
-import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.*;
 
@@ -39,6 +35,8 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	@Autowired
 	private TeacherDao teacherDao;
 	@Autowired
+	private EmployeeDao employeeDao;
+	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
@@ -47,15 +45,6 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
-	public PageInfo<Organization> queryTreePage(OrganizationQueryInfo queryInfo){
-		PageInfo<Organization> pageInfo = queryPage(queryInfo);
-		for (Organization organization:pageInfo.getRows()) {
-			organization = getTree(organization);
-		}
-		return pageInfo;
-	}
-
-	@Override
 	public List<Organization> queryEmployeeOrgan(Integer userId,String organId){
 		return organizationDao.queryEmployeeOrgan(userId,organId);
 	}
@@ -131,23 +120,41 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
-	public Map<String,List<Mapper>> getOrganRole(Integer id) {
-		Organization organization = organizationDao.get(id);
-		if(organization == null){
+	public Map<String,List<Mapper>> getOrganRole(List<Integer> organIds) {
+		List<Organization> organizationList = organizationDao.findOrgans(organIds);
+		if(organizationList == null || organizationList.size() == 0){
 			throw new BizException("分部信息不存在");
 		}
-		String organManager = organization.getOrganManager();
-		String repairId = organization.getRepairId();
-		String educationId = organization.getEducationId();
-		String joinTeacherId = organization.getJoinTeacherId();
-		String organManagerUserIds = concatOrganManager(organManager, repairId, educationId, joinTeacherId);
+		StringJoiner organManager = new StringJoiner(",")
+				,repairId = new StringJoiner(",")
+				,educationId = new StringJoiner(",")
+				,joinTeacherId = new StringJoiner(","),
+				userId = new StringJoiner(",");
+		for (Organization organization : organizationList) {
+			if(StringUtils.isNotEmpty(organization.getOrganManager())){
+				organManager.add(organization.getOrganManager());
+				userId.add(organization.getOrganManager());
+			}
+			if(StringUtils.isNotEmpty(organization.getRepairId())){
+				repairId.add(organization.getRepairId());
+				userId.add(organization.getRepairId());
+			}
+			if(StringUtils.isNotEmpty(organization.getEducationId())){
+				educationId.add(organization.getEducationId());
+				userId.add(organization.getEducationId());
+			}
+			if(StringUtils.isNotEmpty(organization.getJoinTeacherId())){
+				joinTeacherId.add(organization.getJoinTeacherId());
+				userId.add(organization.getJoinTeacherId());
+			}
+		}
 		Map<String,List<Mapper>> resultMap = new HashMap<>(4);
-		if(StringUtils.isNotEmpty(organManagerUserIds) && organManagerUserIds.length() > 0){
-			Map<Integer, String> educationalTeacherNameMap = MapUtil.convertMybatisMap(teacherDao.queryNameByIds(organManagerUserIds));
-			resultMap.put("organManager",getOrganManagerName(educationalTeacherNameMap,organManager));
-			resultMap.put("repairId",getOrganManagerName(educationalTeacherNameMap,repairId));
-			resultMap.put("educationId",getOrganManagerName(educationalTeacherNameMap,educationId));
-			resultMap.put("joinTeacherId",getOrganManagerName(educationalTeacherNameMap,joinTeacherId));
+		if(userId.length() > 0){
+			Map<Integer, String> educationalTeacherNameMap = MapUtil.convertMybatisMap(teacherDao.queryNameByIds(userId.toString()));
+			resultMap.put("organManager",getOrganManagerName(educationalTeacherNameMap,organManager.toString()));
+			resultMap.put("repairId",getOrganManagerName(educationalTeacherNameMap,repairId.toString()));
+			resultMap.put("educationId",getOrganManagerName(educationalTeacherNameMap,educationId.toString()));
+			resultMap.put("joinTeacherId",getOrganManagerName(educationalTeacherNameMap,joinTeacherId.toString()));
 		}
 		return resultMap;
 	}
@@ -179,7 +186,25 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		return new HashSet<>();
 	}
 
-    private List<Mapper> getOrganManagerName(Map<Integer, String> nameMap, String organManager){
+	@Override
+	public String getEmployeeOrgan(Integer userId, String organIds,Boolean isSuper) {
+		if(StringUtils.isEmpty(organIds)){
+			Employee employee = employeeDao.get(userId);
+			organIds = employee.getOrganIdList();
+		}
+		if(StringUtils.isEmpty(organIds) && isSuper){
+			Map<String,Object> param = new HashMap<>();
+			Integer tenantId = TenantContextHolder.getTenantId();
+			param.put("tenantId",tenantId);
+			List<Organization> all = this.findAll(param);
+			if(all != null && all.size() > 0){
+				organIds = StringUtils.join(all.stream().map(e->e.getId()).collect(Collectors.toSet()),",");
+			}
+		}
+		return organIds;
+	}
+
+	private List<Mapper> getOrganManagerName(Map<Integer, String> nameMap, String organManager){
 		List<Mapper> mapperList = new ArrayList<>();
 		if(StringUtils.isNotEmpty(organManager)){
 			List<Integer> organIds = Arrays.stream(organManager.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysEmailServiceImpl.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.SysEmailDao;
+import com.ym.mec.biz.dal.entity.SysEmail;
+import com.ym.mec.biz.service.SysEmailService;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * (SysEmail)表服务实现类
+ *
+ * @author makejava
+ * @since 2022-01-04 17:07:43
+ */
+@Service("sysEmailService")
+public class SysEmailServiceImpl extends ServiceImpl<SysEmailDao, SysEmail> implements SysEmailService {
+
+    private final static Logger logger = LoggerFactory.getLogger(SysEmailServiceImpl.class);
+
+
+}
+

+ 45 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.dao.SysMessageDao;
 import com.ym.mec.biz.dal.dao.WaitSendMessageDao;
 import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.SysMessageDto;
+import com.ym.mec.biz.dal.entity.SysEmail;
 import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.entity.SysMessageConfig;
 import com.ym.mec.biz.dal.entity.WaitSendMessage;
@@ -24,6 +25,7 @@ import com.ym.mec.common.entity.ImTxtMessage;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
@@ -44,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.MessageTypeEnum.STUDENT_PUSH_VIP_BUY;
 
@@ -64,6 +67,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
+
 	@Autowired
 	private WaitSendMessageDao waitSendMessageDao;
 
@@ -76,6 +80,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Autowired
 	private RedisCache<String, Object> redisCache;
 
+	@Autowired
+	private SysEmailServiceImpl sysEmailService;
+
 	// 验证码有效期
 	public static final int CODE_EXPIRE = 60 * 5;
 
@@ -305,6 +312,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if (receivers == null || receivers.size() == 0) {
 			throw new BizException("接收地址不能为空");
 		}
+		// email data from database load, 使用接收者 tenantId, 假设发送者和接收者为同一机构
+		Integer tenantId = getTenantIdByUser(null, String.valueOf(receivers.keySet().stream().findFirst()));
+		loadEmailInfo(messageSender, tenantId);
 		if(StringUtils.isNotEmpty(jpushType) && jpushType == "STUDENT"){
 			//如果不是缴费信息
 			if(type != STUDENT_PUSH_VIP_BUY){
@@ -367,6 +377,8 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 				url, messageConfig.getGroup(),jpushType);
 	}
 
+
+
 	@Override
 	@Async
 	public void batchPushMessage(MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
@@ -432,11 +444,13 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	@Async
-	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus,
-			String url, String group,String jpushType) {
+	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus, String url, String group,String jpushType) {
 		if (StringUtils.isBlank(receiver)) {
 			throw new BizException("接收地址不能为空");
 		}
+		// email data from database load
+		Integer tenantId = getTenantIdByUser(userId, receiver);
+		loadEmailInfo(messageSender, tenantId);
 		Date date = new Date();
 		SendStatusEnum status = SendStatusEnum.WAIT;
 		String errorMsg = null;
@@ -466,6 +480,35 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		addMessage(receivers, title, content, triggerTime, mode, status, errorMsg, readStatus, url, null,jpushType);
 	}
 
+	private Integer getTenantIdByUser(Integer userId, String receiver) throws BizException {
+		SysUser user;
+		if (userId == null) {
+			user = sysUserFeignService.queryUserByMobile(receiver);
+			if (user != null) {
+				return user.getTenantId();
+			} // user query null using receiver query
+		}
+
+		user = sysUserFeignService.queryUserByMobile(receiver);
+		if (user != null) {
+			return user.getTenantId();
+		} else {
+			throw new BizException("找不到发送者用户 id: " + userId.toString() + " 接收者 " + receiver);
+		}
+	}
+
+	private void loadEmailInfo(MessageSender messageSender, Integer tenantId) {
+		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
+			SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", tenantId).queryWrapper());
+			messageSenderPluginContext.sysEmail.setHostName(email1.getHostName());
+			messageSenderPluginContext.sysEmail.setSmtpPort(email1.getSmtpPort());
+			messageSenderPluginContext.sysEmail.setUserName(email1.getUserName());
+			messageSenderPluginContext.sysEmail.setPassword(email1.getPassword());
+			messageSenderPluginContext.sysEmail.setFromName(email1.getFromName());
+			messageSenderPluginContext.sysEmail.setFrom(email1.getFrom());
+		}
+	}
+
 	@Override
 	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver) {
 		String key1 = getVerificationCode1CacheKey(messageType, receiver);

+ 2 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreCategoriesServiceImpl.java

@@ -41,11 +41,7 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
 		List<SysMusicScoreCategories> scoreCategoriesAllList = sysMusicScoreCategoriesDao.findByParentId(null,menuQueryInfo.getOrganId(),menuQueryInfo.getEnable());
 		for (SysMusicScoreCategories categories : scoreCategories) {
 			getTree(categories, scoreCategoriesAllList);
-			if (categories.getSysMusicScoreCategoriesList() != null) {
-				categories.setMusicScoreNum(categories.getSysMusicScoreCategoriesList().size());
-			} else {
-				categories.setMusicScoreNum(0);
-			}
+			categories.setMusicScoreNum(categories.getMusicScoreNumSum());
 		}
 		return scoreCategories;
 	}
@@ -209,11 +205,7 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
 			//遍历子节点....
 			for (SysMusicScoreCategories score : scoreCategories) {
 				getTree(score, scoreCategoriesAllList);
-				if (score.getSysMusicScoreCategoriesList() != null) {
-					score.setMusicScoreNum(score.getSysMusicScoreCategoriesList().size());
-				} else {
-					score.setMusicScoreNum(0);
-				}
+				score.setMusicScoreNum(score.getMusicScoreNumSum());
 			}
 		}
 		return categories;

+ 23 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupCategoryServiceImpl.java

@@ -1,7 +1,13 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dto.ConditionDto;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.entity.TenantConfigDetail;
+import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.WrapperUtil;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -13,12 +19,15 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 @Service
 public class VipGroupCategoryServiceImpl extends BaseServiceImpl<Integer, VipGroupCategory>  implements VipGroupCategoryService {
 	
 	@Autowired
 	private VipGroupCategoryDao vipGroupCategoryDao;
+	@Autowired
+	private TenantConfigService tenantConfigService;
 
 	@Override
 	public BaseDAO<Integer, VipGroupCategory> getDAO() {
@@ -27,7 +36,20 @@ public class VipGroupCategoryServiceImpl extends BaseServiceImpl<Integer, VipGro
 
 	@Override
 	public List<VipGroupCategory> findAllByOrgan(String organId) {
-		return vipGroupCategoryDao.findAllByOrgan(organId);
+		Integer tenantId = TenantContextHolder.getTenantId();
+		//查询云教室扣费标准
+		TenantConfig tenantConfig = tenantConfigService.getOne(new WrapperUtil<TenantConfig>()
+				.hasEq("tenant_id_", tenantId).queryWrapper());
+		if (Objects.isNull(tenantConfig)) {
+			return null;
+		}
+		//云教室人数上限(含老师)
+		Integer cloudRoomUpLimit = Optional.ofNullable(tenantConfig.getConfig())
+				.map(c -> JSON.parseObject(c, TenantConfigDetail.class))
+				.map(TenantConfigDetail::getCloud_room_rule)
+				.map(TenantConfigDetail.CloudRoomRule::getCloud_room_up_limit).orElse(null);
+
+		return vipGroupCategoryDao.findAllByOrgan(organId,cloudRoomUpLimit);
 	}
 
 	@Override

+ 17 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -69,9 +69,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Autowired
 	private VipGroupActivityDao vipGroupActivityDao;
 	@Autowired
-	private VipGroupCategoryDao vipGroupCategoryDao;
-	@Autowired
-	private MusicGroupDao musicGroupDao;
+	private VipGroupCategoryService vipGroupCategoryService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
@@ -297,7 +295,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请勿重复提交");
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("课程形式不存在");
 		}
@@ -571,7 +569,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请勿重复提交");
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("课程形式不存在");
 		}
@@ -757,7 +755,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		if(ActivityCourseType.FREE_VIP.equals(vipGroup.getVipGroupApplyBaseInfo().getActivityCourseType())){
-			List<VipGroupCategory> vipGroupCategories = vipGroupCategoryDao.findAllByOrgan(vipGroup.getVipGroupApplyBaseInfo().getOrganId().toString());
+			List<VipGroupCategory> vipGroupCategories = vipGroupCategoryService.findAllByOrgan(vipGroup.getVipGroupApplyBaseInfo().getOrganId().toString());
 			VipGroupCategory vipGroupCategory = vipGroupCategories.stream().filter(v -> v.getName().equals("1v2")).findFirst().get();
 			vipGroup.getVipGroupApplyBaseInfo().setVipGroupCategoryId(vipGroupCategory.getId());
 		}
@@ -889,7 +887,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("{}课程时间冲突({}-{})", sysUser.getRealName(), DateUtil.dateToString(firstCourseSchedule.getStartClassTime(), "yyyy-MM-dd HH:mm:ss"), DateUtil.dateToString(latestCourseSchedule.getEndClassTime(), "HH:mm:ss"));
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("课程形式不存在");
 		}
@@ -1194,7 +1192,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(StringUtils.isBlank(studentIds)){
 			throw new BizException("请选择学员");
 		}
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(applyBaseInfo.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(applyBaseInfo.getVipGroupCategoryId());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("课程形式不存在");
 		}
@@ -1584,7 +1582,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				throw new BizException("学员信息异常");
 			}
 
-			List<VipGroupCategory> vipGroupCategories = vipGroupCategoryDao.findAllByOrgan(student.getOrganId().toString());
+			List<VipGroupCategory> vipGroupCategories = vipGroupCategoryService.findAllByOrgan(student.getOrganId().toString());
 			VipGroupCategory vipGroupCategory = vipGroupCategories.stream().filter(v -> v.getName().equals(vipGroupCategoryName)).findFirst().get();
 
 			List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.findByName(vipGroupActivityName, TenantContextHolder.getTenantId());
@@ -2205,7 +2203,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				vipGroupDetail.setCourseSchedules(collect);
 				vipGroupDetail.setTotalClassTimes(collect.size());
 			}
-			VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId());
+			VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
 			vipGroupDetail.setCategoryName(vipGroupCategory.getName());
 			vipGroupDetail.setNumberOfClasses(vipGroupDao.countTeacherVipGroups(vipGroupDetail.getTeacherId().longValue()));
 			return vipGroupDetail;
@@ -2224,7 +2222,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请指定课程形式");
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId().intValue());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("课程形式不存在");
 		}
@@ -2351,7 +2349,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请指定课程形式");
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId().intValue());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("课程形式不存在");
 		}
@@ -2989,7 +2987,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if(Objects.isNull(surplusCourseFee)){
             surplusCourseFee = new BigDecimal(0);
         }
-        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+        VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId().intValue());
 		surplusCourseFee = sysUserCashAccountLogService.vipReturnFeeCharges(surplusCourseFee,vipGroupCategory == null?0:vipGroupCategory.getStudentNum());
 //        if(vipGroupCategory.getStudentNum()<=1){
 //            surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
@@ -3030,7 +3028,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("当前课程类型不支持退学");
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
 
 		List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
 		if(!CollectionUtils.isEmpty(studentApplyRefunds)){
@@ -3188,7 +3186,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			return;
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
 
 		List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
 		if(!CollectionUtils.isEmpty(studentApplyRefunds)){
@@ -3591,7 +3589,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)){
 			throw new BizException("不能对已停止的课程进行退课操作");
 		}
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId().intValue());
 		Map<String,BigDecimal> result = new HashMap<>();
 		Date now = new Date();
         BigDecimal bigDecimal;
@@ -3602,14 +3600,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(activityUserMapper != null && !activityUserMapper.getReturnFee()){
 				if(Objects.nonNull(activityUserMapper.getVipGroupId())){
 					VipGroup group = vipGroupDao.get(activityUserMapper.getVipGroupId());
-					vipGroupCategory = vipGroupCategoryDao.get(group.getVipGroupCategoryId().intValue());
+					vipGroupCategory = vipGroupCategoryService.get(group.getVipGroupCategoryId().intValue());
 					userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.VIP, activityUserMapper.getVipGroupId().toString(), studentId, null));
 				}
 				if(Objects.nonNull(activityUserMapper.getGiveVipGroupId())){
 					userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.VIP, activityUserMapper.getGiveVipGroupId().toString(), studentId, null));
 				}
 				if(Objects.nonNull(activityUserMapper.getPracticeGroupId())){
-					vipGroupCategory = vipGroupCategoryDao.get(1);
+					vipGroupCategory = vipGroupCategoryService.get(1);
 					userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.PRACTICE, activityUserMapper.getPracticeGroupId().toString(), studentId, null));
 				}
 				if(Objects.nonNull(activityUserMapper.getGivePracticeGroupId())){
@@ -4273,7 +4271,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("选择的学生中存在此课程中已存在的学生");
 		}
 
-		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId());
+		VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
 
 		if(vipGroupCategory == null){
 			throw new BizException("请修改VIP课课程形式");

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

@@ -37,7 +37,7 @@
 
     <!-- 全查询 -->
     <select id="findAll" resultMap="Organization">
-		SELECT * FROM organization where tenant_id_ = #{tenantId} ORDER BY id_
+		SELECT * FROM organization WHERE tenant_id_ = #{tenantId} AND del_flag_ = 0 ORDER BY id_
 	</select>
 
     <!-- 向数据库增加一条记录 -->

+ 28 - 0
mec-biz/src/main/resources/config/mybatis/SysEmailMapper.xml

@@ -0,0 +1,28 @@
+<?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.SysEmailDao">
+  <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.SysEmail">
+                       <id column="id_" jdbcType="INTEGER" property="id"/>
+                                  <result column="host_name_" jdbcType="VARCHAR" property="hostName"/>
+                                  <result column="smtp_port_" jdbcType="INTEGER" property="smtpPort"/>
+                                  <result column="user_name_" jdbcType="VARCHAR" property="userName"/>
+                                  <result column="password_" jdbcType="VARCHAR" property="password"/>
+                                  <result column="from_" jdbcType="VARCHAR" property="from"/>
+                                  <result column="from_name_" jdbcType="VARCHAR" property="fromName"/>
+                                  <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+                </resultMap>
+  
+  <sql id="Base_Column_List">    
+                                            id_, host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_
+  </sql>
+  
+   <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.SysEmail">
+       insert into sys_email(host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_)
+       values
+       <foreach collection="entities" item="entity" separator=",">
+       (#{entity.hostName}, #{entity.smtpPort}, #{entity.userName}, #{entity.password}, #{entity.from}, #{entity.fromName}, #{entity.tenantId})
+       </foreach>
+   </insert>
+
+</mapper>

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

@@ -17,6 +17,7 @@
 		<result column="order_" property="order" />
 		<result column="organ_name_" property="organNames" />
 		<result column="music_score_num_" property="musicScoreNum" />
+		<result column="music_score_num_sum_" property="musicScoreNumSum" />
 		<result column="sound_resource_" property="soundResource" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
@@ -24,12 +25,16 @@
 	
 	<!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="SysMusicScoreCategories" >
-		SELECT * FROM sys_music_score_categories WHERE id_ = #{id} 
+		SELECT categ.*,
+		(select count(1) from sys_music_score ms where categ.id_ = ms.music_score_categories_id_) as music_score_num_sum_
+		FROM sys_music_score_categories categ WHERE categ.id_ = #{id}
 	</select>
 	
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysMusicScoreCategories">
-		SELECT * FROM sys_music_score_categories ORDER BY id_
+		SELECT categ.*,
+			   (select count(1) from sys_music_score ms where categ.id_ = ms.music_score_categories_id_) as music_score_num_sum_
+		       FROM sys_music_score_categories categ ORDER BY categ.id_
 	</select>
 	
 	<!-- 向数据库增加一条记录 -->
@@ -136,7 +141,6 @@
 				AND (sm.id_ = #{search} OR sm.name_ LIKE CONCAT('%',#{search},'%'))
 			</if>
 		</where>
-		GROUP BY sm.id_
 		ORDER BY sm.order_
 		<include refid="global.limit"/>
 	</select>
@@ -160,11 +164,11 @@
 		</where>
 	</select>
 	<select id="findByParentId" resultMap="SysMusicScoreCategories">
-		SELECT count(score.id_) AS musicScoreNum, sm.* FROM sys_music_score_categories sm
-		LEFT JOIN sys_music_score score ON sm.id_ = score.music_score_categories_id_
+		SELECT sm.*,
+		(select count(1) from sys_music_score sms where sm.id_ = sms.music_score_categories_id_) as music_score_num_sum_
+        FROM sys_music_score_categories sm
 		<include refid="queryTree"/>
-		group by score.music_score_categories_id_
-# 		ORDER BY sm.order_
+ 		ORDER BY sm.order_
 	</select>
 	<select id="findByCategoriesIds" resultType="java.lang.String">
 		SELECT GROUP_CONCAT(id_) FROM sys_music_score_categories

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

@@ -34,7 +34,7 @@
 	<select id="findAllByOrgan" resultMap="VipGroupCategory">
 		SELECT vgc.*,vgdcup.online_classes_unit_price_,vgdcup.offline_classes_unit_price_ FROM vip_group_category vgc
 		LEFT JOIN vip_group_default_classes_unit_price_ vgdcup ON vgc.id_=vgdcup.vip_group_category_id_ AND FIND_IN_SET(vgdcup.organ_id_,#{organId})
-		WHERE vgc.del_flag_!= 1
+		WHERE vgc.del_flag_ != 1 AND vgc.student_num_ &lt; #{cloudRoomUpLimit}
 		ORDER BY id_
 	</select>
 

+ 96 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/entity/SysEmail.java

@@ -0,0 +1,96 @@
+package com.ym.mec.thirdparty.entity;
+
+import java.io.Serializable;
+
+/**
+ * (SysEmail)表实体类
+ *
+ * @author makejava
+ * @since 2022-01-04 17:07:43
+ */
+public class SysEmail implements Serializable {
+    private Integer id;
+    
+    private String hostName;
+    
+    private Integer smtpPort;
+    
+    private String userName;
+    
+    private String password;
+    
+    private String from;
+    
+    private String fromName;
+    
+    private Integer tenantId;
+    
+    private static final long serialVersionUID = 1L;
+    
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getHostName() {
+        return hostName;
+    }
+
+    public void setHostName(String hostName) {
+        this.hostName = hostName;
+    }
+
+    public Integer getSmtpPort() {
+        return smtpPort;
+    }
+
+    public void setSmtpPort(Integer smtpPort) {
+        this.smtpPort = smtpPort;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getFromName() {
+        return fromName;
+    }
+
+    public void setFromName(String fromName) {
+        this.fromName = fromName;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+
+}
+

+ 20 - 12
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/MessageSenderPluginContext.java

@@ -4,7 +4,8 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import com.ym.mec.thirdparty.message.provider.YimeiSmsPlugin;
+import com.ym.mec.thirdparty.entity.SysEmail;
+import com.ym.mec.thirdparty.message.provider.*;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeansException;
@@ -13,17 +14,15 @@ import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
-import com.ym.mec.thirdparty.message.provider.AwSmsPlugin;
-import com.ym.mec.thirdparty.message.provider.JiguangPushPlugin;
-import com.ym.mec.thirdparty.message.provider.MOxintongSMSPlugin;
-import com.ym.mec.thirdparty.message.provider.ShiyuanSMSPlugin;
 
 @Component
 public class MessageSenderPluginContext implements ApplicationContextAware {
 
+	public SysEmail sysEmail = new SysEmail();
+
 	public enum MessageSender {
 
-		JIGUANG("PUSH"), MOXINGTONG("SMS"), SHIYUAN("SMS"), YIMEI("SMS"), AWSMS("SMS");
+		JIGUANG("PUSH"), MOXINGTONG("SMS"), SHIYUAN("SMS"), YIMEI("SMS"), AWSMS("SMS"), EMAIL("EMAIL");
 
 		/**
 		 * 发送模式(SMS,PUSH,EMAIL)
@@ -44,18 +43,14 @@ public class MessageSenderPluginContext implements ApplicationContextAware {
 	private ApplicationContext applicationContext;
 
 	private final Map<String, String> mapper = new HashMap<String, String>() {
-
-		/**
-		 * 
-		 */
 		private static final long serialVersionUID = -3964872523891264522L;
-
 		{
 			put(StringUtils.lowerCase(JiguangPushPlugin.getName()), StringUtils.uncapitalize(JiguangPushPlugin.class.getSimpleName()));
 			put(StringUtils.lowerCase(MOxintongSMSPlugin.getName()), StringUtils.uncapitalize(MOxintongSMSPlugin.class.getSimpleName()));
 			put(StringUtils.lowerCase(ShiyuanSMSPlugin.getName()), StringUtils.uncapitalize(ShiyuanSMSPlugin.class.getSimpleName()));
 			put(StringUtils.lowerCase(YimeiSmsPlugin.getName()), StringUtils.uncapitalize(YimeiSmsPlugin.class.getSimpleName()));
 			put(StringUtils.lowerCase(AwSmsPlugin.getName()), StringUtils.uncapitalize(AwSmsPlugin.class.getSimpleName()));
+			put(StringUtils.lowerCase(CommEmailPlugin.getName()), StringUtils.uncapitalize(CommEmailPlugin.class.getSimpleName()));
 		}
 	};
 
@@ -104,8 +99,21 @@ public class MessageSenderPluginContext implements ApplicationContextAware {
 		if (StringUtils.isBlank(beanId)) {
 			throw new ThirdpartyException("消息提供方:{}不存在", beanId);
 		}
+		MessageSenderPlugin messageSenderPlugin = applicationContext.getBean(beanId, MessageSenderPlugin.class);
+		injectEmailAttribute(messageSenderPlugin);
+		return messageSenderPlugin;
+	}
 
-		return applicationContext.getBean(beanId, MessageSenderPlugin.class);
+	private void injectEmailAttribute(MessageSenderPlugin messageSenderPlugin) {
+		if (messageSenderPlugin.getClass() == CommEmailPlugin.class) {
+			CommEmailPlugin commEmailPlugin = (CommEmailPlugin) messageSenderPlugin;
+			commEmailPlugin.setHostName(sysEmail.getHostName());
+			commEmailPlugin.setSmtpPort(sysEmail.getSmtpPort());
+			commEmailPlugin.setUserName(sysEmail.getUserName());
+			commEmailPlugin.setPassword(sysEmail.getPassword());
+			commEmailPlugin.setFrom(sysEmail.getFrom());
+			commEmailPlugin.setFromName(sysEmail.getFromName());
+		}
 	}
 
 }

+ 11 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/CommEmailPlugin.java

@@ -12,7 +12,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPlugin;
 
 //@Service
 public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
-	
+
 	private String hostName;
 
 	private int smtpPort;
@@ -49,6 +49,10 @@ public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
 		this.fromName = fromName;
 	}
 
+	public static String getName() {
+		return "EMAIL";
+	}
+
 	@Override
 	public void afterPropertiesSet() throws Exception {
 		if (StringUtils.isBlank(hostName)) {
@@ -71,6 +75,7 @@ public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
 			throw new RuntimeException("发件人邮箱没有配置");
 		}
 
+		// 落款名字
 		if (StringUtils.isBlank(fromName)) {
 			fromName = from;
 		}
@@ -98,7 +103,11 @@ public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
 	@Override
 	public boolean batchSend(String subject, String content, String[] receivers, String url, String jpushType, String sound, String channelId) throws Exception {
 		for (String rev : receivers) {
-			send(subject, content, rev, url, jpushType, sound, channelId);
+			try {
+				send(subject, content, rev, url, jpushType, sound, channelId);
+			} catch(EmailException e) {
+				throw new RuntimeException("发送邮件出现异常", e);
+			}
 		}
 		return true;
 	}

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/AppRedemptionCodeController.java

@@ -44,5 +44,14 @@ public class AppRedemptionCodeController extends BaseController {
         }
         return succeed(appRedemptionCodeService.allocation(userId));
     }
+
+    @ApiOperation(value = "使用量检测")
+    @GetMapping(value = "checkLowVolume")
+    // @PreAuthorize("@pcs.hasPermissions('appRedemptionCode/checkLowVolume')")
+    public Object checkLowVolume() {
+        appRedemptionCodeService.checkLowVolume();
+        return null;
+    }
+
 }
 

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderCourseSettingsService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+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.exception.BizException;
@@ -42,12 +43,19 @@ public class MusicGroupPaymentCalenderController extends BaseController {
     @Autowired
     private EmployeeDao employeeDao;
     @Autowired
+    private OrganizationService organizationService;
+    @Autowired
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 
     @ApiOperation(value = "分页查询乐团缴费日历列表")
     @GetMapping(value = "/queryPage")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/queryPage')")
     public Object queryPage(MusicGroupPaymentCalenderQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
         return succeed(musicGroupPaymentCalenderService.queryCalenderPage(queryInfo));
     }
 

+ 20 - 4
mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java

@@ -2,21 +2,26 @@ 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.entity.Employee;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.page.OrganizationQueryInfo;
+import com.ym.mec.biz.service.EmployeeService;
 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.exception.BizException;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @RequestMapping("organization")
 @Api(tags = "分部服务")
@@ -27,6 +32,8 @@ public class OrganizationController extends BaseController {
     private OrganizationService organizationService;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private EmployeeService employeeService;
 
     @ApiOperation(value = "分页查询分部列表")
     @GetMapping("/queryPage")
@@ -92,8 +99,17 @@ public class OrganizationController extends BaseController {
     @GetMapping("/getOrganRole")
     @PreAuthorize("@pcs.hasPermissions('organization/getOrganRole')")
     @ApiParam(value = "分部编号", required = true)
-    public Object getOrganRole(Integer id){
-        return succeed(organizationService.getOrganRole(id));
+    public Object getOrganRole(String organIds){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        organIds = organizationService.getEmployeeOrgan(sysUser.getId(),organIds,sysUser.getIsSuperAdmin());
+        if(StringUtils.isEmpty(organIds)){
+            return failed("分部信息异常");
+        }
+        List<Integer> collect = Arrays.stream(organIds.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+        return succeed(organizationService.getOrganRole(collect));
     }
 
     @ApiOperation(value = "获取用户所在分部的年级列表)")

+ 28 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysEmailController.java

@@ -0,0 +1,28 @@
+package com.ym.mec.web.controller;
+
+
+
+import com.ym.mec.biz.dal.entity.SysEmail;
+import com.ym.mec.biz.service.SysEmailService;
+import org.springframework.web.bind.annotation.*;
+import com.ym.mec.common.controller.BaseController;
+
+import javax.annotation.Resource;
+
+/**
+ * (SysEmail)表控制层
+ *
+ * @author makejava
+ * @since 2022-01-04 17:07:43
+ */
+@RestController
+@RequestMapping("/sysEmail")
+public class SysEmailController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private SysEmailService sysEmailService;
+
+}
+

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

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.biz.service.VipGroupCategoryService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,7 +44,6 @@ public class VipGroupCategoryController extends BaseController {
 		return succeed(vipGroupCategoryService.findTeacherSalary(userId));
 	}
 
-
 	@ApiOperation("新增")
 	@PostMapping(value = "/add")
     @PreAuthorize("@pcs.hasPermissions('vipGroupCategory/add')")