mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-06 17:36:47 +08:00
feat: 课程列表分页、导出功能修改
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -96,7 +96,7 @@ public class CourseDao extends BaseDao<Course> {
|
||||
*/
|
||||
public List<CoursePageVo> queryCourse(CoursePageQueryDTO queryDTO,
|
||||
boolean isSystemAdmin, List<String> 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<Course> {
|
||||
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<Course> {
|
||||
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<Course> {
|
||||
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<Course> {
|
||||
}
|
||||
|
||||
public long countCourse(CoursePageQueryDTO queryDTO,
|
||||
boolean isSystemAdmin, List<String> orgIds, String currentAccountId) {
|
||||
boolean isSystemAdmin, List<String> 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<Course> {
|
||||
* @param currentAccountId
|
||||
*/
|
||||
private void appendFrom(StringBuilder builder, CoursePageQueryDTO queryDTO,
|
||||
boolean isSystemAdmin, List<String> orgIds, String currentAccountId) {
|
||||
boolean isSystemAdmin, List<String> 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<Course> {
|
||||
// 课件聚合
|
||||
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<Course> {
|
||||
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<Course> {
|
||||
// 排序逻辑
|
||||
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<Course> {
|
||||
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());
|
||||
|
||||
@@ -20,6 +20,11 @@ public class CoursePageQueryDTO {
|
||||
/**资源归属三级*/
|
||||
private String resOwner3;
|
||||
|
||||
/**
|
||||
* 资源归属:机构id
|
||||
*/
|
||||
private String orgId;
|
||||
|
||||
/**是否发布,无就是全部*/
|
||||
private Boolean publish;
|
||||
|
||||
|
||||
@@ -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<CoursePageVo> voList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId, true);
|
||||
long total = courseDao.countCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId, mySqlSchemaProperties.getUserCenterSchema());
|
||||
List<CoursePageVo> voList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, currentAccountId, true, mySqlSchemaProperties.getUserCenterSchema());
|
||||
PageList<CoursePageVo> 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<CoursePageVo> courseList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, null, false);
|
||||
List<CoursePageVo> courseList = courseDao.queryCourse(coursePageQueryDTO, isSystemAdmin, orgIds, null, false, mySqlSchemaProperties.getUserCenterSchema());
|
||||
|
||||
// 导出
|
||||
LinkedHashMap<String, String> 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<Map<String, Object>> dataList = new ArrayList<>();
|
||||
if (courseList != null && !courseList.isEmpty()) {
|
||||
// TODO 查询sysType和resOwner
|
||||
// 查询sysType
|
||||
Type sysTypeParam = new Type();
|
||||
sysTypeParam.setSysResType(1);
|
||||
sysTypeParam.setStatus(1);
|
||||
List<Type> typeList = typeService.findList(sysTypeParam);
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
for (CoursePageVo coursePageVo : courseList) {
|
||||
Map<String, Object> 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()));
|
||||
|
||||
@@ -53,6 +53,21 @@ public class CoursePageVo {
|
||||
* 资源归属三级
|
||||
*/
|
||||
private String resOwner3;
|
||||
|
||||
/**
|
||||
* 机构ID
|
||||
*/
|
||||
private String orgId;
|
||||
|
||||
/**
|
||||
* 机构名称
|
||||
*/
|
||||
private String orgName;
|
||||
|
||||
/**
|
||||
* 机构全名
|
||||
*/
|
||||
private String orgFullName;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
|
||||
@@ -117,4 +117,8 @@ aop-log-record:
|
||||
password: admin
|
||||
elasticsearch:
|
||||
host: 192.168.0.253
|
||||
port: 9200
|
||||
port: 9200
|
||||
|
||||
mysql:
|
||||
schema:
|
||||
user-center-schema: userbasic
|
||||
@@ -194,4 +194,8 @@ aop-log-record:
|
||||
password: admin
|
||||
elasticsearch:
|
||||
host: 10.251.129.21
|
||||
port: 9200
|
||||
port: 9200
|
||||
|
||||
mysql:
|
||||
schema:
|
||||
user-center-schema: user_basic
|
||||
@@ -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
|
||||
h5LoginUrl: ${boe.domain-name}/m/loginuser
|
||||
|
||||
mysql:
|
||||
schema:
|
||||
user-center-schema: user_basic
|
||||
@@ -221,4 +221,8 @@ aop-log-record:
|
||||
host: 10.251.129.25
|
||||
port: 9200
|
||||
user: elastic
|
||||
password: Boe@es123
|
||||
password: Boe@es123
|
||||
|
||||
mysql:
|
||||
schema:
|
||||
user-center-schema: userbasic
|
||||
|
||||
Reference in New Issue
Block a user