瀏覽代碼

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

hgw 3 年之前
父節點
當前提交
2ac0089e26
共有 19 個文件被更改,包括 196 次插入82 次删除
  1. 10 1
      dynamic-datasource/src/main/java/com/yonge/datasource/DataSourceConfig.java
  2. 61 0
      dynamic-datasource/src/main/java/com/yonge/datasource/interceptor/TenantSqlInterceptor.java
  3. 0 8
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUserRole.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  5. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountLogService.java
  6. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java
  7. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  8. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  9. 0 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  10. 8 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  11. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
  12. 15 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  13. 8 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysTenantConfigServiceImpl.java
  14. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountLogServiceImpl.java
  15. 21 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 1 1
      mec-common/common-core/src/main/java/com/ym/mec/common/page/PageUtil.java
  17. 4 1
      mec-web/src/main/java/com/ym/mec/web/controller/ActivityUserMapperController.java
  18. 0 7
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  19. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduRegisterController.java

+ 10 - 1
dynamic-datasource/src/main/java/com/yonge/datasource/DataSourceConfig.java

@@ -1,6 +1,7 @@
 package com.yonge.datasource;
 
 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
+
 import org.mybatis.spring.SqlSessionFactoryBean;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.beans.factory.annotation.Value;
@@ -8,12 +9,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.sql.DataSource;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -26,6 +29,8 @@ public class DataSourceConfig {
 	private String resourcePath;
 	@Value("${mybatis.typeAliasesPackage}")
 	private String typeAliasesPackage;
+	@Value("${mybatis.configLocation}")
+	private Resource configLocation;
 
 	@Bean("master")
 	@Primary
@@ -49,8 +54,12 @@ public class DataSourceConfig {
 		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
 		// 配置动态数据源,如果没有将 dynamicDataSource 作为数据源则不能实现切换
 		sqlSessionFactoryBean.setDataSource(dynamicDataSource());
-		sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(resourcePath));
+		
+		PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver();
+		
+		sqlSessionFactoryBean.setMapperLocations(pmrpr.getResources(resourcePath));
 		sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);
+		sqlSessionFactoryBean.setConfigLocation(configLocation);
 
 		return sqlSessionFactoryBean;
 	}

+ 61 - 0
dynamic-datasource/src/main/java/com/yonge/datasource/interceptor/TenantSqlInterceptor.java

@@ -0,0 +1,61 @@
+package com.yonge.datasource.interceptor;
+
+import java.lang.reflect.Field;
+import java.util.Properties;
+
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Plugin;
+
+public class TenantSqlInterceptor implements Interceptor {
+
+	@Override
+	public Object intercept(Invocation invocation) throws Throwable {
+		StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
+		BoundSql boundSql = statementHandler.getBoundSql();
+		// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+
+		// 获取 SQL 命令
+		MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
+		SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
+
+		// 获取参数
+		Object parameter = invocation.getArgs()[1];
+		
+		if (SqlCommandType.INSERT.equals(sqlCommandType) || SqlCommandType.UPDATE.equals(sqlCommandType)) {
+			
+		}
+
+		// 获取到原始sql语句
+		String originalSql = boundSql.getSql();
+		String lastSql = "";
+		String strsql = originalSql.replace(" ", "");
+		if (strsql.indexOf("cid=") == -1) {
+			if (originalSql.indexOf("where") != -1) {
+				lastSql = originalSql + " and tenant_id_ =";
+			} else {
+				lastSql = originalSql + " where and tenant_id_=";
+			}
+		}
+		// 通过反射修改sql语句
+		Field field = boundSql.getClass().getDeclaredField("sql");
+		field.setAccessible(true);
+		field.set(boundSql, lastSql);
+		return invocation.proceed();
+	}
+
+	@Override
+	public Object plugin(Object target) {
+		return Plugin.wrap(target, this);
+	}
+
+	@Override
+	public void setProperties(Properties properties) {
+
+	}
+
+}

