Ver código fonte

Merge remote-tracking branch 'origin/saas' into saas

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
zouxuan 3 anos atrás
pai
commit
aad8e97efd
36 arquivos alterados com 451 adições e 230 exclusões
  1. 16 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/EmployeeDao.java
  2. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PlatformProductDao.java
  3. 25 40
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PlatformProduct.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysCoupon.java
  5. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  6. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PlatformProductService.java
  7. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreCategoriesService.java
  8. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java
  9. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  10. 8 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  11. 8 34
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  12. 7 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java
  13. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  14. 25 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  15. 87 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PlatformProductServiceImpl.java
  16. 19 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  17. 10 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  18. 8 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  19. 31 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  20. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreCategoriesServiceImpl.java
  21. 19 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  22. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  23. 9 0
      mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  24. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  25. 30 9
      mec-biz/src/main/resources/config/mybatis/PlatformProductMapper.xml
  26. 5 6
      mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml
  27. 1 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  28. 1 0
      mec-biz/src/main/resources/config/mybatis/TenantPaymentOrderMapper.xml
  29. 33 0
      mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java
  30. 2 0
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  31. 29 0
      mec-student/src/main/java/com/ym/mec/student/controller/SubjectController.java
  32. 6 0
      mec-student/src/main/java/com/ym/mec/student/controller/TenantInfoController.java
  33. 11 4
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/CommEmailPlugin.java
  34. 5 2
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  35. 0 2
      mec-web/src/main/java/com/ym/mec/web/controller/SubjectController.java
  36. 2 9
      mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

+ 16 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/EmployeeDao.java

@@ -7,7 +7,6 @@ import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.common.dal.BaseDAO;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -175,22 +174,27 @@ public interface EmployeeDao extends BaseDAO<Integer, Employee> {
      * @describe 根据角色和用户查找用户(包含离职和冻结的)
      */
     List<SimpleUserDto> findAllByRole(@Param("roleIds") String roleIds,
-                                   @Param("organIds") String organIds);
+                                      @Param("organIds") String organIds);
 
     /**
      * 获取离职员工所在的乐团列表
+     *
      * @param levelUserId
      * @return
      */
     List<String> queryMusicGroupIdByUserId(Integer levelUserId);
+
     /**
      * 获取离职员工所在的乐团列表
+     *
      * @param levelUserId
      * @return
      */
     List<String> queryPracticeGroupIdByUserId(Integer levelUserId);
+
     /**
      * 获取离职员工所在的乐团列表
+     *
      * @param levelUserId
      * @return
      */
