Compare commits

..

11 Commits

Author SHA1 Message Date
Caojr
748f7c5913 szx-1282 修改失败提示语 2025-11-04 14:09:26 +08:00
Caojr
5954d54e44 szx-1282 视频解码失败返回 2025-11-04 13:33:12 +08:00
Caojr
00527271b6 szx-1283 撤回修改 2025-11-03 16:07:12 +08:00
Caojr
308a16f4b4 szx-1283 修改ffmpeg路径 2025-11-03 15:39:03 +08:00
Caojr
302a673515 szx-1283 修改ffmpeg路径 2025-11-03 15:13:21 +08:00
Caojr
49b69db0bf szx-1283 修改ffmpeg路径 2025-11-03 15:06:27 +08:00
Caojr
8a0b05079a szx-1283 修改依赖 2025-11-03 11:51:31 +08:00
Caojr
eaab48607d szx-1283 修改依赖 2025-11-03 11:45:32 +08:00
Caojr
20e3b001d5 szx-1277 增加boe_course_teacher删除记录逻辑 2025-10-30 14:37:40 +08:00
Caojr
a37f90aeaa szx-1277 增加参数 2025-10-30 12:08:59 +08:00
Caojr
e767345c1e szx-1277 hrbp审核接口修改course服务调用接 2025-10-30 11:45:21 +08:00
7 changed files with 275 additions and 186 deletions

View File