+ 0 - 8
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUserRole.java

@@ -11,16 +11,8 @@ public class SysUserRole {
 	public static Integer SECTION_MANAGER = 3;
 	//教务老师、乐团主管
 	public static Integer EDUCATIONAL_TEACHER = 4;
-	//运营主管
-	public static Integer OPERATION_EXECUTIVE = 5;
-	//招生主管(意见反馈)
-	public static Integer ADMISSIONS_DIRECTOR = 6;
-	//教学主任、乐队指导
-	public static Integer DEAN_OF_STUDIES = 7;
 	//维修技师
 	public static Integer REPAIR = 37;
-	//总部管理员
-	public static Integer ADMINISTRATOR = 25;
 
 	/** 用户ID */
 	@ApiModelProperty(value = "用户ID",required = false)

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -180,6 +180,16 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String MEMBER_GROUP_FEE_STUDENT_NUM = "member_group_fee_student_num";
 
 
+    //乐团所有未开始课程组、商品等服务及产品退费时,退费金额扣减百分比(默认0.005)
+    String MUSIC_RETURN_FEE_CHARGES = "music_return_fee_charges";
+    //乐团课退费时若课程组已开始,退费金额扣减百分比(默认0.8)
+    String MUSIC_COURSE_START_RETURN_FEE_CHARGES = "music_course_start_return_fee_charges";
+    //1v1小班课退费时若课程组已开始,退费金额扣减百分比(默认0.8)
+    String VIP_1V1_COURSE_NOT_START_RETURN_FEE_CHARGES = "VIP_1V1_COURSE_NOT_START_RETURN_FEE_CHARGES";
+    //1vn小班课退费时若课程组已开始,退费金额扣减百分比(默认0.7)
+    String VIP_1VN_COURSE_NOT_START_RETURN_FEE_CHARGES = "VIP_1VN_COURSE_NOT_START_RETURN_FEE_CHARGES";
+
+
     public static final String BASE_API_URL = "base_api_url";
 
     /**

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountLogService.java

@@ -1,10 +1,13 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.SysUserCashAccountLog;
-import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
+
 public interface SysUserCashAccountLogService extends BaseService<Long, SysUserCashAccountLog> {
 
+    BigDecimal musicReturnFeeCharges(BigDecimal returnFee,Integer size);
+
+    BigDecimal vipReturnFeeCharges(BigDecimal returnFee,Integer size);
 }

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

@@ -11,6 +11,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
 import com.ym.mec.biz.dal.page.ActivityStudentQueryInfo;
 import com.ym.mec.biz.service.ActivityUserMapperService;
+import com.ym.mec.biz.service.SysUserCashAccountLogService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -45,7 +46,7 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 	@Autowired
 	private TeacherDao teacherDao;
 	@Autowired
-	private SysUserCashAccountLogDao sysUserCashAccountLogDao;
+	private SysUserCashAccountLogService sysUserCashAccountLogService;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
@@ -225,7 +226,8 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 		if(amount == null || amount.compareTo(BigDecimal.ZERO) <= 0){
 			return;
 		}
-		BigDecimal actualPrice = activityUserMapper.getActualPrice().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+
+		BigDecimal actualPrice = sysUserCashAccountLogService.musicReturnFeeCharges(activityUserMapper.getActualPrice(),0);
 		if(amount.compareTo(actualPrice) > 0){
 			throw new BizException("操作失败:退费金额不得超过购买金额{}",actualPrice);
 		}
@@ -238,6 +240,6 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 		sysUserCashAccountLog.setAmount(amount);
 		sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.CANCEL_ACTIVITY_COURSE);
 		sysUserCashAccountLog.setComment("取消活动排课");
-		sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
+		sysUserCashAccountLogService.insert(sysUserCashAccountLog);
 	}
 }

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

@@ -302,7 +302,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 BigDecimal signInDeductCost = getSignInDeduce(expectSalary, signInStatus, teachMode,tenantId);
                 if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
                     deductCost = deductCost.add(signInDeductCost);
-                    deductReasons.add("签到状态异常扣除课酬" + signInDeductCost);
+                    deductReasons.add(signInStatus.getName() + "扣除课酬" + signInDeductCost);
                 }
             }
             if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
@@ -310,7 +310,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 BigDecimal signOutDeductCost = getSignInDeduce(expectSalary, signOutStatus, teachMode,tenantId);
                 if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
                     deductCost = deductCost.add(signOutDeductCost);
-                    deductReasons.add("签退状态异常扣除课酬" + signOutDeductCost);
+                    deductReasons.add(signOutStatus.getName() + "扣除课酬" + signOutDeductCost);
                 }
             }
 
@@ -435,7 +435,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     BigDecimal signInDeductCost = getSignInDeduce(expectSalary, signInStatus, teachMode,tenantId);
                     if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
                         deductCost = deductCost.add(signInDeductCost);
-                        deductReasons.add("签到状态异常扣除课酬" + signInDeductCost);
+                        deductReasons.add(signInStatus.getName() + "扣除课酬" + signInDeductCost);
                     }
                 }
                 if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
@@ -443,7 +443,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     BigDecimal signOutDeductCost = getSignInDeduce(expectSalary, signOutStatus, teachMode,tenantId);
                     if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
                         deductCost = deductCost.add(signOutDeductCost);
-                        deductReasons.add("签退状态异常扣除课酬" + signOutDeductCost);
+                        deductReasons.add(signOutStatus.getName() + "扣除课酬" + signOutDeductCost);
                     }
                 }
             }
@@ -790,7 +790,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 BigDecimal signInDeductCost = getSignInDeduce(teacherSalary, signInStatus, teachMode,tenantId);
                 if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
                     deductCost = deductCost.add(signInDeductCost);
-                    deductReasons.add("签到状态异常扣除课酬" + signInDeductCost);
+                    deductReasons.add(signInStatus.getName() + "扣除课酬" + signInDeductCost);
                 }
             }
             if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
@@ -798,7 +798,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 BigDecimal signOutDeductCost = getSignInDeduce(teacherSalary, signOutStatus, teachMode,tenantId);
                 if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
                     deductCost = deductCost.add(signOutDeductCost);
-                    deductReasons.add("签退状态异常扣除课酬" + signOutDeductCost);
+                    deductReasons.add(signOutStatus.getName() + "扣除课酬" + signOutDeductCost);
                 }
             }
 

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

@@ -527,7 +527,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (status == AUDITING) {
 			// 如果是审核中
 			Set<Integer> roleIds = new HashSet<>(1);
-			roleIds.add(SysUserRole.ADMINISTRATOR);
+			roleIds.add(SysUserRole.SECTION_MANAGER);
 			Organization organization = organizationDao.get(musicGroup.getOrganId());
 			sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
 					MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, "", organization.getName(), musicGroup.getName());
@@ -922,7 +922,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (status == AUDITING) {
 			// 如果是审核中
 			Set<Integer> roleIds = new HashSet<>(1);
-			roleIds.add(SysUserRole.ADMINISTRATOR);
+			roleIds.add(SysUserRole.SECTION_MANAGER);
 			Organization organization = organizationDao.get(musicGroup.getOrganId());
 			sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
 					MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, "", organization.getName(), musicGroup.getName());

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

@@ -281,11 +281,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (subFeeSettingDto.getMusicGroupPaymentEntities() != null && subFeeSettingDto.getMusicGroupPaymentEntities().size() > 0) {
             musicGroupPaymentEntitiesDao.batchAdd(subFeeSettingDto.getMusicGroupPaymentEntities(), musicGroupId);
         }
-        // 保存学员付费周期
-        /*List<Integer> months = subFeeSettingDto.getMonths();
-        if (months != null && months.size() > 0) {
-            musicGroupPaymentCalenderDao.batchAdd(months, musicGroupId);
-        }*/
 
         //乐团科目学生
         if (subjectRegisters != null && subjectRegisters.size() > 0) {

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

@@ -157,6 +157,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private VipGroupDao vipGroupDao;
     @Autowired
     private VipGroupCategoryDao vipGroupCategoryDao;
+    @Autowired
+    private SysUserCashAccountLogService sysUserCashAccountLogService;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -5896,12 +5898,13 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if(Objects.isNull(classGroup)){
             throw new BizException("未找到对应班级");
         }
+        bigDecimal = sysUserCashAccountLogService.vipReturnFeeCharges(bigDecimal,vipGroupCategory == null?0:vipGroupCategory.getStudentNum());
 
-        if(vipGroupCategory == null || vipGroupCategory.getStudentNum() <= 1){
-            bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-        }else{
-            bigDecimal = bigDecimal.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-        }
+//        if(vipGroupCategory == null || vipGroupCategory.getStudentNum() <= 1){
+//            bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+//        }else{
+//            bigDecimal = bigDecimal.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+//        }
         result.put("suplusCourseFee", bigDecimal);
         return result;
     }

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

@@ -35,7 +35,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
     @Autowired
     private SysPaymentConfigService sysPaymentConfigService;
     @Autowired
-    private SysUserCashAccountLogDao sysUserCashAccountLogDao;
+    private SysUserCashAccountLogService sysUserCashAccountLogService;
     @Autowired
     private GoodsService goodsService;
     @Autowired
@@ -417,8 +417,8 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 sysUserCashAccountLog.setGroupType(GOODS_SELL);
                 sysUserCashAccountLog.setComment("商品退费");
                 sysUserCashAccountLog.setGroupId(sellOrder.getId().toString());
-                sysUserCashAccountLog.setAmount(sellOrder.getExpectAmount().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
-                sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
+                sysUserCashAccountLog.setAmount(sysUserCashAccountLogService.musicReturnFeeCharges(sellOrder.getExpectAmount(),0));
+                sysUserCashAccountLogService.insert(sysUserCashAccountLog);
 //                sysUserCashAccountService.updateBalance(sellOrder.getUserId(), sellOrder.getExpectAmount().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP), PlatformCashAccountDetailTypeEnum.REFUNDS, "订单:" + sellOrder.getOrderId() + " 商品id:" + sellOrder.getGoodsId() + "退货");
             }
         }

