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 a1ce43a0..0d6e4d54 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 @@ -405,8 +405,10 @@ public class CourseElasticsearchImpl implements ICourseFullTextSearch{ BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery(); keywordQuery.should(QueryBuilders.wildcardQuery("name", "*"+words+"*").boost(9f)); keywordQuery.should(QueryBuilders.wildcardQuery("teacher", "*"+words+"*").boost(7f)); - keywordQuery.should(QueryBuilders.queryStringQuery("*" + words + "*").field("keywords")); - keywordQuery.should(QueryBuilders.queryStringQuery(words).field("keywords")); +// keywordQuery.should(QueryBuilders.queryStringQuery("*" + words + "*").field("keywords")); +// keywordQuery.should(QueryBuilders.queryStringQuery(words).field("keywords")); + keywordQuery.should(QueryBuilders.matchPhraseQuery("keywords", words)); + keywordQuery.should(QueryBuilders.fuzzyQuery("keywords", words)); //keywordQuery.should(QueryBuilders.queryStringQuery(words).field("name", 9f));//用此方法无法查询出有转义符的处理 //keywordQuery.should(QueryBuilders.queryStringQuery(words).field("teacher", 8f)); @@ -603,27 +605,26 @@ public class CourseElasticsearchImpl implements ICourseFullTextSearch{ SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.from(startRow); sourceBuilder.size(pageSize); - + BoolQueryBuilder boolQuery=createQuery(paras); if(boolQuery.hasClauses()) { sourceBuilder.query(boolQuery); } - + //排序 if(StringUtils.isBlank(paras.getKeywords()) && paras.getOrderType()!=3) { sourceBuilder.sort("isTop",SortOrder.DESC); //sourceBuilder.sort("topTime",SortOrder.DESC); } if(paras.getOrderType()!=null) { - if(paras.getOrderType()==1) { - sourceBuilder.sort("publishTime",SortOrder.DESC); - }else if(paras.getOrderType()==2) { - sourceBuilder.sort("studies",SortOrder.DESC); - } - }else if (paras.getOrderType()==3){ - sourceBuilder.sort("score",SortOrder.DESC); + if (paras.getOrderType() == 1) { + sourceBuilder.sort("publishTime", SortOrder.DESC); + } else if (paras.getOrderType() == 2) { + sourceBuilder.sort("studies", SortOrder.DESC); + } else if (paras.getOrderType() == 3) { + sourceBuilder.sort("score", SortOrder.DESC); } - } + } sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); diff --git a/servers/boe-server-all/pom.xml b/servers/boe-server-all/pom.xml index 0ba96cba..e0406c88 100644 --- a/servers/boe-server-all/pom.xml +++ b/servers/boe-server-all/pom.xml @@ -38,6 +38,11 @@ ${nacos-client.version} + + org.apache.poi + poi-ooxml + 4.0.1 + cn.hutool hutool-all diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java index 93dd6b78..917f8547 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java @@ -31,29 +31,38 @@ public class ThirdApi { @Value("${userBasic.searchUserList}") private String searchUserListUrl; + @Value("${statApi.userdynamicList}") + private String userdynamicListUrl; - public List getAllUserList(UserListParam userListParam, String token) { + + public List getAllUserList(UserListParam userListParam, String token) { log.info("获取用户"); String resp = Optional.ofNullable(HttpRequest.post(searchUserListUrl).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败")); - log.info("获取用户返回值 {}",resp); + UserInfoListRootBean userInfoListRootBean1 = JSONUtil.toBean(resp, UserInfoListRootBean.class); + log.info("userInfoListRootBean1 = " + userInfoListRootBean1); + List list = userInfoListRootBean1.getResult().getList(); + log.info("list = " + list); + + + log.info("获取用户返回值1 {}",resp); return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, UserInfoListRootBean.class).success()) .map(UserInfoListRootBean::getResult) - .map(result -> Opt.ofEmptyAble(result.getUserInfoList()).peek(t -> nextPage(userListParam, token, t, result)).orElse(ListUtil.toList())) + .map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userListParam, token, t, result)).orElse(ListUtil.toList())) .orElse(ListUtil.toList()); } - private void getAllUserList(UserListParam userListParam, String token, List userInfoLists) { + private void getAllUserList(UserListParam userListParam, String token, List userInfoLists) { log.info("获取用户2"); String resp = Optional.ofNullable(HttpRequest.post(searchUserListUrl).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败")); - log.info("获取用户返回值 {}",resp); - Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, UserInfoListRootBean.class).success()).map(UserInfoListRootBean::getResult).map(UserInfoListRootBean.ResultData::getUserInfoList).stream().flatMap(Collection::stream).forEach(userInfoLists::add); + log.info("获取用户返回值2 {}",resp); + Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, UserInfoListRootBean.class).success()).map(UserInfoListRootBean::getResult).map(UserInfoListRootBean.ResultData::getList).stream().flatMap(Collection::stream).forEach(userInfoLists::add); } - private void nextPage(UserListParam userListParam, String token, List userInfoLists, UserInfoListRootBean.ResultData t) { - log.info("获取用户--" + userListParam.getPage()); - if (t.getTotalPage() > userListParam.getPage()) { - REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPage(), t.getTotalPage()).parallel().forEach(i -> getAllUserList(userListParam.withPage(i + 1), token, userInfoLists))).join(); + private void nextPage(UserListParam userListParam, String token, List userInfoLists, UserInfoListRootBean.ResultData t) { + log.info("获取用户--" + userListParam.getPageNo()); + if (t.getTotalPage() > userListParam.getPageNo()) { + REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPageNo(), t.getTotalPage()).parallel().forEach(i -> getAllUserList(userListParam.withPageNo(i + 1), token, userInfoLists))).join(); } } @@ -73,8 +82,8 @@ public class ThirdApi { } private void nextPage(AuditListParam userListParam, List t, Result result, String token) { - if (result.getTotalPage() > userListParam.getPage()) { - REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPage(), result.getTotalPage()).parallel().forEach(i -> getAllAudienceList(userListParam.withPage(i + 1), t, token))).join(); + if (result.getTotalPage() > userListParam.getPageNo()) { + REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPageNo(), result.getTotalPage()).parallel().forEach(i -> getAllAudienceList(userListParam.withPageNo(i + 1), t, token))).join(); } } @@ -83,4 +92,40 @@ public class ThirdApi { Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, AuditRootBean.class).success()).map(AuditRootBean::getResult).map(Result::getList).stream().flatMap(Collection::stream).forEach(list::add); } + public List getAllUserdynamicList(UserdynamicParam userdynamicParam, String token) { + String resp = Optional.ofNullable(HttpRequest.post(userdynamicListUrl).body(JSONUtil.toJsonStr(userdynamicParam)).header("XBOE-Access-Token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败")); + log.error("=1----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + resp ); + return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, DynamicBean.class).success()) + .map(DynamicBean::getResult) + .map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userdynamicParam, t, result, token)).orElse(ListUtil.toList())) + .orElse(ListUtil.toList()); + } + private void nextPage(UserdynamicParam userdynamicParam, List t, UserDynamicResult result, String token) { + log.error("=2----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam ); + if (result.getTotalPages() > userdynamicParam.getPageIndex()) { + REQUEST_TASK.submit(() -> IntStream.range(userdynamicParam.getPageIndex(), result.getTotalPages()).parallel().forEach(i -> getAllUserdynamicList(userdynamicParam.withPageIndex(i + 1), t, token))).join(); + } + } + + private void getAllUserdynamicList(UserdynamicParam userdynamicParam, List list, String token) { + log.error("=3----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam ); + String resp = Optional.ofNullable(HttpRequest.post(usersByAudienceList).body(JSONUtil.toJsonStr(userdynamicParam.builder().pageSize(1000).build())).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败")); + Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, DynamicBean.class).success()).map(DynamicBean::getResult).map(UserDynamicResult::getList).stream().flatMap(Collection::stream).forEach(list::add); + } + + public static void main(String[] args) { + String token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJjb21wYW55Q29kZSI6IkMwMDEiLCJ1SWQiOiI5NjUzNDIwMjc0OTc2MDcxNjgiLCJjb21wYW55SWQiOiIxMDQxNjczOTc3Mzc5OTQ2NDk2IiwibG9naW5JZCI6IjE2ODg0NDg5MjIwNzY0OTE3NzgiLCJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsImV4cCI6MTY5MTM5OTc2NzU1OCwidXNlck5hbWUiOiLmnY7njonlhrAiLCJ1c2VySWQiOiI2QjA0OUZBRi1DMzE0LTdDQ0YtMEQyOC0wRDIzRjRDNDI1MzEifQ==.8b52dcf4d48a790ed258b9ca2b279bb269f5301722095382fbd352705b51c893"; + String resp = Optional.ofNullable(HttpRequest.post("https://u-pre.boe.com/statApi/xboe/m/stat/userdynamic/list").body(JSONUtil.toJsonStr(UserdynamicParam.builder(). + aid(Long.parseLong("965342027497607168")).pageSize(1000).pageIndex(1).build())).header("XBOE-Access-Token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败")); + System.out.println(" resp = " +resp); + DynamicBean a = JSONUtil.toBean(resp, DynamicBean.class); + System.out.println(" a = " +a); + System.out.println(" a = " + a.getResult().getCount()); + List list = a.getResult().getList(); + System.out.println(" list = " +list.size()); + System.out.println(" list = " +list); + + + + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/AuditListParam.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/AuditListParam.java index 32c80e17..fa554cf6 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/vo/AuditListParam.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/AuditListParam.java @@ -9,6 +9,6 @@ import lombok.*; @AllArgsConstructor public class AuditListParam implements Cloneable { private String audienceId; - private Integer page; + private Integer pageNo; private Integer pageSize; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/DynamicBean.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/DynamicBean.java new file mode 100644 index 00000000..e543275c --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/DynamicBean.java @@ -0,0 +1,34 @@ +package com.xboe.api.vo; + + +import cn.hutool.json.JSONUtil; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +@Data +@Slf4j +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DynamicBean { + + private String error; + private String message; + private String permissions; + private UserDynamicResult result; + private int status; + private Date timestamp; + + public DynamicBean success() { + if (this.status != 200) { + log.error("获取受众列表失败----{}", JSONUtil.toJsonPrettyStr(this)); + return null; + } + return this; + } +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserDynamic.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserDynamic.java new file mode 100644 index 00000000..6815e41f --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserDynamic.java @@ -0,0 +1,87 @@ +package com.xboe.api.vo; + +import com.xboe.core.orm.IdEntity; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class UserDynamic extends IdEntity { + + + private static final long serialVersionUID = -2536708166103273425L; + + /** + * 事件动态 + */ + public final static int TYPE_EVENT=1; + + /** + * 其它动态 + */ + public final static int TYPE_OTHER=9; + + /** + * 类型 + * 1表事件动态 2表非事件动态 + * */ + private Integer type; + + /** + * 动态的标题 + */ + private String title; + + /** + * 事件的key + * */ + private String eventKey; + + /** + * 事件id + * */ + private String eventId; + + /** + * 动态月份 + * yyyyMM + * */ + private Integer month; + + /** + * 内容类型 + * */ + private String contentType; + + /** + * 内容id + * */ + private String contentId; + + /** + * 动态内容 + * */ + private String contentInfo; + + /** + * 用户自定义信息 + */ + private String cusInfo; + + /** + * 动态人id + * */ + private String aid; + + /** + * 用户的名称 + */ + private String aname; + /** + * 是否隐藏 + * */ + private Boolean hidden; + private LocalDateTime eventTime; + + +} \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserDynamicResult.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserDynamicResult.java new file mode 100644 index 00000000..c0e2e617 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserDynamicResult.java @@ -0,0 +1,22 @@ +package com.xboe.api.vo; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserDynamicResult { + + private int count; + private int pageSize; + private int totalPages; + private List list; + +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListRootBean.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListRootBean.java index 2c4be964..be825f87 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListRootBean.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListRootBean.java @@ -31,7 +31,7 @@ public class UserInfoListRootBean { private int totalElement; private int totalPage; - private List userInfoList; + private List list; } } \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListVo.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListVo.java new file mode 100644 index 00000000..3f82037c --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserInfoListVo.java @@ -0,0 +1,43 @@ +package com.xboe.api.vo; + + +import lombok.Data; + +@Data +public class UserInfoListVo { + + private long id; + private String bandCode; + private String bandDesc; + private Boolean deleted; + private String departId; + private String description; + private String domainId; + private String departName; + private String duty; + private int employeeStatus; + private String companyId; + private String orgName; + private Integer gender; + private String jobName; + private String kid; + private int learningDuration; + private String mobile; + private String realName; + private String oldDepartId; + private String orgNamePath; + private String orgTreeType; + private String payrollPlaceId; + private String payrollPlaceName; + private long personId; + private String positionMgrLevel; + private String rank; + private long sassId; + private int status; + private String telephoneNo; + private String userNo; + private String email; + private String avatar; + private String positionList; + +} \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserListParam.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserListParam.java index 0f063a3d..164bf818 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserListParam.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserListParam.java @@ -12,8 +12,10 @@ public class UserListParam { private String departId; private String userNo; private String realName; +// @Builder.Default +// private int page = 1; @Builder.Default - private int page = 1; + private int pageNo = 1; @Builder.Default private int pageSize = 10; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserdynamicParam.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserdynamicParam.java new file mode 100644 index 00000000..fa607e37 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserdynamicParam.java @@ -0,0 +1,16 @@ +package com.xboe.api.vo; + +import lombok.*; + +@Data +@Builder +@With +@NoArgsConstructor +@AllArgsConstructor +public class UserdynamicParam { + private Integer pageIndex; + private Integer pageSize = 1000; + private Integer contentType; + private Long aid; + private String hidden; +} \ No newline at end of file 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 848c6816..c48b771e 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 @@ -15,6 +15,8 @@ import com.xboe.module.boecase.vo.CaseExportVo; import com.xboe.module.dict.entity.DictItem; import com.xboe.module.excel.ExportsExcelSenderUtil; +import com.xboe.system.user.dao.UserDao; +import com.xboe.system.user.entity.User; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -58,6 +60,8 @@ public class CasesApi extends ApiBaseController { @Resource private CasesMajorTypeDao casesMajorTypeDao; + @Resource + private UserDao userDao; /** * 用于后台管理 @@ -150,10 +154,20 @@ public class CasesApi extends ApiBaseController { } } + } else { + views = new PageList(); + views.setList(Collections.emptyList()); + views.setPageSize(req.getPageSize()); + views.setCount(0); } return success(views); } + @PostMapping("/caseYears") + public JsonResponse> caseYears() { + List result = casesService.getCaseYears(); + return success(result); + } /** * 案例分页搜索 是否置顶 @@ -242,13 +256,27 @@ public class CasesApi extends ApiBaseController { try { outputStream = response.getOutputStream(); LinkedHashMap map = new LinkedHashMap<>(); +// 标题,摘要,案主姓名,案主工号,案主所在组织全路径,同步时间,查看次数。 map.put("标题","title"); + map.put("摘要","summary"); + map.put("案主姓名","authorName"); + map.put("案主工号","userNo"); + map.put("案主所在组织全路径","department"); + map.put("同步时间","exportDate"); + map.put("查看次数","views"); List list = casesService.managerCaseTitleList(caseVo); List exportVos = new ArrayList<>(); LocalDateTime now = LocalDateTime.now(); for (Cases c:list){ CaseExportVo caseExportVo = new CaseExportVo(); caseExportVo.setTitle(c.getTitle()); + caseExportVo.setSummary(c.getSummary()==null?"":c.getSummary()); + caseExportVo.setAuthorName(c.getAuthorName()==null?"":c.getAuthorName()); + User user = userDao.findOne(FieldFilters.eq("id", c.getAuthorId())); + caseExportVo.setUserNo(user.getUserNo()==null?"":user.getUserNo()); + caseExportVo.setDepartment(c.getDepartment()==null?"":c.getDepartment()); + caseExportVo.setExportDate(now); + caseExportVo.setViews(c.getViews()==null? 0 :c.getViews()); exportVos.add(caseExportVo); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java index 907fd0a9..d70845dd 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; @@ -25,9 +26,9 @@ import com.xboe.module.boecase.vo.BrowseDurationVo; import com.xboe.module.boecase.vo.CasesRecommendLaunchVo; import com.xboe.module.boecase.vo.CasesRecommendPushVo; import com.xboe.module.boecase.vo.CasesRecommendVo; -import com.xboe.module.excel.ExportsExcelSenderUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.streaming.SXSSFSheet; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -35,9 +36,7 @@ import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.OutputStream; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; @@ -138,6 +137,7 @@ public class CasesRecommendApi extends ApiBaseController { // 通过工具类创建writer,默认创建xls格式 ExcelWriter writer = ExcelUtil.getWriter(); writer.writeHeadRow(ListUtil.toList("标题")); + writer.autoSizeColumnAll(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=failData.xls"); ServletOutputStream out = response.getOutputStream(); @@ -166,6 +166,7 @@ public class CasesRecommendApi extends ApiBaseController { if (CollectionUtil.isNotEmpty(dataList)) { writer.write(dataList); } + writer.autoSizeColumnAll(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=failData.xls"); ServletOutputStream out = response.getOutputStream(); @@ -207,7 +208,6 @@ public class CasesRecommendApi extends ApiBaseController { if (StringUtils.isEmpty(token)) { token = request.getHeader("token"); } - return success(iCasesRecommendPushRecordService.launchPush(casesRecommendLaunch, getCurrent(), token)); } @@ -218,50 +218,43 @@ public class CasesRecommendApi extends ApiBaseController { * @throws Exception */ @PostMapping("/info_download") - public void infoDownload(@RequestBody CasesRecommendVo vo, HttpServletResponse response) { + public void infoDownload(@RequestBody CasesRecommendVo vo, HttpServletResponse response) throws Exception { if (StringUtils.isEmpty(vo.getCasesRecommendId())) { throw new RuntimeException("缺少必要参数"); } - try (OutputStream outputStream = response.getOutputStream()) { - // 用个List装表格的所有内容 - // 拼接上列明。我这里用的最土的方法,很不优雅别学我 - LinkedHashMap map = new LinkedHashMap<>(); - map.put("案例名称", "caseTitle"); - map.put("推送用户", "pushUserName"); - map.put("所属组织", "recommendOrgName"); - map.put("推送时间", "pushTime"); - map.put("是否查看", "readFlag"); - map.put("首次查看时间", "readStartTime"); - map.put("总查看时间", "totalReadTime"); + CasesRecommend casesRecommend = iCasesRecommendService.findById(vo.getCasesRecommendId()); - CasesRecommend casesRecommend = iCasesRecommendService.findById(vo.getCasesRecommendId()); - - // 拿取表格里需要的数据 - List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(vo.getCasesRecommendId()); - List exportVos = new ArrayList<>(); - if (CollectionUtil.isNotEmpty(recordList)) { - exportVos = recordList.stream().map(record -> { - CasesRecommendPushRecordExportVo exportVo = new CasesRecommendPushRecordExportVo(); - exportVo.setCaseTitle(record.getCaseTitle()); - exportVo.setPushUserName(record.getPushUserName()); - exportVo.setRecommendOrgName(casesRecommend.getRecommendOrgName()); - exportVo.setPushTime(DateUtil.formatDateTime(record.getPushTime())); - exportVo.setReadFlag(record.getReadFlag() == 1 ? "是" : "否"); - exportVo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime())); - Long browseDuration = casesBrowseService.getBrowseDuration(record.getCaseId(), getCurrent().getAccountId()); - exportVo.setTotalReadTime(browseDuration.toString()); - return exportVo; - }).collect(Collectors.toList()); - } - - response.setContentType("application/octet-stream"); - response.setHeader("Content-disposition", "attachment;filename=casesRecommend.xls"); - ExportsExcelSenderUtil.export(map, exportVos, outputStream, "yyyy-MM-dd HH:mm:ss"); - } catch (Exception e) { - e.printStackTrace(); - log.error("导出失败", e.getMessage()); + // 拿取表格里需要的数据 + List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(vo.getCasesRecommendId()); + List exportVos = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(recordList)) { + exportVos = recordList.stream().map(record -> { + CasesRecommendPushRecordExportVo exportVo = new CasesRecommendPushRecordExportVo(); + exportVo.setCaseTitle(record.getCaseTitle()); + exportVo.setPushUserName(record.getPushUserName()); + exportVo.setRecommendOrgName(casesRecommend.getRecommendOrgName()); + exportVo.setPushTime(DateUtil.formatDateTime(record.getPushTime())); + exportVo.setReadFlag(record.getReadFlag() == 1 ? "是" : "否"); + exportVo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime())); + Long browseDuration = casesBrowseService.getBrowseDuration(record.getCaseId(), getCurrent().getAccountId()); + exportVo.setTotalReadTime(browseDuration.toString()); + return exportVo; + }).collect(Collectors.toList()); } + // 通过工具类创建writer,默认创建xls格式 + BigExcelWriter writer = ExcelUtil.getBigWriter(); + // 设置所有列为自动宽度,不考虑合并单元格 + writer.write(exportVos, true); + SXSSFSheet sheet = (SXSSFSheet) writer.getSheet(); + sheet.trackAllColumnsForAutoSizing(); + writer.autoSizeColumnAll(); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=casesRecommend.xls"); + ServletOutputStream out = response.getOutputStream(); + writer.flush(out, true); + writer.close(); + IoUtil.close(out); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java index dd15c9da..deecfd10 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java @@ -33,38 +33,35 @@ public interface CasesRecordDao extends JpaRepository, JpaSpecifi " or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" + " and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" + - " and if(IFNULL(:#{#condition.majorType},'') !='',b.major_type = :#{#condition.majorType},1=1) " + - " and if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" + - " and if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" + - " and if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" + + " and if(:#{#condition.caseIdsEmpty}, 1=1, b.id in (:#{#condition.caseIds}))" + + " and ("+ + " if(:#{#condition.allOrgEmpty}, 1=1, 1=2)" + + " or if(:#{#condition.org1Empty}, 1=2, b.org_domain_parent in (:#{#condition.org1}))" + + " or if(:#{#condition.org2Empty}, 1=2, b.org_domain_parent2 in (:#{#condition.org2}))" + + " or if(:#{#condition.org3Empty}, 1=2, b.org_domain_parent3 in (:#{#condition.org3}))" + + ")" + " order by a.sys_create_time DESC, a.read_flag ASC) as c group by c.id", countQuery = "select count(*) FROM (select c.* from ( select b.*" + - " from boe_cases_recommend_push_record a INNER JOIN boe_cases b on a.case_id = b.id " + - " where b.deleted=0 and a.push_status = 3 and a.deleted=0 and a.push_user_id= :#{#condition.userId}" + - " and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" + - " or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" + - " or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" + - " or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" + - " or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" + - " or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" + - " or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" + - " and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" + - " and if(IFNULL(:#{#condition.majorType},'') !='' ,b.major_type = :#{#condition.majorType},1=1) " + - " and if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" + - " and if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" + - " and if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" + - " order by a.sys_create_time DESC, a.read_flag ASC ) as c group by c.id) as d") + " from boe_cases_recommend_push_record a INNER JOIN boe_cases b on a.case_id = b.id " + + " where b.deleted=0 and a.push_status = 3 and a.deleted=0 and a.push_user_id= :#{#condition.userId}" + + " and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" + + " or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" + + " or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" + + " or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" + + " or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" + + " or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" + + " or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" + + " and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" + + " and if(:#{#condition.caseIdsEmpty}, 1=1, b.id in (:#{#condition.caseIds}))" + + " and ("+ + " if(:#{#condition.allOrgEmpty}, 1=1, 1=2)" + + " or if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" + + " or if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" + + " or if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" + + ")" + + " order by a.sys_create_time DESC, a.read_flag ASC ) as c group by c.id) as d") Page queryList(Pageable pageable, @Param("condition") CasePageVo casePage); -// @Query(nativeQuery = true, value = "SELECT bc.*, COUNT(bcrpr.case_id) AS recommends1 FROM boe_cases bc LEFT JOIN boe_cases_recommend_push_record bcrpr ON bc.id = bcrpr.case_id" + -// " where bc.deleted = 0" + -// " and if(IFNULL(:#{#caseVo.keyWord},'')!='',bc.title like CONCAT('%',:#{#caseVo.keyWord},'%'),1=1)" + -// " and if(IFNULL(:#{#caseVo.authorName},'')!='',bc.author_name like CONCAT('%',:#{#caseVo.authorName},'%'),1=1)" + -// " and if(IFNULL(:#{#caseVo.orgDomain},'') !='' ,bc.org_domain_parent = :#{#caseVo.orgDomain},1=1) " + -// " and if(IFNULL(:#{#caseVo.excellent},'') !='' ,bc.excellent = :#{#caseVo.excellent},1=1) " + -// " and if(IFNULL(:#{#caseVo.isTop},'') !='' ,bc.is_top = :#{#caseVo.isTop},1=1) " + -// " GROUP BY bc.id ORDER BY bc.sys_create_time desc") -// List exportCase(@Param("caseVo")CaseVo caseVo); @Query("SELECT new Cases(bc.title, bc.authorName, bc.comments, bc.views, bc.praises, bc.shares, bc.favorites, COUNT(bcrpr.caseId), bc.cites, bc.confidentialityLevel) FROM Cases bc LEFT JOIN CasesRecommendPushRecord bcrpr ON bc.id = bcrpr.caseId" + " where bc.deleted = false" + @@ -75,4 +72,8 @@ public interface CasesRecordDao extends JpaRepository, JpaSpecifi " and (:isTop IS NULL or bc.isTop = :isTop)" + " GROUP BY bc.id ORDER BY bc.sysCreateTime desc") List exportCase(String keyWord, String authorName,String orgDomain,Boolean excellent,Boolean isTop); + + + @Query(nativeQuery = true, value ="SELECT DATE_FORMAT(sys_create_time,'%Y') FROM `boe_cases` where deleted = FALSE GROUP BY DATE_FORMAT(sys_create_time,'%Y')") + List caseYears(); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java index 45a20975..619bc489 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java @@ -1,13 +1,9 @@ package com.xboe.module.boecase.dto; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import com.xboe.module.scorm.rte.model.datatype.Int; import lombok.Data; -import org.apache.commons.collections4.CollectionUtils; import java.util.List; -import java.util.stream.Collectors; @Data public class CasePageVo extends PageDto { @@ -63,22 +59,29 @@ public class CasePageVo extends PageDto { */ private String userId; + /** + * 案例ids + */ + private List caseIds; + + + public boolean isCaseIdsEmpty() { + return CollUtil.isEmpty(this.caseIds); + } + /** * 推荐id */ private Long refId; + private List org1; + private List org2; + private List org3; + public boolean isYearsEmpty() { return CollUtil.isEmpty(this.years); } - public List getOrg1() { - if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) { - return orgDomainDtos.stream().map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList()); - } - return null; - } - public boolean isOrg1Empty() { return CollUtil.isEmpty(this.getOrg1()); } @@ -91,18 +94,8 @@ public class CasePageVo extends PageDto { return CollUtil.isEmpty(this.getOrg3()); } - public List getOrg2() { - if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) { - return orgDomainDtos.stream().flatMap(it->it.getChildren().stream()).map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList()); - } - return null; - } - - public List getOrg3() { - if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) { - return orgDomainDtos.stream().flatMap(it->it.getChildren().stream().flatMap(i->i.getChildren().stream())).map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList()); - } - return null; + public boolean isAllOrgEmpty() { + return this.isOrg1Empty() && this.isOrg2Empty() && this.isOrg3Empty(); } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java index 6570c9ee..047b0f58 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java @@ -1,9 +1,8 @@ package com.xboe.module.boecase.dto; import lombok.Data; +import cn.hutool.core.annotation.Alias; -import javax.persistence.Column; -import java.util.Date; @Data public class CasesRecommendPushRecordExportVo { @@ -11,23 +10,29 @@ public class CasesRecommendPushRecordExportVo { /** * 案例标题 */ + @Alias(value = "案例名称") private String caseTitle; /** * 推送用户名称 */ + @Alias(value = "目标用户") private String pushUserName; /**推荐组织名称*/ + @Alias(value = "所属组织") private String recommendOrgName; + @Alias(value = "推送时间") private String pushTime; + @Alias(value = "是否查看") private String readFlag; /** * 首次查看时间 */ + @Alias(value = "首次查看时间") private String readStartTime; + @Alias(value = "总查看时间(分)") private String totalReadTime; - } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java index d2dc937a..151af48b 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java @@ -108,5 +108,7 @@ public interface ICasesService{ List caseIndexV2(CurrentUser current); + List getCaseYears(); + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java index 11f3ca36..28c429f8 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java @@ -85,9 +85,11 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR long tt = System.currentTimeMillis(); for (String orgId : casesRecommendLaunch.getDeptIds()) { UserListParam build = UserListParam.builder().departId(orgId).pageSize(100).build(); - List allUserList = thirdApi.getAllUserList(build, token); + List allUserList = thirdApi.getAllUserList(build, token); + log.info("---------组织查询 {}", allUserList); if (CollectionUtil.isNotEmpty(allUserList)) { - for (UserInfoList userInfo : allUserList) { + for (UserInfoListVo userInfo : allUserList) { + log.info("---------userInfo.getId() {}", userInfo.getId()); userIds.add(String.valueOf(userInfo.getId())); } } @@ -98,13 +100,14 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR if (CollectionUtil.isNotEmpty(casesRecommendLaunch.getGroupIds())) { long t2 = System.currentTimeMillis(); for (String groupId : casesRecommendLaunch.getGroupIds()) { - List allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(groupId).pageSize(100).page(1).build(), token); + List allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(groupId).pageSize(100).pageNo(1).build(), token); if (CollectionUtil.isNotEmpty(allAudienceList)) { allAudienceList.forEach(auditList -> userIds.add(String.valueOf(auditList.getUserId()))); } } log.info("耗时受众查询 {}", (System.currentTimeMillis() - t2) / 1000); } + log.info("---------userIds {}", userIds); if (CollectionUtil.isEmpty(userIds)) { throw new RuntimeException("推荐人不能为空"); } @@ -134,6 +137,10 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR casesRecommendPushRecord.setCaseTitle(cases.getTitle()); casesRecommendPushRecord.setPushUserId(userId); casesRecommendPushRecord.setPushUserName(userMap.get(userId) != null ? userMap.get(userId).toString() : null); + if (userMap.get(userId) == null){ + log.info("---------PushUserName=null {}", userMap.get(userId)); + continue; + } casesRecommendPushRecord.setPushStatus(CasesPushStatusEnum.WAIT_PUSH.getStatus()); //默认未查看 casesRecommendPushRecord.setReadFlag(0); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java index 0dcda801..0a02631a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java @@ -45,8 +45,8 @@ public class CasesRecommendServiceImpl implements ICasesRecommendService { query.addFilter(FieldFilters.like("recommend_by", LikeMatchMode.ANYWHERE, casesRecommendVo.getRecommendName())); } if (!CollectionUtils.isEmpty(casesRecommendVo.getRecommendTimeList())) { - query.addFilter(FieldFilters.ge("recommend_time", casesRecommendVo.getRecommendTimeList().get(0))); - query.addFilter(FieldFilters.le("recommend_time", casesRecommendVo.getRecommendTimeList().get(1))); + query.addFilter(FieldFilters.ge("recommend_time", casesRecommendVo.getRecommendTimeList().get(0)+" 00:00:00")); + query.addFilter(FieldFilters.le("recommend_time", casesRecommendVo.getRecommendTimeList().get(1)+" 23:59:59")); } query.addOrder(OrderCondition.desc("sys_create_time")); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java index a95c21d8..55bf8d0c 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java @@ -34,16 +34,6 @@ import javax.transaction.Transactional; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -import com.xboe.module.boecase.dao.CasesMajorTypeDao; -import com.xboe.core.orm.FieldFilters; -import com.xboe.core.orm.FieldUpdateType; -import com.xboe.core.orm.IFieldFilter; -import com.xboe.core.orm.LikeMatchMode; -import com.xboe.core.orm.QueryBuilder; -import com.xboe.core.orm.UpdateBuilder; -import com.xboe.module.boecase.dao.CasesDao; -import com.xboe.module.boecase.entity.Cases; - @Slf4j @Service @@ -73,14 +63,14 @@ public class CasesServiceImpl implements ICasesService { /** * 案例分页查询,用于门户的查询 - * */ + */ @Override public PageList queryPageCases(int pageIndex, int pageSize, CaseVo caseVo) { - QueryBuilder query=QueryBuilder.from(Cases.class); - PageList page=null; + QueryBuilder query = QueryBuilder.from(Cases.class); + PageList page = null; List filters = new ArrayList<>(); - filters.add(FieldFilters.eq("deleted",false)); - List likes=new ArrayList(); + filters.add(FieldFilters.eq("deleted", false)); + List likes = new ArrayList(); likes.add(FieldFilters.like("title", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); likes.add(FieldFilters.like("authorName", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); likes.add(FieldFilters.like("keyword1", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); @@ -90,23 +80,22 @@ public class CasesServiceImpl implements ICasesService { likes.add(FieldFilters.like("keyword5", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); - if(StringUtil.isNotBlank(caseVo.getKeyWord())) { + if (StringUtil.isNotBlank(caseVo.getKeyWord())) { filters.add(FieldFilters.or(likes)); } - if(StringUtils.isNotBlank(caseVo.getOrgDomain())){ - if(caseVo.getOrgDomain().contains(",")){ + if (StringUtils.isNotBlank(caseVo.getOrgDomain())) { + if (caseVo.getOrgDomain().contains(",")) { String[] split = caseVo.getOrgDomain().split(","); List strings = Arrays.asList(split); - filters.add(FieldFilters.in("orgDomainParent",strings)); - }else{ - filters.add(FieldFilters.eq("orgDomainParent",caseVo.getOrgDomain())); + filters.add(FieldFilters.in("orgDomainParent", strings)); + } else { + filters.add(FieldFilters.eq("orgDomainParent", caseVo.getOrgDomain())); } } - //增加只是查询有附件的 filters.add(FieldFilters.isNotNull("filePath")); filters.add(FieldFilters.ne("filePath", "")); @@ -144,8 +133,8 @@ public class CasesServiceImpl implements ICasesService { } } - if(StringUtils.isNotBlank(caseVo.getCaseType())){ - filters.add(FieldFilters.eq("caseType",caseVo.getCaseType())); + if (StringUtils.isNotBlank(caseVo.getCaseType())) { + filters.add(FieldFilters.eq("caseType", caseVo.getCaseType())); } if (caseVo.getBreCommend() != null) { if (!caseVo.getBreCommend()) { @@ -172,7 +161,7 @@ public class CasesServiceImpl implements ICasesService { } else { order = OrderCondition.desc("sysCreateTime"); } - + query.addFilters(filters); query.addOrder(order); @@ -189,6 +178,12 @@ public class CasesServiceImpl implements ICasesService { @Override public PageList queryPageCasesV2(CasePageVo caseVo) { + String type = caseVo.getType(); + if (!StrUtil.equals(type,"excellent")) { + caseVo.setOrderField(""); + caseVo.setOrderAsc(null); + } + String keyword = caseVo.getKeyWord(); QueryBuilder query = QueryBuilder.from(Cases.class); PageList page = null; @@ -232,38 +227,52 @@ public class CasesServiceImpl implements ICasesService { } } List orgDomainDtos = caseVo.getOrgDomainDtos(); - IFieldFilter orgDomain = null; + List level1 = new ArrayList<>(); + List level2 = new ArrayList<>(); + List level3 = new ArrayList<>(); if (CollUtil.isNotEmpty(orgDomainDtos)) { for (int i = 0; i < orgDomainDtos.size(); i++) { OrgDomainDto domainDto = orgDomainDtos.get(i); - String orgDomainParent = domainDto.getParent(); - IFieldFilter itemFilter = FieldFilters.eq("orgDomainParent", orgDomainParent); List orgDomainParent2 = domainDto.getChildren(); if (CollUtil.isNotEmpty(orgDomainParent2)) { - List seconds = orgDomainParent2.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); - IFieldFilter orgDomainParentFilter = FieldFilters.in("orgDomainParent2", seconds); - itemFilter = FieldFilters.and(itemFilter, orgDomainParentFilter); - } - for (OrgDomainDto orgDomainDto : orgDomainParent2) { - List orgDomainParent3 = orgDomainDto.getChildren(); - if (CollUtil.isNotEmpty(orgDomainParent3)) { - List thirds = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); - IFieldFilter orgDomainParent3Filter = FieldFilters.eq("orgDomainParent3", thirds); - itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter); + for (OrgDomainDto orgDomainDto : orgDomainParent2) { + List orgDomainParent3 = orgDomainDto.getChildren(); + if (CollUtil.isNotEmpty(orgDomainParent3)) { + List parent = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); + level3.addAll(parent); + } else { + String parent = orgDomainDto.getParent(); + level2.add(parent); + } } - } - - if (i == 0) { - orgDomain = itemFilter; - } else { - orgDomain = FieldFilters.or(orgDomain, itemFilter); + } else { + String orgDomainParent = domainDto.getParent(); + level1.add(orgDomainParent); } } } - if (Objects.nonNull(orgDomain)) { - filters.add(orgDomain); + List subFilter = new ArrayList(); + if (CollUtil.isNotEmpty(level1)) { + IFieldFilter filter1 = FieldFilters.in("orgDomainParent", level1); + subFilter.add(filter1); + } + if (CollUtil.isNotEmpty(level2)) { + IFieldFilter filter2 = FieldFilters.in("orgDomainParent2", level2); + subFilter.add(filter2); + } + if (CollUtil.isNotEmpty(level3)) { + IFieldFilter filter3 = FieldFilters.in("orgDomainParent3", level3); + subFilter.add(filter3); + } + if (CollUtil.isNotEmpty(subFilter)) { + if (subFilter.size() == 1) { + filters.add(subFilter.get(0)); + } else if(subFilter.size() == 2) { + filters.add(FieldFilters.or(subFilter.get(0), subFilter.get(1))); + } else { + filters.add(FieldFilters.or(subFilter)); + } } - if (StringUtils.isNotBlank(caseVo.getCaseType())) { filters.add(FieldFilters.eq("caseType", caseVo.getCaseType())); } @@ -282,13 +291,16 @@ public class CasesServiceImpl implements ICasesService { } else { order = OrderCondition.desc(caseVo.getOrderField()); } - } else { - order = OrderCondition.desc("sysCreateTime"); } - + if (StrUtil.equals(type,"new")) { + order = OrderCondition.desc("sysCreateTime"); + } else if (StrUtil.equals(type,"hot")) { + order = OrderCondition.desc("views"); + } + if(Objects.nonNull(order)) { + query.addOrder(order); + } query.addFilters(filters); - query.addOrder(order); - query.addOrder(OrderCondition.rand()); query.setPageIndex(caseVo.getPageIndex()); query.setPageSize(caseVo.getPageSize()); page = casesDao.findPage(query.builder()); @@ -343,6 +355,48 @@ public class CasesServiceImpl implements ICasesService { public PageList queryRecommendPageCasesV2(CasePageVo caseVo) { PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex() - 1, caseVo.getPageSize()); + + + String majorType = caseVo.getMajorType(); + if (StringUtil.isNotBlank(majorType)) { + List casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ",")); + if (CollUtil.isNotEmpty(casesTypes)) { + List caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList()); + caseVo.setCaseIds(caseIds); + } else { + return null; + } + } + + List orgDomainDtos = caseVo.getOrgDomainDtos(); + List level1 = new ArrayList<>(); + List level2 = new ArrayList<>(); + List level3 = new ArrayList<>(); + if (CollUtil.isNotEmpty(orgDomainDtos)) { + for (int i = 0; i < orgDomainDtos.size(); i++) { + OrgDomainDto domainDto = orgDomainDtos.get(i); + List orgDomainParent2 = domainDto.getChildren(); + if (CollUtil.isNotEmpty(orgDomainParent2)) { + for (OrgDomainDto orgDomainDto : orgDomainParent2) { + List orgDomainParent3 = orgDomainDto.getChildren(); + if (CollUtil.isNotEmpty(orgDomainParent3)) { + List parent = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); + level3.addAll(parent); + } else { + String parent = orgDomainDto.getParent(); + level2.add(parent); + } + } + } else { + String orgDomainParent = domainDto.getParent(); + level1.add(orgDomainParent); + } + } + } + caseVo.setOrg1(level1); + caseVo.setOrg2(level2); + caseVo.setOrg3(level3); + Page cases = casesRecordDao.queryList(pageRequest,caseVo); PageList pageList = new PageList<>(); pageList.setCount((int) cases.getTotalElements()); @@ -477,7 +531,7 @@ public class CasesServiceImpl implements ICasesService { order = OrderCondition.desc("sysCreateTime"); } query.addOrder(order); - query.addField("new Cases(title)"); +// query.addField("new Cases(title)"); List result = casesDao.findList(query.builder()); return result; } @@ -684,7 +738,7 @@ public class CasesServiceImpl implements ICasesService { /** * 首页案例 - * */ + */ @Override public List caseRandom(Integer pageSize, String orderField, Boolean orderAsc) { @@ -845,7 +899,23 @@ public class CasesServiceImpl implements ICasesService { @Override public List majorTypes() { List major_type = sysDictionaryDao.findByKey("major_type"); - String hql = "select cm.majorId,count(cm.id) from CasesMajorType cm,Cases c where cm.caseId=c.id and c.deleted=false and (c.filePath is not null or c.filePath!='') group by cm.majorId"; + /* String hql1 = "select majorType from Cases c where c.deleted=false and (c.filePath is not null and c.filePath != '')"; + List listByHql = casesDao.findListByHql(hql1); + List dictItems = new ArrayList<>(); + for (DictItem d : major_type) { + d.setExplanation("0"); + boolean flag = false; + for (String str : listByHql) { + if (str.contains(d.getCode()) && !d.getCode().equals("")) { + d.setExplanation(String.valueOf(Integer.parseInt(d.getExplanation()) + 1)); + flag = true; + } + } + if (flag){ + dictItems.add(d); + } + }*/ + String hql = "select cm.majorId,count(cm.caseId) from CasesMajorType cm,Cases c where cm.caseId=c.id and c.deleted=false and (c.filePath is not null and c.filePath != '') group by cm.majorId"; List listByHql = casesDao.findListByHql(hql); List dictItems = new ArrayList<>(); for (DictItem d : major_type) { @@ -937,7 +1007,7 @@ public class CasesServiceImpl implements ICasesService { String accountId = current.getAccountId(); List result = new ArrayList<>(); try { - String hql = "select a.caseId FROM CasesRecommendPushRecord a left join Cases b ON a.caseId = b.id WHERE a.pushUserId=?1 and a.pushStatus=3 and a.deleted = false and b.deleted = false group by a.caseId ORDER By a.pushTime DESC"; + String hql = "select a.caseId FROM CasesRecommendPushRecord a left join Cases b ON a.caseId = b.id WHERE a.pushUserId=?1 and a.pushStatus=3 and a.deleted = false and b.deleted = false group by a.caseId ORDER By a.pushTime DESC"; List listFields = casesRecommendDao.findListFields(hql, CASE_LEN, ListUtil.toList(accountId)); // List listFields = new ArrayList<>(); List caseIds = new ArrayList<>(); @@ -988,6 +1058,12 @@ public class CasesServiceImpl implements ICasesService { return casesVos; } + @Override + public List getCaseYears() { + List years = this.casesRecordDao.caseYears(); + return years; + } + @Override public void excellent(String id, Boolean excellent) { //取消时,把时间清空 diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CaseExportVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CaseExportVo.java index 01ff691e..6ae48f79 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CaseExportVo.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CaseExportVo.java @@ -36,4 +36,8 @@ public class CaseExportVo { private LocalDateTime endTime; private String confidentialityLevel; + + private String summary; + private String userNo; + private String department; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index d25c8767..d318ccdb 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -1,12 +1,17 @@ package com.xboe.module.course.api; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import com.xboe.api.ThirdApi; +import com.xboe.api.vo.AuditList; +import com.xboe.api.vo.AuditListParam; +import com.xboe.api.vo.UserDynamic; +import com.xboe.api.vo.UserdynamicParam; +import com.xboe.common.OrderCondition; import com.xboe.core.JsonResponseStatus; import com.xboe.module.usergroup.entity.UserGroupItem; import org.apache.commons.lang3.StringUtils; @@ -78,6 +83,9 @@ public class CoursePortalApi extends ApiBaseController{ @Autowired private IStudyCourseService studyCourseService; + @Resource + private ThirdApi thirdApi; + /** * 根据多个课程id返回对应的课程的图片.返回结果如下, * { @@ -226,7 +234,7 @@ public class CoursePortalApi extends ApiBaseController{ * @return */ @RequestMapping(value="/detail",method = {RequestMethod.GET,RequestMethod.POST}) - public JsonResponse> detail(String id,Boolean addView,Boolean crowd,Boolean preview){ + public JsonResponse> detail(String id,Boolean addView,Boolean crowd,Boolean preview, HttpServletRequest request){ if(StringUtils.isBlank(id)) { return badRequest("参数错误,未指定课程"); } @@ -253,13 +261,35 @@ public class CoursePortalApi extends ApiBaseController{ preview=true; } +// StudyCourse sc = new StudyCourse(); +// sc.setCourseId(course.getId()); +// sc.setAid(aid); + log.debug("=--------- 开始查询是否学习过此课程 ---------------------------------course.getId()= "+ course.getId() + ",aid = " + aid ); +// PageList rs1= studyCourseService.findPage(1,10, sc, OrderCondition.desc("id"),null); + StudyCourse studyCourse = studyCourseService.findByCourseIdAndAid(course.getId(), aid); + log.debug("=--------- 开始查询是否学习过此课程 ---------------------------------course.getId()= "+ course.getId() + ",aid = " + aid +",studyCourse = " + studyCourse); boolean pass = false; if(!preview) { + log.error("=--------- 开始查询受众信息 ---------------------------------aid = " + aid); + String token = request.getHeader("XBOE-Access-Token"); + log.debug("=--------- 获取token token = " + token); if (!courseCrowdList.isEmpty()) { for (CourseCrowd c : courseCrowdList) { //同一个受众,同一个只会有一条记录,所以这里就直接查询了 - List hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid); - if (hasItem != null && !hasItem.isEmpty()) { +// List hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid); + + log.debug("=--------- 开始调研用户中心受众接口 groupId = " + c.getGroupId()); + List allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(c.getGroupId()).pageSize(1000).pageNo(1).build(), token); + List userIdList = allAudienceList.stream().map(AuditList::getUserId).collect(Collectors.toList()); + log.debug("=--------- allAudienceList: " +allAudienceList); + /* + List userDynamicList = thirdApi.getAllUserdynamicList(UserdynamicParam.builder().aid(Long.parseLong(aid)).pageSize(1000).pageIndex(1).build(), token); + log.error("=--------- 开始查询课程信息信息 ---------------------------------userDynamicList = " + userDynamicList); + List dynamicList = userDynamicList.stream().map(UserDynamic::getContentId).map(Long::parseLong).collect(Collectors.toList()); + log.error(id + "=--------- 开始查询课程信息信息 ---------------------------------dynamicList = " + dynamicList);*/ + + + if (userIdList.contains(Long.parseLong(aid)) || !Objects.isNull(studyCourse)) { pass = true; break; } @@ -269,10 +299,12 @@ public class CoursePortalApi extends ApiBaseController{ // return wrap(JsonResponseStatus.NO_CONTENT, "您无学习此课程的权限,请与管理员联系",rs); // } + }else { + pass = true; } } - + log.debug("=--------- 是否有权限查看此课程: " +pass); List cclist=contentService.getByCourseId(id); List sectionlist=sectionService.getByCourseId(id); List teachers=courseService.findTeachersByCourseId(id); @@ -296,6 +328,7 @@ public class CoursePortalApi extends ApiBaseController{ } + @GetMapping("/detail-study") public JsonResponse> detailStudy(String courseId, String aid){ if(StringUtil.isBlank(courseId)){ diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/dict/service/impl/SysDictionaryServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/dict/service/impl/SysDictionaryServiceImpl.java index d09ef4fc..8c533311 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/dict/service/impl/SysDictionaryServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/dict/service/impl/SysDictionaryServiceImpl.java @@ -7,6 +7,7 @@ import com.xboe.constants.CacheName; import com.xboe.core.SysConstant; import com.xboe.core.orm.FieldFilters; import com.xboe.core.utils.OkHttpUtil; +import com.xboe.module.boecase.dao.CasesDao; import com.xboe.module.course.entity.Course; import com.xboe.module.dict.dao.SysDictionaryDao; import com.xboe.module.dict.entity.DictItem; @@ -33,6 +34,9 @@ public class SysDictionaryServiceImpl implements ISysDictionaryService{ @Resource SysDictionaryDao dao; + @Resource + CasesDao casesDao; + @Resource RedisTemplate redisTemplate; @@ -199,7 +203,7 @@ public class SysDictionaryServiceImpl implements ISysDictionaryService{ @Override public PageList queryPage(String key,String code,String name,String filter,Integer pageIndex, Integer pageSize) { - // + PageList dictItemPageList = dao.queryPage(key,code,name,filter,pageIndex, pageSize); return dictItemPageList; } 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 b308a739..8022fc88 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 @@ -1,11 +1,14 @@ package com.xboe.school.study.api; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; +import com.xboe.api.ThirdApi; +import com.xboe.api.vo.AuditList; +import com.xboe.api.vo.AuditListParam; +import com.xboe.api.vo.UserDynamic; +import com.xboe.api.vo.UserdynamicParam; import com.xboe.module.usergroup.entity.UserGroupItem; import com.xboe.module.usergroup.service.IUserGroupService; import org.apache.commons.lang3.StringUtils; @@ -50,6 +53,9 @@ import com.xboe.school.study.service.IStudySignupService; import lombok.extern.slf4j.Slf4j; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + /** * 课程学习的内容 */ @@ -82,7 +88,10 @@ public class StudyCourseApi extends ApiBaseController{ @Autowired private IUserGroupService userGroupService; - + + @Resource + private ThirdApi thirdApi; + /** * 用于查询课程的学习记录 * @param pager @@ -115,8 +124,6 @@ public class StudyCourseApi extends ApiBaseController{ /** * 导出课程学习记录 - * @param courseId - * @param type * @return */ @RequestMapping(value="/export",method = {RequestMethod.GET,RequestMethod.POST}) @@ -136,11 +143,10 @@ public class StudyCourseApi extends ApiBaseController{ /** * 学习页面,加载课程的信息,用于替换portal中的detail方法 - * @param id * @return */ @RequestMapping(value="/studyIndex",method = {RequestMethod.GET,RequestMethod.POST}) - public JsonResponse> loadDetail(String cid,Boolean addView,Boolean crowd){ + public JsonResponse> loadDetail(String cid,Boolean addView,Boolean crowd, HttpServletRequest request){ if(StringUtils.isBlank(cid)){ return error("无课程信息"); } @@ -159,16 +165,31 @@ public class StudyCourseApi extends ApiBaseController{ rs.put("crowds",courseCrowdList); } + StudyCourse studyCourse = service.findByCourseIdAndAid(course.getId(), aid); + log.error("=--------- 开始查询是否学习过此课程 ---------------------------------course.getId()= "+ course.getId() + ",aid = " + aid +",studyCourse = " + studyCourse); boolean pass = false; if (!courseCrowdList.isEmpty()) { + log.debug("=---studyIndex------ 开始查询受众信息 ---------------------------------"); + String token = request.getHeader("XBOE-Access-Token"); for (CourseCrowd c : courseCrowdList) { //同一个受众,同一个只会有一条记录,所以这里就直接查询了 - List hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid); - if (hasItem != null && !hasItem.isEmpty()) { +// List hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid); + log.debug("=--------- 开始调研用户中心受众接口 groupId = " + c.getGroupId()); + List allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(c.getGroupId()).pageSize(1000).pageNo(1).build(), token); + List userIdList = allAudienceList.stream().map(AuditList::getUserId).collect(Collectors.toList()); + log.debug("=--------- allAudienceList: " +allAudienceList); + + /*List userDynamicList = thirdApi.getAllUserdynamicList(UserdynamicParam.builder().aid(Long.parseLong(aid)).pageSize(1000).pageIndex(1).build(), token); + log.error("=--------- 开始查询课程信息信息 ---------------------------------userDynamicList = " + userDynamicList); + List dynamicList = userDynamicList.stream().map(UserDynamic::getContentId).map(Long::parseLong).collect(Collectors.toList()); + log.error(cid + "=--------- 开始查询课程信息信息 ---------------------------------dynamicList = " + dynamicList);*/ + if (userIdList.contains(Long.parseLong(aid)) || !Objects.isNull(studyCourse)) { pass = true; break; } } + }else { + pass = true; } List cclist=contentService.getByCourseId(cid); @@ -251,7 +272,7 @@ public class StudyCourseApi extends ApiBaseController{ /** * 记录学习信息,在学习每个资源时都要记录.前端用户打开课程资源按规则调用带着课程及学习信息调用此接口。 - * @param studyId + * @param * @return 返回学习条目的id */ @PostMapping("/study") @@ -382,8 +403,8 @@ public class StudyCourseApi extends ApiBaseController{ * 音视频学习保存,初始化保存学习记录. * 如果已经保存,就不要再保存第二次了,前端注意控制 * {studyId,contentId,courseId,progress,contentType,studyDuration} - * @param itemId - * @param videoTime + * @param + * @param * @return */ @PostMapping("/study-video-save") @@ -438,8 +459,8 @@ public class StudyCourseApi extends ApiBaseController{ } /** * 视频学习完 - * @param itemId - * @param studyId + * @param + * @param * @return */ @PostMapping("/study-video-finish") @@ -465,7 +486,7 @@ public class StudyCourseApi extends ApiBaseController{ /** * 记录视频的学习时间点,前端可以每10秒记录一次,时长是秒 * @param itemId 学习内容条目id - * @param videoTime + * @param * @return */ @PostMapping("/study-video-time") @@ -491,11 +512,6 @@ public class StudyCourseApi extends ApiBaseController{ /** * 追加学习时长,如果有id了,后台就会增加学习时长,如果不是就会减少. * 已经不再使用,二期移到独立的数据统计中了 - * @param stid 记录时间id,非必填项 - * @param scid 学习id, - * @param cid 课程id - * @param ccid 内容id - * @param info 学习信息 * @return */ @Deprecated diff --git a/servers/boe-server-all/src/main/resources/application.properties b/servers/boe-server-all/src/main/resources/application.properties index 866da1b8..6bc8059d 100644 --- a/servers/boe-server-all/src/main/resources/application.properties +++ b/servers/boe-server-all/src/main/resources/application.properties @@ -55,9 +55,12 @@ logging.config=classpath:log/logback-@profileActive@.xml # config.id.generator.server.num=1 # config.id.generator.datacenter.num=1 -boe.domain=https://pretest.zcwytd.com +#boe.domain=https://pretest.zcwytd.com +boe.domain=https://u-pre.boe.com orgTree.orgTreeList=${boe.domain}/userbasic/org/list # ????id???????????? orgTree.orgChildTreeList=${boe.domain}/userbasic/org/childOrgs userBasic.searchUserList=${boe.domain}/userbasic/user/list audience.usersByAudienceList=${boe.domain}/userbasic/audience/memberList +#获取用户学习课程数据 +statApi.userdynamicList=${boe.domain}/statApi/xboe/m/stat/userdynamic/list \ No newline at end of file diff --git a/servers/boe-server-all/src/main/resources/import/usergroup-import.xlsx b/servers/boe-server-all/src/main/resources/import/usergroup-import.xlsx index 8f6b7eb3..767bbdf3 100644 Binary files a/servers/boe-server-all/src/main/resources/import/usergroup-import.xlsx and b/servers/boe-server-all/src/main/resources/import/usergroup-import.xlsx differ