@@ -198,6 +202,7 @@ public interface EmployeeDao extends BaseDAO<Integer, Employee> {
 
     /**
      * 获取用户信息
+     *
      * @param userIds
      * @return
      */
@@ -205,13 +210,20 @@ public interface EmployeeDao extends BaseDAO<Integer, Employee> {
 
     /**
      * 批量添加角色和菜单关系
-     * @param roleId 角色id
+     *
+     * @param roleId  角色id
      * @param menuIds 菜单集合
      */
-    int batchInsertRoleMenu(@Param("roleId") Integer roleId,@Param("menuIds")  List<Integer> menuIds, @Param("tenantId") Integer tenantId);
+    int batchInsertRoleMenu(@Param("roleId") Integer roleId, @Param("menuIds") List<Integer> menuIds, @Param("tenantId") Integer tenantId);
+
+    /**
+     * 根据机构id,和菜单id删除
+     */
+    int delRoleMenu(@Param("tenantId") Integer tenantId, @Param("menuIds") List<Integer> menuIds);
 
     /**
      * 添加角色信息
+     *
      * @param sysRole
      * @return
      */

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

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.entity.PlatformProduct;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface PlatformProductDao extends BaseMapper<PlatformProduct> {
     int deleteByPrimaryKey(Integer id);
@@ -22,6 +23,14 @@ public interface PlatformProductDao extends BaseMapper<PlatformProduct> {
 
     List<String> queryMenuIdList(Integer serveId);
 
-    List<Integer> queryProductInTenant(Integer id);
+    /**
+     * 根据条件机构和产品的关系
+     *
+     * @param productId 产品id
+     * @param serveId   服务id
+     * @param tenantId  机构id
+     * @return tenantId 机构id,userId机构管理员id
+     */
+    List<Map<Integer, Integer>> queryTenantByMultiId(@Param("productId") Integer productId, @Param("serveId") Integer serveId, @Param("tenantId") Integer tenantId);
 
 }

+ 25 - 40
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PlatformProduct.java

@@ -1,71 +1,56 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
 import java.io.Serializable;
 import java.util.Date;
 
 /**
- * platform_product
- * @author 
+ * 产品管理(PlatformProduct)表实体类
+ *
+ * @author hgw
+ * @since 2022-01-07 19:01:04
  */
-@ApiModel(value="产品管理")
+@ApiModel(value = "platform_product-产品管理")
 public class PlatformProduct implements Serializable {
-    /**
-     * 主键
-     */
-    @ApiModelProperty(value="主键")
     @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
     private Integer id;
 
-    /**
-     * 产品名称
-     */
-    @ApiModelProperty(value="产品名称")
+    @TableField("name_")
+    @ApiModelProperty(value = "服务名称")
     private String name;
 
-    /**
-     * 菜单id
-     */
-    @ApiModelProperty(value="菜单id")
+    @TableField("menu_id_")
+    @ApiModelProperty(value = "菜单id")
     private String menuId;
 
-    /**
-     * 备注
-     */
-    @ApiModelProperty(value="备注")
+    @TableField("remark_")
+    @ApiModelProperty(value = "产品id多个用逗号分割")
     private String remark;
 
-    /**
-     * 是否删除0未删除 1删除
-     */
-    @ApiModelProperty(value="是否删除0未删除 1删除")
-    private Integer deleted = 0;
+    @TableField("deleted_")
+    @ApiModelProperty(value = "是否删除0未删除 1删除")
+    private Integer deleted;
 
-    /**
-     * 创建人
-     */
-    @ApiModelProperty(value="创建人")
+    @TableField("created_by_")
+    @ApiModelProperty(value = "创建人")
     private Integer createdBy;
 
-    /**
-     * 创建时间
-     */
-    @ApiModelProperty(value="创建时间")
+    @TableField("created_time_")
+    @ApiModelProperty(value = "创建时间")
     private Date createdTime;
 
-    /**
-     * 更新人
-     */
-    @ApiModelProperty(value="更新人")
+    @TableField("updated_by_")
+    @ApiModelProperty(value = "更新人")
     private Integer updatedBy;
 
-    /**
-     * 更新时间
-     */
-    @ApiModelProperty(value="更新时间")
+    @TableField("updated_time_")
+    @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
     private static final long serialVersionUID = 1L;

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysCoupon.java

@@ -87,6 +87,9 @@ public class SysCoupon extends BaseEntity implements Serializable{
 
 	private java.util.Date updateTime;
 
+	@ApiModelProperty("非数据库字段-可以领取的优惠券数量")
+	private Integer canBeGetNum;
+
 	public Integer getId() {
 		return id;
 	}
@@ -263,6 +266,14 @@ public class SysCoupon extends BaseEntity implements Serializable{
         this.typeDetail = typeDetail;
     }
 
+    public Integer getCanBeGetNum() {
+        return canBeGetNum;
+    }
+
+    public void setCanBeGetNum(Integer canBeGetNum) {
+        this.canBeGetNum = canBeGetNum;
+    }
+
     @Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -198,7 +198,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     APP_REDEMPTION_CODE("APP_REDEMPTION_CODE", "兑换码分配量预警"),
     CLOUD_TEACHER_ORDER_SUCCESS("CLOUD_TEACHER_ORDER_SUCCESS", "云教练激活成功"),
-    TEST_EMAIL_FIRST("TEST_EMAIL_FIRST", "测试邮件")
+    EMAIL_TENANT_ACTIVATION_SUCCESSFUL("EMAIL_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
+    EMAIL_TENANT_RENEWAL_SUCCESSFUL("EMAIL_TENANT_RENEWAL_SUCCESSFUL", "续费成功"),
+    EMAIL_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "过期提醒"),
+    EMAIL_TENANT_INSUFFICIENT_BALANCE("EMAIL_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
+
+    sms_tenant_activation_successful("EMAIL_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
+    SMS_TENANT_RENEWAL_SUCCESSFUL("EMAIL_TENANT_RENEWAL_SUCCESSFUL", "续费成功"),
+    SMS_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "过期提醒"),
+    SMS_TENANT_INSUFFICIENT_BALANCE("EMAIL_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
     ;
 
     MessageTypeEnum(String code, String msg) {

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

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.PlatformProduct;
 import com.ym.mec.common.page.PageInfo;
 
 import java.util.List;
+import java.util.Map;
 
 public interface PlatformProductService {
 
@@ -12,6 +13,10 @@ public interface PlatformProductService {
 
     void updateProduct(PlatformProductDto obj);
 
+    void checkUpdateRole(String menuIds, String sourceMenuIds, Map<Integer, Integer> map);
+
+    Map<Integer, Integer> queryTenantByMultiId(Integer productId, Integer serveId, Integer tenantId);
+
     PageInfo<PlatformProduct> queryPage(String search, Integer page, Integer rows);
 
     List<String> queryMenuIdList(Integer serveId);

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

@@ -22,4 +22,8 @@ public interface SysMusicScoreCategoriesService extends BaseService<Integer, Sys
     void enable(Integer categoriesId);
 
     SysMusicScoreCategories getDetail(Integer categoriesId);
+    
+    public SysMusicScoreCategories getChildTree(SysMusicScoreCategories sysMusicScoreCategories);
+    
+    public SysMusicScoreCategories getParentTree(SysMusicScoreCategories sysMusicScoreCategories);
 }

+ 7 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java

@@ -38,8 +38,6 @@ public interface TenantInfoService extends IService<TenantInfo> {
 
     TenantProductSumm queryTenantInfoProductSumm(Integer id);
 
-    Boolean testEmail();
-
     /**
     * @description: 保存tenantId
      * @param request
@@ -49,5 +47,12 @@ public interface TenantInfoService extends IService<TenantInfo> {
     */
     void saveTenantContextHolder(HttpServletRequest request);
 
+    /**
+     * 按部门查询机构信息
+     * @return 机构信息
+     */
     TenantInfo queryTenantInfoByOrgan(Integer organId);
+
+    Boolean testEmail();
+
 }

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

@@ -3252,7 +3252,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			if(newCourseSchedule.getStartClassTime().compareTo(date)<0){
 				throw new BizException("调整无效,不能调整至已结束");
 			}
-			if (newCourseSchedule.getType() == CourseScheduleType.PRACTICE) {
+			/*if (newCourseSchedule.getType() == CourseScheduleType.PRACTICE) {
 				PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(newCourseSchedule.getMusicGroupId()));
 				if (practiceGroup.getType() != TRIAL) {
 					if (DateUtil.minutesBetween(newCourseSchedule.getStartClassTime(), practiceGroup.getCoursesStartDate()) > 0) {
@@ -3262,7 +3262,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						throw new BizException("调整失败: 截止时间超过课程有效期");
 					}
 				}
-			}
+			}*/
         }
 
 		Set<String> musicGroupIds = oldCourseScheduleList.stream().filter(c -> MUSIC.equals(c.getGroupType())).map(CourseSchedule::getMusicGroupId).collect(Collectors.toSet());

+ 8 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -81,6 +81,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	@Transactional(rollbackFor = Exception.class)
 	public void add(Employee employee){
 		SysUser user = sysUserFeignService.queryUserByMobile(employee.getPhone());
+		Integer tenantId = TenantContextHolder.getTenantId();
 		if(user != null && user.getId() != null){
 			Employee employee1 = employeeDao.get(user.getId());
 			if(employee1 == null){
@@ -91,7 +92,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 				employee.setId(user.getId());
 				employeeDao.insert(employee);
 				//新增用户角色
-				employeeDao.batchAddEmployeeRole(user.getId(),employee.getRoleIds(), user.getTenantId());
+				employeeDao.batchAddEmployeeRole(user.getId(),employee.getRoleIds(), tenantId);
 				employee.setUserType(user.getUserType() + ",SYSTEM");
 				teacherDao.updateUser(employee);
 				return;
@@ -105,9 +106,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		employee.setUserId(employee.getId());
         employeeDao.insert(employee);
 		//新增用户角色
-		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds(), employee.getTenantId());
+		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds(), tenantId);
 		//新增用户职位
-		employeePositionService.batchAddPosition(employee.getId(),employee.getPositionIds(), employee.getTenantId());
+		employeePositionService.batchAddPosition(employee.getId(),employee.getPositionIds(), tenantId);
 		//添加用户现金账户
 		sysUserCashAccountDao.insert(new SysUserCashAccount(employee.getId(),"CNY"));
 		ImResult imResult = imFeignService.register(new ImUserModel(employee.getId().toString(), employee.getUsername(),null));
@@ -142,12 +143,13 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		//删除当前用户角色
 		employeeDao.delEmployeeRole(employee.getId());
 		//新增用户角色
-		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds(), sysUser.getTeacherId());
+		Integer tenantId = TenantContextHolder.getTenantId();
+		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds(), tenantId);
 
 		//删除用户职位
-		employeePositionService.delPosition(employee.getId(),employee.getTenantId());
+		employeePositionService.delPosition(employee.getId(),tenantId);
 		//添加职位
-		employeePositionService.batchAddPosition(employee.getId(),employee.getPositionIds(), employee.getTenantId());
+		employeePositionService.batchAddPosition(employee.getId(),employee.getPositionIds(), tenantId);
 		teacherDao.updateUser(employee);
 		imGroupDao.updateNickname(employee.getUserId(), employee.getRealName());
 		imGroupDao.updateUserFriendNickname(employee.getUserId(), employee.getRealName());

+ 8 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -47,8 +47,6 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
@@ -597,7 +595,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         Date date = new Date();
         //使用优惠券
-        CouponPayParam couponPayParam = checkCoupon(renewParamDto);
+        CouponPayParam couponPayParam = checkCoupon(renewParamDto.getCouponIdList(), renewParamDto.getAmount());
         StudentPaymentOrder studentPaymentOrder = couponPayParam.getStudentPaymentOrder();
         studentPaymentOrder.setGroupType(GroupType.MUSIC);
         studentPaymentOrder.setUserId(userId);
@@ -774,43 +772,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return goodsDto;
     }
 
-    private AtomicInteger getTotalNum(RegisterPayDto registerPayDto) {
-        AtomicInteger total = new AtomicInteger(0);
-        getTotal(registerPayDto.getGoodsGroups(), Map::size, total);
-        getTotal(registerPayDto.getNewCourse(), List::size, total);
-        getTotal(registerPayDto.getBuyCalenderActivityId(), List::size, total);
-        getTotal(registerPayDto.getBuyCloudTeacher(), total);
-        getTotal(registerPayDto.getBuyCloudTeacherPlus(), total);
-        getTotal(registerPayDto.getBuyMaintenance(), total);
-        return total;
-    }
-
-    private <T> void getTotal(T obj, Function<? super T, Integer> mapper, AtomicInteger total) {
-        Optional.ofNullable(obj)
-                .ifPresent(o -> total.set(total.get() + mapper.apply(o)));
-    }
-
-    private void getTotal(Boolean flag, AtomicInteger total) {
-        if (Objects.nonNull(flag) && flag) {
-            total.set(total.incrementAndGet());
-        }
-    }
-
     //校验如果使用了优惠券,优惠券的信息是否合法
-    public CouponPayParam checkCoupon(RegisterPayDto registerPayDto) {
+    public CouponPayParam checkCoupon(List<Integer> couponIdList, BigDecimal amount) {
         CouponPayParam couponPayParam = new CouponPayParam();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
-        studentPaymentOrder.setExpectAmount(registerPayDto.getAmount());
-        studentPaymentOrder.setActualAmount(registerPayDto.getAmount());
+        studentPaymentOrder.setExpectAmount(amount);
+        studentPaymentOrder.setActualAmount(amount);
         //没有使用优惠券
-        if (CollectionUtils.isEmpty(registerPayDto.getCouponIdList())) {
+        if (CollectionUtils.isEmpty(couponIdList)) {
             studentPaymentOrder.setCouponRemitFee(BigDecimal.ZERO);
         } else {
-            //获取本次商品的总数
-            AtomicInteger total = getTotalNum(registerPayDto);
             //校验优惠券的使用
-            couponPayParam = sysCouponCodeService.getCouponPayParam(registerPayDto.getCouponIdList());
-            studentPaymentOrder.setCouponCodeId(StringUtils.join(registerPayDto.getCouponIdList(), ","));
+            couponPayParam = sysCouponCodeService.getCouponPayParam(couponIdList);
+            studentPaymentOrder.setCouponCodeId(StringUtils.join(couponIdList, ","));
             studentPaymentOrder.setCouponRemitFee(couponPayParam.getCouponRemitTotal());
         }
         couponPayParam.setStudentPaymentOrder(studentPaymentOrder);
@@ -860,7 +834,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         String channelType = "";
         //生成订单,校验优惠券的使用情况
-        CouponPayParam couponPayParam = checkCoupon(registerPayDto);
+        CouponPayParam couponPayParam = checkCoupon(registerPayDto.getCouponIdList(), registerPayDto.getAmount());
         StudentPaymentOrder studentPaymentOrder = couponPayParam.getStudentPaymentOrder();
         studentPaymentOrder.setUserId(studentRegistration.getUserId());
         studentPaymentOrder.setGroupType(GroupType.MUSIC);

+ 7 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java

@@ -207,13 +207,17 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         }
 
         ChargeTypeSubjectMapper subjectDiscount = chargeTypeSubjectMapperDao.getSubjectDiscount(chargeTypeId, subjectId);
-        if (subjectDiscount == null || subjectDiscount.getGoodsDiscountRate() == null || subjectDiscount.getGoodsDiscountRate().compareTo(new BigDecimal(100)) == 0) {
-            return goodsList;
+        
+        if (subjectDiscount == null){
+        	throw new BizException("未查询到[收费类型与声部的关联关系]");
+        }
+        if (subjectDiscount.getGoodsDiscountRate() == null) {
+        	subjectDiscount.setGoodsDiscountRate(new BigDecimal(100));
         }
         for (MusicGroupGoodsAndDiscountDto musicGroupGoodsAndDiscountDto : goodsList) {
             if (musicGroupGoodsAndDiscountDto.getType() != null && musicGroupGoodsAndDiscountDto.getType().equals(GoodsType.INSTRUMENT)) {
                 musicGroupGoodsAndDiscountDto.setDiscountRate(subjectDiscount.getGoodsDiscountRate());
-                musicGroupGoodsAndDiscountDto.setGroupPurchasePrice(musicGroupGoodsAndDiscountDto.getDiscountPrice().multiply(subjectDiscount.getGoodsDiscountRate()).divide(new BigDecimal(100), 0, BigDecimal.ROUND_HALF_UP));
+                musicGroupGoodsAndDiscountDto.setGroupPurchasePrice(musicGroupGoodsAndDiscountDto.getGroupPurchasePrice().multiply(subjectDiscount.getGoodsDiscountRate()).divide(new BigDecimal(100), 0, BigDecimal.ROUND_HALF_UP));
             }
         }
         return goodsList;

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

@@ -277,7 +277,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         CompletableFuture.runAsync(() -> {
             //检查5次
             Boolean ret = false;
-            for (int i = 0; i <= 15; i++) {
+            for (int i = 0; i <= 100; i++) { // 检查5分钟
                 try {
                     ret = cloudTeacherOrderService.payCheck(record);
                     if (ret) break;
@@ -305,7 +305,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         //异步
         CompletableFuture.runAsync(() -> {
             //检查5次
-            for (int i = 0; i <= 15; i++) {
+            for (int i = 0; i <= 100; i++) { // 检查5分钟
                 try {
                     Boolean ret = tenantOrderRecordService.rechargeCheck(record);
                     if (ret) break;

+ 25 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java

@@ -1,5 +1,25 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.EDUCATIONAL_TEACHER;
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.JOIN_TEACHER;
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.REPAIR;
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.SECTION_MANAGER;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.StringJoiner;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -12,19 +32,10 @@ import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
 import com.ym.mec.biz.dal.page.EducationBaseQueryInfo;
 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 org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.*;
 
 @Service
 public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organization> implements OrganizationService {
@@ -232,11 +243,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 
 	@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){
+		if(isSuper){
 			Map<String,Object> param = new HashMap<>();
 			Integer tenantId = TenantContextHolder.getTenantId();
 			param.put("tenantId",tenantId);
@@ -245,6 +252,10 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 				organIds = StringUtils.join(all.stream().map(e->e.getId()).collect(Collectors.toSet()),",");
 			}
 		}
+		if(StringUtils.isEmpty(organIds)){
+			Employee employee = employeeDao.get(userId);
+			organIds = employee.getOrganIdList();
+		}
 		return organIds;
 	}
 

+ 87 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PlatformProductServiceImpl.java

@@ -3,8 +3,10 @@ package com.ym.mec.biz.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 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.PlatformProductDao;
 import com.ym.mec.biz.dal.dto.PlatformProductDto;
 import com.ym.mec.biz.dal.entity.PlatformProduct;
@@ -12,14 +14,13 @@ import com.ym.mec.biz.service.PlatformProductService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
+import com.ym.mec.common.page.WrapperUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author hgw
@@ -29,6 +30,8 @@ import java.util.Optional;
 public class PlatformProductServiceImpl extends ServiceImpl<PlatformProductDao, PlatformProduct> implements PlatformProductService {
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
 
     /**
      * 增加
@@ -53,24 +56,91 @@ public class PlatformProductServiceImpl extends ServiceImpl<PlatformProductDao,
      * 修改
      */
     @Override
-    public void updateProduct(PlatformProductDto obj) {
-        Optional.ofNullable(obj.getId()).orElseThrow(() -> new BizException("产品Id不能为空"));
+    public void updateProduct(PlatformProductDto dto) {
+        Optional.ofNullable(dto.getId()).orElseThrow(() -> new BizException("产品Id不能为空"));
         Integer userId = Optional.ofNullable(sysUserFeignService.queryUserInfo())
                 .map(SysUser::getId)
                 .orElseThrow(() -> new BizException("用户信息获取失败"));
+        //查询该产品
+        PlatformProduct sourceObj = Optional.ofNullable(this.getById(dto.getId()))
+                .filter(s -> s.getDeleted() == 0)
+                .orElseThrow(() -> new BizException("未查询到该产品信息!"));
+
         PlatformProduct platformProduct = new PlatformProduct();
-        platformProduct.setId(obj.getId());
-        platformProduct.setName(obj.getName());
-        platformProduct.setMenuId(obj.getMenuId());
-        platformProduct.setRemark(obj.getRemark());
+        platformProduct.setId(dto.getId());
+        platformProduct.setName(dto.getName());
+        platformProduct.setMenuId(dto.getMenuId());
+        platformProduct.setRemark(dto.getRemark());
         platformProduct.setUpdatedBy(userId);
         platformProduct.setUpdatedTime(new Date());
         baseMapper.updateByPrimaryKeySelective(platformProduct);
-        //查询哪些机构用了这个产品,需要修改对应的权限
-//        List<Integer> tenantIds = baseMapper.queryProductInTenant(obj.getId());
-//        if(CollectionUtils.isEmpty(tenantIds)){
-//            return;
-//        }
+        //查询该产品有多少机构关联
+        Map<Integer, Integer> map = queryTenantByMultiId(dto.getId(), null, null);
+        if (Objects.isNull(map)) {
+            return;
+        }
+        //检查是否需要修改权限
+        checkUpdateRole(dto.getMenuId(), sourceObj.getMenuId(), map);
+    }
+
+    /**
+     * 检查哪些机构用了这个产品,需要修改对应的权限
+     *
+     * @param menuIds       修改后的的菜单id,用逗号隔开
+     * @param sourceMenuIds 修改之前的的菜单id,用逗号隔开
+     * @param map           Map<机构id,机构的管理员id> queryProductInTenant
+     */
+    public void checkUpdateRole(String menuIds, String sourceMenuIds, Map<Integer, Integer> map) {
+        //需要删除的菜单id
+        List<Integer> deleteList = getList(sourceMenuIds);
+        //需要添加的菜单id
+        List<Integer> addList = getList(menuIds);
+        //求新旧产品菜单的差异
+        WrapperUtil.listDifference(deleteList, addList);
+        //修改数据
+        map.forEach((tenantId, uId) -> {
+            if (CollectionUtils.isNotEmpty(addList)) {
+                //uId查询机构管理员角色
+                List<Integer> roles = employeeDao.queryUserRole(uId);
+                //机构管理员只会有一个管理员角色
+                Integer adminRole = roles.get(0);
+                //给管理员角色添加dtoList菜单id
+                Lists.partition(addList, 50)
+                        .forEach(idList -> employeeDao.batchInsertRoleMenu(adminRole, idList, tenantId));
+            }
+            //根据机构id 和 角色的菜单id删除信息
+            if (CollectionUtils.isNotEmpty(deleteList)) {
+                Lists.partition(deleteList, 50)
+                        .forEach(idList -> employeeDao.delRoleMenu(tenantId, idList));
+            }
+        });
+    }
+
+    private List<Integer> getList(String str) {
+        List<String> strings = Optional.ofNullable(str).map(WrapperUtil::toList).orElse(null);
+        if (CollectionUtils.isEmpty(strings)) {
+            return null;
+        }
+        return strings.stream()
+                .map(WrapperUtil::toInt)
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 根据多个id 查询出机构的id 和机构管理员id
+     *
+     * @param productId 产品id
+     * @param serveId   服务id
+     * @param tenantId  机构id
+     */
+    public Map<Integer, Integer> queryTenantByMultiId(Integer productId, Integer serveId, Integer tenantId) {
+        List<Map<Integer, Integer>> mapList = baseMapper.queryTenantByMultiId(productId, serveId, tenantId);
+        if (CollectionUtils.isEmpty(mapList)) {
+            return null;
+        }
+        //Map<机构id,机构的管理员id>
+        return mapList.stream()
+                .collect(Collectors.toMap(m -> m.get("tenantId"), m -> m.get("userId"), (a, b) -> b));
     }
 
     /**
@@ -85,8 +155,8 @@ public class PlatformProductServiceImpl extends ServiceImpl<PlatformProductDao,
                 .map(SysUser::getId)
                 .orElseThrow(() -> new BizException("用户信息获取失败"));
         //校验哪些机构用了该产品
-        List<Integer> tenantIds = baseMapper.queryProductInTenant(id);
-        if(CollectionUtils.isNotEmpty(tenantIds)){
+        List<Map<Integer, Integer>> map = baseMapper.queryTenantByMultiId(id, null, null);
+        if (CollectionUtils.isEmpty(map)) {
             throw new BizException("该产品关联的服务已有机构在使用,无法删除!");
         }
 

+ 19 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -255,14 +255,31 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         if (Objects.isNull(courseScheduleID)) {
             throw new BizException("作业不存在");
         }
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleID);
+        
+        if(courseSchedule == null){
+        	throw new BizException("课程不存在");
+        }
+
+        MusicGroupTrainPlan musicGroupTrainPlan = null;
+		//获取课程规划
+		MusicGroupTrainPlanSaveDto schoolTerm = musicGroupTrainPlanService.getSchoolTerm(courseSchedule);
+		int courseNumNo = courseScheduleDao.getCourseNumNo(schoolTerm);
+		List<MusicGroupTrainPlan> planList = musicGroupTrainPlanService.queryPlan(schoolTerm);
+		if(planList.size() >= courseNumNo){
+			musicGroupTrainPlan = planList.get(courseNumNo - 1);
+		}
+		
         CourseHomeworkStudentDetailDto courseHomeworkStudentDetail = studentCourseHomeworkDao.findCourseHomeworkStudentDetail(courseScheduleID, userId);
         if(courseHomeworkStudentDetail == null){
-            throw new BizException("作业不存在");
+        	courseHomeworkStudentDetail = new CourseHomeworkStudentDetailDto();
+			courseHomeworkStudentDetail.setMusicGroupTrainPlan(musicGroupTrainPlan);
+        	return courseHomeworkStudentDetail;
         }
+        
         SysUser sysUser = teacherDao.getUser(userId.intValue());
         courseHomeworkStudentDetail.setStudentId(userId.intValue());
         courseHomeworkStudentDetail.setStudentName(sysUser.getUsername());
-        CourseSchedule courseSchedule = courseScheduleDao.get(courseHomeworkStudentDetail.getCourseScheduleId());
         if (Objects.nonNull(courseSchedule)) {
             SysUser teacher = teacherDao.getUser(courseSchedule.getActualTeacherId());
             courseHomeworkStudentDetail.setTeacherId(courseSchedule.getActualTeacherId());
@@ -290,15 +307,6 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         Student student = studentDao.get(userId.intValue());
         courseHomeworkStudentDetail.setHasMember(student.getMemberRankSettingId()==null?0:1);
 //        }
-        
-		//获取课程规划
-		MusicGroupTrainPlanSaveDto schoolTerm = musicGroupTrainPlanService.getSchoolTerm(courseSchedule);
-		int courseNumNo = courseScheduleDao.getCourseNumNo(schoolTerm);
-		List<MusicGroupTrainPlan> planList = musicGroupTrainPlanService.queryPlan(schoolTerm);
-		if(planList.size() >= courseNumNo){
-			courseHomeworkStudentDetail.setMusicGroupTrainPlan(planList.get(courseNumNo - 1));
-		}
-		
 		
         return courseHomeworkStudentDetail;
     }

+ 10 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -592,19 +592,23 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
         //缴费项目详情
         musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder, studentRegistration);
 
-        List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(e -> e.getType()).collect(Collectors.toList());
+        List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(StudentPaymentOrderDetail::getType).collect(Collectors.toList());
         //销售订单详情
         if (allDetails.size() > 0 && (detailTypeEnums.contains(MUSICAL) || detailTypeEnums.contains(ACCESSORIES) || detailTypeEnums.contains(TEACHING))) {
             BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
             if (couponRemitFee.compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal musicFee = allDetails.stream().filter(o -> o.getType() == MUSICAL
-                                || o.getType() == ACCESSORIES || o.getType() == TEACHING)
-                        .map(o -> o.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal musicFee = allDetails.stream()
+                        .filter(o -> o.getType() == MUSICAL || o.getType() == ACCESSORIES || o.getType() == TEACHING)
+                        .map(StudentPaymentOrderDetail::getPrice)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
                 BigDecimal expectAmount = studentPaymentOrder.getExpectAmount();
                 //获取比例
-                BigDecimal ratioAmount = musicFee.divide(expectAmount, 6, BigDecimal.ROUND_HALF_UP);
+                BigDecimal ratioAmount = BigDecimal.ZERO;
+                if (BigDecimal.ZERO.compareTo(expectAmount) > 0) {
+                    ratioAmount = musicFee.divide(expectAmount, 6, RoundingMode.HALF_UP);
+                }
                 //获取分配的减免金额
-                couponRemitFee = couponRemitFee.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+                couponRemitFee = couponRemitFee.multiply(ratioAmount).setScale(2, RoundingMode.HALF_UP);
             }
             sellOrderService.addOrderDetail2SellOrder(allDetails, studentPaymentOrder, musicGroup, couponRemitFee);
         }

+ 8 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -104,7 +104,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		PageInfo<SysMessageDto> pageInfo = new PageInfo<SysMessageDto>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
-		
+
 		List<SysMessageDto> dataList = null;
 		int count = this.findCount(params);
 		if (count > 0) {
@@ -314,7 +314,8 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		}
 		// email data from database load, 使用接收者 tenantId, 假设发送者和接收者为同一机构
 		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			loadEmailInfo(null, receivers.values().stream().findFirst().orElse(null));
+			Integer userId = receivers.keySet().stream().findFirst().orElse(-1);
+			loadEmailInfo(userId);
 		}
 		if(StringUtils.isNotEmpty(jpushType) && jpushType == "STUDENT"){
 			//如果不是缴费信息
@@ -355,6 +356,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if (triggerTime == null || date.after(triggerTime)) {
 			status = SendStatusEnum.SENDING;
 			try {
+				debugMode = false;
 				if (debugMode == true
 						|| messageSenderPluginContext.batchSend(messageSender, messageConfig.getDescription(),
 								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,"default",null)) {
@@ -451,7 +453,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		}
 		// email data from database load
 		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			loadEmailInfo(userId, receiver);
+			loadEmailInfo(userId);
 		}
 		Date date = new Date();
 		SendStatusEnum status = SendStatusEnum.WAIT;
@@ -482,33 +484,15 @@ 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(Integer userId,  String receiver) {
-		Integer tenantId = getTenantIdByUser(userId, receiver);
-		SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", tenantId).queryWrapper());
+	private void loadEmailInfo(Integer userId) {
+		SysUser user = sysUserFeignService.queryUserById(userId);
+		SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", user.getTenantId()).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

+ 31 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java

@@ -1,10 +1,19 @@
 package com.ym.mec.biz.service.impl;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
@@ -15,15 +24,6 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 @Service
 public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integer, SysMusicScoreAccompaniment> implements SysMusicScoreAccompanimentService {
@@ -120,14 +120,30 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 			musicScoreQueryInfo.setParentId(categoriesId);
 			musicScoreQueryInfo.setOrganId(queryInfo.getOrganId());
 			musicScoreQueryInfo.setEnable(queryInfo.getEnable());
-			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
-			if(scoreCategories.size() > 0){
-				categoriesIdList = scoreCategories.stream().map(e->e.getId()).collect(Collectors.toList());
-			}else {
-				categoriesIdList.add(categoriesId);
+			//List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			
+			SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(categoriesId);
+			
+			if(sysMusicScoreCategories == null){
+				throw new BizException("分类找不到");
 			}
+			categoriesIdList.add(categoriesId);
+			sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
+			getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
+			
 			queryInfo.setCategoriesIdList(categoriesIdList);
 		}
 		return this.queryPage(queryInfo);
     }
+    
+    private void getAllCategoryIdList(List<Integer> categoryIdList, List<SysMusicScoreCategories> sysMusicScoreCategoriesList){
+    	
+    	if(sysMusicScoreCategoriesList != null && sysMusicScoreCategoriesList.size() > 0){
+    		for(SysMusicScoreCategories sysMusicScoreCategories : sysMusicScoreCategoriesList){
+    			categoryIdList.add(sysMusicScoreCategories.getId());
+    			getAllCategoryIdList(categoryIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
+    		}
+    	}
+    	
+    }
 }

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

@@ -243,7 +243,7 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
 		return item;
 	}
     
-    private SysMusicScoreCategories getChildTree(SysMusicScoreCategories sysMusicScoreCategories){
+    public SysMusicScoreCategories getChildTree(SysMusicScoreCategories sysMusicScoreCategories){
     	
     	List<SysMusicScoreCategories> subCategoryList = sysMusicScoreCategoriesDao.findByParentId(sysMusicScoreCategories.getId(), null, null);
     	
@@ -257,7 +257,7 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
     	return sysMusicScoreCategories;
     }
     
-	private SysMusicScoreCategories getParentTree(SysMusicScoreCategories sysMusicScoreCategories) {
+    public SysMusicScoreCategories getParentTree(SysMusicScoreCategories sysMusicScoreCategories) {
 		if (sysMusicScoreCategories != null && sysMusicScoreCategories.getParentId() > 0) {
 			SysMusicScoreCategories parentCategories = sysMusicScoreCategoriesDao.queryByParentId(sysMusicScoreCategories.getParentId());
 			if (parentCategories != null) {

+ 19 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -338,6 +338,12 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         }
         productInfo.setExpiryDate(expiryDate);
         tenantProductInfoService.updateById(productInfo);
+        //发送邮件提醒
+        Map<Integer, String> receivers = new HashMap<>();
+        receivers.put(tenantInfo.getUserId(), tenantInfo.getEmail());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.EMAIL,
+                MessageTypeEnum.EMAIL_TENANT_ACTIVATION_SUCCESSFUL, receivers, null, 0, null,
+                "SYSTEM", tenantInfo.getName(), tenantInfo.getPhone(), "123456", "https://online.dayaedu.com");
         //释放锁
         bucket.delete();
     }
@@ -670,16 +676,6 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         return tps;
     }
 
-
-    @Override
-    public Boolean testEmail() {
-        Map<Integer, String> receivers = new HashMap<>();
-        receivers.put(1, "yanite1234@sina.com");
-        receivers.put(2, "yanite2016@sina.com");
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.EMAIL, MessageTypeEnum.TEST_EMAIL_FIRST, receivers, null, 0, null, "SYSTEM", null, null, null, null);
-
-        return false;
-    }
     @Override
     public void saveTenantContextHolder(HttpServletRequest request) {
         String tenantId = request.getHeader("tenantId");
@@ -706,4 +702,17 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     public TenantInfo queryTenantInfoByOrgan(Integer organId) {
         return baseMapper.queryTenantInfoByOrgan(organId);
     }
+
+
+    @Override
+    public Boolean testEmail() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        Map<Integer, String> receivers = new HashMap<>();
+        receivers.put(user.getId(), "yanite1234@sina.com");
+        receivers.put(2, "yanite2016@sina.com");
+        receivers.put(3, "yanite@qq.com");
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.EMAIL, MessageTypeEnum.EMAIL_TENANT_ACTIVATION_SUCCESSFUL, receivers, null, 0, null, "SYSTEM", null);
+
+        return false;
+    }
 }

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

@@ -253,7 +253,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         if (!bucket.trySet(1, 3L, TimeUnit.SECONDS)) {
             return false;
         }
-        log.info("checkRechargeCheck  checkTenantOrder>>>>>");
+        log.info("checkRechargeCheck  rechargeCheck>>>>>");
         checkTransOrderState(record);
         if (record.getOrderState() == 1) {
             baseMapper.updateById(record);
@@ -265,7 +265,6 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
                 e.printStackTrace();
                 return false;
             }
-            // 发送短信
         }
         bucket.delete();
         return false;

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml

@@ -91,6 +91,15 @@
         </foreach>
     </insert>
 
+    <delete id="delRoleMenu">
+        DELETE FROM `sys_role_menu`
+        WHERE  tenant_id_ = #{tenantId}
+        and menu_id_ in
+        <foreach collection="menuIds" open="(" close=")" item="item" separator=",">
+            #{item}
+        </foreach>
+    </delete>
+
     <insert id="insertSysRole" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.auth.api.entity.SysRole"
             useGeneratedKeys="true">
         INSERT INTO `sys_role` (`role_name_`, `role_code_`, `role_desc_`, `create_time_`,

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

@@ -871,7 +871,7 @@
         SELECT mg.id_ musicGroupId,o.name_ organName,mg.name_ musicGroupName,mg.status_ musicGroupStatus,mg.course_view_type_ courseViewType FROM
         music_group mg
         LEFT JOIN organization o ON mg.organ_id_ = o.id_
-        WHERE status_ IN ('PRE_APPLY','PRE_BUILD_FEE','FEE_AUDIT','APPLY','PAY') and tenant_id_ = #{tenantId}
+        WHERE status_ IN ('PRE_APPLY','PRE_BUILD_FEE','FEE_AUDIT','APPLY','PAY') and mg.tenant_id_ = #{tenantId}
         <if test="organId != null">
             AND FIND_IN_SET(mg.organ_id_,#{organId})
         </if>

+ 30 - 9
mec-biz/src/main/resources/config/mybatis/PlatformProductMapper.xml

@@ -137,7 +137,7 @@
             </if>
         </where>
     </select>
-    
+
     <select id="queryMenuIdList" parameterType="integer" resultType="string">
         SELECT
             b.`menu_id_`
@@ -150,16 +150,37 @@
           AND a.`id_` = #{serveId}
     </select>
 
-    <select id="queryProductInTenant" parameterType="integer" resultType="integer">
+    <select id="queryTenantByMultiId" parameterType="integer" resultType="map">
         SELECT
-            DISTINCT
-            tpi.tenant_id_
+            a.id_ as tenantId,
+            a.`user_id_` as userId
         FROM
-            tenant_product_info as tpi
-                JOIN `platform_serve` AS a on tpi.serve_id_ = a.id_
-                JOIN `platform_product` AS b
-                     ON FIND_IN_SET(b.`id_`, a.`product_id_`)
-        where b.id_ = #{id}
+        tenant_info AS a
+                JOIN `tenant_product_info` AS b
+                     ON a.`id_` = b.`tenant_id_`
+                JOIN
+            (SELECT
+                 a.id_ AS serveId,
+                 a.`name_` AS serveName,
+                 GROUP_CONCAT(b.`name_`) AS productName
+             FROM
+                 `platform_serve` AS a
+                     JOIN `platform_product` AS b
+                          ON FIND_IN_SET(b.`id_`, a.`product_id_`)
+             WHERE
+                 a.deleted_ = 0 AND b.deleted_ = 0
+                 <if test="productId != null">
+                     and b.`id_` = #{productId}
+                 </if>
+                 <if test="serveId != null">
+                     and a.id_ = #{serveId}
+                 </if>
+             GROUP BY a.`id_`) AS c
+            ON b.`serve_id_` = c.serveId
+        WHERE a.`pay_state_` = 1
+        <if test="tenantId != null">
+            and a.id_ = #{tenantId}
+        </if>
     </select>
 
 </mapper>

+ 5 - 6
mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml

@@ -124,6 +124,7 @@
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
+        <result column="canBeGetNum" property="canBeGetNum"/>
     </resultMap>
 
     <select id="queryUserCanGetCoupon" resultMap="SysCoupon">
@@ -150,7 +151,8 @@
             warning_status_,
             create_time_,
             update_time_,
-            tenant_id_
+            tenant_id_,
+            IFNULL(b.couponNum,0) AS canBeGetNum
         FROM
             sys_coupon AS a
                 LEFT JOIN
@@ -165,11 +167,8 @@
         WHERE issuance_type_ = 0
           AND status_ = 1
           AND tenant_id_ = #{tenantId}
-          AND a.`limit_exchange_num_` > IFNULL(b.couponNum,0)
-          AND (
-                    effective_expire_time_ > NOW()
-                OR deadline_ > 0
-            )
+          AND a.`limit_exchange_num_` > IFNULL(b.couponNum, 0)
+          AND NOW() >= start_date_
           AND (
                     stock_count_ > consume_num_
                 OR stock_count_ = - 1

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

@@ -737,7 +737,7 @@
         <include refid="queryMusicGroupTeachersSql"/>
     </select>
     <sql id="queryMusicGroupTeachersSql">
-    	t.tenant_id_ = #{tenantId}
+    	and t.tenant_id_ = #{tenantId}
         <if test="search != null and search != ''">
             AND (su.real_name_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%') OR
             su.id_=#{search})

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

@@ -35,6 +35,7 @@
 	
 	<sql id="queryPaymentOrder">
         <where>
+			su.tenant_id_ = #{tenantId}
             <if test="organId != null">
                 AND FIND_IN_SET(tpo.organ_id_,#{organId})
             </if>

+ 33 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java

@@ -90,6 +90,12 @@ public class WrapperUtil<T> {
                 .orElse(null);
     }
 
+    public static Integer toInt(String str) {
+        return Optional.ofNullable(str)
+                .map(Integer::valueOf)
+                .orElse(null);
+    }
+
     public static <O> Optional<Integer> intOptional(Optional<O> optional) {
         return optional
                 .map(String::valueOf)
@@ -169,6 +175,14 @@ public class WrapperUtil<T> {
         }
     }
 
+    public static boolean checkInObj(Object o, Object... str) {
+        if (ObjPredicate.test(str)) {
+            return Arrays.asList(str).contains(o);
+        } else {
+            return false;
+        }
+    }
+
     /**
      * 根据分组groupVal进行聚合分组
      *
@@ -193,4 +207,23 @@ public class WrapperUtil<T> {
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
     }
 
+    /**
+     * 对比a,b集和
+     * <p> 示例
+     * <p>  传入a -> [1, 3,4,6]
+     * <p>  传入b -> [1,2,4]
+     * <p> 执行该方法后a,b会被修改为
+     * <p> a -> [3,6]
+     * <p> b -> [2]
+     */
+    public static <O> void listDifference(List<O> a, List<O> b) {
+        //将ab并集
+        Collection abUn = CollectionUtils.retainAll(a, b);
+        System.out.println(abUn);
+        //删除a中abUn的值
+        a.removeAll(abUn);
+        //删除b中abUn的值
+        b.removeAll(abUn);
+    }
+
 }

+ 2 - 0
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -46,6 +46,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 "/studentCompetition/getWinnerList",
                 "/musicGroup/getGradeList",
                 "/studentCompetition/get","/musicGroup/preRegister",
+                "/tenantInfo/queryTenantInfoByOrgan/**",
+                "/subject/list",
                 "/musicEnlightenmentQuestionnaire/addEnlightenmentQuestionnaire", "/musicEnlightenmentQuestionnaire/getUserMusicEnlightenmentQuestionnaire").permitAll().anyRequest().authenticated().and().httpBasic();
     }
 

+ 29 - 0
mec-student/src/main/java/com/ym/mec/student/controller/SubjectController.java

@@ -0,0 +1,29 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
+import com.ym.mec.biz.dal.page.SubjectQueryInfo;
+import com.ym.mec.biz.service.SubjectService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.exception.BizException;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RequestMapping("subject")
+@Api(tags = "科目服务")
+@RestController
+public class SubjectController extends BaseController {
+
+    @Autowired
+    private SubjectService subjectService;
+
+    @ApiOperation(value = "列出所有分部")
+    @PostMapping("/list")
+    public Object list(){
+        return succeed(subjectService.list());
+    }
+}

+ 6 - 0
mec-student/src/main/java/com/ym/mec/student/controller/TenantInfoController.java

@@ -54,4 +54,10 @@ public class TenantInfoController extends BaseController {
     public Object queryTenantInfoCheck(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
         return succeed(tenantInfoService.queryTenantInfoCheck(id));
     }
+
+    @ApiOperation("查询单个机构详情按分部Id")
+    @GetMapping(value = "/queryTenantInfoByOrgan/{organId}")
+    public Object queryTenantInfoByOrgan(@ApiParam(value = "分部ID", required = true) @PathVariable("organId") Integer organId) {
+        return succeed(tenantInfoService.queryTenantInfoByOrgan(organId));
+    }
 }

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

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Service;
 
 import com.ym.mec.thirdparty.message.MessageSenderPlugin;
 
-//@Service
+@Service
 public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
 
 	private String hostName;
@@ -50,11 +50,15 @@ public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
 	}
 
 	public static String getName() {
-		return "EMAIL";
+		return "email";
 	}
 
 	@Override
 	public void afterPropertiesSet() throws Exception {
+
+	}
+
+	private boolean checkProperties() {
 		if (StringUtils.isBlank(hostName)) {
 			throw new RuntimeException("SMTP服务器没有配置");
 		}
@@ -79,19 +83,22 @@ public class CommEmailPlugin implements MessageSenderPlugin, InitializingBean {
 		if (StringUtils.isBlank(fromName)) {
 			fromName = from;
 		}
+		return true;
 	}
 
 	@Override
 	public boolean send(String subject, String content, String receiver, String url, String jpushType, String sound, String channelId) throws Exception {
+		this.checkProperties();
 		Email email = new SimpleEmail();
 		email.setHostName(hostName);
+		email.setDebug(true);
 		email.setSslSmtpPort(smtpPort + "");
 		email.setAuthenticator(new DefaultAuthenticator(userName, password));
-		// email.setSSLOnConnect(true);
+		email.setSSLOnConnect(true);
 		try {
 			email.setFrom(from, fromName);
 			email.setSubject(subject);
-			email.setMsg(content);
+			email.setContent(content, "text/html");
 			email.addTo(receiver);
 			email.send();
 			return true;

+ 5 - 2
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -205,7 +205,7 @@ public class MusicGroupQuitController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/quitMusicGroup')")
     public HttpResponseResult quitMusicGroup(@RequestBody MusicGroupQuit musicGroupQuit){
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
+		if (sysUser == null || sysUser.getId() == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
         List<SysUserRoleEnum> roleIds;
@@ -215,10 +215,13 @@ public class MusicGroupQuitController extends BaseController {
             roleIds.add(SysUserRoleEnum.EDUCATIONAL_TEACHER);
         } else {
             MusicGroup musicGroup = musicGroupService.get(musicGroupQuit.getMusicGroupId());
+            if(musicGroup == null){
+            	return failed("乐团信息查询失败");
+            }
             roleIds = organizationService.queryOrganRole(musicGroup.getOrganId(), sysUser.getId());
         }
 		if (!(roleIds.contains(SysUserRoleEnum.SECTION_MANAGER) || roleIds.contains(SysUserRoleEnum.EDUCATIONAL_TEACHER))) {
-			throw new BizException("未经授权,不能操作");
+			return failed("未经授权,不能操作");
 		}
         return succeed(musicGroupService.approveQuitMusicGroup(roleIds, musicGroupQuit));
     }

+ 0 - 2
mec-web/src/main/java/com/ym/mec/web/controller/SubjectController.java

@@ -108,12 +108,10 @@ public class SubjectController extends BaseController {
         return succeed(subjectService.queryPageByIdOrName(queryInfo));
     }
 
-
     @ApiOperation(value = "列出所有分部")
     @PostMapping("/list")
     // @PreAuthorize("@pcs.hasPermissions('subject/list')")
     public Object list(){
         return succeed(subjectService.list());
     }
-
 }

+ 2 - 9
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -79,13 +79,6 @@ public class TenantInfoController extends BaseController {
         return succeed(tenantInfoService.queryTenantInfoCheck(id));
     }
 
-    @ApiOperation("查询单个机构详情按分部Id")
-    @GetMapping(value = "/queryTenantInfoByOrgan/{organId}")
-    public Object queryTenantInfoByOrgan(@ApiParam(value = "分部ID", required = true) @PathVariable("organId") Integer organId) {
-        return succeed(tenantInfoService.queryTenantInfoByOrgan(organId));
-    }
-
-
     @ApiOperation("查询机构产品")
     @GetMapping(value = "/queryTenantInfoSumm")
     public HttpResponseResult<TenantProductSumm> queryTenantInfoProductSumm() {
@@ -148,7 +141,7 @@ public class TenantInfoController extends BaseController {
 
     @ApiOperation(value = "轮询查询订单状态")
     @GetMapping("/rechargeCheck/{orderNo}")
-    @PreAuthorize("@pcs.hasPermissions('tenantInfo/payCheck')")
+    @PreAuthorize("@pcs.hasPermissions('tenantInfo/rechargeCheck')")
     public HttpResponseResult<Boolean> rechargeCheck(
             @ApiParam(value = "订单号", required = true) @PathVariable("orderNo") String orderNo
     ) throws Exception {
@@ -157,7 +150,7 @@ public class TenantInfoController extends BaseController {
 
     @ApiOperation(value = "测试邮件")
     @GetMapping("/testEmail")
-    public HttpResponseResult<Boolean> testEmail() throws Exception {
+    public HttpResponseResult<Boolean> testEmail() {
         return succeed(tenantInfoService.testEmail());
     }
 }