+ 15 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -193,6 +193,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     private CloudTeacherOrderService cloudTeacherOrderService;
     @Autowired
     private SysCouponCodeService sysCouponCodeService;
+    @Autowired
+    private SysUserCashAccountLogService sysUserCashAccountLogService;
 
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
@@ -357,14 +359,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
 		Map<String, BigDecimal> map = new HashMap<String, BigDecimal>();
 
-		if (detailMap.containsKey(OrderDetailTypeEnum.MUSICAL)) {
+        if (detailMap.containsKey(OrderDetailTypeEnum.MUSICAL)) {
 			detailList = detailMap.get(OrderDetailTypeEnum.MUSICAL);
 			if (detailList == null) {
 				detailList = new ArrayList<StudentPaymentOrderDetail>();
 			}
-            BigDecimal reduce = detailList.stream().map(StudentPaymentOrderDetail::getPrice)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-            map.put(OrderDetailTypeEnum.MUSICAL.getCode(),reduce.multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+            BigDecimal reduce = detailList.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            map.put(OrderDetailTypeEnum.MUSICAL.getCode(),sysUserCashAccountLogService.musicReturnFeeCharges(reduce,0));
 		} else {
 			map.put(OrderDetailTypeEnum.MUSICAL.getCode(), BigDecimal.ZERO);
 		}
@@ -400,7 +402,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 					}
 				}
 			}
