diff --git a/servers/boe-server-all/src/main/java/com/xboe/config/MySqlSchemaProperties.java b/servers/boe-server-all/src/main/java/com/xboe/config/MySqlSchemaProperties.java new file mode 100644 index 00000000..500e19b7 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/config/MySqlSchemaProperties.java @@ -0,0 +1,17 @@ +package com.xboe.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 整体系统MySQL数据库schema配置 + */ +@ConfigurationProperties(prefix = "mysql.schema") +@Data +public class MySqlSchemaProperties { + + /** + * 用户中心数据库schema + */ + private String userCenterSchema; +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseDao.java index 290b7901..6bfd9f86 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseDao.java @@ -96,7 +96,7 @@ public class CourseDao extends BaseDao { */ public List queryCourse(CoursePageQueryDTO queryDTO, boolean isSystemAdmin, List orgIds, String currentAccountId, - boolean pageQuery) { + boolean pageQuery, String userCenterSchema) { // select字段 StringBuilder builder = new StringBuilder("select "); builder.append("c.id,"); @@ -105,9 +105,9 @@ public class CourseDao extends BaseDao { builder.append("c.sys_type1 AS sysType1,"); builder.append("c.sys_type2 AS sysType2,"); builder.append("c.sys_type3 AS sysType3,"); - builder.append("c.res_owner1 AS resOwner1,"); - builder.append("c.res_owner2 AS resOwner2,"); - builder.append("c.res_owner3 AS resOwner3,"); + builder.append("c.org_id AS orgId,"); + builder.append("org.org_name AS orgName,"); + builder.append("org.org_name_path AS orgFullName,"); builder.append("c.sys_create_by AS sysCreateBy,"); builder.append("c.create_from AS createFrom,"); builder.append("c.sys_create_time AS sysCreateTime,"); @@ -124,7 +124,7 @@ public class CourseDao extends BaseDao { builder.append("COALESCE(tch.teacher_names, '') AS teacherName,"); builder.append("c.sort_weight AS sortWeight"); // 拼接FROM及查询条件语句 - appendFrom(builder, queryDTO, isSystemAdmin, orgIds, currentAccountId); + appendFrom(builder, queryDTO, isSystemAdmin, orgIds, currentAccountId, userCenterSchema); // 排序语句 appendOrder(builder, queryDTO); @@ -146,9 +146,9 @@ public class CourseDao extends BaseDao { vo.setSysType1((String) row[3]); vo.setSysType2((String) row[4]); vo.setSysType3((String) row[5]); - vo.setResOwner1((String) row[6]); - vo.setResOwner2((String) row[7]); - vo.setResOwner3((String) row[8]); + vo.setOrgId((String) row[6]); + vo.setOrgName((String) row[7]); + vo.setOrgFullName((String) row[8]); vo.setSysCreateBy((String) row[9]); vo.setCreateFrom((String) row[10]); @@ -201,11 +201,11 @@ public class CourseDao extends BaseDao { } public long countCourse(CoursePageQueryDTO queryDTO, - boolean isSystemAdmin, List orgIds, String currentAccountId) { + boolean isSystemAdmin, List orgIds, String currentAccountId, String userCenterSchema) { // select count StringBuilder builder = new StringBuilder("select count(*)"); // 拼接FROM及查询条件语句 - appendFrom(builder, queryDTO, isSystemAdmin, orgIds, currentAccountId); + appendFrom(builder, queryDTO, isSystemAdmin, orgIds, currentAccountId, userCenterSchema); // 排序语句 appendOrder(builder, queryDTO); @@ -225,7 +225,7 @@ public class CourseDao extends BaseDao { * @param currentAccountId */ private void appendFrom(StringBuilder builder, CoursePageQueryDTO queryDTO, - boolean isSystemAdmin, List orgIds, String currentAccountId) { + boolean isSystemAdmin, List orgIds, String currentAccountId, String userCenterSchema) { // 开头判断:课程培训时间的两个参数是否不为null boolean filterLearningTime = queryDTO.getLearningTimeStart() != null && queryDTO.getLearningTimeEnd() != null; builder.append(" FROM boe_course c"); @@ -249,6 +249,11 @@ public class CourseDao extends BaseDao { // 课件聚合 builder.append(System.lineSeparator()); builder.append("LEFT JOIN (SELECT course_id, SUM(duration) AS duration_sum FROM boe_course_content WHERE deleted = 0 GROUP BY course_id) cc ON c.id = cc.course_id"); + // 组织机构聚合 + builder.append(System.lineSeparator()); + builder.append("LEFT JOIN ").append(userCenterSchema) + .append(".organization org ON c.org_id = org.organization_id AND org.deleted = 0"); + // where条件 // 第一个条件:deleted = 0 builder.append(System.lineSeparator()); @@ -310,17 +315,9 @@ public class CourseDao extends BaseDao { builder.append(System.lineSeparator()); builder.append("AND c.open_course = :openCourse"); } - if (StringUtils.isNotBlank(queryDTO.getResOwner1())) { + if (StringUtils.isNotBlank(queryDTO.getOrgId())) { builder.append(System.lineSeparator()); - builder.append("AND c.res_owner1 = :resOwner1"); - } - if (StringUtils.isNotBlank(queryDTO.getResOwner2())) { - builder.append(System.lineSeparator()); - builder.append("AND c.res_owner2 = :resOwner2"); - } - if (StringUtils.isNotBlank(queryDTO.getResOwner3())) { - builder.append(System.lineSeparator()); - builder.append("AND c.res_owner3 = :resOwner3"); + builder.append("AND c.org_id = :orgId"); } if (StringUtils.isNotBlank(queryDTO.getCreateUser())) { builder.append(System.lineSeparator()); @@ -349,10 +346,12 @@ public class CourseDao extends BaseDao { // 排序逻辑 String orderAscStr = orderAsc == null || orderAsc ? "ASC" : "DESC"; // 多字段排序: sysType resOwner - if (StringUtils.equals(orderField, "sysType") || StringUtils.equals(orderField, "resOwner")) { + if (StringUtils.equals(orderField, "sysType")) { for (int i = 1; i <= 3; i++) { builder.append("c.").append(orderFieldSql).append(i).append(" ").append(orderAscStr).append(", "); } + } else if (StringUtils.equals(orderField, "resOwner")) { + builder.append("org.org_name ").append(orderAscStr).append(", "); } else if (StringUtils.equals(orderField, "studys")) { builder.append("COALESCE(stu.studys, 0) ").append(orderAscStr).append(", "); } else if (StringUtils.equals(orderField, "score")) { @@ -413,13 +412,7 @@ public class CourseDao extends BaseDao { query.setParameter("openCourse", queryDTO.getOpenCourse()); } if (StringUtils.isNotBlank(queryDTO.getResOwner1())) { - query.setParameter("resOwner1", queryDTO.getResOwner1()); - } - if (StringUtils.isNotBlank(queryDTO.getResOwner2())) { - query.setParameter("resOwner2", queryDTO.getResOwner2()); - } - if (StringUtils.isNotBlank(queryDTO.getResOwner3())) { - query.setParameter("resOwner3", queryDTO.getResOwner3()); + query.setParameter("orgId", queryDTO.getResOwner1()); } if (StringUtils.isNotBlank(queryDTO.getCreateUser())) { query.setParameter("createUser", queryDTO.getCreateUser()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CoursePageQueryDTO.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CoursePageQueryDTO.java index 2b295ba7..2df4f5d4 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CoursePageQueryDTO.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CoursePageQueryDTO.java @@ -20,6 +20,11 @@ public class CoursePageQueryDTO { /**资源归属三级*/ private String resOwner3; + /** + * 资源归属:机构id + */ + private String orgId; + /**是否发布,无就是全部*/ private Boolean publish; diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java index 2a3ba058..eb1f9223 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java @@ -1,8 +1,10 @@ package com.xboe.module.course.service.impl; +import com.boe.feign.api.usercenter.entity.ApiOrgListVo; import com.xboe.common.OrderCondition; import com.xboe.common.PageList; import com.xboe.common.exception.AppException; +import com.xboe.config.MySqlSchemaProperties; import com.xboe.core.CurrentUser; import com.xboe.core.orm.FieldFilters; import com.xboe.core.orm.IFieldFilter; @@ -22,24 +24,30 @@ import com.xboe.module.course.service.ICourseFullTextSearch; import com.xboe.module.course.service.ICoursePageService; import com.xboe.module.course.vo.CoursePageVo; import com.xboe.module.excel.ExportsExcelSenderUtil; +import com.xboe.module.type.entity.Type; +import com.xboe.module.type.service.ITypeService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; -import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; +@EnableConfigurationProperties({MySqlSchemaProperties.class}) @Service @Slf4j public class CoursePageServiceImpl implements ICoursePageService { + @Autowired + private MySqlSchemaProperties mySqlSchemaProperties; + @Resource private CourseDao courseDao; @@ -49,6 +57,9 @@ public class CoursePageServiceImpl implements ICoursePageService { @Autowired private IOutSideDataService outSideDataService; + @Resource + private ITypeService typeService; + @Autowired(required = false) private ICourseFullTextSearch fullTextSearch; @@ -130,8 +141,8 @@ public class CoursePageServiceImpl implements ICoursePageService { // // return result; // 第二版 - long total = courseDao.countCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId); - List voList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId, true); + long total = courseDao.countCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId, mySqlSchemaProperties.getUserCenterSchema()); + List voList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId, true, mySqlSchemaProperties.getUserCenterSchema()); PageList result = new PageList<>(); result.setCount((int) total); result.setPageSize(coursePageQueryDTO.getPageSize()); @@ -239,7 +250,7 @@ public class CoursePageServiceImpl implements ICoursePageService { boolean isSystemAdmin = userOrgIds.getPermissions().containsKey(UserOrgIds.IsSystemAdminKey) && userOrgIds.getPermissions().get(UserOrgIds.IsSystemAdminKey); - List courseList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, null, false); + List courseList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, null, false, mySqlSchemaProperties.getUserCenterSchema()); // 导出 LinkedHashMap exportMap = new LinkedHashMap<>(); @@ -253,18 +264,39 @@ public class CoursePageServiceImpl implements ICoursePageService { exportMap.put("发布状态", "published"); exportMap.put("启停用状态", "enabled"); exportMap.put("公开课", "openCourse"); - exportMap.put("资源归属", "resOwner"); + exportMap.put("资源归属", "orgName"); exportMap.put("创建人", "sysCreateBy"); exportMap.put("创建来源", "createFrom"); exportMap.put("创建时间", "sysCreateTime"); List> dataList = new ArrayList<>(); if (courseList != null && !courseList.isEmpty()) { - // TODO 查询sysType和resOwner + // 查询sysType + Type sysTypeParam = new Type(); + sysTypeParam.setSysResType(1); + sysTypeParam.setStatus(1); + List typeList = typeService.findList(sysTypeParam); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); for (CoursePageVo coursePageVo : courseList) { Map map = new HashMap<>(); map.put("name", coursePageVo.getName()); - map.put("sysType", coursePageVo.getSysType1()); // FIXME 三级分类用/拼接 + // 课程分类 + StringBuilder sysTypeBuilder = new StringBuilder(); + typeList.stream() + .filter(t -> StringUtils.equals(coursePageVo.getSysType1(), t.getId())) + .findFirst().ifPresent(t -> sysTypeBuilder.append(t.getName())); + if (StringUtils.isNotBlank(coursePageVo.getSysType2())) { + typeList.stream() + .filter(t -> StringUtils.equals(coursePageVo.getSysType2(), t.getId())) + .findFirst().ifPresent(t -> sysTypeBuilder.append("/").append(t.getName())); + } + if (StringUtils.isNotBlank(coursePageVo.getSysType3())) { + typeList.stream() + .filter(t -> StringUtils.equals(coursePageVo.getSysType3(), t.getId())) + .findFirst().ifPresent(t -> sysTypeBuilder.append("/").append(t.getName())); + } + map.put("sysType", sysTypeBuilder.toString()); +// map.put("sysType", coursePageVo.getSysType1()); map.put("teacherName", coursePageVo.getTeacherName()); // 课程时长:秒转分 map.put("courseDuration", coursePageVo.getCourseDuration() / 60); @@ -274,7 +306,7 @@ public class CoursePageServiceImpl implements ICoursePageService { map.put("published", coursePageVo.getPublished() == null || !coursePageVo.getPublished() ? "未发布" : "已发布"); map.put("enabled", coursePageVo.getEnabled() == null || coursePageVo.getEnabled() ? "停用" : "启用"); map.put("openCourse", coursePageVo.getOpenCourse() == null || coursePageVo.getOpenCourse() == 0 ? "否" : "是"); - map.put("resOwner", coursePageVo.getResOwner1()); // FIXME 三级分类用/拼接 + map.put("orgName", coursePageVo.getOrgName()); map.put("sysCreateBy", coursePageVo.getSysCreateBy()); map.put("createFrom", CourseCreateFromEnum.getByCode(coursePageVo.getCreateFrom()).getLabel()); map.put("sysCreateTime", formatter.format(coursePageVo.getSysCreateTime())); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/CoursePageVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/CoursePageVo.java index 0e3daf23..c12fa418 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/CoursePageVo.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/CoursePageVo.java @@ -53,6 +53,21 @@ public class CoursePageVo { * 资源归属三级 */ private String resOwner3; + + /** + * 机构ID + */ + private String orgId; + + /** + * 机构名称 + */ + private String orgName; + + /** + * 机构全名 + */ + private String orgFullName; /** * 创建人 diff --git a/servers/boe-server-all/src/main/resources/application-dev.yml b/servers/boe-server-all/src/main/resources/application-dev.yml index f341c462..92cfb4a8 100644 --- a/servers/boe-server-all/src/main/resources/application-dev.yml +++ b/servers/boe-server-all/src/main/resources/application-dev.yml @@ -117,4 +117,8 @@ aop-log-record: password: admin elasticsearch: host: 192.168.0.253 - port: 9200 \ No newline at end of file + port: 9200 + +mysql: + schema: + user-center-schema: userbasic \ No newline at end of file diff --git a/servers/boe-server-all/src/main/resources/application-pre.yml b/servers/boe-server-all/src/main/resources/application-pre.yml index ac0eeae4..76196bee 100644 --- a/servers/boe-server-all/src/main/resources/application-pre.yml +++ b/servers/boe-server-all/src/main/resources/application-pre.yml @@ -194,4 +194,8 @@ aop-log-record: password: admin elasticsearch: host: 10.251.129.21 - port: 9200 \ No newline at end of file + port: 9200 + +mysql: + schema: + user-center-schema: user_basic \ No newline at end of file diff --git a/servers/boe-server-all/src/main/resources/application-prod.yml b/servers/boe-server-all/src/main/resources/application-prod.yml index d7a34b62..a9c7567f 100644 --- a/servers/boe-server-all/src/main/resources/application-prod.yml +++ b/servers/boe-server-all/src/main/resources/application-prod.yml @@ -147,4 +147,8 @@ boe: pcPageUrl: ${boe.domain-name}/pc/course/studyindex?id= h5PageUrl: ${boe.domain-name}/mobile/pages/study/courseStudy?id= pcLoginUrl: ${boe.domain-name}/web/ - h5LoginUrl: ${boe.domain-name}/m/loginuser \ No newline at end of file + h5LoginUrl: ${boe.domain-name}/m/loginuser + +mysql: + schema: + user-center-schema: user_basic \ No newline at end of file diff --git a/servers/boe-server-all/src/main/resources/application-test.yml b/servers/boe-server-all/src/main/resources/application-test.yml index 1df5397f..d5adef34 100644 --- a/servers/boe-server-all/src/main/resources/application-test.yml +++ b/servers/boe-server-all/src/main/resources/application-test.yml @@ -221,4 +221,8 @@ aop-log-record: host: 10.251.129.25 port: 9200 user: elastic - password: Boe@es123 \ No newline at end of file + password: Boe@es123 + +mysql: + schema: + user-center-schema: userbasic