package com.ibeetl.jlw.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.jlw.util.ToolUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.service.CoreBaseService; import com.ibeetl.admin.core.util.PlatformException; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.admin.core.web.JsonReturnCode; import com.ibeetl.jlw.dao.TeacherOpenCourseMergeResourcesInfoDao; import com.ibeetl.jlw.entity.CourseInfo; import com.ibeetl.jlw.entity.FileEntity; import com.ibeetl.jlw.entity.ResourcesInfo; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeResourcesInfo; import com.ibeetl.jlw.web.query.ResourcesInfoQuery; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeResourcesInfoQuery; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Nullable; import javax.validation.constraints.NotNull; import java.io.*; import java.util.*; import static com.ibeetl.admin.core.util.ExcelUtil.getCellFormatValue; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toSet; import static org.apache.commons.lang3.StringUtils.join; /** * 开课资源拉取 Service * 当分布式ID开启后请勿使用insert(*,true) */ @Service @Transactional @Validated @Slf4j public class TeacherOpenCourseMergeResourcesInfoService extends CoreBaseService implements DeleteResourcesBy { @Autowired private TeacherOpenCourseMergeResourcesInfoDao teacherOpenCourseMergeResourcesInfoDao; @Autowired private ResourcesInfoService resourcesInfoService; @Autowired private TeacherOpenCourseMergeCourseInfoService teacherOpenCourseMergeCourseInfoService; public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = teacherOpenCourseMergeResourcesInfoDao.queryByCondition(query); queryListAfter(ret.getList()); return ret; } public PageQueryqueryByConditionQuery(PageQuery query){ PageQuery ret = teacherOpenCourseMergeResourcesInfoDao.queryByConditionQuery(query); queryListAfter(ret.getList()); return ret; } public void deleteByList(List list){ String ids = ""; ToolUtils.deleteNullList(list); for(int i=0;null != list && i teacherOpenCourseMergeResourcesInfoList = new ArrayList<>(); try { teacherOpenCourseMergeResourcesInfoList = JSON.parseArray(teacherOpenCourseMergeResourcesInfoQuery.getTeacherOpenCourseMergeResourcesInfoJsonStr(), TeacherOpenCourseMergeResourcesInfo.class); } catch (Exception e) { try { teacherOpenCourseMergeResourcesInfoList.add(JSONObject.parseObject(teacherOpenCourseMergeResourcesInfoQuery.getTeacherOpenCourseMergeResourcesInfoJsonStr(), TeacherOpenCourseMergeResourcesInfo.class)); } catch (Exception e1) {} } ToolUtils.deleteNullList(teacherOpenCourseMergeResourcesInfoList); if(null != teacherOpenCourseMergeResourcesInfoList && teacherOpenCourseMergeResourcesInfoList.size()>0){ for(int i=0;i 0; if(!flag){ msg = "更新指定参数失败"; } }else{ msg = "指定参数为空"; } return msg; } public List getValues (Object paras){ return sqlManager.select(SqlId.of("jlw.teacherOpenCourseMergeResourcesInfo.getTeacherOpenCourseMergeResourcesInfoValues"), TeacherOpenCourseMergeResourcesInfo.class, paras); } public List getValuesByQuery (TeacherOpenCourseMergeResourcesInfoQuery teacherOpenCourseMergeResourcesInfoQuery){ return teacherOpenCourseMergeResourcesInfoDao.getValuesByQuery(teacherOpenCourseMergeResourcesInfoQuery); } public List getValuesByQueryNotWithPermission (TeacherOpenCourseMergeResourcesInfoQuery teacherOpenCourseMergeResourcesInfoQuery){ return teacherOpenCourseMergeResourcesInfoDao.getValuesByQueryNotWithPermission(teacherOpenCourseMergeResourcesInfoQuery); } public TeacherOpenCourseMergeResourcesInfo getInfo (Long teacherOpenCourseMergeResourcesInfoId){ TeacherOpenCourseMergeResourcesInfoQuery teacherOpenCourseMergeResourcesInfoQuery = new TeacherOpenCourseMergeResourcesInfoQuery(); teacherOpenCourseMergeResourcesInfoQuery.setTeacherOpenCourseMergeResourcesInfoId(teacherOpenCourseMergeResourcesInfoId); List list = teacherOpenCourseMergeResourcesInfoDao.getValuesByQuery(teacherOpenCourseMergeResourcesInfoQuery); if(null != list && list.size()>0){ return list.get(0); }else{ return null; } } public TeacherOpenCourseMergeResourcesInfo getInfo (TeacherOpenCourseMergeResourcesInfoQuery teacherOpenCourseMergeResourcesInfoQuery){ List list = teacherOpenCourseMergeResourcesInfoDao.getValuesByQuery(teacherOpenCourseMergeResourcesInfoQuery); if(null != list && list.size()>0){ return list.get(0); }else{ return null; } } public JsonResult importTemplate(List fileEntityList,Listlist,CoreUser coreUser){ ListerrMsg = new ArrayList<>(); String msg =""; int count = 0; Date date = new Date(); for(int item=0;null != fileEntityList && item map = new HashMap<>();//获取需要的表头的列 //从第一列找到需要的表头 for (int i=0; i0?JsonReturnCode.SUCCESS.getCode():JsonReturnCode.FAIL.getCode()); jsonResult.setData(errMsg); jsonResult.setMsg((count>0?"导入成功,共导入"+count+"条":"导入失败")+(StringUtils.isNotBlank(msg)?"
"+msg:"")); return jsonResult; } public List> getExcelValues (TeacherOpenCourseMergeResourcesInfoQuery teacherOpenCourseMergeResourcesInfoQuery){ return teacherOpenCourseMergeResourcesInfoDao.getExcelValues(teacherOpenCourseMergeResourcesInfoQuery); } /** * 根据指定的课程ID和章节ID集合,去从系统资源拷贝到开课资源库 * * @param teacherOpenCourseId 开课ID * @param allCourseInfo 指定的所有课程章节 * @param courseInfoIdPair 拷贝过来的ID段,旧ID和新ID的一个映射关系(非必填) */ public void copySystemResourcesInfoToOpenCourse(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId, Collection allCourseInfo, @Nullable Map courseInfoIdPair) { ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); // 取出所有的课程章节ID String courseInfoIds = allCourseInfo.stream().map(item -> item.getCourseInfoId().toString()).collect(joining(",")); resourcesInfoQuery.setCourseInfoIds(courseInfoIds); List resourcesInfoList = resourcesInfoService.getValuesByQuery(resourcesInfoQuery); // 系统资源库ID集合 Set resourcesInfoIds = resourcesInfoList.stream().map(ResourcesInfo::getResourcesInfoId).collect(toSet()); // 拷贝系统资源库到教师开课 copyFromResourcesInfo(resourcesInfoIds, teacherOpenCourseId, courseInfoIdPair); } /** * 根据指定的课程ID和章节ID集合,去从系统资源拷贝到开课资源库 * * @param teacherOpenCourseId 开课ID * @param allCourseInfoIdsJoin 指定的所有课程章节ID * @param courseInfoIdPair 拷贝过来的ID段,旧ID和新ID的一个映射关系(非必填) */ public void copySystemResourcesInfoToOpenCourse(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId, String allCourseInfoIdsJoin, @Nullable Map courseInfoIdPair) { ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); resourcesInfoQuery.setCourseInfoIds(allCourseInfoIdsJoin); List resourcesInfoList = resourcesInfoService.getValuesByQuery(resourcesInfoQuery); // 系统资源库ID集合 Set resourcesInfoIds = resourcesInfoList.stream().map(ResourcesInfo::getResourcesInfoId).collect(toSet()); // 拷贝系统资源库到教师开课 copyFromResourcesInfo(resourcesInfoIds, teacherOpenCourseId, courseInfoIdPair); } /** * 教师端-导入资源操作,逻辑拆分 *

* 从系统资源库拉取到教师开课的资源中。 * * @param resourcesInfoIds 资源信息ID集合 * @param teacherOpenCourseId 开课ID * @param courseInfoIdPair * @return */ public void copyFromResourcesInfo(Set resourcesInfoIds, @NotNull(message = "开课ID不能为空!") final Long teacherOpenCourseId, Map courseInfoIdPair) { if (ObjectUtil.isEmpty(resourcesInfoIds)) { return; } ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); resourcesInfoQuery.setResourcesInfoIds(join(resourcesInfoIds.toArray(), ",")); List resourcesInfoList = resourcesInfoService.getValuesByQuery(resourcesInfoQuery); if (ObjectUtil.isEmpty(resourcesInfoList)) { return; } // 拷贝部分字段映射 CopyOptions copyOptions = CopyOptions.create().setFieldMapping(MapUtil.of("courseInfoId", "teacherOpenCourseMergeCourseInfoId")); List copyToList = BeanUtil.copyToList(resourcesInfoList, TeacherOpenCourseMergeResourcesInfo.class, copyOptions); copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId)); resetNewId(copyToList, courseInfoIdPair); // 批量插入资源和开课关联表 insertBatch(copyToList); } /** * 重置开课课程ID。需要拿到新旧改变的关系 * @param copyToList * @param courseInfoIdPair */ public void resetNewId(List copyToList, Map courseInfoIdPair) { if (ObjectUtil.isEmpty(courseInfoIdPair)) {return;} copyToList.forEach(item -> { item.setTeacherOpenCourseMergeCourseInfoId(courseInfoIdPair.get(item.getTeacherOpenCourseMergeCourseInfoId())); }); } /** * 教师端-重置操作之一 * 根据开课ID清空离线资源信息 * * @param teacherOpenCourseId */ @Override public void resetOperationByTeacherOpenCourseId(Long teacherOpenCourseId) { log.info("重置开课课程资源"); sqlManager.lambdaQuery(TeacherOpenCourseMergeResourcesInfo.class) .andEq(TeacherOpenCourseMergeResourcesInfo::getTeacherOpenCourseId, teacherOpenCourseId) .delete(); } @Override public void deleteTeacherOpenCourseAllRelatedByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId) { } /** * 验证操作的数据,是否是教师本人上传的 * @param resourcesInfoIds * @param coreUser */ public void validateIsTeacher(@NotNull(message = "开课资源ID不能为空!") String resourcesInfoIds, @NotNull(message = "登录用户信息不能为空!") CoreUser coreUser) { if (coreUser.isTeacher()) { for (String id : resourcesInfoIds.split(",")) { Long userId = getInfo(Long.valueOf(id)).getUserId(); Assert.isTrue(coreUser.getId().equals(userId), "只能编辑自己上传的资源"); } } } }