@@ -10,7 +10,6 @@ import javax.servlet.http.HttpServletRequest;
import com.xboe.api.ThirdApi; import com.xboe.api.ThirdApi;
import com.xboe.module.course.dto.CourseParam; import com.xboe.module.course.dto.CourseParam;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -322,7 +321,6 @@ public class CourseAuditApi extends ApiBaseController{
* @return * @return
*/ */
@PostMapping("/hrbp-submit-audit") @PostMapping("/hrbp-submit-audit")
@Transactional(rollbackFor = Exception.class)
public JsonResponse<Boolean> hrbpAudit(String auditId,String courseId,String title,Boolean pass,String remark, HttpServletRequest request){ public JsonResponse<Boolean> hrbpAudit(String auditId,String courseId,String title,Boolean pass,String remark, HttpServletRequest request){
if(StringUtils.isBlank(auditId)){ if(StringUtils.isBlank(auditId)){
return badRequest("参数错误"); return badRequest("参数错误");
@@ -352,19 +350,24 @@ public class CourseAuditApi extends ApiBaseController{
} }
} }
CurrentUser cu=getCurrent(); try {
service.hrbpSubmitAudit(auditId, courseId,open, pass,cu.getAccountId(),cu.getName(), remark); CurrentUser cu=getCurrent();
service.hrbpSubmitAudit(auditId, courseId,open, pass,cu.getAccountId(),cu.getName(), remark);
if (pass){ if (pass){
//修改在线课开课状态=已开课 //修改在线课开课状态=已开课
String token = request.getHeader("Xboe-Access-Token"); String token = request.getHeader("Xboe-Access-Token");
CourseParam param = new CourseParam(); CourseParam param = new CourseParam();
param.setId(courseId); param.setId(c.getId());
param.setOrgId(c.getOrgId()); param.setOrgId(c.getOrgId());
param.setOrgName(c.getOrgName()); param.setOrgName(c.getOrgName());
thirdApi.updateOrSaveCourse(param,token); thirdApi.updateOrSaveCourse(param,token);
} }
return success(true); return success(true);
} catch (Exception e) {
log.error("HRBP审核提交处理错误",e);
return error("审核处理失败",e.getMessage(),false);
}
} }
@PostMapping("/last-audit-list") @PostMapping("/last-audit-list")
@@ -389,7 +392,6 @@ public class CourseAuditApi extends ApiBaseController{
* @param dto * @param dto
* @return * @return
*/ */
@Transactional(rollbackFor = Exception.class)
@PostMapping("/submit-publish") @PostMapping("/submit-publish")
@AutoLog(module = "课程",action = "默认管理员提交发布",info = "") @AutoLog(module = "课程",action = "默认管理员提交发布",info = "")
public JsonResponse<Boolean> submitAndPublish(@RequestBody CourseFullDto dto, HttpServletRequest request){ public JsonResponse<Boolean> submitAndPublish(@RequestBody CourseFullDto dto, HttpServletRequest request){
@@ -423,16 +425,23 @@ public class CourseAuditApi extends ApiBaseController{
dto.getCourse().setStatus(Course.STATUS_AUDIT_FINISH);//设置为审核通过状态 dto.getCourse().setStatus(Course.STATUS_AUDIT_FINISH);//设置为审核通过状态
dto.getCourse().setEnabled(true);//设置启用状态问题 dto.getCourse().setEnabled(true);//设置启用状态问题
dto.getCourse().setPublished(false);//重新提交审核设置为未发布状态 dto.getCourse().setPublished(false);//重新提交审核设置为未发布状态
try {
courseService.submitAndPublish(dto,cuser.getAccountId(),cuser.getName()); courseService.submitAndPublish(dto,cuser.getAccountId(),cuser.getName());
log.info("---------------在线课开始同步到讲师管理 ------- token = " + token); log.info("---------------在线课开始同步到讲师管理 ------- token = " + token);
CourseParam param = new CourseParam(); CourseParam param = new CourseParam();
param.setId(dto.getCourse().getId()); param.setId(dto.getCourse().getId());
param.setOrgId(dto.getCourse().getOrgId()); param.setOrgId(dto.getCourse().getOrgId());
param.setOrgName(dto.getCourse().getOrgName()); param.setOrgName(dto.getCourse().getOrgName());
thirdApi.updateOrSaveCourse(param,token); thirdApi.updateOrSaveCourse(param,token);
log.info("---------------在线课同步到讲师管理完毕 -------"); log.info("---------------在线课同步到讲师管理完毕 -------");
return success(true); return success(true);
} catch (Exception e) {
log.error("默认管理员提交直接发布处理失败",e);
e.printStackTrace();
return error("发布课程失败",e.getMessage());
}
} }

View File

@@ -15,6 +15,8 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.MultimediaInfo;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.orm.ObjectOptimisticLockingFailureException; import org.springframework.orm.ObjectOptimisticLockingFailureException;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -46,8 +48,6 @@ import com.xboe.module.scorm.SCORMParser;
import com.xboe.standard.BaseConstant; import com.xboe.standard.BaseConstant;
import com.xboe.standard.enums.BoedxCourseFileType; import com.xboe.standard.enums.BoedxCourseFileType;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.MultimediaInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@@ -256,7 +256,7 @@ public class CourseFileApi extends ApiBaseController {
} }
String fileFullPath = SysConstant.getConfigValue(BaseConstant.CONFIG_UPLOAD_FILES_SAVEPATH) + file.getFilePath(); String fileFullPath = SysConstant.getConfigValue(BaseConstant.CONFIG_UPLOAD_FILES_SAVEPATH) + file.getFilePath();
if ("mp3,mp4".indexOf(file.getFileType()) > -1){ if ("mp3,mp4".indexOf(file.getFileType()) > -1){
log.info("上传 "+file.getFileType()+"文件:"+file.getFilePath()); log.info("上传 "+file.getFileType()+"文件:"+file.getFilePath());
Encoder encoder = new Encoder(); Encoder encoder = new Encoder();
try { try {
//System.out.println(fileFullPath); //System.out.println(fileFullPath);
@@ -278,8 +278,8 @@ public class CourseFileApi extends ApiBaseController {
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.error("读取视频时长错误"); log.error("读取视频时长错误", e);
// e.printStackTrace(); return error("视频解析失败,尝试重新上传或联系管理员", "视频解析失败,尝试重新上传或联系管理员");
} }
} }

View File

@@ -14,7 +14,6 @@ import com.xboe.api.ThirdApi;
import com.xboe.module.course.dto.*; import com.xboe.module.course.dto.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@@ -301,7 +300,6 @@ public class CourseManageApi extends ApiBaseController{
* @return * @return
*/ */
@PostMapping("/save") @PostMapping("/save")
@Transactional(rollbackFor = Exception.class)
@AutoLog(module = "课程",action = "保存课程基本信息",info = "") @AutoLog(module = "课程",action = "保存课程基本信息",info = "")
public JsonResponse<CourseFullDto> saveCourseFull(@RequestBody CourseFullDto dto, HttpServletRequest request){ public JsonResponse<CourseFullDto> saveCourseFull(@RequestBody CourseFullDto dto, HttpServletRequest request){
if(dto.getCourse()==null){ if(dto.getCourse()==null){
@@ -323,25 +321,30 @@ public class CourseManageApi extends ApiBaseController{
} }
//填充必要的信息 //填充必要的信息
if(StringUtils.isBlank(dto.getCourse().getId())) { try {
//只有在第一次添加保存时才会这样 if(StringUtils.isBlank(dto.getCourse().getId())) {
fillCourseData(dto.getCourse()); //只有在第一次添加保存时才会这样
courseService.save(dto); fillCourseData(dto.getCourse());
}else { courseService.save(dto);
//修改后重置,重新提交审核,重新发布 }else {
dto.getCourse().setPublished(false); //修改后重置,重新提交审核,重新发布
dto.getCourse().setStatus(Course.STATUS_NONE); dto.getCourse().setPublished(false);
courseService.update(dto); dto.getCourse().setStatus(Course.STATUS_NONE);
} courseService.update(dto);
String token = request.getHeader("Xboe-Access-Token"); }
log.info("---------------在线课开始同步到讲师管理 ------- token = " + token); String token = request.getHeader("Xboe-Access-Token");
CourseParam param = new CourseParam(); log.info("---------------在线课开始同步到讲师管理 ------- token = " + token);
param.setId(dto.getCourse().getId()); CourseParam param = new CourseParam();
param.setOrgId(dto.getCourse().getOrgId()); param.setId(dto.getCourse().getId());
param.setOrgName(dto.getCourse().getOrgName()); param.setOrgId(dto.getCourse().getOrgId());
thirdApi.updateOrSaveCourse(param,token); param.setOrgName(dto.getCourse().getOrgName());
log.info("---------------在线课同步到讲师管理完毕 -------"); thirdApi.updateOrSaveCourse(param,token);
return success(dto); log.info("---------------在线课同步到讲师管理完毕 -------");
return success(dto);
} catch (Exception e) {
log.error("整体保存课程信息错误",e);
return error("保存失败",e.getMessage());
}
} }
/*** /***
@@ -440,7 +443,6 @@ public class CourseManageApi extends ApiBaseController{
@PostMapping("/submit") @PostMapping("/submit")
@Transactional(rollbackFor = Exception.class)
@AutoLog(module = "课程",action = "提交课程",info = "") @AutoLog(module = "课程",action = "提交课程",info = "")
public JsonResponse<CourseFullDto> submitCourseFull(@RequestBody CourseFullDto dto){ public JsonResponse<CourseFullDto> submitCourseFull(@RequestBody CourseFullDto dto){
if(dto.getCourse()==null){ if(dto.getCourse()==null){
@@ -518,63 +520,68 @@ public class CourseManageApi extends ApiBaseController{
//检查课程内容的完整性 //检查课程内容的完整性
//填充必要的信息 //填充必要的信息
//fillCourseData(dto.getCourse()); //fillCourseData(dto.getCourse());
CourseHRBPAudit hrbpAudit = hrbpAuditService.hasAuditing(dto.getCourse().getId()); try {
if(hrbpAudit!=null) { CourseHRBPAudit hrbpAudit = hrbpAuditService.hasAuditing(dto.getCourse().getId());
return badRequest("此课程中已有审核,不能再提交审核,如修改请先撤回"); if(hrbpAudit!=null) {
} return badRequest("此课程中已有审核,不能再提交审核,如修改请先撤回");
if(!isLocalDevelopment()) { }
if(StringUtils.isBlank(dto.getAuditUser().getAid())) { if(!isLocalDevelopment()) {
if(StringUtils.isBlank(dto.getAuditUser().getAid())) {
// if(StringUtils.isBlank(dto.getAuditUser().getKid())) { // if(StringUtils.isBlank(dto.getAuditUser().getKid())) {
// return badRequest("HRBP审核信息人员错误"); // return badRequest("HRBP审核信息人员错误");
// } // }
//转化用户id //转化用户id
User u = userService.getByUserNo(dto.getAuditUser().getCode()); User u = userService.getByUserNo(dto.getAuditUser().getCode());
if(u==null) { //本地没有,需要同步、 if(u==null) { //本地没有,需要同步、
//20230815 直接返回错误,这个时候传的用户,在新系统中没有,需要用户登录一下,或着用户中心推送 //20230815 直接返回错误,这个时候传的用户,在新系统中没有,需要用户登录一下,或着用户中心推送
return badRequest("无关联HRBP审核人员请先同步用户"); return badRequest("无关联HRBP审核人员请先同步用户");
//Organization org = orgService.getBySysId(dto.getAuditUser().getOrgkid()); //Organization org = orgService.getBySysId(dto.getAuditUser().getOrgkid());
// UserVo fwUser = fwUserService.getById(dto.getAuditUser().getKid()); // UserVo fwUser = fwUserService.getById(dto.getAuditUser().getKid());
// Account a =userService.syncAccountUser(fwUser); // Account a =userService.syncAccountUser(fwUser);
// dto.getAuditUser().setAid(a.getId()); // dto.getAuditUser().setAid(a.getId());
}else { }else {
dto.getAuditUser().setAid(u.getId()); dto.getAuditUser().setAid(u.getId());
} }
}else { }else {
log.info("已获取过hrbp审核人id【"+dto.getAuditUser().getAid()+"】,不需要再转化"); log.info("已获取过hrbp审核人id【"+dto.getAuditUser().getAid()+"】,不需要再转化");
} }
}else { }else {
//弄成固定值,用于测试 //弄成固定值,用于测试
dto.getAuditUser().setAid(getCurrent().getAccountId()); dto.getAuditUser().setAid(getCurrent().getAccountId());
} }
if(StringUtils.isBlank(dto.getAuditUser().getAid())) { if(StringUtils.isBlank(dto.getAuditUser().getAid())) {
return badRequest("查询组织HRBP审核人员失败"); return badRequest("查询组织HRBP审核人员失败");
} }
//设置为提交状态 //设置为提交状态
dto.getCourse().setStatus(Course.STATUS_SUBMIT); dto.getCourse().setStatus(Course.STATUS_SUBMIT);
dto.getCourse().setEnabled(true);//设置启用状态问题 dto.getCourse().setEnabled(true);//设置启用状态问题
dto.getCourse().setPublished(false);//重新提交审核设置为未发布状态 dto.getCourse().setPublished(false);//重新提交审核设置为未发布状态
courseService.submit(dto); courseService.submit(dto);
//提交成功发邮件提醒 //提交成功发邮件提醒
try { try {
String htmlEmail=createEmailHtml(dto.getAuditUser().getName(),dto.getCourse().getOrgId(), String htmlEmail=createEmailHtml(dto.getAuditUser().getName(),dto.getCourse().getOrgId(),
dto.getCourse().getOrgName(), dto.getCourse().getOrgName(),
dto.getCourse().getSysCreateBy(),dto.getCourse().getName()); dto.getCourse().getSysCreateBy(),dto.getCourse().getName());
//邮件发送 //邮件发送
String email=dto.getAuditUser().getEmail(); String email=dto.getAuditUser().getEmail();
if(!isLocalDevelopment()) { if(!isLocalDevelopment()) {
//只是非开发模式下才可以发送 //只是非开发模式下才可以发送
service.sendMail(email,""+dto.getCourse().getName()+"》课程审核提醒", htmlEmail,"数字化学习平台"); service.sendMail(email,""+dto.getCourse().getName()+"》课程审核提醒", htmlEmail,"数字化学习平台");
}else { }else {
//service.sendMail("daihaixing@bjxask.com","课程审核提醒", htmlEmail,"数字化学习平台"); //service.sendMail("daihaixing@bjxask.com","课程审核提醒", htmlEmail,"数字化学习平台");
} }
} catch (Exception ex) { } catch (Exception ex) {
log.error("邮件发送失败",ex); log.error("邮件发送失败",ex);
return error("课程已提交,但邮件发送失败",ex.getMessage()); return error("课程已提交,但邮件发送失败",ex.getMessage());
} }
return success(dto); return success(dto);
} catch (Exception e) {
log.error("提交保存课程信息错误",e);
return error("提交课程处理失败",e.getMessage());
}
} }
private String createEmailHtml(String name,String orgId, String orgName,String createBy,String courseName) throws Exception { private String createEmailHtml(String name,String orgId, String orgName,String createBy,String courseName) throws Exception {
@@ -608,7 +615,6 @@ public class CourseManageApi extends ApiBaseController{
} }
@PostMapping("/sumbits") @PostMapping("/sumbits")
@Transactional(rollbackFor = Exception.class)
public JsonResponse<Boolean> sumbitId(HttpServletRequest request,CourseHRBPAudit audit,String ucode,String ukid,String email,String orgName){ public JsonResponse<Boolean> sumbitId(HttpServletRequest request,CourseHRBPAudit audit,String ucode,String ukid,String email,String orgName){
if(StringUtils.isBlank(audit.getCourseId())){ if(StringUtils.isBlank(audit.getCourseId())){
return badRequest("参数错误"); return badRequest("参数错误");
@@ -631,23 +637,24 @@ public class CourseManageApi extends ApiBaseController{
return badRequest(error); return badRequest(error);
} }
CourseHRBPAudit hrbpAudit = hrbpAuditService.hasAuditing(audit.getCourseId()); try {
if(hrbpAudit!=null) { CourseHRBPAudit hrbpAudit = hrbpAuditService.hasAuditing(audit.getCourseId());
return badRequest("此课程中已有审核,不能再提交审核,如修改请先撤回"); if(hrbpAudit!=null) {
} return badRequest("此课程中已有审核,不能再提交审核,如修改请先撤回");
}
if(!isLocalDevelopment()) {
if(StringUtils.isBlank(audit.getAid())) { if(!isLocalDevelopment()) {
if(StringUtils.isBlank(audit.getAid())) {
// if(StringUtils.isBlank(ukid)){ // if(StringUtils.isBlank(ukid)){
// return badRequest("未关联HRBP审核人员"); // return badRequest("未关联HRBP审核人员");
// } // }
//转化用户id //转化用户id
User u = userService.getByUserNo(ucode); User u = userService.getByUserNo(ucode);
if(u==null) { //本地没有,需要同步 if(u==null) { //本地没有,需要同步
return badRequest("无关联HRBP审核人员请先同步用户"); return badRequest("无关联HRBP审核人员请先同步用户");
//Organization org = orgService.getBySysId(dto.getAuditUser().getOrgkid()); //Organization org = orgService.getBySysId(dto.getAuditUser().getOrgkid());
//20230815 已经不再使用直接查老系统,采用接口同步的方式 //20230815 已经不再使用直接查老系统,采用接口同步的方式
// UserVo fwUser = fwUserService.getById(ukid); // UserVo fwUser = fwUserService.getById(ukid);
// Account a =userService.syncAccountUser(fwUser); // Account a =userService.syncAccountUser(fwUser);
// audit.setAid(a.getId()); // audit.setAid(a.getId());
@@ -663,39 +670,43 @@ public class CourseManageApi extends ApiBaseController{
// }catch(Exception exp) { // }catch(Exception exp) {
// log.error("登录同步用户错误",exp); // log.error("登录同步用户错误",exp);
// } // }
}else { }else {
audit.setAid(u.getId()); audit.setAid(u.getId());
} }
}else { }else {
log.info("已获取过hrbp审核人id【"+audit.getAid()+"】,不需要再转化"); log.info("已获取过hrbp审核人id【"+audit.getAid()+"】,不需要再转化");
} }
}else { }else {
//弄成固定值,用于测试 //弄成固定值,用于测试
audit.setAid(getCurrent().getAccountId()); audit.setAid(getCurrent().getAccountId());
} }
if(StringUtils.isBlank(audit.getAid())) { if(StringUtils.isBlank(audit.getAid())) {
return badRequest("查询组织HRBP审核人员失败"); return badRequest("查询组织HRBP审核人员失败");
} }
courseService.submit(audit); courseService.submit(audit);
//提交成功发邮件提醒 //提交成功发邮件提醒
try { try {
String htmlEmail=createEmailHtml(audit.getAuditUser(),course.getOrgId(), orgName,audit.getCourseUser(),audit.getCourseName()); String htmlEmail=createEmailHtml(audit.getAuditUser(),course.getOrgId(), orgName,audit.getCourseUser(),audit.getCourseName());
//邮件发送 //邮件发送
if(!isLocalDevelopment()) { if(!isLocalDevelopment()) {
//只是非高度环境上才会发送 //只是非高度环境上才会发送
service.sendMail(email,""+course.getName()+"》课程审核提醒",htmlEmail,"数字化学习平台"); service.sendMail(email,""+course.getName()+"》课程审核提醒",htmlEmail,"数字化学习平台");
} }
} catch (Exception ex) { } catch (Exception ex) {
log.error("邮件发送失败",ex); log.error("邮件发送失败",ex);
return error("课程已提交,但邮件发送失败",ex.getMessage()); return error("课程已提交,但邮件发送失败",ex.getMessage());
} }
return success(true); return success(true);
}catch(Exception e) {
log.error("提交保存课程信息错误",e);
return error("提交课程处理失败",e.getMessage());
}
} }
@PostMapping("/revoke") @PostMapping("/revoke")

View File

@@ -0,0 +1,9 @@
package com.xboe.module.course.dao;
import com.xboe.core.orm.BaseDao;
import com.xboe.module.course.entity.CourseTeacherDeletedRecord;
import org.springframework.stereotype.Repository;
@Repository
public class CourseTeacherDeletedRecordDao extends BaseDao<CourseTeacherDeletedRecord> {
}

View File

@@ -0,0 +1,43 @@
package com.xboe.module.course.entity;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* 课程任课教师删除记录
*/
@Data
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = SysConstant.TABLE_PRE + "course_teacher_deleted_record")
public class CourseTeacherDeletedRecord extends IdBaseEntity {
private static final long serialVersionUID = 1L;
/**
* 课程id
*/
@Column(name = "course_id", nullable = false, length = 20)
private String courseId;
/**
* 教师id实际上就是aid
*
*/
@Column(name = "teacher_id", nullable = false, length = 20)
private String teacherId;
/**
* 教师姓名
*
*/
@Column(name = "teacher_name", length = 30)
private String teacherName;
}

View File

@@ -161,14 +161,14 @@ public interface ICourseService {
* 课程信息的整体更新,用于对课程的编辑处理 * 课程信息的整体更新,用于对课程的编辑处理
* @param full * @param full
*/ */
void update(CourseFullDto full); void update(CourseFullDto full)throws Exception;
/** /**
* 提交课程,提交进入课程审核,独立的方法处理 * 提交课程,提交进入课程审核,独立的方法处理
* @param full * @param full
* @throws Exception * @throws Exception
*/ */
void submit(CourseFullDto full); void submit(CourseFullDto full)throws Exception;
/** /**
* 用于默认管理员,直接提交发布,不走审核流程 * 用于默认管理员,直接提交发布,不走审核流程
@@ -177,14 +177,14 @@ public interface ICourseService {
* @param aname 姓名 * @param aname 姓名
* @throws Exception * @throws Exception
*/ */
void submitAndPublish(CourseFullDto full,String aid,String aname); void submitAndPublish(CourseFullDto full,String aid,String aname)throws Exception;
/** /**
* 提交一个课程 * 提交一个课程
* @param audit * @param audit
* @throws Exception * @throws Exception
*/ */
void submit(CourseHRBPAudit audit); void submit(CourseHRBPAudit audit) throws Exception;
/** /**
* update 传一个id直接改值 * update 传一个id直接改值

View File

@@ -15,9 +15,12 @@ import java.util.stream.Stream;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.management.Query; import javax.management.Query;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.xboe.api.ThirdApi; import com.xboe.api.ThirdApi;
import com.xboe.core.orm.*; import com.xboe.core.orm.*;
import com.xboe.module.course.dao.*;
import com.xboe.module.course.entity.*;
import com.xboe.school.study.dao.StudyCourseDao; import com.xboe.school.study.dao.StudyCourseDao;
import com.xboe.school.study.entity.StudyCourse; import com.xboe.school.study.entity.StudyCourse;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -41,24 +44,9 @@ import com.xboe.common.beans.KeyValue;
import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.IDGenerator;
import com.xboe.common.utils.StringUtil; import com.xboe.common.utils.StringUtil;
import com.xboe.core.event.IEventDataSender; import com.xboe.core.event.IEventDataSender;
import com.xboe.module.course.dao.CourseContentDao;
import com.xboe.module.course.dao.CourseCrowdDao;
import com.xboe.module.course.dao.CourseDao;
import com.xboe.module.course.dao.CourseExamDao;
import com.xboe.module.course.dao.CourseHRBPAuditDao;
import com.xboe.module.course.dao.CourseHomeWorkDao;
import com.xboe.module.course.dao.CourseSectionDao;
import com.xboe.module.course.dao.CourseTeacherDao;
import com.xboe.module.course.dao.CourseUpdateLogDao;
import com.xboe.module.course.dto.CourseFullDto; import com.xboe.module.course.dto.CourseFullDto;
import com.xboe.module.course.dto.CourseQueryDto; import com.xboe.module.course.dto.CourseQueryDto;
import com.xboe.module.course.dto.RankingDto; import com.xboe.module.course.dto.RankingDto;
import com.xboe.module.course.entity.Course;
import com.xboe.module.course.entity.CourseCrowd;
import com.xboe.module.course.entity.CourseHRBPAudit;
import com.xboe.module.course.entity.CourseSection;
import com.xboe.module.course.entity.CourseTeacher;
import com.xboe.module.course.entity.CourseUpdateLog;
import com.xboe.module.course.service.ICourseFullTextSearch; import com.xboe.module.course.service.ICourseFullTextSearch;
import com.xboe.module.course.service.ICourseService; import com.xboe.module.course.service.ICourseService;
import com.xboe.module.interaction.service.ICourseGradeService; import com.xboe.module.interaction.service.ICourseGradeService;
@@ -125,8 +113,9 @@ public class CourseServiceImpl implements ICourseService {
@Resource @Resource
RestHighLevelClient restHighLevelClient; RestHighLevelClient restHighLevelClient;
@Resource
private CourseTeacherDeletedRecordDao courseTeacherDeletedRecordDao;
/** /**
* 生成过滤条件 * 生成过滤条件
* *
@@ -183,7 +172,7 @@ public class CourseServiceImpl implements ICourseService {
filters.add(FieldFilters.in("device", Course.DEVICE_MOBILE, Course.DEVICE_ALL)); filters.add(FieldFilters.in("device", Course.DEVICE_MOBILE, Course.DEVICE_ALL));
} else if (dto.getDevice() == Course.DEVICE_ALL) { } else if (dto.getDevice() == Course.DEVICE_ALL) {
filters.add(FieldFilters.eq("device", Course.DEVICE_ALL)); filters.add(FieldFilters.eq("device", Course.DEVICE_ALL));
}else if (dto.getDevice() == Course.DEVICE_INTERNAL) { } else if (dto.getDevice() == Course.DEVICE_INTERNAL) {
filters.add(FieldFilters.eq("device", Course.DEVICE_INTERNAL)); filters.add(FieldFilters.eq("device", Course.DEVICE_INTERNAL));
} }
@@ -281,13 +270,13 @@ public class CourseServiceImpl implements ICourseService {
//// Set<String>list=new HashSet<>(); //// Set<String>list=new HashSet<>();
//// if(s!=null&&!s.isEmpty()){ //// if(s!=null&&!s.isEmpty()){
//// list=Arrays.stream(s.split(",")).collect(Collectors.toSet()); //// list=Arrays.stream(s.split(",")).collect(Collectors.toSet());
//// }else { //// }else {
//// Set<String> ss = getSeache(dto); //// Set<String> ss = getSeache(dto);
//// String courseSearch=String.join(",",ss); //// String courseSearch=String.join(",",ss);
//// redisTemplate.opsForValue().set("course_search",courseSearch); //// redisTemplate.opsForValue().set("course_search",courseSearch);
//// //设置过期时间为1分钟 //// //设置过期时间为1分钟
//// redisTemplate.expire("course_search", 1, TimeUnit.MINUTES); //// redisTemplate.expire("course_search", 1, TimeUnit.MINUTES);
//// } //// }
// Set<String> list = getSeache(dto); // Set<String> list = getSeache(dto);
// //有权限的查询,也同时查询出创建人的数据,在权限上 // //有权限的查询,也同时查询出创建人的数据,在权限上
// if(TempFilterConfig.Manager_CourseFile_ByOrgIds) { // if(TempFilterConfig.Manager_CourseFile_ByOrgIds) {
@@ -367,8 +356,9 @@ public class CourseServiceImpl implements ICourseService {
// // 使用distinct()配合自定义的去重条件 // // 使用distinct()配合自定义的去重条件
// .filter(distinctByKey(c -> c.getId())) // .filter(distinctByKey(c -> c.getId()))
// .collect(Collectors.toList()); // .collect(Collectors.toList());
//// PageList<Course> rs=courseDao.findPage(pageIndex, pageSize, filters, oc);
//// long endTime = System.nanoTime(); /// / PageList<Course> rs=courseDao.findPage(pageIndex, pageSize, filters, oc);
/// / long endTime = System.nanoTime();
// //log.info("查询出的条数:"+rs.getCount()); // //log.info("查询出的条数:"+rs.getCount());
// if(!mergedList.isEmpty()){ // if(!mergedList.isEmpty()){
// //去掉未发布的课程 // //去掉未发布的课程
@@ -425,30 +415,30 @@ public class CourseServiceImpl implements ICourseService {
if (TempFilterConfig.Manager_CourseFile_ByOrgIds) { if (TempFilterConfig.Manager_CourseFile_ByOrgIds) {
if (dto.getIsSystemAdmin() == null || !dto.getIsSystemAdmin()) { if (dto.getIsSystemAdmin() == null || !dto.getIsSystemAdmin()) {
List<String> finalStrings = strings; List<String> finalStrings = strings;
log.info("dto为"+dto); log.info("dto为" + dto);
if(dto.getIsCreateCourse()!=null&&dto.getIsCreateCourse()){ if (dto.getIsCreateCourse() != null && dto.getIsCreateCourse()) {
listByFilters2.removeIf(e -> { listByFilters2.removeIf(e -> {
//去掉未发布的课程 //去掉未发布的课程
if (!e.getPublished() && seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { if (!e.getPublished() && seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
return true; return true;
} }
//去掉所有条件都不符合的课程 //去掉所有条件都不符合的课程
if(!seache.contains(e.getId())&&!dto.getReadIds().contains(e.getId())&& !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())){ if (!seache.contains(e.getId()) && !dto.getReadIds().contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
return true; return true;
} }
return false; return false;
}); });
//将需要隐藏的做标记 //将需要隐藏的做标记
listByFilters2.forEach(e -> { listByFilters2.forEach(e -> {
if ((seache.contains(e.getId())||dto.getReadIds().contains(e.getOrgId())) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { if ((seache.contains(e.getId()) || dto.getReadIds().contains(e.getOrgId())) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
e.setIsPermission(false); e.setIsPermission(false);
} else { } else {
e.setIsPermission(true); e.setIsPermission(true);
} }
}); });
listByFilters2.sort(Comparator.comparing(Course::getIsPermission).reversed()); listByFilters2.sort(Comparator.comparing(Course::getIsPermission).reversed());
}else{ } else {
List<Course> collect = listByFilters2.stream().filter(e ->dto.getReadIds().contains(e.getOrgId())||dto.getOrgAid().equals(e.getSysCreateAid())||finalStrings.contains(e.getOrgId())).collect(Collectors.toList()); List<Course> collect = listByFilters2.stream().filter(e -> dto.getReadIds().contains(e.getOrgId()) || dto.getOrgAid().equals(e.getSysCreateAid()) || finalStrings.contains(e.getOrgId())).collect(Collectors.toList());
List<Course> paginate = paginate(collect, pageIndex, pageSize); List<Course> paginate = paginate(collect, pageIndex, pageSize);
PageList<Course> rs = new PageList<>(); PageList<Course> rs = new PageList<>();
rs.setCount(collect.size()); rs.setCount(collect.size());
@@ -868,7 +858,7 @@ public class CourseServiceImpl implements ICourseService {
} }
// 删除ES数据 // 删除ES数据
deletedStudyResourceBatchByCourseIdAndType(id,c.getType()); deletedStudyResourceBatchByCourseIdAndType(id, c.getType());
} else { } else {
//彻底删除,课件设置为无课程状态 //彻底删除,课件设置为无课程状态
courseDao.setDeleted(id); courseDao.setDeleted(id);
@@ -976,7 +966,7 @@ public class CourseServiceImpl implements ICourseService {
} }
@Override @Override
public void update(CourseFullDto full) { public void update(CourseFullDto full) throws Exception {
Course c = full.getCourse();//当前的课程信息 Course c = full.getCourse();//当前的课程信息
Course nowCourse = courseDao.get(c.getId());//修改之前的课程信息 Course nowCourse = courseDao.get(c.getId());//修改之前的课程信息
@@ -1002,6 +992,8 @@ public class CourseServiceImpl implements ICourseService {
c.setSysVersion(courseDao.getVersion(c.getId())); c.setSysVersion(courseDao.getVersion(c.getId()));
full.getCourse().setSysVersion(c.getSysVersion()); full.getCourse().setSysVersion(c.getSysVersion());
// 兼容处理,记录下删除的关联数据
createCourseTeacherDeletedRecord(c.getId());
//先清空教师信息, 教师信息如果不一样了,也要加入到日志中 //先清空教师信息, 教师信息如果不一样了,也要加入到日志中
courseTeacherDao.deleteByField("courseId", c.getId()); courseTeacherDao.deleteByField("courseId", c.getId());
if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { if (full.getTeachers() != null && !full.getTeachers().isEmpty()) {
@@ -1028,7 +1020,7 @@ public class CourseServiceImpl implements ICourseService {
} }
@Override @Override
public void submit(CourseFullDto full) { public void submit(CourseFullDto full) throws Exception {
Course c = full.getCourse();//当前的课程信息 Course c = full.getCourse();//当前的课程信息
if (c.getVisible() == null) { if (c.getVisible() == null) {
@@ -1056,6 +1048,8 @@ public class CourseServiceImpl implements ICourseService {
c.setSysVersion(courseDao.getVersion(c.getId())); c.setSysVersion(courseDao.getVersion(c.getId()));
full.getCourse().setSysVersion(c.getSysVersion()); full.getCourse().setSysVersion(c.getSysVersion());
// 兼容处理,记录下删除的关联数据
createCourseTeacherDeletedRecord(c.getId());
//先清空教师信息, 教师信息如果不一样了,也要加入到日志中 //先清空教师信息, 教师信息如果不一样了,也要加入到日志中
courseTeacherDao.deleteByField("courseId", c.getId()); courseTeacherDao.deleteByField("courseId", c.getId());
if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { if (full.getTeachers() != null && !full.getTeachers().isEmpty()) {
@@ -1084,13 +1078,15 @@ public class CourseServiceImpl implements ICourseService {
} }
@Override @Override
public void submitAndPublish(CourseFullDto full, String aid, String aname) { public void submitAndPublish(CourseFullDto full, String aid, String aname) throws Exception {
Course c = full.getCourse();//当前的课程信息 Course c = full.getCourse();//当前的课程信息
c.setPublished(true); c.setPublished(true);
c.setPublishTime(LocalDateTime.now()); c.setPublishTime(LocalDateTime.now());
courseDao.update(c); courseDao.update(c);
// 兼容处理,记录下删除的关联数据
createCourseTeacherDeletedRecord(c.getId());
//先清空教师信息, 教师信息如果不一样了,也要加入到日志中 //先清空教师信息, 教师信息如果不一样了,也要加入到日志中
courseTeacherDao.deleteByField("courseId", c.getId()); courseTeacherDao.deleteByField("courseId", c.getId());
if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { if (full.getTeachers() != null && !full.getTeachers().isEmpty()) {
@@ -1131,7 +1127,7 @@ public class CourseServiceImpl implements ICourseService {
} }
@Override @Override
public void submit(CourseHRBPAudit hrbpAudit) { public void submit(CourseHRBPAudit hrbpAudit) throws Exception {
courseDao.updateMultiFieldById(hrbpAudit.getCourseId(), UpdateBuilder.create("status", Course.STATUS_SUBMIT), courseDao.updateMultiFieldById(hrbpAudit.getCourseId(), UpdateBuilder.create("status", Course.STATUS_SUBMIT),
UpdateBuilder.create("published", false), UpdateBuilder.create("publishTime", LocalDateTime.now())); UpdateBuilder.create("published", false), UpdateBuilder.create("publishTime", LocalDateTime.now()));
@@ -2013,4 +2009,25 @@ public class CourseServiceImpl implements ICourseService {
e.printStackTrace(); e.printStackTrace();
} }
} }
/**
* 删除boe_course_teacher数据时把删除的数据储存到boe_course_teacher_deleted_record表
* boe_course_teacher表没有deleted字段兼容处理
*
* @param courseId 课程ID
*/
private void createCourseTeacherDeletedRecord(String courseId) {
List<CourseTeacherDeletedRecord> courseTeacherList = courseTeacherDao.findList(FieldFilters.eq("courseId", courseId)).stream().map(ct -> {
CourseTeacherDeletedRecord courseTeacherDeletedRecord = new CourseTeacherDeletedRecord();
courseTeacherDeletedRecord.setCourseId(ct.getCourseId());
courseTeacherDeletedRecord.setTeacherId(ct.getTeacherId());
courseTeacherDeletedRecord.setTeacherName(ct.getTeacherName());
return courseTeacherDeletedRecord;
}).collect(Collectors.toList());
if (CollUtil.isNotEmpty(courseTeacherList)) {
courseTeacherDeletedRecordDao.saveList(courseTeacherList);
}
}
} }