-			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), totalAmount.multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), sysUserCashAccountLogService.musicReturnFeeCharges(totalAmount,0));
 		} else {
 			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), BigDecimal.ZERO);
 		}
@@ -411,8 +413,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 				detailList = new ArrayList<StudentPaymentOrderDetail>();
 			}
             BigDecimal reduce = detailList.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-            map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(),
-                    reduce.multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+            map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(),sysUserCashAccountLogService.musicReturnFeeCharges(reduce,0));
 		} else {
 			map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(), BigDecimal.ZERO);
 		}
@@ -421,13 +422,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 		if (studentRegistration == null) {
 			throw new BizException("学生报名信息查询失败");
 		}
-		//未上课*0995手续费、以上课*0.98
+		//未上课*0995手续费、以上课*0.8
         List<StudentCourseInfoDto> history = courseScheduleDao.findUserCourseInfos(GroupType.MUSIC, musicGroupId, studentId, "history");
-		if(history == null || history.size() == 0){
-            map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
-        }else {
-            map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee().multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
-        }
+        map.put(OrderDetailTypeEnum.COURSE.getCode(), sysUserCashAccountLogService.musicReturnFeeCharges(studentRegistration.getSurplusCourseFee(),history.size()));
+//		if(history == null || history.size() == 0){
+//            map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+//        }else {
+//            map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee().multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+//        }
 
 		// 查询云教练订单
 		BigDecimal cloudAmount = BigDecimal.ZERO;

