Переглянути джерело

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

yanite 3 роки тому
батько
коміт
09dc949dda
22 змінених файлів з 388 додано та 45 видалено
  1. 0 11
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysRole.java
  2. 125 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/TenantInfo.java
  3. 5 0
      mec-auth/mec-auth-server/pom.xml
  4. 5 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java
  5. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysRoleDao.java
  6. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysRoleMenuDao.java
  7. 9 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/TenantInfoDao.java
  8. 60 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/interceptor/TenantInterceptor.java
  9. 8 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/TenantInfoService.java
  10. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysRoleServiceImpl.java
  11. 23 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/TenantInfoServiceImpl.java
  12. 7 6
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysRoleMenuMapper.xml
  13. 94 0
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/TenantInfoMapper.xml
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantAssetsInfoDao.java
  15. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentCalenderDto.java
  16. 0 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java
  17. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantAssetsInfoService.java
  18. 32 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java
  19. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupOrganizationCourseSettingsDetailMapper.xml
  20. 1 1
      mec-biz/src/main/resources/config/mybatis/OrganizationCourseUnitPriceSettingsMapper.xml
  21. 1 1
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml
  22. 5 0
      mec-biz/src/main/resources/config/mybatis/TenantAssetsInfoMapper.xml

+ 0 - 11
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysRole.java

