From df96fd4dc70dd29b61546f1a3fa9722a283ea54f Mon Sep 17 00:00:00 2001 From: daihh Date: Thu, 23 Mar 2023 13:01:11 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- servers/boe-server-all/pom.xml | 5 + .../java/com/xboe/UrlSecurityFilterImpl.java | 50 ++++++ .../module/course/api/CourseManageApi.java | 1 + .../service/impl/CourseServiceImpl.java | 3 +- .../com/xboe/school/api/PortalConsoleApi.java | 8 +- .../com/xboe/school/impl/BoeTokenImpl.java | 28 +-- .../xboe/school/impl/GetCurrentUserImpl.java | 30 ---- .../com/xboe/school/impl/JwtTokenImpl.java | 72 -------- .../xboe/school/study/dao/StudyCourseDao.java | 4 +- .../study/service/impl/StudyServiceImpl.java | 19 +- .../system/filter/AuthenticationFilter.java | 168 ------------------ .../main/resources/application-dev.properties | 1 + 12 files changed, 95 insertions(+), 294 deletions(-) create mode 100644 servers/boe-server-all/src/main/java/com/xboe/UrlSecurityFilterImpl.java delete mode 100644 servers/boe-server-all/src/main/java/com/xboe/school/impl/GetCurrentUserImpl.java delete mode 100644 servers/boe-server-all/src/main/java/com/xboe/school/impl/JwtTokenImpl.java delete mode 100644 servers/boe-server-all/src/main/java/com/xboe/system/filter/AuthenticationFilter.java diff --git a/servers/boe-server-all/pom.xml b/servers/boe-server-all/pom.xml index 621b4d1f..e0f2844b 100644 --- a/servers/boe-server-all/pom.xml +++ b/servers/boe-server-all/pom.xml @@ -17,6 +17,11 @@ 1.8 + + com.xboe + xboe-api + 1.0.0 + com.xboe xboe-module-scorm diff --git a/servers/boe-server-all/src/main/java/com/xboe/UrlSecurityFilterImpl.java b/servers/boe-server-all/src/main/java/com/xboe/UrlSecurityFilterImpl.java new file mode 100644 index 00000000..23288a2c --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/UrlSecurityFilterImpl.java @@ -0,0 +1,50 @@ +package com.xboe; + +import java.util.HashSet; +import java.util.Set; + +import org.springframework.stereotype.Component; + +import com.xboe.api.IUrlSecurityFilter; + +/** + * 对url的过滤处理. + * 此服务全部需要 + * + */ +@Component +public class UrlSecurityFilterImpl implements IUrlSecurityFilter{ + + + private static Set noLoginUrls=new HashSet(); + + static { + noLoginUrls.add("/inner/data"); + noLoginUrls.add("/xboe/account/captcha"); + noLoginUrls.add("/xboe/account/login"); + noLoginUrls.add("/xboe/account/boelogin"); + noLoginUrls.add("/xboe/account/mobile-login"); + noLoginUrls.add("/xboe/account/logout"); + noLoginUrls.add("/xboe/system/captcha"); + noLoginUrls.add("/xboe/system/login"); + noLoginUrls.add("/xboe/system/logout"); + noLoginUrls.add("/xboe/sys/user/sync-all"); + //noLoginUrls.add(""); + } + + @Override + public boolean requireLogin(String url) { + for(String str : noLoginUrls) { + if(url.startsWith(str)) { + return false; + } + } + + if(!url.startsWith("/xboe/") && !url.startsWith("/api/")){ + return false; + } + + return true; + } + +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java index f64c33b2..d26db95e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java @@ -829,6 +829,7 @@ public class CourseManageApi extends ApiBaseController{ if(StringUtils.isBlank(id)){ return badRequest("参数错误"); } + CurrentUser cuser=getCurrent(); try { String mess = courseService.copyCourse(id,refId,refType); if(StringUtils.isBlank(mess)){ 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 fd0e5cff..374641ed 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 @@ -367,11 +367,10 @@ public class CourseServiceImpl implements ICourseService { filters.add(FieldFilters.eq("deleted",false)); filters.add(FieldFilters.eq("enabled",true)); //返回的结果 - QueryBuilder query=QueryBuilder.from(Course.class).addFilters(filters); - if(dto.getTopOrder()!=null) { + if(dto.getTopOrder()!=null){ if(dto.getTopOrder()){ query.addOrder(OrderCondition.desc("isTop")); query.addOrder(OrderCondition.desc("topTime")); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/api/PortalConsoleApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/api/PortalConsoleApi.java index b3ba7f74..9ced8b26 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/api/PortalConsoleApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/api/PortalConsoleApi.java @@ -12,12 +12,10 @@ import com.xboe.account.entity.Account; import com.xboe.account.service.IAccountService; import com.xboe.common.utils.StringUtil; import com.xboe.core.CurrentUser; -import com.xboe.core.IAuthorizationToken; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; import com.xboe.data.dto.UserData; import com.xboe.data.outside.IOutSideDataService; -import com.xboe.module.teacher.entity.Teacher; import com.xboe.module.teacher.service.ITeacherService; import com.xboe.system.organization.entity.Organization; import com.xboe.system.organization.service.IOrganizationService; @@ -35,9 +33,6 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping(value = "/xboe/portal") public class PortalConsoleApi extends ApiBaseController{ - @Autowired - IAuthorizationToken authorizationToken; - @Autowired IUserService userService; @@ -61,7 +56,8 @@ public class PortalConsoleApi extends ApiBaseController{ public JsonResponse> init() { Map map=new HashMap(); try { - Account account = accountService.get(getCurrent().getAccountId()); + CurrentUser cuser=getCurrent(); + Account account = accountService.get(cuser.getAccountId()); if(account==null) { log.error("未找到账号id【"+getCurrent().getAccountId()+"】对应的用户"); return error("账号错误,无此账号"); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/impl/BoeTokenImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/impl/BoeTokenImpl.java index 1471896a..fb4683b5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/impl/BoeTokenImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/impl/BoeTokenImpl.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.springframework.stereotype.Component; @@ -14,6 +13,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.xboe.common.utils.Sha256Mac; import com.xboe.core.IAuthorizationToken; +import lombok.extern.slf4j.Slf4j; + /** * token 与原boe系统相同的生成解析规则 * @@ -37,7 +38,7 @@ public class BoeTokenImpl implements IAuthorizationToken{ //long iat=System.currentTimeMillis()/1000; long iat=System.currentTimeMillis()/1000; payloadMap.put("iat", iat); - long exp=iat+(12*60*60);//过期时间,12个小时过期 + long exp=iat+(2*60*60);//过期时间,2个小时过期 payloadMap.put("exp", exp); payloadMap.put("GivenName", "boeu"); payloadMap.put("permission",""); @@ -97,10 +98,11 @@ public class BoeTokenImpl implements IAuthorizationToken{ } // public static void main(String[] args) { -// -//// Map data=new HashMap(); -//// data.put("userId","DFF192E1-FB7B-11EC-9DDF-005056BD9028");//原系统id -//// data.put("name", "测试账号0001"); +//// +// Map data=new HashMap(); +// data.put("userId","DFF192E1-FB7B-11EC-9DDF-005056BD9028");//原系统id +// data.put("uId", "二期新增加的id"); +// data.put("name", "测试账号0001"); //// //// try { //// @@ -110,18 +112,19 @@ public class BoeTokenImpl implements IAuthorizationToken{ //// }catch(Exception e) { //// e.printStackTrace(); //// } -// +//// // try { // // BoeTokenImpl impl=new BoeTokenImpl(); -//// String token=impl.createToken(data); -//// System.out.println(token); +// String token=impl.createToken(data); +// System.out.println(token); //// //// Map tokenData = impl.readToken(token); // // -// String token="eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJ1SWQiOiI5NTI5NDg2MjY0OTc3MjQ0MTEiLCJ1c2VyTm8iOiIxMjM0NTYwMSIsImlzcyI6Imh0dHA6Ly91LmJvZS5jb20iLCJuYW1lIjoi5Luj5rW35YW0IiwiR2l2ZW5OYW1lIjoiYm9ldSIsImRlcGFydElkIjoiOTg0MTQ3NTY2NTIxNjY3NTg0IiwicGVybWlzc2lvbiI6IiIsImV4cCI6MTY3NTc4MTQwMSwiaWF0IjoxNjc1NzM4MjAxLCJhaWQiOiI5NTI5NDg2MjY0OTc3MjQ0MTEiLCJ1c2VySWQiOiIwMTU1NTNERC00NDVFLTY5RDQtMzUxRi1ERDlBMUE1NjQyMEUifQ==.d1d8d3e53ece04a8a863d5f0a3c227cea559cc4cfcbc9010a1125f7a11d6e9a0"; +// //String token="eyJhbGciOiJIUzI1NiIsInR5cGUiOiJ0b2tlbiJ9.eyJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVJZCI6OTY1MzQxOTk5NjQzMjM0MzA0LCJ1c2VySWQiOiIwMTU1NTNERC00NDVFLTY5RDQtMzUxRi1ERDlBMUE1NjQyMEUiLCJleHAiOjE2NzkzNjcwOTc1NDF9.1758ccba02926f5e790743857e11f0fc89238cb9c30024530b5d4b3ff8387ad2"; // //String token = "eyJhbGciOiJIUzI1NiIsInR5cGUiOiJ0b2tlbiJ9.eyJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVJZCI6OTY1MzQyMDI3NDk3NjA3MTY4LCJ1c2VySWQiOiI2QjA0OUZBRi1DMzE0LTdDQ0YtMEQyOC0wRDIzRjRDNDI1MzEiLCJleHAiOjE2NzU3NTU4ODYzMzV9.c65d86ccc5feb1c820490d94196f5509b6bb97dce748bc590160c6d8489bde6a"; +// //Map map = impl.readToken(token); // String[] tokens = token.split("\\."); // System.out.println(tokens.length); // String header = new String(Base64.decodeBase64(tokens[0])); @@ -136,12 +139,13 @@ public class BoeTokenImpl implements IAuthorizationToken{ // JsonNode json = om.readTree(payload); // System.out.println(json); // String userId=json.get("userId").asText(); +// String uId=json.get("uId").asText(); // long exp=json.get("exp").asLong(); -// System.out.println("userId="+userId+",exp="+exp); +// System.out.println("userId="+userId+",uId="+uId+",exp="+exp); // }catch(Exception e) { // e.printStackTrace(); // } -// +//// // } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/impl/GetCurrentUserImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/impl/GetCurrentUserImpl.java deleted file mode 100644 index 6879cb3b..00000000 --- a/servers/boe-server-all/src/main/java/com/xboe/school/impl/GetCurrentUserImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.xboe.school.impl; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import com.xboe.core.CurrentUser; -import com.xboe.core.IGetCurrentUser; -import com.xboe.core.SysConstant; - -/** - * 获取当前用户的信息接口的实现 - */ -@Component -public class GetCurrentUserImpl implements IGetCurrentUser{ - - @Override - public CurrentUser get() { - // 如果接口不是从action进入就会没有这些信息 - if(RequestContextHolder.getRequestAttributes() == null){ - return null; - } - HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - CurrentUser info=(CurrentUser)req.getAttribute(SysConstant.KEY_CURRENT_LOGIN_USER); - return info; - } - -} diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/impl/JwtTokenImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/impl/JwtTokenImpl.java deleted file mode 100644 index 42d170f2..00000000 --- a/servers/boe-server-all/src/main/java/com/xboe/school/impl/JwtTokenImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.xboe.school.impl; - -import java.util.Calendar; -import java.util.HashMap; -import java.util.Map; - -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTCreator.Builder; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.Claim; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.xboe.core.IAuthorizationToken; - -/** - * 认证token的jwt实现,生成和解析jwt - */ -//@Component -public class JwtTokenImpl implements IAuthorizationToken { - - - private static String jwtIssuer = "xboe"; - - //private static String SignKey="$J#F@f3@7G!D"; - private static String SignKey = "JDF_BOE";//采用与原系统保持一致 - - - @Override - public String createToken(Map params) throws Exception { - - HashMap map = new HashMap<>(); //自定义header - - Calendar insCalendar = Calendar.getInstance(); - insCalendar.add(Calendar.SECOND, 12 * 60 * 60); //存储时间为800s// 指令令牌过期时间 - Builder signBuilder = JWT.create().withHeader(map).withExpiresAt(insCalendar.getTime()); - - signBuilder.withIssuer(jwtIssuer).withSubject("subject");//谁创建了令牌并签署了它 - - for (String key : params.keySet()) { - signBuilder.withClaim(key, params.get(key)); - } - String sign = signBuilder.sign(Algorithm.HMAC256(SignKey));// 签名 - //System.out.println(sign); - return sign; - } - - @Override - public Map readToken(String token) throws Exception { - //System.out.println(token); - JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SignKey)).build(); - DecodedJWT verify = jwtVerifier.verify(token); - - //System.out.println("token过期时间:"+verify.getExpiresAt()); - // 时间过期返回null - Calendar insCalendar = Calendar.getInstance(); - if (insCalendar.getTime().before(verify.getExpiresAt())) { - Map map = verify.getClaims(); - Map result = new HashMap(); - for (String key : map.keySet()) { - String value = map.get(key).asString(); - result.put(key, value); - //System.out.print(key+"="+value); - } - - return result; - } - return null; - } - - - -} diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/StudyCourseDao.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/StudyCourseDao.java index 0c943c27..2de719e8 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/StudyCourseDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/StudyCourseDao.java @@ -28,6 +28,7 @@ public class StudyCourseDao extends BaseDao { * @param total */ public void finishCheck(String studyId,String courseId,Integer total){ + LocalDateTime now=LocalDateTime.now(); //已完成的内容 int n=scItemDao.count(FieldFilters.eq("studyId",studyId),FieldFilters.eq("status",StudyCourseItem.STATUS_FINISH)); if(total==null) { @@ -40,7 +41,8 @@ public class StudyCourseDao extends BaseDao { //自主报名的课程,代表学习完成 super.updateMultiFieldById(studyId, UpdateBuilder.create("progress",100f), - UpdateBuilder.create("lastTime",LocalDateTime.now()), + UpdateBuilder.create("lastTime",now), + UpdateBuilder.create("finishTime",now), UpdateBuilder.create("status",StudyCourse.STATUS_FINISH)); }else { super.updateMultiFieldById(studyId, diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index 1e9fe427..0f457a3e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -158,12 +158,25 @@ public class StudyServiceImpl implements IStudyService{ @Transactional public void updateProcess(String studyContentId,String studyId, String courseId,Integer total, Integer progress) { int status=StudyCourseItem.STATUS_STUDYING; + LocalDateTime now=LocalDateTime.now(); if(progress.intValue()==100) { status=StudyCourseItem.STATUS_FINISH; + scItemDao.updateMultiFieldById(studyContentId, + UpdateBuilder.create("progress",progress), + UpdateBuilder.create("lastTime",now), + UpdateBuilder.create("finishTime",now), + UpdateBuilder.create("status",status)); + //检查是否全部学习完成 + scDao.finishCheck(studyId,courseId,total); + }else { + scItemDao.updateMultiFieldById(studyContentId, + UpdateBuilder.create("progress",progress), + UpdateBuilder.create("lastTime",now), + UpdateBuilder.create("status",status)); } - scItemDao.updateMultiFieldById(studyContentId,UpdateBuilder.create("progress",progress),UpdateBuilder.create("status",status)); - //检查是否全部学习完成 - scDao.finishCheck(studyId,courseId,total); + + + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/system/filter/AuthenticationFilter.java b/servers/boe-server-all/src/main/java/com/xboe/system/filter/AuthenticationFilter.java deleted file mode 100644 index 51d33584..00000000 --- a/servers/boe-server-all/src/main/java/com/xboe/system/filter/AuthenticationFilter.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.xboe.system.filter; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.xboe.core.CurrentUser; -import com.xboe.core.JsonResponse; -import com.xboe.core.api.TokenProxy; -import com.xboe.standard.BaseConstant; -import com.xboe.system.user.entity.User; -import com.xboe.system.user.service.IUserService; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Map; - -/** - * 认证过滤器 - */ -@Component -@Order(100) -public class AuthenticationFilter extends OncePerRequestFilter { - -// private static String urls="/xboe"; - -// @Autowired(required = false) -// ICurrentUserStorage storage; -// -// @Autowired(required = false) -// private IApiUrlSecurityFilter urlFilters; - - @Autowired - IUserService userService; - -// @Autowired -// IAuthorizationToken authorizationToken; - -// @Override -// public void destroy() { -// -// } - - private void error(HttpServletResponse response,int code,String message) throws IOException { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonResponse rr = new JsonResponse(); - rr.setStatus(code); - rr.setMessage(message); - String json = mapper.writeValueAsString(rr); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application/json; charset=utf-8"); - response.getWriter().write(json); - response.flushBuffer(); - } - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException { - String url = request.getServletPath(); - //当前先写固定的url判断 - //以下是针对于url规划的判断,这里简写 - if(url.startsWith("/inner/data") || url.startsWith("/xboe/account/captcha") || url.startsWith("/xboe/account/login") || url.startsWith("/xboe/account/boelogin") || url.startsWith("/xboe/account/mobile-login") || url.startsWith("/xboe/account/logout") || url.startsWith("/xboe/system/captcha") || url.startsWith("/xboe/system/logout") || url.startsWith("/xboe/system/login") || url.startsWith("/xboe/sys/user/sync-all")){ - filterChain.doFilter(request, response); - return; - } - if(!url.startsWith("/xboe/") && !url.startsWith("/api/")){ - filterChain.doFilter(request, response); - }else { - String token = TokenProxy.getToken(request); - //System.out.println("token="+token); - if(StringUtils.isBlank(token)){ - error(response,401,"您还未登录,请重新登录"); - return; - } - //检查token的格式 - - Map tokenData; - try { - //System.out.println("token"); - //System.out.println(token); - tokenData = TokenProxy.instance().readToken(token); - if(tokenData==null) { - error(response,401,"您还未登录或登录已超时,请重新登录"); - return; - } - - CurrentUser cuser=convertByMap(tokenData); - - //先从tokenData中读取,如果没有再到存储中读取,如果都没有,就返回未登录的错误 - //当前没有在本地做存储,所以这里不再做处理 -// if(cuser==null) { -// if(storage!=null) { -// cuser=storage.read(request,token); -// } -// } - if(cuser==null) { - // 判断token中获取的值是否当前系统的,不是则告诉前端来获取 - if(tokenData.containsKey("uId")) { - error(response,302,"token 错误"); - return; - } - error(response,401,"请重新登录"); - return; - } -// String levelStr=tokenData.get("alevel"); -// if(levelStr!=null) { -// request.setAttribute(XaskConstant.KEY_CURRENT_API_LEVEL,Integer.valueOf(levelStr)); -// }else { -// request.setAttribute(XaskConstant.KEY_CURRENT_API_LEVEL,0); -// } - request.setAttribute(BaseConstant.KEY_CURRENT_LOGIN_USER,cuser); - - filterChain.doFilter(request, response); - } catch (Exception e) { -// e.printStackTrace(); - error(response,401,"请重新登录"); - return; - } - } - } - - private CurrentUser convertByMap(Map data) { - if(!data.containsKey("aid")) { - //修改为新的接口,通过uId获取 - if(data.containsKey("uId")) { - User user = userService.get(data.get("uId")); - if(user != null){ - CurrentUser cuser=new CurrentUser(); - cuser.setAccountId(user.getId()); - cuser.setName(user.getName()); - cuser.setCode(user.getUserNo()); - cuser.setDepartId(user.getDepartId()); - return cuser; - }else { - return null; - } - } -// if(data.containsKey("userId")) { -// User user = userService.getBySysId(data.get("userId")); -// if(user != null){ -// CurrentUser cuser=new CurrentUser(); -// cuser.setAccountId(user.getId()); -// cuser.setName(user.getName()); -// cuser.setCode(user.getUserNo()); -// cuser.setDepartId(user.getDepartId()); -// return cuser; -// }else { -// return null; -// } -// } - return null; - } - //此处用于本地登录的情况,直接从token中获取,不需要再查询一次了 - CurrentUser cuser=new CurrentUser(); - cuser.setAccountId(data.get("aid")); - cuser.setName(data.get("name")); - cuser.setCode(data.get("userNo")); -// cuser.setOrgId(data.get("orgId")); - cuser.setDepartId(data.get("departId")); - return cuser; - } -} diff --git a/servers/boe-server-all/src/main/resources/application-dev.properties b/servers/boe-server-all/src/main/resources/application-dev.properties index c2fc13c6..3b9f7f30 100644 --- a/servers/boe-server-all/src/main/resources/application-dev.properties +++ b/servers/boe-server-all/src/main/resources/application-dev.properties @@ -43,6 +43,7 @@ xboe.externalinterface.url.system=http://localhost:9091 ## 新增加的教师的内部调用接口 xboe.old.base.url=https://u-pre.boe.com +# 用户中心的接口配置 xboe.server.userbasic.url=https://u-pre.boe.com/userbasic ## 用户统计接口的api地址 From fbcd4002c7c3714fb8f0ae7b51e94f7eab8bb98d Mon Sep 17 00:00:00 2001 From: daihh Date: Fri, 24 Mar 2023 17:05:05 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=9D=A2=E6=8E=88?= =?UTF-8?q?=E5=9C=B0=E7=82=B9=E5=92=8C=E4=B8=8A=E8=AF=BE=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xboe/module/course/dto/CourseStudyDto.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java b/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java index 21e1a446..adafe6a0 100644 --- a/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java +++ b/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java @@ -45,4 +45,14 @@ public class CourseStudyDto { * 10-报名未审核 20-报名被拒绝 30-报名审核通过-字段新,应管理端需求增加 */ private Integer applyStatus; + + /** + * 应管理端需求,增加上课时间 + */ + private Integer attendCourseTime; + + /** + * 应管理端需求,增加面授地点 + */ + private String courseAddress; } From 6d846f56c3bc109395b0cd119f278264ae18c920 Mon Sep 17 00:00:00 2001 From: daihh Date: Fri, 24 Mar 2023 17:05:17 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=9D=A2=E6=8E=88?= =?UTF-8?q?=E5=9C=B0=E7=82=B9=E5=92=8C=E4=B8=8A=E8=AF=BE=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java index e4060c65..f0e4bcec 100644 --- a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java +++ b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java @@ -82,6 +82,8 @@ public class CourseStudyElasticsearchImpl implements ICourseStudySearch{ builder.field("status").startObject().field("type", "integer").endObject(); builder.field("progress").startObject().field("type", "integer").endObject(); builder.field("applyStatus").startObject().field("type", "integer").endObject(); + builder.field("attendCourseTime").startObject().field("type", "integer").endObject(); + builder.field("courseAddress").startObject().field("type", "keyword").endObject(); builder.endObject(); builder.endObject(); From 25022efafb5ef56a989952085d12052d1089b8f5 Mon Sep 17 00:00:00 2001 From: daihh Date: Tue, 28 Mar 2023 16:08:34 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=A4=8D=E5=88=B6=E7=9A=84bug=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/module/course/api/CourseFileApi.java | 5 + .../module/course/api/CourseManageApi.java | 2 +- .../com/xboe/module/course/entity/Course.java | 4 + .../xboe/module/course/entity/CourseFile.java | 2 +- .../module/course/service/ICourseService.java | 7 +- .../service/impl/CourseServiceImpl.java | 138 +++++++++++------- .../xboe/school/study/api/StudyCourseApi.java | 75 ++++++---- .../school/study/dto/StudyContentDto.java | 3 + .../school/study/service/IStudyService.java | 12 +- .../study/service/impl/StudyServiceImpl.java | 29 +++- .../service/impl/StudySignupServiceImpl.java | 1 + 11 files changed, 191 insertions(+), 87 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFileApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFileApi.java index 9b6bcefb..5e2517f5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFileApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFileApi.java @@ -260,6 +260,11 @@ public class CourseFileApi extends ApiBaseController { file.setDecoder(m.getVideo().getDecoder()); file.setVideoHeight(m.getVideo().getSize().getHeight()); file.setVideoWidth(m.getVideo().getSize().getWidth()); + + if(StringUtils.isBlank(file.getDecoder()) || !file.getDecoder().equals("h264")) { + log.error("编码格式不是h264,不能上传"); + return error("编码格式不是h264,请先转码再上传",""); + } } } catch (Exception e) { log.error("读取视频时长错误"); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java index d26db95e..ee3b25d9 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java @@ -831,7 +831,7 @@ public class CourseManageApi extends ApiBaseController{ } CurrentUser cuser=getCurrent(); try { - String mess = courseService.copyCourse(id,refId,refType); + String mess = courseService.copyCourse(id,refId,refType,cuser.getAccountId(),cuser.getName()); if(StringUtils.isBlank(mess)){ return success(true); }else{ diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java index 8ea29153..92815e8e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java @@ -135,6 +135,10 @@ public class Course extends BaseEntity { @Column(name = "org_id",length = 20) private String orgId; + /**复制的课程的来源id*/ + @Column(name = "copy_id",length = 20) + private String copyId; + /** * 企业ID, 多企业使用 */ diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseFile.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseFile.java index f9c75d37..f1bf88c5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseFile.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseFile.java @@ -91,7 +91,7 @@ public class CourseFile extends BaseEntity { private Integer duration; /** - * 编码格式 + * 编码格式,目前只限 h264 * */ @Column(name = "decoder",length = 20) private String decoder; 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 3fdf633c..b4271594 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 @@ -130,8 +130,13 @@ public interface ICourseService { /** * 复制课程 * @param id + * @param refId + * @param refType + * @param aid + * @param aname + * @return */ - String copyCourse(String id,String refId,String refType); + String copyCourse(String id,String refId,String refType,String aid,String aname); /** * 更新课程内容,是否记录修改日志 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 374641ed..78fdd504 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 @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import org.apache.commons.lang3.StringUtils; +import org.hibernate.mapping.IdGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -21,6 +22,7 @@ import com.xboe.TempFilterConfig; import com.xboe.account.service.IAccountService; import com.xboe.common.OrderCondition; import com.xboe.common.PageList; +import com.xboe.common.beans.KeyValue; import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.StringUtil; import com.xboe.core.event.IEventDataSender; @@ -1494,7 +1496,7 @@ public class CourseServiceImpl implements ICourseService { @Transactional(propagation = Propagation.REQUIRED) @Override - public String copyCourse(String id,String refId,String refType) { + public String copyCourse(String id,String refId,String refType,String aid,String aname) { //复制课程,boe_course,boe_course_content,boe_course_homework,boe_course_section,boe_course_teacher,boe_course_exam // insert info select List sectionList = courseSectionDao.findList("courseId", id); @@ -1512,18 +1514,19 @@ public class CourseServiceImpl implements ICourseService { String newId = IDGenerator.generate(); String courseName = this.courseName(id); + LocalDateTime time = LocalDateTime.now(); String mess=null; if(courseName.length()<96) { - LocalDateTime time = LocalDateTime.now(); - String sql = "insert into boe_course(id,ref_id,ref_type,visible,sys_create_aid,sys_create_by,sys_create_time,deleted,sys_update_by," + + + String sql = "insert into boe_course(id,org_id,copy_id,ref_id,ref_type,visible,sys_create_aid,sys_create_by,sys_create_time,deleted,sys_update_by," + "sys_update_time,sys_version,comments,cover_img,dead_time,device,enable_remark,enabled," + "erasable,favorites,for_scene,for_users,is_top,keywords,name,open_object," + "overview,pass_formula,praises,publish_time,published,res_owner1,res_owner2," + "res_owner3,score,score_formula,shares,source,study_time,studys,summary," + "sys_type1,sys_type2,sys_type3,tags,top_time,trample_count,type,value,views," + "order_study,status)" + - "select '" + newId + "','"+refId+"','"+refType+"',"+visible+",sys_create_aid,sys_create_by,'" + time + "',deleted,sys_update_by," + - "'" + time + "',sys_version,comments,cover_img,dead_time,device,enable_remark,enabled," + + "select '" + newId + "',org_id,'"+id+"','"+refId+"','"+refType+"',"+visible+",'"+aid+"','"+aname+"','" + time + "',0,'"+aname+"'," + + "'" + time + "',1,comments,cover_img,dead_time,device,enable_remark,enabled," + "erasable,0,for_scene,for_users,0,keywords,'" + courseName + "(1)" + "',open_object," + "overview,pass_formula,0,publish_time,0,res_owner1,res_owner2," + "res_owner3,score,score_formula,0,source,study_time,0,summary," + @@ -1532,19 +1535,47 @@ public class CourseServiceImpl implements ICourseService { courseDao.sqlUpdate(sql, id); //课程章节复制,因为微课是没有章的,所以这里要判断 - LocalDateTime contentTime = LocalDateTime.now(); + if(sectionList.isEmpty()) { - //课程内容复制 - - String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + - "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + - "content_type,course_id,csection_id,duration,sort_index)" + - "select UUID_SHORT(),sys_create_aid,sys_create_by,'" + contentTime + "'," + - "deleted,sys_update_by,'" + contentTime + "',sys_version,content," + - "content_name,content_refid,content_type,'" + newId + "','',duration,sort_index " + - "from boe_course_content where course_id=?1"; - courseContentDao.sqlUpdate(sqlContent, id); + //查出所有的内容,然后再一个一个复制(因为要复制关联的内容) + List contentIds= courseContentDao.findListField("id",FieldFilters.eq("courseId", id),FieldFilters.eq("deleted", false)); + for(Object obj :contentIds) { + String oldId=(String)obj; + String newContentId=IDGenerator.generate(); + String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + + "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + + "content_type,course_id,csection_id,duration,sort_index)" + + "select '"+newContentId+"','"+aid+"','"+aname+"','" + time + "'," + + "deleted,'"+aname+"','" + time + "',1,content," + + "content_name,content_refid,content_type,'" + newId + "','',duration,sort_index " + + "from boe_course_content where id=?1"; + courseContentDao.sqlUpdate(sqlContent, oldId); + + //课程作业复制 + String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + + "file,name,submit_mode)" + + "SELECT UUID_SHORT(),'"+aid+"','"+aname+"','" + time + "'," + + "deleted,'"+aname+"','" + time + "',sys_version,content,'"+newContentId+"','" + newId + "',dead_time," + + "file,name,submit_mode from boe_course_homework where content_id=?1"; + courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork, oldId); + + //课程考试信息复制 + String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + + "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + + "scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times)" + + "select UUID_SHORT(),'"+aid+"','"+aname+"'," + + "'" + time + "',deleted,'"+aname+"','" + time + "'," + + "1,arrange,'"+newContentId+"'," + + "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + + "random_mode,scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times from boe_course_exam where content_id=?1"; + courseExamDao.sqlUpdate(sqlExam, oldId); + } }else { + List contentIdSectionIds= courseContentDao.findKeyValueList("id","csectionId", FieldFilters.eq("courseId", id),FieldFilters.eq("deleted", false)); for(CourseSection csection : sectionList) { //生成新的章的id String newSectionId = IDGenerator.generate(); @@ -1555,50 +1586,55 @@ public class CourseServiceImpl implements ICourseService { courseSectionDao.sqlUpdate(sqlSection, csection.getId()); //课程内容复制 + for(KeyValue kv : contentIdSectionIds) { + if(!kv.getValue().equals(csection.getId())) { + continue; + } + String newContentId=IDGenerator.generate(); + String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + + "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + + "content_type,course_id,csection_id,duration,sort_index)" + + "select '"+newContentId+"','"+aid+"','"+aname+"','" + time + "'," + + "deleted,'"+aname+"','" + time + "',sys_version,content," + + "content_name,content_refid,content_type,'" + newId + "','"+newSectionId+"',duration,sort_index " + + "from boe_course_content where id=?1"; + courseContentDao.sqlUpdate(sqlContent,kv.getKey()); + + //课程作业复制 + String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + + "file,name,submit_mode)" + + "SELECT UUID_SHORT(),'"+aid+"','"+aname+"','" + time + "'," + + "deleted,'"+aname+"','" + time + "',sys_version,content,'"+newContentId+"','" + newId + "',dead_time," + + "file,name,submit_mode from boe_course_homework where content_id=?1 and course_id=?2"; + courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork,kv.getKey(),id); + + //课程考试信息复制 + String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + + "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + + "scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times)" + + "select UUID_SHORT(),'"+aid+"','"+aname+"'," + + "'" + time + "',deleted,'"+aname+"','" + time + "'," + + "1,arrange,'"+newContentId+"'," + + "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + + "random_mode,scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times from boe_course_exam where content_id=?1 and course_id=?2"; + courseExamDao.sqlUpdate(sqlExam,kv.getKey(),id); + } - String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + - "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + - "content_type,course_id,csection_id,duration,sort_index)" + - "select UUID_SHORT(),sys_create_aid,sys_create_by,'" + contentTime + "'," + - "deleted,sys_update_by,'" + contentTime + "',sys_version,content," + - "content_name,content_refid,content_type,'" + newId + "','"+newSectionId+"',duration,sort_index " + - "from boe_course_content where course_id=?1 and csection_id=?2"; - courseContentDao.sqlUpdate(sqlContent, id,csection.getId()); } } - //课程作业复制 - LocalDateTime homeWordTime = LocalDateTime.now(); - String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + - "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + - "file,name,submit_mode)" + - "SELECT UUID_SHORT(),sys_create_aid,sys_create_by,'" + homeWordTime + "'," + - "deleted,sys_update_by,'" + homeWordTime + "',sys_version,content,content_id,'" + newId + "',dead_time," + - "file,name,submit_mode from boe_course_homework where course_id=?1"; - courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork, id); - //课程任课教师复制 - LocalDateTime teacherTime = LocalDateTime.now(); String sqlTeacher = "insert into boe_course_teacher(id,sys_create_aid,sys_create_by,sys_create_time," + "course_id,teacher_id,teacher_name)" + - "SELECT UUID_SHORT(),sys_create_aid,sys_create_by," + - "'" + teacherTime + "','" + newId + "',teacher_id," + + "SELECT UUID_SHORT(),'"+aid+"','"+aname+"'," + + "'" + time + "','" + newId + "',teacher_id," + "teacher_name from boe_course_teacher where course_id=?1"; courseTeacherDao.sqlUpdate(sqlTeacher, id); -// 课程考试信息复制 - LocalDateTime examTime = LocalDateTime.now(); - String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + - "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + - "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + - "scoring_type,show_analysis,show_answer,test_duration," + - "test_name,times)" + - "select UUID_SHORT(),sys_create_aid,sys_create_by," + - "'" + examTime + "',deleted,sys_update_by,'" + examTime + "'," + - "sys_version,arrange,content_id," + - "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + - "random_mode,scoring_type,show_analysis,show_answer,test_duration," + - "test_name,times from boe_course_exam where course_id=?1"; - courseExamDao.sqlUpdate(sqlExam, id); + } else{ mess="长度超出范围"; diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java index 4d677279..9ef5f4d7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java @@ -245,18 +245,22 @@ public class StudyCourseApi extends ApiBaseController{ if(StringUtils.isBlank(sci.getContentId())){ return error("参数错误:内容"); } - LocalDateTime now=LocalDateTime.now(); +// LocalDateTime now=LocalDateTime.now(); CurrentUser cuser=getCurrent(); - StudyTime st=new StudyTime(); - st.setContentId(sci.getContentId()); - st.setCourseId(sci.getCourseId()); - st.setDuration(5);//增加5秒的学习时长 - st.setEndTime(now); - st.setStartTime(now); - st.setStudentId(cuser.getAccountId()); - st.setStudentName(cuser.getName()); - st.setStudyId(sci.getStudyId()); + if(sci.getDuration()==null) { + sci.setDuration(1);//增加5秒的学习时长,因方法是每5秒调用一次的 + } + +// StudyTime st=new StudyTime(); +// st.setContentId(sci.getContentId()); +// st.setCourseId(sci.getCourseId()); +// st.setDuration(5);//增加5秒的学习时长,因方法是每5秒调用一次的 +// st.setEndTime(now); +// st.setStartTime(now); +// st.setStudentId(cuser.getAccountId()); +// st.setStudentName(cuser.getName()); +// st.setStudyId(sci.getStudyId()); //检查是否已存在 StudyCourseItem item = studyService.checkHas(sci.getStudyId(),sci.getContentId()); @@ -266,7 +270,7 @@ public class StudyCourseApi extends ApiBaseController{ studyService.updateProcess(item.getId(),sci.getStudyId(),sci.getCourseId(), sci.getContentTotal(),sci.getProgress()); } //追加学习时长 - studyService.appendStudyDuration(st); + studyService.appendStudyDuration(sci.getStudyId(),item.getId(),sci.getContentId(),sci.getDuration()); return success(item.getId()); } @@ -283,7 +287,7 @@ public class StudyCourseApi extends ApiBaseController{ studyService.saveStudyInfo(sci); //学习记录成功后处理 - studyService.appendStudyDuration(st); + studyService.appendStudyDuration(sci.getStudyId(),sci.getStudyItemId(),sci.getContentId(),sci.getDuration()); return success(sci.getStudyItemId()); }catch(Exception e) { log.error("记录学习情况错误",e); @@ -292,6 +296,30 @@ public class StudyCourseApi extends ApiBaseController{ } + //更新时长 + + /**追加学习时长*/ + @PostMapping("/study-append-duration") + public JsonResponse appendStudyDuration(String studyId,String studyItemId,String contentId,Integer duration){ + if(StringUtils.isBlank(studyId)){ + return error("参数错误"); + } + if(StringUtils.isBlank(studyItemId) && StringUtils.isBlank(contentId)){ + return error("未指定学习内容"); + } + if(duration==null){ + return error("无学习时长"); + } + try { + studyService.appendStudyDuration(studyId, studyItemId,contentId,duration); + return success(true); + }catch(Exception e) { + log.error("追加学习时长错误",e); + return error("追加学习时长失败",e.getMessage(),false); + } + + } + /** * 学习完成一项课程内容,针对于所有课程内容,不只是音视频,还有scorm及其它的内容 * @param sci @@ -308,36 +336,23 @@ public class StudyCourseApi extends ApiBaseController{ } // LocalDateTime now=LocalDateTime.now(); CurrentUser cuser=getCurrent(); - - //下面的学习时长应该去掉了,不需要 -// StudyTime st=new StudyTime(); -// st.setContentId(sci.getContentId()); -// st.setCourseId(sci.getCourseId()); -// st.setDuration(5);//增加5秒的学习时长 -// st.setEndTime(now); -// st.setStartTime(now); -// st.setStudentId(cuser.getAccountId()); -// st.setStudentName(cuser.getName()); -// st.setStudyId(sci.getStudyId()); - //检查是否已存在 StudyCourseItem item = studyService.checkHas(sci.getStudyId(),sci.getContentId()); if(item!=null) { //如果记录存在,但是进度不到100,未完成情况,就更新进度,一期不会有这种情况 - if(item.getProgress()<100 && sci.getProgress()>item.getProgress()) { - studyService.updateProcess(item.getId(),sci.getStudyId(),sci.getCourseId(), sci.getContentTotal(),sci.getProgress()); + if(item.getProgress()<100) { + studyService.updateProcess(item.getId(),sci.getStudyId(),sci.getCourseId(), sci.getContentTotal(),100); } - //追加学习时长 + //追加学习时长,学习时长是单独的记录,这里不再进行记录 //studyService.appendStudyDuration(st); return success(item.getId()); } - + //如果不存在,就创建 try { sci.setAid(cuser.getAccountId()); sci.setAname(cuser.getName()); + sci.setProgress(100); studyService.saveStudyInfo(sci); - //学习记录成功后处理 - //studyService.appendStudyDuration(st); return success(sci.getStudyItemId()); }catch(Exception e) { log.error("记录学习课程内容完成错误",e); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/dto/StudyContentDto.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/dto/StudyContentDto.java index 8a6ba340..832c4fda 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/dto/StudyContentDto.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/dto/StudyContentDto.java @@ -33,6 +33,9 @@ public class StudyContentDto { /**内容的总数量*/ private Integer contentTotal; + /**学习时长*/ + private Integer duration; + private String aid; private String aname; diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java index d573e708..155ba87e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java @@ -62,11 +62,21 @@ public interface IStudyService { void finishVideoStudyItem(String itemId,String studyId,String courseId,Integer cnum); /** - * 追加学习持续时长 + * 追加学习持续时长,此处理是一期的,有追加记录,二期后追加记录在stat服务中,这里不需要再记录了,所以不建议使用此方法 * @param st */ + @Deprecated void appendStudyDuration(StudyTime st); + /** + * 追加学习时长,通用,无追加记录 + * @param studyId 学习id + * @param studyItemId 学习内容id + * @param courseContentId 课程的内容id + * @param duration 学习时长 + */ + void appendStudyDuration(String studyId,String studyItemId,String courseContentId, int duration); + /** * 根据学习id,得到章节的学习记录情况 * @param studyId diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index 0f457a3e..0e3c9a24 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -72,6 +72,7 @@ public class StudyServiceImpl implements IStudyService{ sci.setStudyId(dto.getStudyId()); sci.setContentId(dto.getContentId()); sci.setContentName(dto.getContentName()); + sci.setStudyDuration(0); sci.setCourseId(dto.getCourseId()); sci.setCsectionId(dto.getCsectionId()); } @@ -80,6 +81,7 @@ public class StudyServiceImpl implements IStudyService{ sci.setProgress(1); sci.setStatus(StudyCourseItem.STATUS_STUDYING); }else if(dto.getProgress().intValue()==100) { + sci.setFinishTime(ldt); sci.setStatus(StudyCourseItem.STATUS_FINISH); sci.setProgress(100); }else { @@ -87,7 +89,6 @@ public class StudyServiceImpl implements IStudyService{ sci.setProgress(dto.getProgress()); } //sci.setProgress(100);//直接设置为学习完成 - sci.setFinishTime(ldt); sci.setLastTime(ldt); scItemDao.saveOrUpdate(sci); @@ -96,6 +97,28 @@ public class StudyServiceImpl implements IStudyService{ scDao.finishCheck(dto.getStudyId(),dto.getCourseId(),dto.getContentTotal()); } + + @Override + @Transactional + public void appendStudyDuration(String studyId,String studyItemId,String courseContentId, int duration) { + + //增加内容的学习时长 + if(StringUtils.isNotBlank(studyItemId)) { + //直接根据id更新 + scItemDao.updateMultiFieldById(studyItemId, UpdateBuilder.create("studyDuration", "studyDuration+"+duration,FieldUpdateType.EXPRESSION)); + }else { + //根据学习id和课程内容id更新 + scItemDao.update(UpdateBuilder.from(StudyCourseItem.class) + .addUpdateField("studyDuration", "studyDuration"+duration,FieldUpdateType.EXPRESSION) + .addFilter(FieldFilters.eq("studyId", studyId)) + .addFilter(FieldFilters.eq("contentId", courseContentId)) + .builder()); + } + + //追加课程的学习时长 + scDao.updateMultiFieldById(studyId, UpdateBuilder.create("totalDuration", "totalDuration+"+duration,FieldUpdateType.EXPRESSION)); + + } @Override @Transactional @@ -243,7 +266,6 @@ public class StudyServiceImpl implements IStudyService{ } //以下是针对于视频课件的处理 - @Override @Transactional public void saveVideoStudyItem(StudyCourseItem sci) { @@ -252,6 +274,9 @@ public class StudyServiceImpl implements IStudyService{ if(sci.getStatus()==null) { sci.setStatus(StudyCourseItem.STATUS_STUDYING); } + if(sci.getStudyDuration()==null) { + sci.setStudyDuration(0); + } scItemDao.save(sci); //更新课程学习的进度 scDao.updateProgress(sci.getStudyId(),sci.getProgress().floatValue()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java index 20a64da3..eb7a7ce9 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java @@ -77,6 +77,7 @@ public class StudySignupServiceImpl implements IStudySignupService{ sc.setCourseId(signup.getCourseId()); sc.setCourseName(signup.getCourseName()); sc.setCourseType(signup.getCourseType()); + sc.setStartTime(now); sc.setFinishTime(null); sc.setLastScore(0f); sc.setProgress(0f); From 25167254b2e4297914d13a749b1b5907674aa8e9 Mon Sep 17 00:00:00 2001 From: daihh Date: Wed, 29 Mar 2023 10:01:04 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E5=AF=B9=E5=AD=A6=E4=B9=A0=E6=97=B6?= =?UTF-8?q?=E9=95=BF=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xboe/school/study/api/StudyCourseApi.java | 2 +- .../xboe/school/study/service/impl/StudyServiceImpl.java | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java index 9ef5f4d7..48264f20 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java @@ -347,7 +347,7 @@ public class StudyCourseApi extends ApiBaseController{ //studyService.appendStudyDuration(st); return success(item.getId()); } - //如果不存在,就创建 + //如果不存在,就创建,这种情况应该不存在 try { sci.setAid(cuser.getAccountId()); sci.setAname(cuser.getName()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index 0e3c9a24..4a8de3eb 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -109,8 +109,8 @@ public class StudyServiceImpl implements IStudyService{ }else { //根据学习id和课程内容id更新 scItemDao.update(UpdateBuilder.from(StudyCourseItem.class) - .addUpdateField("studyDuration", "studyDuration"+duration,FieldUpdateType.EXPRESSION) - .addFilter(FieldFilters.eq("studyId", studyId)) + .addUpdateField("studyDuration", "studyDuration+"+duration,FieldUpdateType.EXPRESSION) + .addFilter(FieldFilters.eq("studyId", studyId)) .addFilter(FieldFilters.eq("contentId", courseContentId)) .builder()); } @@ -197,9 +197,6 @@ public class StudyServiceImpl implements IStudyService{ UpdateBuilder.create("lastTime",now), UpdateBuilder.create("status",status)); } - - - } From 05bdf69f765ef03de9da92dae5085200551fbb38 Mon Sep 17 00:00:00 2001 From: daihh Date: Wed, 29 Mar 2023 10:18:51 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xboe/module/scorm/IScormStudyCallback.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/boe-module-scorm/src/main/java/com/xboe/module/scorm/IScormStudyCallback.java b/modules/boe-module-scorm/src/main/java/com/xboe/module/scorm/IScormStudyCallback.java index 7e46d276..865e0c7a 100644 --- a/modules/boe-module-scorm/src/main/java/com/xboe/module/scorm/IScormStudyCallback.java +++ b/modules/boe-module-scorm/src/main/java/com/xboe/module/scorm/IScormStudyCallback.java @@ -19,4 +19,13 @@ public interface IScormStudyCallback { * @param scoId sco的id */ void finishCallback(String lmsId,String courseId,String contentId,String studentId,String studentName,String scormId,String scoId); + + /** + * 追加学习时长 + * @param lmsId 初始化时传入的学习lmsId,studyId + * @param contentId 初始化时传入的课程内容id + * @param studentId 学生id + * @param duration 学习时长 + */ + void appendStudyDuration(String lmsId, String contentId, String studentId,Integer duration); } From 9840092242acb78cbd5e7884ed361f2200f2fcf6 Mon Sep 17 00:00:00 2001 From: daihh Date: Wed, 29 Mar 2023 10:19:05 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/xboe/school/study/api/StudyCourseApi.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java index 48264f20..bdf5eb23 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java @@ -297,7 +297,6 @@ public class StudyCourseApi extends ApiBaseController{ } //更新时长 - /**追加学习时长*/ @PostMapping("/study-append-duration") public JsonResponse appendStudyDuration(String studyId,String studyItemId,String contentId,Integer duration){ @@ -452,7 +451,7 @@ public class StudyCourseApi extends ApiBaseController{ * @return */ @PostMapping("/study-video-time") - public JsonResponse study(String itemId,Integer videoTime){ + public JsonResponse study(String studyId,String itemId,Integer videoTime){ if(StringUtils.isBlank(itemId)){ return error("参数错误"); @@ -500,7 +499,8 @@ public class StudyCourseApi extends ApiBaseController{ try { //此处需要优化处理, //不能直接记录追加学习时间。以后增加到队列中,后台服务定时从队列中读取, 更新到系统中 - studyService.appendStudyDuration(studyTime); + //studyService.appendStudyDuration(studyTime); + studyService.appendStudyDuration(studyTime.getStudyId(),null,studyTime.getContentId(),studyTime.getDuration()); return success(studyTime.getId()); }catch(Exception e) { log.error("记录学习时长错误",e); From c4a5e0327445f1ea6e8d58655ede766082f60caf Mon Sep 17 00:00:00 2001 From: daihh Date: Wed, 29 Mar 2023 18:25:24 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=83=85=E5=86=B5=E7=9A=84=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/module/course/dto/CourseStudyDto.java | 4 ++-- .../xboe/school/study/api/StudyCourseESApi.java | 16 ++++++++++++++++ .../study/service/IStudyCourseService.java | 7 +++++++ .../service/impl/StudyAssessServiceImpl.java | 1 + .../service/impl/StudyCourseServiceImpl.java | 5 +++++ .../study/service/impl/StudyExamServiceImpl.java | 1 + .../service/impl/StudyHomeWorkServiceImpl.java | 1 + .../service/impl/StudySignupServiceImpl.java | 6 ++++++ 8 files changed, 39 insertions(+), 2 deletions(-) diff --git a/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java b/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java index adafe6a0..6526096b 100644 --- a/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java +++ b/modules/boe-module-course/src/main/java/com/xboe/module/course/dto/CourseStudyDto.java @@ -8,7 +8,7 @@ import lombok.Data; @Data public class CourseStudyDto { - /**id,对于原系统是kid*/ + /**id,系统中标识的学习记录id,本地就是studyId*/ private String id; /**es中的id*/ @@ -49,7 +49,7 @@ public class CourseStudyDto { /** * 应管理端需求,增加上课时间 */ - private Integer attendCourseTime; + private Long attendCourseTime; /** * 应管理端需求,增加面授地点 diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseESApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseESApi.java index 4213181b..ddfa50f8 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseESApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseESApi.java @@ -2,11 +2,13 @@ package com.xboe.school.study.api; import java.io.IOException; import java.time.ZoneOffset; +import java.util.List; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @@ -53,6 +55,20 @@ public class StudyCourseESApi extends ApiBaseController{ } } + @RequestMapping(value="/list-by-ids",method = {RequestMethod.POST}) + public JsonResponse> search(@RequestBody List ids){ + if(ids.isEmpty()) { + return badRequest("无需ids"); + } + try { + List rs=service.findByIds(ids); + return success(rs); + }catch(Exception e) { + log.error("根据id集合查询报名学习错误",e); + return error("查询失败",e.getMessage()); + } + } + @GetMapping("/index-create") public JsonResponse createIndex(){ if(search==null) { diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java index 29c77586..69775d0a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java @@ -79,6 +79,13 @@ public interface IStudyCourseService { * 二次查询 个人/他人 * */ List ids(StudyCourseQuery studyCourseQuery); + + /** + * 配合ES中二次查询显示一些信息 + * @param ids + * @return + */ + List findByIds(List ids); /** * 查询课程内容学习记录 diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyAssessServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyAssessServiceImpl.java index 804a8a3c..ce7de601 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyAssessServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyAssessServiceImpl.java @@ -48,6 +48,7 @@ public class StudyAssessServiceImpl implements IStudyAssessService{ sci.setCourseId(assess.getCourseId()); //sci.setCsectionId(homework.getCsectionId()); sci.setProgress(100);//直接设置为学习完成 + sci.setStatus(StudyCourseItem.STATUS_FINISH); sci.setStartTime(ldt); sci.setAid(assess.getStudentId()); sci.setAname(assess.getStudentName()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java index baa5a13c..6af8416c 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java @@ -704,4 +704,9 @@ public class StudyCourseServiceImpl implements IStudyCourseService{ return rslist; } + @Override + public List findByIds(List ids) { + return studyCourseDao.findList(FieldFilters.in("id", ids)); + } + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java index 65a2c521..6daf2dc7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java @@ -55,6 +55,7 @@ public class StudyExamServiceImpl implements IStudyExamService{ sci.setCourseId(exam.getCourseId()); //sci.setCsectionId(homework.getCsectionId()); sci.setProgress(100);//直接设置为学习完成 + sci.setStatus(StudyCourseItem.STATUS_FINISH);//状态直接更新为已完成 sci.setStartTime(ldt); sci.setAid(exam.getStudentId()); sci.setAname(exam.getStudentName()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java index 48cabc20..f8aa1997 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java @@ -50,6 +50,7 @@ public class StudyHomeWorkServiceImpl implements IStudyHomeWorkService{ sci.setCourseId(homework.getCourseId()); //sci.setCsectionId(homework.getCsectionId()); sci.setProgress(100);//直接设置为学习完成 + sci.setStatus(9);//状态直接更新为已完成 sci.setStartTime(ldt); sci.setAid(homework.getStudentId()); sci.setAname(homework.getStudentName()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java index eb7a7ce9..c8c3b4e3 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java @@ -99,6 +99,12 @@ public class StudySignupServiceImpl implements IStudySignupService{ dto.setCourseType(sc.getCourseType()); dto.setProgress(sc.getProgress()==null? 0:sc.getProgress().intValue()); dto.setSource(2);//固定值,新系统 + //下面添加课程用于本地测试 +// dto.setCourseType(30); +// dto.setSource(3);//来源在线课 +// dto.setApplyStatus(40); +// dto.setCourseAddress("这里是上课地址"); +// dto.setAttendCourseTime(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))); //如果开始时间没有,就使用添加时间 if(sc.getStartTime()!=null) { dto.setStartTime(sc.getStartTime().toEpochSecond(ZoneOffset.of("+8"))); From 41f1ad408519e395c210e67c6af5437924634932 Mon Sep 17 00:00:00 2001 From: daihh Date: Wed, 29 Mar 2023 19:23:48 +0800 Subject: [PATCH 09/14] =?UTF-8?q?ES=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BA=8C=E6=AC=A1=E6=9F=A5=E8=AF=A2=E8=AF=84=E5=88=86=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CourseFullTextApi.java | 16 ++++++++++++++++ .../com/xboe/module/course/entity/Course.java | 6 ++++++ .../module/course/service/ICourseService.java | 7 +++++++ .../course/service/impl/CourseServiceImpl.java | 6 ++++++ 4 files changed, 35 insertions(+) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java index c8979f2f..64da1df4 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java @@ -234,12 +234,28 @@ public class CourseFullTextApi extends ApiBaseController{ PageList coursePageList = fullTextSearch.search(ICourseFullTextSearch.DEFAULT_INDEX_NAME,pager.getStartRow(), pager.getPageSize(),paras); //提取教师信息 List ids=new ArrayList(); + List cids=new ArrayList(); for(CourseFullText c :coursePageList.getList()) { ids.add(c.getId()); + if(c.getSource()==2) { + cids.add(c.getId()); + } + } + List clist=null; + if(!cids.isEmpty()) { + clist=courseService.findStudysScoreByIds(cids); } List teachers = courseService.findTeachersByCourseIds(ids); //注意对于多个教师的情况,这里只是设置第一个教师 for(CourseFullText c :coursePageList.getList()) { + if(clist!=null) { + for(Course c2 : clist) { + if(c2.getId().equals(c.getId())) { + c.setScore(c2.getScore()); + break; + } + } + } for(CourseTeacher ct : teachers) { if(ct.getCourseId().equals(c.getId())) { c.setTeacher(ct.getTeacherName()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java index 92815e8e..5d7fdca3 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java @@ -50,6 +50,12 @@ public class Course extends BaseEntity { } + public Course(String id,Integer studys,Float score) { + this.setId(id); + this.studys=studys; + this.score=score; + } + public Course(String id,Integer type,String name,String coverImg, Float score,Integer studys,Integer comments,Integer shares,Integer praises,Integer favorites ,String forUsers,String value,String summary,LocalDateTime publishTime,Boolean isTop) { this.setId(id); 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 b4271594..76e0d693 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 @@ -320,6 +320,13 @@ public interface ICourseService { * 页面二次查询 * */ List ids(List ids); + + /** + * 查询需要的字段 + * @param ids + * @return + */ + List findStudysScoreByIds(List ids); /** 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 78fdd504..24495f2c 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 @@ -1653,6 +1653,12 @@ public class CourseServiceImpl implements ICourseService { courseDao.updateFieldById(id, field, value); } + @Override + public List findStudysScoreByIds(List ids) { + + return courseDao.findListByHql("Select new Course(id,studys,score) from Course where id in(?1)",ids); + } + From 82268c1255d5a0066c39aba353499cb564371433 Mon Sep 17 00:00:00 2001 From: daihh Date: Thu, 30 Mar 2023 10:28:45 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../school/study/service/impl/StudySignupServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java index c8c3b4e3..6209ef9a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudySignupServiceImpl.java @@ -99,10 +99,10 @@ public class StudySignupServiceImpl implements IStudySignupService{ dto.setCourseType(sc.getCourseType()); dto.setProgress(sc.getProgress()==null? 0:sc.getProgress().intValue()); dto.setSource(2);//固定值,新系统 - //下面添加课程用于本地测试 + //下面模拟添加线下课程报名,用于本地测试 // dto.setCourseType(30); -// dto.setSource(3);//来源在线课 -// dto.setApplyStatus(40); +// dto.setSource(3);//来源在线课 +// dto.setApplyStatus(50); // dto.setCourseAddress("这里是上课地址"); // dto.setAttendCourseTime(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))); //如果开始时间没有,就使用添加时间 From 76ea0d137e0cd845365c24e0db8dd7ca0fe44e92 Mon Sep 17 00:00:00 2001 From: daihh Date: Mon, 3 Apr 2023 14:08:14 +0800 Subject: [PATCH 11/14] =?UTF-8?q?ES=E6=90=9C=E7=B4=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xboe/module/elasticsearc/CourseElasticsearchImpl.java | 4 ++-- .../module/elasticsearc/CourseStudyElasticsearchImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java index 77585cd7..7067b9a3 100644 --- a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java +++ b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java @@ -408,8 +408,8 @@ public class CourseElasticsearchImpl implements ICourseFullTextSearch{ // System.out.println(words); BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery(); - keywordQuery.should(QueryBuilders.wildcardQuery("name", "*"+words+"*").boost(9f)); - keywordQuery.should(QueryBuilders.wildcardQuery("teacher", "*"+words+"*").boost(7f)); + keywordQuery.should(QueryBuilders.wildcardQuery("name.keyword", "*"+words+"*").boost(9f)); + keywordQuery.should(QueryBuilders.wildcardQuery("teacher.keyword", "*"+words+"*").boost(7f)); //keywordQuery.should(QueryBuilders.queryStringQuery(words).field("name", 9f));//用此方法无法查询出有转义符的处理 //keywordQuery.should(QueryBuilders.queryStringQuery(words).field("teacher", 8f)); diff --git a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java index f0e4bcec..ad49146b 100644 --- a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java +++ b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseStudyElasticsearchImpl.java @@ -187,7 +187,7 @@ public class CourseStudyElasticsearchImpl implements ICourseStudySearch{ BoolQueryBuilder boolQuery= QueryBuilders.boolQuery(); if(StringUtils.isNotBlank(dto.getCourseName())) { String words=QueryParser.escape(dto.getCourseName()); - boolQuery.filter(QueryBuilders.wildcardQuery("courseName", "*"+words+"*")); + boolQuery.filter(QueryBuilders.wildcardQuery("courseName.keyword", "*"+words+"*")); } if(dto.getCourseType()!=null) { if(dto.getCourseType()==10 || dto.getCourseType()==20) { From 39f925164389d643aa005fb99fd25507f234316f Mon Sep 17 00:00:00 2001 From: daihh Date: Tue, 4 Apr 2023 11:24:39 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=BF=98=E5=8E=9F?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=9F=A5=E8=AF=A2=E7=9A=84=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xboe/module/elasticsearc/CourseElasticsearchImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java index 7067b9a3..77585cd7 100644 --- a/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java +++ b/modules/boe-module-es/src/main/java/com/xboe/module/elasticsearc/CourseElasticsearchImpl.java @@ -408,8 +408,8 @@ public class CourseElasticsearchImpl implements ICourseFullTextSearch{ // System.out.println(words); BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery(); - keywordQuery.should(QueryBuilders.wildcardQuery("name.keyword", "*"+words+"*").boost(9f)); - keywordQuery.should(QueryBuilders.wildcardQuery("teacher.keyword", "*"+words+"*").boost(7f)); + keywordQuery.should(QueryBuilders.wildcardQuery("name", "*"+words+"*").boost(9f)); + keywordQuery.should(QueryBuilders.wildcardQuery("teacher", "*"+words+"*").boost(7f)); //keywordQuery.should(QueryBuilders.queryStringQuery(words).field("name", 9f));//用此方法无法查询出有转义符的处理 //keywordQuery.should(QueryBuilders.queryStringQuery(words).field("teacher", 8f)); From 304d6b11299d8901dc2e8b720220080e47428eeb Mon Sep 17 00:00:00 2001 From: daihh Date: Thu, 6 Apr 2023 15:54:57 +0800 Subject: [PATCH 13/14] =?UTF-8?q?Scorem=E8=AE=B0=E5=BD=95=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E7=8A=B6=E6=80=81=E7=9A=84=E4=BF=AE=E6=94=B9=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study/service/impl/StudyServiceImpl.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index 4a8de3eb..27a92502 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -105,14 +105,24 @@ public class StudyServiceImpl implements IStudyService{ //增加内容的学习时长 if(StringUtils.isNotBlank(studyItemId)) { //直接根据id更新 - scItemDao.updateMultiFieldById(studyItemId, UpdateBuilder.create("studyDuration", "studyDuration+"+duration,FieldUpdateType.EXPRESSION)); +// String hql="Update StudyCourseItem set studyDuration=studyDuration+"+duration+",status=(case when status<2 then 2 else status end) where id=?1"; +// scItemDao.update(hql,studyItemId); + String sql="Update boe_study_course_item set study_duration=study_duration+"+duration+",status=(case when status<2 then 2 else status end) where id=?1"; + scItemDao.sqlUpdate(sql,studyItemId); + //scItemDao.updateMultiFieldById(studyItemId, UpdateBuilder.create("studyDuration", "studyDuration+"+duration,FieldUpdateType.EXPRESSION)); + }else { //根据学习id和课程内容id更新 - scItemDao.update(UpdateBuilder.from(StudyCourseItem.class) - .addUpdateField("studyDuration", "studyDuration+"+duration,FieldUpdateType.EXPRESSION) - .addFilter(FieldFilters.eq("studyId", studyId)) - .addFilter(FieldFilters.eq("contentId", courseContentId)) - .builder()); +// scItemDao.update(UpdateBuilder.from(StudyCourseItem.class) +// .addUpdateField("studyDuration", "studyDuration+"+duration,FieldUpdateType.EXPRESSION) +// .addFilter(FieldFilters.eq("studyId", studyId)) +// .addFilter(FieldFilters.eq("contentId", courseContentId)) +// .builder()); +// +// String hql="Update StudyCourseItem set studyDuration=studyDuration+"+duration+",status=(case when status<2 then 2 else status end) where studyId=?1 and contentId=?2"; +// scItemDao.update(hql,studyId,courseContentId); + String sql="Update boe_study_course_item set study_duration=study_duration+"+duration+",status=(case when status<2 then 2 else status end) where study_id=?1 and content_id=?2"; + scItemDao.sqlUpdate(sql,studyId,courseContentId); } //追加课程的学习时长 From 2a2b508fc8bbcd72bbfebcf1ff9f4ee167344dc5 Mon Sep 17 00:00:00 2001 From: daihh Date: Thu, 6 Apr 2023 16:13:27 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E6=8F=90=E4=BA=A4Scorm=E8=AF=BE=E4=BB=B6?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E7=8A=B6=E6=80=81=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xboe/school/study/service/impl/StudyServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index 27a92502..b2b2042c 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -126,7 +126,10 @@ public class StudyServiceImpl implements IStudyService{ } //追加课程的学习时长 - scDao.updateMultiFieldById(studyId, UpdateBuilder.create("totalDuration", "totalDuration+"+duration,FieldUpdateType.EXPRESSION)); + //scDao.updateMultiFieldById(studyId, UpdateBuilder.create("totalDuration", "totalDuration+"+duration,FieldUpdateType.EXPRESSION)); + + String sql="Update boe_study_course set total_duration=total_duration+"+duration+",status=(case when status<2 then 2 else status end),progress=(case when progress=0 then 1 else progress end) where id=?1"; + scDao.sqlUpdate(sql,studyId); }