+ 8 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysTenantConfigServiceImpl.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.SysTenantConfig;
 import com.ym.mec.biz.event.TenantConfigChangeEvent;
 import com.ym.mec.biz.service.SysTenantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,13 +25,15 @@ public class SysTenantConfigServiceImpl extends BaseServiceImpl<Integer, SysTena
 	
 	@Autowired
 	private SysTenantConfigDao sysTenantConfigDao;
+	@Autowired
+	private RedisCache<String,ConcurrentHashMap<Integer,ConcurrentHashMap<String,String>>> redisCache;
+	private static final String tenantKey = "sysTenantConfig";
 
 	@Override
 	public BaseDAO<Integer, SysTenantConfig> getDAO() {
 		return sysTenantConfigDao;
 	}
 
-	ConcurrentHashMap<Integer,ConcurrentHashMap<String,String>> tenantConfig;
 	private ApplicationEventPublisher applicationEventPublisher;
 
 	@Override
@@ -41,12 +44,13 @@ public class SysTenantConfigServiceImpl extends BaseServiceImpl<Integer, SysTena
 
 	@Override
 	public void setTenantConfig(ConcurrentHashMap<Integer, ConcurrentHashMap<String, String>> tenantConfig) {
-		this.tenantConfig = tenantConfig;
+		redisCache.put(tenantKey,tenantConfig);
 	}
 
 	@Override
 	public String getTenantConfigValue(String paramName,Integer tenantId) {
-		ConcurrentHashMap<String, String> map = tenantConfig.get(tenantId);
+		ConcurrentHashMap<Integer, ConcurrentHashMap<String, String>> tenantConfigMap = redisCache.get(tenantKey);
+		ConcurrentHashMap<String, String> map = tenantConfigMap.get(tenantId);
 		if(map != null){
 			return map.get(paramName);
 		}
@@ -56,7 +60,7 @@ public class SysTenantConfigServiceImpl extends BaseServiceImpl<Integer, SysTena
 
 	@Override
 	public ConcurrentHashMap<Integer, ConcurrentHashMap<String, String>> getAllTenantConfig() {
-		return tenantConfig;
+		return redisCache.get(tenantKey);
 	}
 
 	@Override

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountLogServiceImpl.java

@@ -1,8 +1,13 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysTenantConfigService;
+import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.biz.dal.entity.SysUserCashAccountLog;
@@ -10,15 +15,46 @@ import com.ym.mec.biz.service.SysUserCashAccountLogService;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountLogDao;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+
 @Service
 public class SysUserCashAccountLogServiceImpl extends BaseServiceImpl<Long, SysUserCashAccountLog>  implements SysUserCashAccountLogService {
 	
 	@Autowired
 	private SysUserCashAccountLogDao sysUserCashAccountLogDao;
+	@Autowired
+	private SysTenantConfigService sysTenantConfigService;
 
 	@Override
 	public BaseDAO<Long, SysUserCashAccountLog> getDAO() {
 		return sysUserCashAccountLogDao;
 	}
 
+	@Override
+	public BigDecimal musicReturnFeeCharges(BigDecimal returnFee, Integer size) {
+		Integer tenantId = TenantContextHolder.getTenantId();
+		String configName = SysConfigService.MUSIC_COURSE_START_RETURN_FEE_CHARGES;
+		if(size == null || size == 0){
+			configName = SysConfigService.MUSIC_RETURN_FEE_CHARGES;
+		}
+		return calcCharges(returnFee,sysTenantConfigService.getTenantConfigValue(configName, tenantId));
+	}
+
+	@Override
+	public BigDecimal vipReturnFeeCharges(BigDecimal returnFee, Integer size) {
+		Integer tenantId = TenantContextHolder.getTenantId();
+		String configName = SysConfigService.VIP_1VN_COURSE_NOT_START_RETURN_FEE_CHARGES;
+		if(size == null || size <= 1){
+			configName = SysConfigService.VIP_1V1_COURSE_NOT_START_RETURN_FEE_CHARGES;
+		}
+		return calcCharges(returnFee,sysTenantConfigService.getTenantConfigValue(configName, tenantId));
+	}
+
+	private BigDecimal calcCharges(BigDecimal returnFee,String configValue){
+		double returnFeeCharges = 1;
+		if(StringUtils.isNotEmpty(configValue)){
+			returnFeeCharges = 1 - (Double.parseDouble(configValue) / 100);
+		}
+		return returnFee.multiply(new BigDecimal(returnFeeCharges)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+	}
 }

+ 21 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -96,7 +96,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private ImGroupMemberService imGroupMemberService;
     @Autowired
 	private ImUserFriendService imUserFriendService;
-    
     @Autowired
     private ImGroupService imGroupService;
     @Autowired
@@ -115,8 +114,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Autowired
 	private SysConfigDao sysConfigDao;
 	@Autowired
-	private SysTenantConfigService sysTenantConfigService;
-	@Autowired
 	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
 	@Autowired
 	private SysMessageService sysMessageService;
@@ -164,6 +161,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private ActivityUserMapperService activityUserMapperService;
 	@Autowired
 	private PracticeGroupService practiceGroupService;
+	@Autowired
+	private SysUserCashAccountLogService sysUserCashAccountLogService;
 
 	private static final Logger LOGGER = LoggerFactory
 			.getLogger(VipGroup.class);
@@ -3018,12 +3017,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             surplusCourseFee = new BigDecimal(0);
         }
         VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
-
-        if(vipGroupCategory.getStudentNum()<=1){
-            surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-        }else{
-            surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-        }
+		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);
+//        }else{
+//            surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+//        }
 
 		studentApplyRefunds.setExpectAmount(surplusCourseFee);
 		studentApplyRefunds.setStatus(StudentApplyRefundsStatus.ING);
