diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java index dcb6772f..fccf5e31 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java @@ -52,6 +52,36 @@ public class CasesApi extends ApiBaseController { private CasesMajorTypeDao casesMajorTypeDao; + /** + * 用于后台管理 + * @param pager + * @param caseVo + * @return + */ + @PostMapping("/manage") + public JsonResponse> manage(Pagination pager, CaseVo caseVo){ + PageList views = casesService.managerList(pager.getPageIndex(), pager.getPageSize(), caseVo); + if(views!=null){ + if(views.getList()!=null && !views.getList().isEmpty()){ + for (Cases c:views.getList()) { + StringBuffer stringBuffer = new StringBuffer(); + List caseId = casesMajorTypeDao.findList(FieldFilters.eq("caseId", c.getId())); + if(caseId!=null && !caseId.isEmpty()){ + for (CasesMajorType cm:caseId) { + stringBuffer.append(cm.getMajorId()); + stringBuffer.append(","); + } + } + if(stringBuffer.length()>0){ + stringBuffer.deleteCharAt(stringBuffer.length()-1); + c.setMajorType(stringBuffer.toString()); + } + + } + } + } + return success(views); + } /** * 案例分页搜索查询 orders 状态 1代表时间最近,2代表热度最高 diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java index 265f87a0..aa1cb539 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java @@ -279,12 +279,12 @@ public class CourseAuditApi extends ApiBaseController{ if(StringUtils.isBlank(dto.getCourse().getOrgId())) { return badRequest("请选择资源归属"); } - + CurrentUser cuser=getCurrent(); dto.getCourse().setStatus(Course.STATUS_AUDIT_FINISH);//设置为审核通过状态 dto.getCourse().setEnabled(true);//设置启用状态问题 dto.getCourse().setPublished(false);//重新提交审核设置为未发布状态 try { - courseService.submitAndPublish(dto); + courseService.submitAndPublish(dto,cuser.getAccountId(),cuser.getName()); return success(true); } catch (Exception e) { log.error("默认管理员提交直接发布处理失败",e); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseAuditRecordDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseAuditRecordDao.java index 04502dbd..89d2a8ed 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseAuditRecordDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseAuditRecordDao.java @@ -3,9 +3,9 @@ package com.xboe.module.course.dao; import org.springframework.stereotype.Repository; import com.xboe.core.orm.BaseDao; -import com.xboe.module.course.entity.CourseAudit; +import com.xboe.module.course.entity.CourseAuditRecord; @Repository -public class CourseAuditRecordDao extends BaseDao{ +public class CourseAuditRecordDao extends BaseDao{ } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseAuditRecord.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseAuditRecord.java index 7df2814b..d2166b04 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseAuditRecord.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseAuditRecord.java @@ -37,6 +37,9 @@ public class CourseAuditRecord extends IdBaseEntity{ @Column(name = "course_id",nullable=false, length=20) private String courseId; + @Column(name = "course_name",nullable=false, length=100) + private String courseName; + /**审核人id*/ @Column(name = "aid",nullable=false, length=20) private String aid; diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseAuditService.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseAuditService.java index 55d358c6..dbd753e4 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseAuditService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseAuditService.java @@ -2,11 +2,11 @@ package com.xboe.module.course.service; import java.util.List; +import com.xboe.common.OrderCondition; import com.xboe.common.PageList; import com.xboe.module.course.dto.CourseQueryDto; -import com.xboe.module.course.entity.Course; import com.xboe.module.course.entity.CourseAudit; -import com.xboe.system.logs.entity.SysLogAudit; +import com.xboe.module.course.entity.CourseAuditRecord; /** @@ -62,7 +62,22 @@ public interface ICourseAuditService { // List findLogs(String courseId,String teacherId); //以下是新增加的公开课的审核 + /** + * 查询需要审核的课程 + * @param pageIndex + * @param pageSize + * @param courseName + * @param auditState + * @param aid + * @return + */ + PageList pageRecord(int pageIndex, int pageSize,String courseName,Integer auditState, String aid); + /** + * 提交审核 + * @param record + */ + void submitAudit(CourseAuditRecord record); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java index 5f777664..b8de99b7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java @@ -168,9 +168,11 @@ public interface ICourseService { /** * 用于默认管理员,直接提交发布,不走审核流程 * @param full + * @param aid 操作人id + * @param aname 姓名 * @throws Exception */ - void submitAndPublish(CourseFullDto full)throws Exception; + void submitAndPublish(CourseFullDto full,String aid,String aname)throws Exception; /** * 提交一个课程 diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseAuditServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseAuditServiceImpl.java index 9afb445c..e147e4c5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseAuditServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseAuditServiceImpl.java @@ -6,22 +6,30 @@ import javax.annotation.Resource; import javax.transaction.Transactional; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.xboe.common.OrderCondition; import com.xboe.common.PageList; +import com.xboe.core.event.IEventDataSender; import com.xboe.core.orm.FieldFilters; +import com.xboe.core.orm.QueryBuilder; import com.xboe.core.orm.UpdateBuilder; import com.xboe.module.course.dao.CourseAuditDao; import com.xboe.module.course.dao.CourseAuditRecordDao; import com.xboe.module.course.dao.CourseDao; import com.xboe.module.course.dao.CourseHRBPAuditDao; -import com.xboe.module.course.dto.CourseQueryDto; +import com.xboe.module.course.dao.CourseTeacherDao; import com.xboe.module.course.entity.Course; import com.xboe.module.course.entity.CourseAudit; +import com.xboe.module.course.entity.CourseAuditRecord; import com.xboe.module.course.entity.CourseHRBPAudit; +import com.xboe.module.course.entity.CourseTeacher; import com.xboe.module.course.service.ICourseAuditService; +import lombok.extern.slf4j.Slf4j; + +@Slf4j @Service public class CourseAuditServiceImpl implements ICourseAuditService{ @@ -34,8 +42,17 @@ public class CourseAuditServiceImpl implements ICourseAuditService{ @Resource CourseHRBPAuditDao courseHRBPAuditDao; + @Resource + CourseTeacherDao courseTeacherDao; + @Resource CourseDao courseDao; + + @Resource + PublishCourseUtil publishUtil; + + @Autowired(required = false) + IEventDataSender eventSender; @Override @Transactional @@ -77,6 +94,8 @@ public class CourseAuditServiceImpl implements ICourseAuditService{ } } + + // @Override // public List findLogs(String courseId, String teacherId) { // @@ -121,4 +140,43 @@ public class CourseAuditServiceImpl implements ICourseAuditService{ // return null; // } + @Override + public PageList pageRecord(int pageIndex, int pageSize, String courseName, Integer auditState,String aid) { + QueryBuilder builder=QueryBuilder.from(CourseAuditRecord.class); + builder.setPageIndex(pageIndex); + builder.setPageSize(pageSize); + + return null; + } + + @Override + @Transactional + public void submitAudit(CourseAuditRecord record) { + + auditRecordDao.save(record); + //同步发布课程 + //同步发布 + Course c= courseDao.get(record.getCourseId()); + publishUtil.fullTextPublish(c); + //发布事件处理 + if(eventSender!=null) { + List teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", record.getCourseId())); + if(teachers.size()>0) { + String authorIds=""; + for(CourseTeacher cteacher:teachers) { + if(authorIds.equals("")) { + authorIds+=cteacher.getTeacherId(); + }else { + authorIds+="|"+cteacher.getTeacherId(); + } + } + eventSender.send("发布课程","PublishCourse", "发布课程【"+record.getCourseName()+"】",record.getCourseId(), "1", record.getCourseName(), record.getAid(),record.getAname(),"authors:"+authorIds); + } + + }else { + log.error("未配置事件消息发送的实现"); + } + + + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java index 3f4b99dd..dafd3df5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java @@ -38,7 +38,6 @@ 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.CourseFullText; import com.xboe.module.course.dto.CourseQueryDto; import com.xboe.module.course.dto.RankingDto; import com.xboe.module.course.entity.Course; @@ -47,7 +46,6 @@ 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.CourseToCourseFullText; import com.xboe.module.course.service.ICourseFullTextSearch; import com.xboe.module.course.service.ICourseService; import com.xboe.module.interaction.service.ICourseGradeService; @@ -105,6 +103,9 @@ public class CourseServiceImpl implements ICourseService { @Autowired(required = false) private ICourseFullTextSearch fullTextSearch; + @Resource + PublishCourseUtil publishUtil; + @Autowired(required = false) private IEventDataSender eventSender; @@ -459,11 +460,7 @@ public class CourseServiceImpl implements ICourseService { courseDao.update(course); if(StringUtils.isNotBlank(course.getFullTextId())) { - try { - fullTextSearch.removeByDocId(ICourseFullTextSearch.DEFAULT_INDEX_NAME,course.getFullTextId()); - } catch (Exception e) { - //log.error("删除课程时删除全文索引错误",e); - } + publishUtil.removeByDocId(course.getFullTextId()); } //记录日志 @@ -483,11 +480,7 @@ public class CourseServiceImpl implements ICourseService { Course c=courseDao.get(id); //删除分两种情况,一个是管理员删除,一个是自己删除 ,所以这里的处理移到前端了 if(c.getFullTextId()!=null) { - try { - fullTextSearch.removeByDocId(ICourseFullTextSearch.DEFAULT_INDEX_NAME,c.getFullTextId()); - }catch(Exception e) { - log.error("删除课程时删除全文索引错误",e); - } + publishUtil.removeByDocId(c.getFullTextId()); } //只有速有全文检索返回标识的,才算是发布过再删除的,删除消息 if(StringUtils.isNotBlank(c.getFullTextId())){ @@ -660,11 +653,8 @@ public class CourseServiceImpl implements ICourseService { //更新后需要删除发布 if(StringUtils.isNotBlank(c.getFullTextId())) { - try { - fullTextSearch.removeByDocId(ICourseFullTextSearch.DEFAULT_INDEX_NAME,c.getFullTextId()); - } catch (Exception e) { - //log.error("删除课程时删除全文索引错误",e); - } + publishUtil.removeByDocId(c.getFullTextId()); + } } @@ -723,7 +713,7 @@ public class CourseServiceImpl implements ICourseService { } @Override - public void submitAndPublish(CourseFullDto full) throws Exception { + public void submitAndPublish(CourseFullDto full,String aid,String aname) throws Exception { Course c=full.getCourse();//当前的课程信息 c.setPublished(true); @@ -746,7 +736,26 @@ public class CourseServiceImpl implements ICourseService { courseCrowdDao.saveOrUpdate(cc); } } - // + //同步发布 + publishUtil.fullTextPublish(c); + //发布事件处理 + if(eventSender!=null) { + List teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", c.getId())); + if(teachers.size()>0) { + String authorIds=""; + for(CourseTeacher cteacher:teachers) { + if(authorIds.equals("")) { + authorIds+=cteacher.getTeacherId(); + }else { + authorIds+="|"+cteacher.getTeacherId(); + } + } + eventSender.send("发布课程","PublishCourse", "发布课程【"+c.getName()+"】", c.getId(), "1", c.getName(), aid,aname,"authors:"+authorIds); + } + + }else { + log.error("未配置事件消息发送的实现"); + } } @@ -778,64 +787,64 @@ public class CourseServiceImpl implements ICourseService { * 发布全文索引 * @param c */ - private void fullTextPublish(Course c) { - if(fullTextSearch==null) { - log.error("未实现全文检索的接口:"+ICourseFullTextSearch.class); - return; - } - CourseFullText cft=CourseToCourseFullText.convert(c); - - try { - - //计算课程时长 - int duration=courseContentDao.sumDurationByCourseId(c.getId()); - cft.setDuration(duration); - cft.setType(c.getType()); - - //查询教师 - List teacherNames=new ArrayList<>(); - List list = courseTeacherDao.findList(FieldFilters.eq("courseId",c.getId())); - if(list != null && !list.isEmpty()){ - - for (CourseTeacher ct : list){ - teacherNames.add(ct.getTeacherName()); - } - cft.setTeacher(StringUtils.join(teacherNames,",")); - } - - //查询课程受众 - List crowds =this.findCrowdByCourseId(c.getId()); - if(crowds!=null && !crowds.isEmpty()) { - String[] crowdIds=new String[crowds.size()]; - for(int i=0;i teacherNames=new ArrayList<>(); +// List list = courseTeacherDao.findList(FieldFilters.eq("courseId",c.getId())); +// if(list != null && !list.isEmpty()){ +// +// for (CourseTeacher ct : list){ +// teacherNames.add(ct.getTeacherName()); +// } +// cft.setTeacher(StringUtils.join(teacherNames,",")); +// } +// +// //查询课程受众 +// List crowds =this.findCrowdByCourseId(c.getId()); +// if(crowds!=null && !crowds.isEmpty()) { +// String[] crowdIds=new String[crowds.size()]; +// for(int i=0;i teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", courseId)); @@ -921,20 +931,16 @@ public class CourseServiceImpl implements ICourseService { //发布到全文检索中 if(fullTextSearch!=null) { Course c=courseDao.get(id); - this.fullTextPublish(c); + //this.fullTextPublish(c); + publishUtil.fullTextPublish(c); } }else { - courseDao.updateMultiFieldById(id, - UpdateBuilder.create("published", pass)); + courseDao.updateMultiFieldById(id,UpdateBuilder.create("published", pass)); if(this.fullTextSearch!=null) { Object fullId=courseDao.findField("fullTextId", FieldFilters.eq("id", id)); if(fullId!=null) { - try { - fullTextSearch.removeByDocId(ICourseFullTextSearch.DEFAULT_INDEX_NAME, (String)fullId); - }catch(Exception e) { - log.error("更新全文索引字段错误",e); - } + publishUtil.removeByDocId((String)fullId); } } } @@ -957,11 +963,7 @@ public class CourseServiceImpl implements ICourseService { if(this.fullTextSearch!=null) { Object fullId=courseDao.findField("fullTextId", FieldFilters.eq("id", id)); if(fullId!=null) { - try { - fullTextSearch.updateField(ICourseFullTextSearch.DEFAULT_INDEX_NAME, "isTop", top?1:0, (String)fullId); - }catch(Exception e) { - log.error("更新全文索引字段错误",e); - } + publishUtil.updateFieldByDocId((String)fullId, "isTop", top?1:0); } } @@ -976,15 +978,12 @@ public class CourseServiceImpl implements ICourseService { if(this.fullTextSearch!=null) { if(enabled) { //启用,重新必 Course c=courseDao.get(id); - this.fullTextPublish(c); + //this.fullTextPublish(c); + publishUtil.fullTextPublish(c); }else { Object fullId=courseDao.findField("fullTextId", FieldFilters.eq("id", id)); if(fullId!=null) { - try { - fullTextSearch.removeByDocId(ICourseFullTextSearch.DEFAULT_INDEX_NAME, (String)fullId); - }catch(Exception e) { - log.error("停用,从索引中删除课程失败",e); - } + publishUtil.removeByDocId((String)fullId); } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/PublishCourseUtil.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/PublishCourseUtil.java new file mode 100644 index 00000000..99f9f6ea --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/PublishCourseUtil.java @@ -0,0 +1,133 @@ +package com.xboe.module.course.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.xboe.core.orm.FieldFilters; +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.CourseTeacherDao; +import com.xboe.module.course.dto.CourseFullText; +import com.xboe.module.course.entity.Course; +import com.xboe.module.course.entity.CourseCrowd; +import com.xboe.module.course.entity.CourseTeacher; +import com.xboe.module.course.service.CourseToCourseFullText; +import com.xboe.module.course.service.ICourseFullTextSearch; + +import lombok.extern.slf4j.Slf4j; + +/** + * 发布课程的工具类 + * @author seastar + * + */ +@Slf4j +@Component +public class PublishCourseUtil { + + @Resource + private CourseDao courseDao; + + @Resource + private CourseContentDao courseContentDao; + + @Resource + private CourseTeacherDao courseTeacherDao; + + @Resource + private CourseCrowdDao courseCrowdDao; + + @Autowired(required = false) + private ICourseFullTextSearch fullTextSearch; + + /** + * 发布课程 + * @param c + */ + public void fullTextPublish(Course c) { + if(fullTextSearch==null) { + log.error("未实现全文检索的接口:"+ICourseFullTextSearch.class); + return; + } + CourseFullText cft=CourseToCourseFullText.convert(c); + + try { + + //计算课程时长 + int duration=courseContentDao.sumDurationByCourseId(c.getId()); + cft.setDuration(duration); + cft.setType(c.getType()); + + //查询教师 + List teacherNames=new ArrayList<>(); + List list = courseTeacherDao.findList(FieldFilters.eq("courseId",c.getId())); + if(list != null && !list.isEmpty()){ + + for (CourseTeacher ct : list){ + teacherNames.add(ct.getTeacherName()); + } + cft.setTeacher(StringUtils.join(teacherNames,",")); + } + + //查询课程受众 + //List crowds =this.findCrowdByCourseId(c.getId()); + List crowds =courseCrowdDao.findList("courseId", c.getId()); + if(crowds!=null && !crowds.isEmpty()) { + String[] crowdIds=new String[crowds.size()]; + for(int i=0;i