@@ -40,9 +40,6 @@ public class SysRole extends BaseEntity {
 
 	private Integer organId;
 
-	@ApiModelProperty(value = "机构id")
-	private Integer tenantId;
-
 	@ApiModelProperty(value = "菜单列表",required = false)
 	private List<Integer> menuIds;
 
@@ -118,14 +115,6 @@ public class SysRole extends BaseEntity {
 		this.organId = organId;
 	}
 
-    public Integer getTenantId() {
-        return tenantId;
-    }
-
-    public void setTenantId(Integer tenantId) {
-        this.tenantId = tenantId;
-    }
-
     @Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 125 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/TenantInfo.java

@@ -0,0 +1,125 @@
+package com.ym.mec.auth.api.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(tenant_info):
+ */
+public class TenantInfo {
+
+	/**  */
+	private Integer id;
+	
+	/** 机构名称 */
+	private String name;
+	
+	/** 机构地址 */
+	private String address;
+	
+	/** 域名 */
+	private String domainName;
+	
+	/** logo链接 */
+	private String logoUrl;
+	
+	/** 联系人 */
+	private String contactName;
+	
+	/** 联系电话 */
+	private String contactPhone;
+	
+	/** 数据源 */
+	private String dataSource;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	public void setId(Integer id){
+		this.id = id;
+	}
+	
+	public Integer getId(){
+		return this.id;
+	}
+			
+	public void setName(String name){
+		this.name = name;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+			
+	public void setAddress(String address){
+		this.address = address;
+	}
+	
+	public String getAddress(){
+		return this.address;
+	}
+			
+	public void setDomainName(String domainName){
+		this.domainName = domainName;
+	}
+	
+	public String getDomainName(){
+		return this.domainName;
+	}
+			
+	public void setLogoUrl(String logoUrl){
+		this.logoUrl = logoUrl;
+	}
+	
+	public String getLogoUrl(){
+		return this.logoUrl;
+	}
+			
+	public void setContactName(String contactName){
+		this.contactName = contactName;
+	}
+	
+	public String getContactName(){
+		return this.contactName;
+	}
+			
+	public void setContactPhone(String contactPhone){
+		this.contactPhone = contactPhone;
+	}
+	
+	public String getContactPhone(){
+		return this.contactPhone;
+	}
+			
+	public void setDataSource(String dataSource){
+		this.dataSource = dataSource;
+	}
+	
+	public String getDataSource(){
+		return this.dataSource;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 5 - 0
mec-auth/mec-auth-server/pom.xml

@@ -79,6 +79,11 @@
 			<groupId>com.yonge.log</groupId>
 			<artifactId>audit-log</artifactId>
 		</dependency>
+		
+		<dependency>
+			<groupId>com.yonge.datasource</groupId>
+			<artifactId>dynamic-datasource</artifactId>
+		</dependency>
 
 		<dependency>
 			<groupId>org.apache.commons</groupId>

+ 5 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java

@@ -13,6 +13,7 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import com.ym.mec.auth.interceptor.OperationLogInterceptor;
+import com.ym.mec.auth.interceptor.TenantInterceptor;
 import com.ym.mec.common.config.EnumConverterFactory;
 import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
 
@@ -21,6 +22,9 @@ public class WebMvcConfig implements WebMvcConfigurer {
 	
 	@Autowired
 	private OperationLogInterceptor operationLogInterceptor;
+	
+	@Autowired
+	private TenantInterceptor tenantInterceptor;
 
 	/**
 	 * 枚举类的转换器 addConverterFactory
@@ -32,6 +36,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 	
 	@Override
 	public void addInterceptors(InterceptorRegistry registry) {
+		registry.addInterceptor(tenantInterceptor).addPathPatterns("/**");
 		registry.addInterceptor(operationLogInterceptor).addPathPatterns("/userDevice/unbind").excludePathPatterns("/*");
 	}
 	

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysRoleDao.java

@@ -27,5 +27,5 @@ public interface SysRoleDao extends BaseDAO<Integer, SysRole> {
      * @param roleName
      * @return
      */
-    SysRole findByRoleName(String roleName, @Param("tenantId") Integer tenantId);
+    SysRole findByRoleName(@Param("roleName") String roleName, @Param("tenantId") Integer tenantId);
 }

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysRoleMenuDao.java

@@ -40,5 +40,5 @@ public interface SysRoleMenuDao extends BaseDAO<Integer, SysRoleMenu> {
 	 * @param roleId
 	 * @param menuIds
 	 */
-    void batchAdd(@Param("roleId") Integer roleId,@Param("menuIds")  List<Integer> menuIds);
+    void batchAdd(@Param("roleId") Integer roleId,@Param("menuIds")  List<Integer> menuIds, @Param("tenantId") Integer tenantId);
 }

+ 9 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/TenantInfoDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.auth.dal.dao;
+
+import com.ym.mec.auth.api.entity.TenantInfo;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface TenantInfoDao extends BaseDAO<Integer, TenantInfo> {
+
+	
+}

+ 60 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/interceptor/TenantInterceptor.java

@@ -0,0 +1,60 @@
+package com.ym.mec.auth.interceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.TenantInfo;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.auth.service.TenantInfoService;
+import com.ym.mec.common.security.AuthUser;
+import com.ym.mec.common.security.SecurityUtils;
+import com.ym.mec.common.tenant.TenantContextHolder;
+
+@Component
+public class TenantInterceptor extends HandlerInterceptorAdapter {
+
+	private static final String DATA_SOURCE_ID = "datasourceId";
+
+	@Autowired
+	private SysUserService userService;
+	
+	@Autowired
+	private TenantInfoService tenantInfoService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
+		String tenantId = request.getHeader("tenantId");
+		if(StringUtils.isEmpty(tenantId)){
+			AuthUser authUser = SecurityUtils.getUser();
+			SysUser sysUser = null;
+			if(authUser != null){
+				sysUser = userService.get(authUser.getUserId());
+			}
+			if(sysUser != null && sysUser.getTenantId() != null){
+				tenantId = sysUser.getTenantId().toString();
+			}
+		}
+		if(StringUtils.isNotEmpty(tenantId)){
+			TenantContextHolder.setTenantId(Integer.parseInt(tenantId));
+			TenantInfo tenantInfo = tenantInfoService.get(Integer.parseInt(tenantId));
+			if(tenantInfo != null){
+				request.setAttribute(DATA_SOURCE_ID, tenantInfo.getDataSource());
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+		TenantContextHolder.clearTenantId();
+	}
+
+}

+ 8 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/TenantInfoService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.auth.service;
+
+import com.ym.mec.auth.api.entity.TenantInfo;
+import com.ym.mec.common.service.BaseService;
+
+public interface TenantInfoService extends BaseService<Integer, TenantInfo> {
+
+}

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysRoleServiceImpl.java

@@ -79,7 +79,7 @@ public class SysRoleServiceImpl extends BaseServiceImpl<Integer, SysRole>  imple
 		List<Integer> menuIds = sysRole.getMenuIds();
 		if(menuIds != null && menuIds.size() > 0){
 //			SysRoleMenu sysRoleMenu = new SysRoleMenu(sysRole.getId(),null);
-			sysRoleMenuDao.batchAdd(sysRole.getId(),menuIds);
+			sysRoleMenuDao.batchAdd(sysRole.getId(),menuIds, sysRole.getTenantId());
 //			menuIds.forEach(e->{
 //				sysRoleMenu.setMenuId(e);
 //				sysRoleMenuDao.insert(sysRoleMenu);

+ 23 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/TenantInfoServiceImpl.java

@@ -0,0 +1,23 @@
+package com.ym.mec.auth.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.auth.api.entity.TenantInfo;
+import com.ym.mec.auth.dal.dao.TenantInfoDao;
+import com.ym.mec.auth.service.TenantInfoService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class TenantInfoServiceImpl extends BaseServiceImpl<Integer, TenantInfo>  implements TenantInfoService {
+	
+	@Autowired
+	private TenantInfoDao tenantInfoDao;
+
+	@Override
+	public BaseDAO<Integer, TenantInfo> getDAO() {
+		return tenantInfoDao;
+	}
+	
+}

+ 7 - 6
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysRoleMenuMapper.xml

@@ -9,6 +9,7 @@
 	<resultMap type="com.ym.mec.auth.api.entity.SysRoleMenu" id="SysRoleMenu">
 		<result column="role_id_" property="roleId" />
 		<result column="menu_id_" property="menuId" />
+		<result column="tenant_id_" property="tenantId" />
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -18,7 +19,7 @@
 	
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysRoleMenu">
-		SELECT * FROM sys_role_menu ORDER BY role_id_,menu_id_
+		SELECT * FROM sys_role_menu where tenant_id_ = #{tenantId} ORDER BY role_id_,menu_id_
 	</select>
 	
 	<!-- 向数据库增加一条记录 -->
@@ -28,12 +29,12 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO sys_role_menu (role_id_,menu_id_) VALUES(#{roleId},#{menuId})
+		INSERT INTO sys_role_menu (role_id_,menu_id_,tenant_id_) VALUES(#{roleId},#{menuId},#{tenantId})
 	</insert>
     <insert id="batchAdd">
-		INSERT INTO sys_role_menu (role_id_,menu_id_) VALUES
+		INSERT INTO sys_role_menu (role_id_,menu_id_,tenant_id_) VALUES
 		<foreach collection="menuIds" item="item" index="index" separator=",">
-			(#{roleId},#{item})
+			(#{roleId},#{item},#{tenantId})
 		</foreach>
 	</insert>
 
@@ -47,12 +48,12 @@
 
     <!-- 分页查询 -->
 	<select id="queryPage" resultMap="SysRoleMenu" parameterType="map">
-		SELECT * FROM sys_role_menu ORDER BY role_id_,menu_id_ <include refid="global.limit"/>
+		SELECT * FROM sys_role_menu where tenant_id_ = #{tenantId} ORDER BY role_id_,menu_id_ <include refid="global.limit"/>
 	</select>
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM sys_role_menu
+		SELECT COUNT(*) FROM sys_role_menu where tenant_id_ = #{tenantId}
 	</select>
 	
 	<select id="queryPermissionsByRoleId" resultType="string" parameterType="int">

+ 94 - 0
mec-auth/mec-auth-server/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
+<mapper namespace="com.ym.mec.auth.dal.dao.TenantInfoDao">
+
+	<resultMap type="com.ym.mec.auth.api.entity.TenantInfo" id="TenantInfo">
+		<result column="id_" property="id" />
+		<result column="name_" property="name" />
+		<result column="address_" property="address" />
+		<result column="domain_name_" property="domainName" />
+		<result column="logo_url_" property="logoUrl" />
+		<result column="contact_name_" property="contactName" />
+		<result column="contact_phone_" property="contactPhone" />
+		<result column="data_source_" property="dataSource" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="TenantInfo">
+		SELECT * FROM
+		tenant_info WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="TenantInfo">
+		SELECT * FROM tenant_info ORDER
+		BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.auth.api.entity.TenantInfo"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO tenant_info
+		(id_,name_,address_,domain_name_,logo_url_,contact_name_,contact_phone_,data_source_,create_time_,update_time_)
+		VALUES(#{id},#{name},#{address},#{domainName},#{logoUrl},#{contactName},#{contactPhone},#{dataSource},#{createTime},#{updateTime})
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.auth.api.entity.TenantInfo">
+		UPDATE tenant_info
+		<set>
+			<if test="address != null">
+				address_ = #{address},
+			</if>
+			<if test="dataSource != null">
+				data_source_ = #{dataSource},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="updateTime != null">
+				update_time_ = #{updateTime},
+			</if>
+			<if test="logoUrl != null">
+				logo_url_ = #{logoUrl},
+			</if>
+			<if test="contactPhone != null">
+				contact_phone_ = #{contactPhone},
+			</if>
+			<if test="domainName != null">
+				domain_name_ = #{domainName},
+			</if>
+			<if test="contactName != null">
+				contact_name_ = #{contactName},
+			</if>
+			<if test="name != null">
+				name_ = #{name},
+			</if>
+			<if test="createTime != null">
+				create_time_ = #{createTime},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete">
+		DELETE FROM tenant_info WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="TenantInfo" parameterType="map">
+		SELECT * FROM tenant_info ORDER BY id_
+		<include refid="global.limit" />
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM tenant_info
+	</select>
+</mapper>

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantAssetsInfoDao.java

@@ -20,5 +20,7 @@ public interface TenantAssetsInfoDao extends BaseMapper<TenantAssetsInfo> {
     int frozenAmount(BigDecimal frozenAmount);
 
     int recoverAmount(BigDecimal recoverAmount);
+
+    int deductAmount(BigDecimal deductAmount);
 }
 

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentCalenderDto.java

@@ -10,9 +10,11 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
+import com.ym.mec.common.entity.BaseEntity;
+
 import io.swagger.annotations.ApiModelProperty;
 
-public class MusicGroupPaymentCalenderDto {
+public class MusicGroupPaymentCalenderDto extends BaseEntity {
 
 	private String musicGroupId;
 

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

@@ -83,9 +83,6 @@ public class Organization extends BaseEntity {
 	@ApiModelProperty(value = "衔接老师",required = false)
 	private String joinTeacherName;
 
-	@ApiModelProperty(value = "机构id",required = false)
-    private Integer tenantId;
-
 	public String getJoinTeacherId() {
 		return joinTeacherId;
 	}
@@ -259,11 +256,4 @@ public class Organization extends BaseEntity {
 		this.gradeType = gradeType;
 	}
 
-    public Integer getTenantId() {
-        return tenantId;
-    }
-
-    public void setTenantId(Integer tenantId) {
-        this.tenantId = tenantId;
-    }
 }

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/TenantAssetsInfoService.java

@@ -14,8 +14,10 @@ import java.util.List;
  */
 public interface TenantAssetsInfoService extends IService<TenantAssetsInfo> {
 
-    void courseDeductAmountRules(List<CourseSchedule> dto);
+    void courseFrozenAmount(List<CourseSchedule> dto);
 
-    void courseRecoverAmountRules(Integer courseId);
+    void courseRecoverAmount(Integer courseId);
+
+    void courseDeductAmount(Integer courseId);
 }
 

+ 32 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java

@@ -48,22 +48,33 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
     private TenantCloudCourseRecordService tenantCloudCourseRecordService;
 
     /**
-     * 恢复/取消 冻结的金额
+     * 扣除冻结的金额
      *
      * @param courseId 课程id
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void courseRecoverAmountRules(Integer courseId) {
-        TenantCloudCourseRecord lastRecord = tenantCloudCourseRecordService.queryLastRecord(courseId);
-        if (Objects.nonNull(lastRecord) && lastRecord.getDeductState() != 0) {
-            //只有冻结的
-            throw new BizException("该课程非线上课!");
+    public void courseDeductAmount(Integer courseId){
+        TenantCloudCourseRecord lastRecord = checkLastRecord(courseId);
+        //写入流水
+        lastRecord.setDeductState(1);
+        tenantCloudCourseRecordService.save(lastRecord);
+        if (baseMapper.deductAmount(lastRecord.getAmount()) != 1) {
+            throw new BizException("解除冻结金额失败!");
         }
+    }
+
+    /**
+     * 恢复/取消 冻结的金额
+     *
+     * @param courseId 课程id
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void courseRecoverAmount(Integer courseId) {
+        TenantCloudCourseRecord lastRecord = checkLastRecord(courseId);
         //写入流水
         lastRecord.setDeductState(2);
-        lastRecord.setCreatedBy(getUserId());
-        lastRecord.setCreatedTime(new Date());
         tenantCloudCourseRecordService.save(lastRecord);
         //解除冻结金额,恢复余额
         if (baseMapper.recoverAmount(lastRecord.getAmount()) != 1) {
@@ -71,6 +82,18 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
         }
     }
 
+    private TenantCloudCourseRecord checkLastRecord(Integer courseId) {
+        TenantCloudCourseRecord lastRecord = tenantCloudCourseRecordService.queryLastRecord(courseId);
+        //判断是否是冻结的状态
+        if (Objects.nonNull(lastRecord) && lastRecord.getDeductState() != 0) {
+            //只有冻结的才能取消冻结 或者 扣费
+            throw new BizException("该课程非线上课!");
+        }
+        lastRecord.setCreatedBy(getUserId());
+        lastRecord.setCreatedTime(new Date());
+        return lastRecord;
+    }
+
     /**
      * 排课扣费计算
      * 1.线上排课计算出的总价格不能超过账户余额(注意多人同时操作账户余额多扣问题)
@@ -78,7 +101,7 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void courseDeductAmountRules(List<CourseSchedule> dto) {
+    public void courseFrozenAmount(List<CourseSchedule> dto) {
         Integer tenantId = TenantContextHolder.getTenantId();
 
         //校验课程 筛选出线上课

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

@@ -94,7 +94,7 @@
             #{settingDetail.courseTotalMinuties},
             #{settingDetail.unitPrice}, #{settingDetail.courseOriginalPrice}, #{settingDetail.courseCurrentPrice},
             #{settingDetail.isStudentOptional},
-            NOW(),NOW(),#{tenantId})
+            NOW(),NOW(),#{settingDetail.tenantId})
         </foreach>
     </insert>
 

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

@@ -40,7 +40,7 @@
 		(id_,organ_id_,course_type_,charge_type_id_,unit_price_,create_time_,update_time_,tenant_id_)
 		VALUES
 		<foreach collection="list" item="item" separator=",">
-		(#{item.id},#{item.organId},#{item.courseType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.chargeTypeId},#{item.unitPrice},now(),now(),#{tenantId})
+		(#{item.id},#{item.organId},#{item.courseType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.chargeTypeId},#{item.unitPrice},now(),now(),#{item.tenantId})
 		</foreach>
 	</insert>
 

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

@@ -102,7 +102,7 @@
         <where>
         suca.tenant_id_ = #{tenantId}
         <if test="organId != null">
-            FIND_IN_SET(su.organ_id_,#{organId})
+            and FIND_IN_SET(su.organ_id_,#{organId})
         </if>
         </where>
     </select>

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

@@ -39,5 +39,10 @@
         where frozen_amount_  <![CDATA[ >= ]]> #{recoverAmount}
     </update>
 
+    <update id="deductAmount" parameterType="decimal">
+        update tenant_assets_info
+        set frozen_amount_ = frozen_amount_ - #{deductAmount}
+        where frozen_amount_  <![CDATA[ >= ]]> #{deductAmount}
+    </update>
 
 </mapper>