@@ -3692,12 +3691,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(bigDecimal)){
 			bigDecimal = new BigDecimal(0);
 		}
-
-		if(vipGroupCategory == null || vipGroupCategory.getStudentNum() <= 1){
-            bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-        }else{
-            bigDecimal = bigDecimal.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-        }
+		bigDecimal = sysUserCashAccountLogService.vipReturnFeeCharges(bigDecimal,vipGroupCategory == null?0:vipGroupCategory.getStudentNum());
+//		if(vipGroupCategory == null || vipGroupCategory.getStudentNum() <= 1){
+//            bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+//        }else{
+//            bigDecimal = bigDecimal.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+//        }
 
 		result.put("suplusCourseFee", bigDecimal);
 
@@ -3706,11 +3705,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(Objects.nonNull(studentPaymentOrder)){
 				BigDecimal suplusCourseOriginalFee = studentPaymentOrder.getActualAmount().add(studentPaymentOrder.getBalancePaymentAmount());
 				result.put("suplusCourseOriginalFee", suplusCourseOriginalFee);
-				if(vipGroupCategory == null || vipGroupCategory.getStudentNum() <= 1){
-					result.put("suplusCourseFee", suplusCourseOriginalFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
-				}else{
-					result.put("suplusCourseFee", suplusCourseOriginalFee.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
-				}
+				result.put("suplusCourseFee", sysUserCashAccountLogService.vipReturnFeeCharges(suplusCourseOriginalFee,vipGroupCategory == null?0:vipGroupCategory.getStudentNum()));
+
+//				if(vipGroupCategory == null || vipGroupCategory.getStudentNum() <= 1){
+//					result.put("suplusCourseFee", suplusCourseOriginalFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+//				}else{
+//					result.put("suplusCourseFee", suplusCourseOriginalFee.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+//				}
 			}
 		}
 		return result;

+ 1 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/page/PageUtil.java

@@ -22,7 +22,7 @@ public class PageUtil {
     public static <T> Page<T> getPage(Integer page, Integer rows) {
         Integer pageIndex = Optional.ofNullable(page).orElse(1);
         Integer pageSize = Optional.ofNullable(rows).orElse(20);
-        return new Page<>(pageIndex, pageSize);
+        return new Page<T>(pageIndex, pageSize);
     }
 
     /**

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

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.dto.ActivityUserMapperAddDto;
 import com.ym.mec.biz.dal.entity.ActivityUserMapper;
 import com.ym.mec.biz.dal.page.ActivityStudentQueryInfo;
 import com.ym.mec.biz.service.ActivityUserMapperService;
+import com.ym.mec.biz.service.SysUserCashAccountLogService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.PageInfo;
@@ -28,6 +29,8 @@ public class ActivityUserMapperController extends BaseController {
 
     @Autowired
     private ActivityUserMapperService activityUserMapperService;
+    @Autowired
+    private SysUserCashAccountLogService sysUserCashAccountLogService;
 
     @ApiOperation(value = "添加活动排课资格")
     @PostMapping("/add")
@@ -60,7 +63,7 @@ public class ActivityUserMapperController extends BaseController {
         List<ActivityUserMapper> rows = pageInfo.getRows();
         if(rows != null && rows.size() > 0){
             for (ActivityUserMapper row : rows) {
-                row.setActualPrice(row.getActualPrice().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+                row.setActualPrice(sysUserCashAccountLogService.musicReturnFeeCharges(row.getActualPrice(),0));
             }
         }
         return succeed(pageInfo);

+ 0 - 7
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java

@@ -123,13 +123,6 @@ public class MusicGroupController extends BaseController {
 				return failed("非法请求");
 			}
 		}
-		/*if (sysUser.getIsSuperAdmin() == false) {
-			List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
-			// 如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
-			if (userRole != null && userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
-				queryInfo.setEducationalTeacherId(sysUser.getId());
-			}
-		}*/
 		return succeed(musicGroupService.queryMusicGroupPage(queryInfo));
 	}
 

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

@@ -79,7 +79,7 @@ public class EduRegisterController extends BaseController {
         //是乐团主管,不是分部经理
         List<Integer> cooperationOrganIds = null;
         List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
-        if (!sysUser.getIsSuperAdmin() && !userRole.contains(SysUserRole.ADMINISTRATOR) && !userRole.contains(SysUserRole.SECTION_MANAGER)) {
+        if (!sysUser.getIsSuperAdmin() && !userRole.contains(SysUserRole.SECTION_MANAGER)) {
             List<CooperationOrgan> cooperationOrgans = cooperationOrganDao.getCooperationOrganByEduTeacherId(sysUser.getId());
             if (cooperationOrgans.size() > 0) {
                 cooperationOrganIds = cooperationOrgans.stream().map(CooperationOrgan::getId).collect(Collectors.toList());