diff --git a/servers/boe-server-all/pom.xml b/servers/boe-server-all/pom.xml index faacfc00..232270fc 100644 --- a/servers/boe-server-all/pom.xml +++ b/servers/boe-server-all/pom.xml @@ -1,161 +1,159 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.6.3 - - - com.xboe - boe-server-all - 2.0.0 - boe-server-all - BOE 项目所有功能启动工程,用于开发 - - 1.8 - - - - cn.hutool - hutool-all - 5.8.16 - - - com.xboe - xboe-api - 1.0.0 - - - com.xboe - xboe-module-scorm - 1.0.0 - - - com.xboe - xboe-core - 1.0.0 - - - com.xboe - xboe-redis - 1.0.0 - - - com.xboe - xboe-module-course - 1.0.0 - - - com.xboe - xboe-module-idconfig - 1.0.0 - - - - com.xboe - xboe-module-es - 1.0.0 - - - - it.sauronsoftware - jave - 1.0.2 - system - ${project.basedir}/src/main/resources/libs/jave-1.0.2.jar - - - com.auth0 - java-jwt - 3.18.3 - - - - - org.apache.commons - commons-lang3 - - - commons-codec - commons-codec - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.6.3 + + + com.xboe + boe-server-all + 2.0.0 + boe-server-all + BOE 项目所有功能启动工程,用于开发 + + 1.8 + + + + org.apache.poi + poi-ooxml + 5.2.2 + + + cn.hutool + hutool-all + 5.8.16 + + + com.xboe + xboe-api + 1.0.0 + + + com.xboe + xboe-module-scorm + 1.0.0 + + + com.xboe + xboe-core + 1.0.0 + + + com.xboe + xboe-redis + 1.0.0 + + + com.xboe + xboe-module-course + 1.0.0 + + + com.xboe + xboe-module-idconfig + 1.0.0 + - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.session - spring-session-data-redis - + + com.xboe + xboe-module-es + 1.0.0 + - - mysql - mysql-connector-java - 5.1.27 - - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-test - test - + + it.sauronsoftware + jave + 1.0.2 + system + ${project.basedir}/src/main/resources/libs/jave-1.0.2.jar + + + com.auth0 + java-jwt + 3.18.3 + + + + + org.apache.commons + commons-lang3 + + + commons-codec + commons-codec + - - - com.github.whvcse - easy-captcha - 1.6.2 - - - - org.apache.poi - poi - 4.0.1 - + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.session + spring-session-data-redis + - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - org.apache.httpcomponents - httpclient - - - javax.mail - javax.mail-api - 1.5.6 - + + mysql + mysql-connector-java + 5.1.27 + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + - - org.apache.commons - commons-email - 1.4 - + + + com.github.whvcse + easy-captcha + 1.6.2 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + org.apache.httpcomponents + httpclient + + + javax.mail + javax.mail-api + 1.5.6 + - + + org.apache.commons + commons-email + 1.4 + + + com.aspose slides @@ -163,28 +161,28 @@ system ${project.basedir}/src/main/resources/aspose/aspose.slides-15.9.0.jar - - com.aspose - words - 15.8.0 - system - ${project.basedir}/src/main/resources/aspose/aspose-words-15.8.0.jar - - - com.aspose - cells - 18.11 - system - ${project.basedir}/src/main/resources/aspose/aspose-cells-java-18.11.jar - + + com.aspose + words + 15.8.0 + system + ${project.basedir}/src/main/resources/aspose/aspose-words-15.8.0.jar + + + com.aspose + cells + 18.11 + system + ${project.basedir}/src/main/resources/aspose/aspose-cells-java-18.11.jar + - - - com.github.ulisesbocchio - jasypt-spring-boot-starter - 3.0.3 - - + + + com.github.ulisesbocchio + jasypt-spring-boot-starter + 3.0.3 + + org.elasticsearch.client elasticsearch-rest-high-level-client 7.9.0 @@ -200,27 +198,27 @@ 7.9.0 - - - - - true - src/main/resources - - application-${profileActive}.properties - application.properties - - - - false - src/main/resources - - *.properties - - - - - + + + + + true + src/main/resources + + application-${profileActive}.properties + application.properties + + + + false + src/main/resources + + *.properties + + + + + org.apache.maven.plugins maven-compiler-plugin @@ -229,48 +227,48 @@ 1.8 - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + true - - - - - - pro - - pro - - - - pre - - pre - - - - test - - test - - - - dev - - dev - - - true - - - + + + + + + pro + + pro + + + + pre + + pre + + + + test + + test + + + + dev + + dev + + + true + + + diff --git a/servers/boe-server-all/src/main/java/com/xboe/data/dto/ImportData.java b/servers/boe-server-all/src/main/java/com/xboe/data/dto/ImportData.java new file mode 100644 index 00000000..19af8e90 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/data/dto/ImportData.java @@ -0,0 +1,35 @@ +package com.xboe.data.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author : civism + * @version 1.0 + * @date 2023/6/23 17:32 + */ +@Data +public class ImportData { + + private String importId; + + + private List caseIdList; + + + private List caseTitleList; + + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class CasesTitle { + + private String caseId; + + private String caseTitle; + } +} 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 3da88829..edbfb3f1 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 @@ -1,5 +1,6 @@ package com.xboe.module.boecase.api; +import cn.hutool.core.collection.CollUtil; import com.xboe.common.PageList; import com.xboe.common.Pagination; import com.xboe.common.utils.StringUtil; @@ -17,6 +18,7 @@ import com.xboe.module.dict.entity.DictItem; import com.xboe.module.excel.ExportsExcelSenderUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -104,9 +106,10 @@ public class CasesApi extends ApiBaseController { } @PostMapping("/queryListV2") - public JsonResponse> queryCaseBreV2(@RequestBody CasePageVo req){ + public JsonResponse> queryCaseBreV2(@Validated @RequestBody CasePageVo req){ String type = req.getType(); - PageList views = null; + PageList views; + req.setUserId(getCurrent().getAccountId()); if (type.equals("recommend")) { views = casesService.queryRecommendPageCasesV2(req); } else { @@ -114,8 +117,9 @@ public class CasesApi extends ApiBaseController { } if(views!=null){ - if(views.getList()!=null && !views.getList().isEmpty()){ - for (Cases c:views.getList()) { + List cases = views.getList(); + if(CollUtil.isNotEmpty(cases)){ + for (Cases c: cases) { StringBuffer stringBuffer = new StringBuffer(); List caseId = casesMajorTypeDao.findList(FieldFilters.eq("caseId", c.getId())); if(caseId!=null && !caseId.isEmpty()){ 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 03c97c71..7ae3dd1e 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 @@ -8,10 +8,9 @@ import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.xboe.common.PageList; -import com.xboe.common.Pagination; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; -import com.xboe.enums.CasesPushStatusEnum; +import com.xboe.data.dto.ImportData; import com.xboe.enums.CasesRecommendLaunchTypeEnum; import com.xboe.module.boecase.entity.CasesRecommend; import com.xboe.module.boecase.entity.CasesRecommendLaunchImport; @@ -30,7 +29,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -56,17 +54,26 @@ public class CasesRecommendApi extends ApiBaseController { /** * 用于后台管理分页 * - * @param pager * @param casesRecommendVo * @return */ @PostMapping("/page") - public JsonResponse> page(Pagination pager, CasesRecommendVo casesRecommendVo) { - PageList page = iCasesRecommendService.page(pager.getPageIndex(), pager.getPageSize(), casesRecommendVo); + public JsonResponse> page(@RequestBody CasesRecommendVo casesRecommendVo) { + PageList page = iCasesRecommendService.page(casesRecommendVo.getPageIndex(), casesRecommendVo.getPageSize(), casesRecommendVo); + // 组装查看率 + page.getList().forEach(it -> { + List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(it.getId()); + if (CollectionUtil.isNotEmpty(recordList)) { + // 查看率:查看率=案例查看人数(各案例查看人数之合)/(当条推荐记录包含的案例 × 用户数) + long viewCount = recordList.stream().filter(record -> record.getReadFlag().equals(1)).count(); + it.setViewRate(String.valueOf(viewCount * 100 / recordList.size()).concat("%")); + } + }); + return success(page); } - @PostMapping("/delete") + @GetMapping("/delete") public JsonResponse delete(String id) { if (StringUtils.isBlank(id)) { return badRequest("缺少必要参数"); @@ -89,7 +96,7 @@ public class CasesRecommendApi extends ApiBaseController { */ @GetMapping("/import-info") public JsonResponse excelImport(String importId) { - CasesRecommendLaunchImport byId = iCasesRecommendLaunchImportService.getById(importId); + CasesRecommendLaunchImport byId = iCasesRecommendLaunchImportService.getByImportId(importId); return success(byId); } @@ -102,11 +109,11 @@ public class CasesRecommendApi extends ApiBaseController { * @throws Exception */ @PostMapping("/import") - public JsonResponse excelImport(@RequestParam("file") MultipartFile file) throws Exception { + public JsonResponse excelImport(@RequestParam("file") MultipartFile file) throws Exception { ExcelReader reader = ExcelUtil.getReader(file.getInputStream()); List> read = reader.read(); - String s = iCasesRecommendLaunchImportService.importData(read); - return success(s); + ImportData importData = iCasesRecommendLaunchImportService.importData(read); + return success(importData); } @@ -125,7 +132,9 @@ public class CasesRecommendApi extends ApiBaseController { ExcelWriter writer = ExcelUtil.getWriter(); writer.writeHeadRow(ListUtil.toList("标题")); - writer.write(dataList); + if (CollectionUtil.isNotEmpty(dataList)) { + writer.write(dataList); + } response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=failData.xls"); ServletOutputStream out = response.getOutputStream(); @@ -171,6 +180,7 @@ public class CasesRecommendApi extends ApiBaseController { if (StringUtils.isEmpty(casesRecommendId)) { throw new RuntimeException("缺少必要参数"); } + CasesRecommend casesRecommend = iCasesRecommendService.findById(casesRecommendId); // 拿取表格里需要的数据 List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(casesRecommendId); // 用个List装表格的所有内容 @@ -179,36 +189,36 @@ public class CasesRecommendApi extends ApiBaseController { Map row = new LinkedHashMap<>(); row.put("案例名称", it.getCaseTitle()); row.put("推送用户", it.getPushUserName()); - row.put("所属组织", "it.get"); + row.put("所属组织", casesRecommend.getRecommendOrgName()); row.put("推送时间", it.getPushTime()); row.put("是否查看", it.getReadFlag()); row.put("首次查看时间", it.getReadStartTime()); row.put("总查看时间", it.getReadEndTime()); return row; }).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(rows)){ + if (CollectionUtil.isNotEmpty(rows)) { // 通过工具类创建writer - try (ExcelWriter writer = ExcelUtil.getWriter(true); + try (ExcelWriter writer = ExcelUtil.getWriter(); // 输出流 ServletOutputStream servletOutputStream = response.getOutputStream() - ){ + ) { // 一次性写出内容 writer.write(rows, true); // 微调一下每个列的宽度 - writer.setColumnWidth(0,50); - writer.setColumnWidth(1,16); - writer.setColumnWidth(2,24); - writer.setColumnWidth(3,34); - writer.setColumnWidth(4,10); - writer.setColumnWidth(5,20); - writer.setColumnWidth(6,20); + writer.setColumnWidth(0, 50); + writer.setColumnWidth(1, 16); + writer.setColumnWidth(2, 24); + writer.setColumnWidth(3, 34); + writer.setColumnWidth(4, 10); + writer.setColumnWidth(5, 20); + writer.setColumnWidth(6, 20); // 此处的response.setContentType 和教程里的不同 - response.setContentType("application/octet-stream"); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); // filename就是表格的名字,这个无所谓,反正前端还会重命名 - response.setHeader("Content-Disposition","attachment;filename=推荐信息.xlsx"); + response.setHeader("Content-Disposition", "attachment;filename=推荐信息.xls"); - writer.flush(servletOutputStream,true); - }catch (Exception e){ + writer.flush(servletOutputStream, true); + } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } @@ -227,17 +237,7 @@ public class CasesRecommendApi extends ApiBaseController { if (StringUtils.isEmpty(casesRecommendPushVo.getCasesRecommendId())) { throw new RuntimeException("缺少必要参数"); } - // 查询 - CasesRecommend db = iCasesRecommendService.findById(casesRecommendPushVo.getCasesRecommendId()); - if (CasesPushStatusEnum.PUSH_SUCCESS.getStatus().equals(db.getPushProgress())){ - // 当为推送成功时为 - iCasesRecommendPushRecordService.rePushOrWithdraw(true, casesRecommendPushVo.getCasesRecommendId()); - }else if (CasesPushStatusEnum.PUSH_FAIL.getStatus().equals(db.getPushProgress()) - || CasesPushStatusEnum.PUSH_REVOKE.getStatus().equals(db.getPushProgress())){ - // 推送失败或者已撤回时 - iCasesRecommendPushRecordService.rePushOrWithdraw(false, casesRecommendPushVo.getCasesRecommendId()); - } - + iCasesRecommendService.rePushOrWithdraw(casesRecommendPushVo); return success(true); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesMajorTypeRepoDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesMajorTypeRepoDao.java new file mode 100644 index 00000000..a865d3ac --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesMajorTypeRepoDao.java @@ -0,0 +1,16 @@ +package com.xboe.module.boecase.dao; + +import com.xboe.module.boecase.entity.CasesMajorType; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CasesMajorTypeRepoDao extends JpaRepository, JpaSpecificationExecutor { + + @Query(nativeQuery = true, value = "select * from boe_cases_major_type as c where major_id in (:marjorIds) group by c.case_id") + List findCasesBy(List marjorIds); +} 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 24a92f4b..2b434bca 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 @@ -18,8 +18,15 @@ import org.springframework.stereotype.Repository; @Repository public interface CasesRecordDao extends JpaRepository, JpaSpecificationExecutor { - @Query(nativeQuery = true, value = "select b.* from boe_cases_recommend_push_record a LEFT JOIN boe_cases b on. a.case_id = b.id and b.deleted=false " + - " where a.deleted=false and a.push_user_id= :#{#condition.userId}" + + @Query(nativeQuery = true, value = "select b.id,b.sys_create_aid,b.sys_create_by,b.sys_create_time,b.deleted,b.sys_update_by,b.sys_update_time,b.sys_version," + + "b.excellent_time,b.excellent,b.case_value,b.readers,b.keyword5,b.keyword4,b.keyword3,b.keyword2,b.keyword1,b.case_theme_description,b.case_theme" + + ",b.case_type2,b.case_type1,b.case_type,b.case_owner_org,b.case_specialty_sequence,b.case_other_contributor,b.case_owner_phone,b.case_owner_department" + + ",b.case_owner,b.case_flow,b.case_scope,b.is_leadership_plan,b.case_channel,b.email,b.contact_number,b.department,b.drafter,b.end_time,b.drafting_time," + + "b.confidentiality_level,b.approval_number,b.major_type,b.org_domain_parent3,b.org_domain_parent2,b.org_domain_parent,b.org_domain,b.summary,b.cites,b.recommends," + + "b.favorites,b.shares,b.praises,b.comments,b.views,b.status,b.top_time,b.is_top,b.recommend_time,b.bre_commend,b.cover_url,b.author_name,b.author_id,b.file_name" + + ",b.file_path,b.content,b.company_id,b.title" + + " from boe_cases_recommend_push_record a LEFT JOIN boe_cases b on a.case_id = b.id and b.deleted=0 " + + " where a.deleted=0 and a.push_user_id= :#{#condition.userId}" + " and if(:#{#condition.keyWord} is not null,b.title like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" + @@ -28,10 +35,26 @@ 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.years} is not null ,YEAR(b.sys_create_time) in (:#{#condition.years}),1=1 )" + - " and if(:#{#condition.majorType} is nto null ,b.major_type = :#{#condition.majorType},1=1) " + + " and if(:#{#condition.majorType} is not null ,b.major_type = :#{#condition.majorType},1=1) " + " and if(:#{#condition.org1} is not null,b.org_domain_parent in (:#{#condition.org1}),1=1)" + " and if(:#{#condition.org2} is not null,b.org_domain_parent2 in (:#{#condition.org2}),1=1)" + " and if(:#{#condition.org3} is not null,b.org_domain_parent3 in (:#{#condition.org3}),1=1)" + - " group by b.id order by a.sys_create_time DESC") + " group by b.id order by a.sys_create_time DESC", + countQuery = "select count(*)" + + " from boe_cases_recommend_push_record a LEFT JOIN boe_cases b on a.case_id = b.id and b.deleted=0 " + + " where a.deleted=0 and a.push_user_id= :#{#condition.userId}" + + " and if(:#{#condition.keyWord} is not null,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.years} is not null ,YEAR(b.sys_create_time) in (:#{#condition.years}),1=1 )" + + " and if(:#{#condition.majorType} is not null ,b.major_type = :#{#condition.majorType},1=1) " + + " and if(:#{#condition.org1} is not null,b.org_domain_parent in (:#{#condition.org1}),1=1)" + + " and if(:#{#condition.org2} is not null,b.org_domain_parent2 in (:#{#condition.org2}),1=1)" + + " and if(:#{#condition.org3} is not null,b.org_domain_parent3 in (:#{#condition.org3}),1=1)" + + " group by b.id") Page queryList(Pageable pageable, @Param("condition") CasePageVo casePage); } 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 c3a615a5..085919c5 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 @@ -41,7 +41,7 @@ public class CasePageVo extends PageDto { private String authorName; - private List years; + private List years; /** * 已经返回给前端的案例需要过滤掉 @@ -62,21 +62,21 @@ public class CasePageVo extends PageDto { public List getOrg1() { if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) { - return orgDomainDtos.stream().map(OrgDomainDto::getOrgDomainParent).filter(StrUtil::isNotBlank).collect(Collectors.toList()); + return orgDomainDtos.stream().map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList()); } return null; } public List getOrg2() { if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) { - return orgDomainDtos.stream().map(OrgDomainDto::getOrgDomainParent2).filter(StrUtil::isNotBlank).collect(Collectors.toList()); + 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().map(OrgDomainDto::getOrgDomainParent3).filter(StrUtil::isNotBlank).collect(Collectors.toList()); + return orgDomainDtos.stream().flatMap(it->it.getChildren().stream().flatMap(i->i.getChildren().stream())).map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList()); } return null; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java index ee7f58c5..1036b47e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java @@ -2,19 +2,17 @@ package com.xboe.module.boecase.dto; import lombok.Data; +import java.util.List; + @Data public class OrgDomainDto { /** * 组织领域1级 */ - private String orgDomainParent; + private String parent; /** - * 组织领域2级 + * 组织领域子级 */ - private String orgDomainParent2; - /** - * 组织领域3级 - */ - private String orgDomainParent3; + private List children; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java index c62be937..fee85f15 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java @@ -5,6 +5,6 @@ import lombok.Data; @Data public class PageDto { - private int pageIndex = 1; - private int pageSize = 10; + private Integer pageIndex = 1; + private Integer pageSize = 10; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java index 05039700..df6ef6e0 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java @@ -261,6 +261,12 @@ public class Cases extends BaseEntity { @Transient private List majorIds; + /** + * 推荐组织 + */ + @Transient + private String recommendOrgName; + public Cases() { diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommend.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommend.java index bc4816e1..7d536917 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommend.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommend.java @@ -46,9 +46,6 @@ public class CasesRecommend extends BaseEntity { /**查看率*/ @Column(name = "view_rate", length = 255) private String viewRate; - /**推荐组织ID*/ - @Column(name = "recommend_org_id", length = 20) - private String recommendOrgId; /**推荐组织名称*/ @Column(name = "recommend_org_name", length = 255) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImport.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImport.java index 0c593482..6be7c03f 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImport.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImport.java @@ -42,4 +42,7 @@ public class CasesRecommendLaunchImport extends BaseEntity { @Column(name = "process_status",length = 20) private Integer processStatus; + @Column(name = "import_id") + private String importId; + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImportData.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImportData.java index 66e342c5..ae87891d 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImportData.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImportData.java @@ -15,7 +15,7 @@ import javax.persistence.Table; @Data @Entity @EqualsAndHashCode(callSuper = false) -@Table(name = SysConstant.TABLE_PRE + "cases_recommend_launch_import") +@Table(name = SysConstant.TABLE_PRE + "cases_recommend_launch_import_data") public class CasesRecommendLaunchImportData extends BaseEntity { /** diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java index 8761d514..49b83179 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java @@ -91,5 +91,11 @@ public class CasesRecommendPushRecord extends BaseEntity { @Column(name = "remark") private String remark; + public CasesRecommendPushRecord() { + } + public CasesRecommendPushRecord(String recommendId,String caseId) { + this.recommendId = recommendId; + this.caseId = caseId; + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportService.java index 6b784dd0..5ac01aab 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportService.java @@ -1,6 +1,7 @@ package com.xboe.module.boecase.service; +import com.xboe.data.dto.ImportData; import com.xboe.module.boecase.entity.CasesRecommendLaunchImport; import java.util.List; @@ -13,7 +14,7 @@ public interface ICasesRecommendLaunchImportService { * @param dataList * @return */ - String importData(List> dataList); + ImportData importData(List> dataList); /** @@ -30,6 +31,6 @@ public interface ICasesRecommendLaunchImportService { * @param id * @return */ - CasesRecommendLaunchImport getById(String id); + CasesRecommendLaunchImport getByImportId(String importId); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java index 4ce96881..5ea6e659 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java @@ -2,6 +2,7 @@ package com.xboe.module.boecase.service; import com.xboe.common.PageList; import com.xboe.module.boecase.entity.CasesRecommend; +import com.xboe.module.boecase.vo.CasesRecommendPushVo; import com.xboe.module.boecase.vo.CasesRecommendVo; public interface ICasesRecommendService { @@ -26,4 +27,11 @@ public interface ICasesRecommendService { * @return */ CasesRecommend findById(String id); + + /** + * 撤回或者重新推送 + * @param casesRecommendPushVo + */ + void rePushOrWithdraw(CasesRecommendPushVo casesRecommendPushVo); + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportServiceImpl.java index 02083a94..047c599f 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportServiceImpl.java @@ -4,6 +4,7 @@ package com.xboe.module.boecase.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import com.xboe.core.orm.FieldFilters; +import com.xboe.data.dto.ImportData; import com.xboe.module.boecase.dao.CasesDao; import com.xboe.module.boecase.dao.CasesRecommendLaunchImportDao; import com.xboe.module.boecase.dao.CasesRecommendLaunchImportDataDao; @@ -12,13 +13,15 @@ import com.xboe.module.boecase.entity.CasesRecommendLaunchImport; import com.xboe.module.boecase.entity.CasesRecommendLaunchImportData; import com.xboe.module.boecase.service.ICasesRecommendLaunchImportService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service +@Transactional public class CasesRecommendLaunchImportServiceImpl implements ICasesRecommendLaunchImportService { @Resource @@ -31,53 +34,67 @@ public class CasesRecommendLaunchImportServiceImpl implements ICasesRecommendLau private CasesDao casesDao; @Override - public String importData(List> dataList) { - if (CollectionUtil.isEmpty(dataList)) { + public ImportData importData(List> dataList) { + if (CollectionUtil.isEmpty(dataList) || dataList.size() < 1) { throw new RuntimeException("导入数据为空"); } - int totalNum = dataList.size(); + int totalNum = dataList.size() - 1; int successNum = 0; int failNum = 0; - Long importId = IdUtil.getSnowflakeNextId(); + String importId = IdUtil.getSnowflakeNextId() + ""; + ImportData importData = new ImportData(); + importData.setImportId(importId); + List caseIds = new ArrayList<>(); + List caseTitleList = new ArrayList<>(); for (int i = 1; i < dataList.size(); i++) { String caseTitle = dataList.get(i).get(0).toString(); + CasesRecommendLaunchImportData casesRecommendLaunchImportData = new CasesRecommendLaunchImportData(); - casesRecommendLaunchImportData.setImportId(importId + ""); + casesRecommendLaunchImportData.setImportId(importId); casesRecommendLaunchImportData.setCaseTitle(caseTitle); Cases cases = casesDao.getByTitle(caseTitle); if (cases == null) { failNum++; casesRecommendLaunchImportData.setStatus(2); } else { + if (caseTitleList.size() < 10) { + caseTitleList.add(new ImportData.CasesTitle(cases.getId(), cases.getTitle())); + } + caseIds.add(cases.getId()); casesRecommendLaunchImportData.setStatus(1); casesRecommendLaunchImportData.setCaseTitle(caseTitle); + successNum++; } casesRecommendLaunchImportDataDao.save(casesRecommendLaunchImportData); - successNum++; } + importData.setCaseTitleList(caseTitleList); + importData.setCaseIdList(caseIds); CasesRecommendLaunchImport casesRecommendLaunchImport = new CasesRecommendLaunchImport(); casesRecommendLaunchImport.setFailNum(failNum); - casesRecommendLaunchImport.setId(importId + ""); + casesRecommendLaunchImport.setImportId(importId); casesRecommendLaunchImport.setSuccessNum(successNum); casesRecommendLaunchImport.setTotalNum(totalNum); + casesRecommendLaunchImport.setProcessStatus(1); casesRecommendLaunchImportDao.save(casesRecommendLaunchImport); - return importId + ""; + return importData; } @Override public List downFailData(String importId) { - List dataList = casesRecommendLaunchImportDataDao.findList(FieldFilters.eq("import_id", importId)); + List dataList = casesRecommendLaunchImportDataDao.findList(FieldFilters.eq("importId", importId) + , FieldFilters.eq("status", 2)); if (CollectionUtil.isEmpty(dataList)) { - return Collections.emptyList(); + return null; } return dataList.stream().map(CasesRecommendLaunchImportData::getCaseTitle).collect(Collectors.toList()); } @Override - public CasesRecommendLaunchImport getById(String id) { - return casesRecommendLaunchImportDao.get(id); + public CasesRecommendLaunchImport getByImportId(String importId) { + return casesRecommendLaunchImportDao.findOne(FieldFilters.eq("importId", importId)); } + } 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 9cb93f9f..e11c6d7c 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 @@ -114,8 +114,8 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR record.setPushStatus(CasesPushStatusEnum.PUSH_REVOKE.getStatus()) ); } else { - recordList.stream().forEach(record -> - record.setPushStatus(CasesPushStatusEnum.PUSH_ING.getStatus()) + recordList.stream().filter(it -> CasesPushStatusEnum.PUSH_SUCCESS.getStatus() != it.getPushStatus()).forEach(record -> + record.setPushStatus(CasesPushStatusEnum.WAIT_PUSH.getStatus()) ); } if (CollectionUtil.isNotEmpty(recordList)) { 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 f07f31bf..a3fa701f 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 @@ -5,9 +5,12 @@ import com.xboe.common.PageList; import com.xboe.core.orm.FieldFilters; import com.xboe.core.orm.LikeMatchMode; import com.xboe.core.orm.QueryBuilder; +import com.xboe.enums.CasesPushStatusEnum; import com.xboe.module.boecase.dao.CasesRecommendDao; import com.xboe.module.boecase.entity.CasesRecommend; +import com.xboe.module.boecase.service.ICasesRecommendPushRecordService; import com.xboe.module.boecase.service.ICasesRecommendService; +import com.xboe.module.boecase.vo.CasesRecommendPushVo; import com.xboe.module.boecase.vo.CasesRecommendVo; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -22,20 +25,22 @@ public class CasesRecommendServiceImpl implements ICasesRecommendService { @Resource private CasesRecommendDao casesRecommendDao; + @Resource + private ICasesRecommendPushRecordService iCasesRecommendPushRecordService; @Override public PageList page(int pageIndex, int pageSize, CasesRecommendVo casesRecommendVo) { QueryBuilder query=QueryBuilder.from(CasesRecommend.class); query.addFilter(FieldFilters.eq("deleted",false)); if(StringUtils.isNotBlank(casesRecommendVo.getRecommendName())){ - query.addFilter(FieldFilters.like("recommendBy", LikeMatchMode.ANYWHERE, casesRecommendVo.getRecommendName())); + query.addFilter(FieldFilters.like("recommend_by", LikeMatchMode.ANYWHERE, casesRecommendVo.getRecommendName())); } if(!CollectionUtils.isEmpty(casesRecommendVo.getRecommendTimeList())){ - query.addFilter(FieldFilters.ge("recommendTime",casesRecommendVo.getRecommendTimeList().get(0))); - query.addFilter(FieldFilters.le("recommendTime",casesRecommendVo.getRecommendTimeList().get(1))); + query.addFilter(FieldFilters.ge("recommend_time",casesRecommendVo.getRecommendTimeList().get(0))); + query.addFilter(FieldFilters.le("recommend_time",casesRecommendVo.getRecommendTimeList().get(1))); } - query.addOrder(OrderCondition.desc("sysCreateTime")); + query.addOrder(OrderCondition.desc("sys_create_time")); query.setPageIndex(pageIndex); query.setPageSize(pageSize); PageList page = casesRecommendDao.findPage(query.builder()); @@ -51,4 +56,24 @@ public class CasesRecommendServiceImpl implements ICasesRecommendService { public CasesRecommend findById(String id) { return casesRecommendDao.get(id); } + + @Override + public void rePushOrWithdraw(CasesRecommendPushVo casesRecommendPushVo) { + // 查询 + CasesRecommend db = casesRecommendDao.get(casesRecommendPushVo.getCasesRecommendId()); + if (CasesPushStatusEnum.PUSH_SUCCESS.getStatus().equals(db.getPushProgress()) + || CasesPushStatusEnum.WAIT_PUSH.getStatus().equals(db.getPushProgress()) + || CasesPushStatusEnum.PUSH_ING.getStatus().equals(db.getPushProgress()) + ){ + // 当为推送成功时为 + iCasesRecommendPushRecordService.rePushOrWithdraw(true, casesRecommendPushVo.getCasesRecommendId()); + db.setPushProgress(CasesPushStatusEnum.PUSH_REVOKE.getStatus()); + }else if (CasesPushStatusEnum.PUSH_FAIL.getStatus().equals(db.getPushProgress()) + || CasesPushStatusEnum.PUSH_REVOKE.getStatus().equals(db.getPushProgress())){ + // 推送失败或者已撤回时 + iCasesRecommendPushRecordService.rePushOrWithdraw(false, casesRecommendPushVo.getCasesRecommendId()); + db.setPushProgress(CasesPushStatusEnum.WAIT_PUSH.getStatus()); + } + casesRecommendDao.update(db); + } } 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 a5045976..55eddf4d 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 @@ -1,32 +1,40 @@ package com.xboe.module.boecase.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.split.SplitIter; +import cn.hutool.core.util.StrUtil; import com.xboe.common.OrderCondition; +import com.xboe.common.OrderDirection; import com.xboe.common.PageList; import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.StringUtil; import com.xboe.core.orm.*; -import com.xboe.module.boecase.dao.CasesDao; -import com.xboe.module.boecase.dao.CasesMajorTypeDao; -import com.xboe.module.boecase.dao.CasesRecordDao; +import com.xboe.module.boecase.dao.*; import com.xboe.module.boecase.dto.*; import com.xboe.module.boecase.entity.Cases; import com.xboe.module.boecase.entity.CasesMajorType; +import com.xboe.module.boecase.entity.CasesRecommend; +import com.xboe.module.boecase.entity.CasesRecommendPushRecord; import com.xboe.module.boecase.service.ICasesService; import com.xboe.module.dict.dao.SysDictionaryDao; import com.xboe.module.dict.entity.DictItem; +import com.xboe.orm.CustomFieldInFilter; import com.xboe.school.vo.CasesVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import javax.transaction.Transactional; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; @Slf4j @Service @@ -45,6 +53,15 @@ public class CasesServiceImpl implements ICasesService { @Resource private CasesRecordDao casesRecordDao; + @Resource + private CasesMajorTypeRepoDao casesMajorTypeRepoDao; + + @Autowired + private CasesRecommendPushRecordDao casesRecommendPushRecordDao; + + @Autowired + private CasesRecommendDao casesRecommendDao; + /** * 案例分页查询,用于门户的查询 */ @@ -84,11 +101,7 @@ public class CasesServiceImpl implements ICasesService { filters.add(FieldFilters.isNotNull("filePath")); filters.add(FieldFilters.ne("filePath", "")); -// if(StringUtil.isNotBlank(caseVo.getMajorType())){ -// filters.add(FieldFilters.eq("majorType",caseVo.getMajorType())); -// } if (StringUtil.isNotBlank(caseVo.getMajorType())) { - QueryBuilder from = QueryBuilder.from(CasesMajorType.class); //前端直接字符串拼接传,后端转化数组 if (caseVo.getMajorType().contains(",")) { @@ -165,6 +178,156 @@ public class CasesServiceImpl implements ICasesService { */ @Override public PageList queryPageCasesV2(CasePageVo caseVo) { + + String keyword = caseVo.getKeyWord(); + QueryBuilder query = QueryBuilder.from(Cases.class); + PageList page = null; + List filters = 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())); + likes.add(FieldFilters.like("keyword2", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword3", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword4", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword5", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + List notInIds = caseVo.getNotInIds(); + if (CollUtil.isNotEmpty(notInIds)) { + filters.add(FieldFilters.notIn("id", notInIds)); + } + + if (StringUtil.isNotBlank(caseVo.getKeyWord())) { + filters.add(FieldFilters.or(likes)); + } + + //创建时间过滤 + List years = caseVo.getYears(); + if (CollUtil.isNotEmpty(years)) { + filters.add(new CustomFieldInFilter("YEAR(sysCreateTime)", "sysCreateTime", years)); + } + + //增加只是查询有附件的 + filters.add(FieldFilters.isNotNull("filePath")); + filters.add(FieldFilters.ne("filePath", "")); + + 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()); + query.addFilter(FieldFilters.in("id", caseIds)); + } else { + return page; + } + } + List orgDomainDtos = caseVo.getOrgDomainDtos(); + IFieldFilter orgDomain = null; + 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); + } + } + + if (i == 0) { + orgDomain = itemFilter; + } else { + orgDomain = FieldFilters.or(orgDomain, itemFilter); + } + } + } + if (Objects.nonNull(orgDomain)) { + filters.add(orgDomain); + } + + if (StringUtils.isNotBlank(caseVo.getCaseType())) { + filters.add(FieldFilters.eq("caseType", caseVo.getCaseType())); + } + if (caseVo.getIsTop() != null && caseVo.getIsTop()) { + query.addOrder(OrderCondition.desc("isTop")); + query.addOrder(OrderCondition.desc("topTime")); + } + //如果选择的是优秀案例,那么这里就按优秀案例的试试排序 + if (caseVo.getExcellent() != null) { + filters.add(FieldFilters.eq("excellent", caseVo.getExcellent())); + } + OrderCondition order = null; + if (StringUtils.isNotBlank(caseVo.getOrderField())) { + if (caseVo.getOrderAsc() == null || caseVo.getOrderAsc()) { + order = OrderCondition.asc(caseVo.getOrderField()); + } else { + order = OrderCondition.desc(caseVo.getOrderField()); + } + } else { + order = OrderCondition.desc("sysCreateTime"); + } + + query.addFilters(filters); + query.addOrder(order); + query.addOrder(OrderCondition.rand()); + query.setPageIndex(caseVo.getPageIndex()); + query.setPageSize(caseVo.getPageSize()); + page = casesDao.findPage(query.builder()); + List list = page.getList(); + if (CollUtil.isNotEmpty(list)) { + List caseIds = list.stream().map(Cases::getId).collect(Collectors.toList()); + QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class); + recommendCasesQuery.addField("new CasesRecommendPushRecord(recommendId,caseId)"); + List subFilters = new ArrayList<>(); + subFilters.add(FieldFilters.eq("pushUserId", caseVo.getUserId())); + subFilters.add(FieldFilters.in("caseId", caseIds)); + subFilters.add(FieldFilters.eq("pushStatus", 4)); + subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE)); + + QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters) + .addOrder("sysCreateTime", OrderDirection.DESC) + .addGroupBy("recommendId"); + List pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder()); + if (CollUtil.isNotEmpty(pushRecords)) { + List rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).collect(Collectors.toList()); + QueryBuilder builder = QueryBuilder.from(CasesRecommend.class); + builder.addField("new CasesRecommend(id,recommendOrgName)"); + List recommendFilters = new ArrayList<>(); + recommendFilters.add(FieldFilters.eq("deleted", Boolean.FALSE)); + recommendFilters.add(FieldFilters.in("id", rIds)); + builder.addFilters(recommendFilters); + List recommands = casesRecommendDao.findList(builder.builder()); + if (CollUtil.isNotEmpty(recommands)) { + Map collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), v -> v.getRecommendOrgName())); + list.forEach(it -> { + CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId())); + if (Objects.nonNull(one)) { + String recommendOrgName = collect.get(one.getRecommendId()); + it.setBreCommend(1); + it.setRecommendOrgName(recommendOrgName); + } else { + it.setBreCommend(0); + } + }); + } + } + + } + + return page; + } + + @Override + public PageList queryRecommendPageCasesV2(CasePageVo caseVo) { PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex(), caseVo.getPageSize()); Page cases = casesRecordDao.queryList(pageRequest, caseVo); PageList pageList = new PageList<>(); @@ -174,17 +337,6 @@ public class CasesServiceImpl implements ICasesService { return pageList; } - @Override - public PageList queryRecommendPageCasesV2(CasePageVo caseVo) { - PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex(), caseVo.getPageSize()); - Page cases = casesRecordDao.queryList(pageRequest, caseVo); - PageList pageList = new PageList<>(); - pageList.setCount((int) cases.getTotalElements()); - pageList.setPageSize(cases.getSize()); - pageList.setList(cases.getContent()); - return pageList; - } - /** * 案例分页查询,是否置顶 */ @@ -548,6 +700,8 @@ public class CasesServiceImpl implements ICasesService { cases.setPraises(0); cases.setShares(0); cases.setFavorites(0); + cases.setCites(0); + cases.setRecommends(0); StringBuffer stringBuffer = new StringBuffer(); List majorIds = cases.getMajorIds(); for (String s : majorIds) { diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendVo.java index 24988595..1d0ba10e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendVo.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendVo.java @@ -1,17 +1,18 @@ package com.xboe.module.boecase.vo; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xboe.common.Pagination; import lombok.Data; -import java.time.LocalDateTime; import java.util.List; @Data -public class CasesRecommendVo { +public class CasesRecommendVo extends Pagination { /** 推荐人姓名 */ private String recommendName; /** 推荐时间区间 */ - private List recommendTimeList; + private List recommendTimeList; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/orm/CustomFieldInFilter.java b/servers/boe-server-all/src/main/java/com/xboe/orm/CustomFieldInFilter.java new file mode 100644 index 00000000..997edcf7 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/orm/CustomFieldInFilter.java @@ -0,0 +1,26 @@ +package com.xboe.orm; + +import com.xboe.common.beans.KeyValue; +import com.xboe.core.orm.impl.FieldInFilter; + +import java.util.Collection; + +public class CustomFieldInFilter extends FieldInFilter { + + private String param; + + public CustomFieldInFilter(String name,String param, Collection values) { + super(name, values); + this.param = param; + } + + @Override + public String getNamed(String name, int order) { + return super.getNamed(param, order); + } + + @Override + public String getNamed(String pre, String name, int order) { + return super.getNamed(pre, param, order); + } +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/system/user/service/impl/MessageServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/system/user/service/impl/MessageServiceImpl.java index a474096a..b68b83ea 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/system/user/service/impl/MessageServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/system/user/service/impl/MessageServiceImpl.java @@ -1,24 +1,24 @@ package com.xboe.system.user.service.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; - import com.xboe.common.OrderCondition; -import com.xboe.core.orm.FilterCheckValue; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import com.xboe.common.PageList; import com.xboe.core.orm.FieldFilters; import com.xboe.core.orm.QueryBuilder; import com.xboe.core.orm.UpdateBuilder; +import com.xboe.module.boecase.dao.CasesRecommendPushRecordDao; +import com.xboe.module.boecase.entity.CasesRecommendPushRecord; import com.xboe.system.user.dao.MessageDao; import com.xboe.system.user.entity.Message; import com.xboe.system.user.service.IMessageService; -import com.xboe.system.user.vo.BatchMessage; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 消息 @@ -29,6 +29,9 @@ public class MessageServiceImpl implements IMessageService { @Resource private MessageDao dao; + @Resource + private CasesRecommendPushRecordDao casesRecommendPushRecordDao; + @Override public PageList query(int pageIndex, int pageSize, String aid, Boolean isRead) { QueryBuilder builder = QueryBuilder.from(Message.class); @@ -72,6 +75,14 @@ public class MessageServiceImpl implements IMessageService { Message message = dao.get(id); if(!message.getIsRead()){ dao.updateFieldById(id,"isRead",true); + + if("99".equals(message.getRefType())){ + casesRecommendPushRecordDao.update(UpdateBuilder.from(CasesRecommendPushRecord.class) + .addUpdateField("readFlag",1) + .addUpdateField("readStartTime",new Date()) + .addFilter(FieldFilters.eq("id",message.getRefId())) + .builder()); + } } return message; } @@ -94,6 +105,20 @@ public class MessageServiceImpl implements IMessageService { @Override @Transactional public void updateIsRead(List ids) { + if(CollectionUtils.isEmpty(ids)){ + return; + } + //更新最后读时间 + for (String id:ids){ + Message message = dao.get(id); + if("99".equals(message.getRefType())){ + casesRecommendPushRecordDao.update(UpdateBuilder.from(CasesRecommendPushRecord.class) + .addUpdateField("readEndTime",new Date()) + .addFilter(FieldFilters.eq("id",message.getRefId())) + .builder()); + } + } + dao.update(UpdateBuilder.from(Message.class) .addUpdateField("isRead",true) .addFilter(FieldFilters.in("id",ids)) @@ -141,13 +166,13 @@ public class MessageServiceImpl implements IMessageService { @Override public void cleanByAcceptId(String aid) { dao.deleteByField("acceptId", aid); - + } @Override @Transactional public void batchSave(List list) { - + // for(Message msg : list) { // // } diff --git a/servers/boe-server-all/src/main/resources/log/logback-dev.xml b/servers/boe-server-all/src/main/resources/log/logback-dev.xml index 4a26a112..00672a79 100644 --- a/servers/boe-server-all/src/main/resources/log/logback-dev.xml +++ b/servers/boe-server-all/src/main/resources/log/logback-dev.xml @@ -1,7 +1,7 @@ - + @@ -49,6 +49,8 @@ + + diff --git a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesMajorTypeRepoDaoTest.java b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesMajorTypeRepoDaoTest.java new file mode 100644 index 00000000..38a3d4d3 --- /dev/null +++ b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesMajorTypeRepoDaoTest.java @@ -0,0 +1,28 @@ +package com.xboe.module.boecase.dao; + +import com.xboe.module.boecase.entity.CasesMajorType; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +@ActiveProfiles("dev") +class CasesMajorTypeRepoDaoTest { + + @Autowired + private CasesMajorTypeRepoDao casesMajorTypeRepoDao; + + @Test + void findCasesBy() { + ArrayList params = new ArrayList<>(); + params.add("27737267694995149"); + List majorTypes = casesMajorTypeRepoDao.findCasesBy(params); + System.out.println(majorTypes); + } +} \ No newline at end of file diff --git a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java new file mode 100644 index 00000000..5dec4da4 --- /dev/null +++ b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java @@ -0,0 +1,21 @@ +package com.xboe.module.boecase.dao; + +import com.xboe.module.boecase.dto.CasePageVo; +import com.xboe.module.boecase.entity.Cases; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.context.ActiveProfiles; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +@ActiveProfiles("dev") +class CasesRecordDaoTest { + + @Autowired + private CasesRecordDao casesRecordDao; + +} \ No newline at end of file diff --git a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java new file mode 100644 index 00000000..099018d4 --- /dev/null +++ b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java @@ -0,0 +1,33 @@ +package com.xboe.module.boecase.service.impl; + +import cn.hutool.core.collection.ListUtil; +import com.xboe.common.PageList; +import com.xboe.module.boecase.dto.CasePageVo; +import com.xboe.module.boecase.entity.Cases; +import com.xboe.module.boecase.service.ICasesService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +@ActiveProfiles("dev") +class CasesServiceImplTest { + + @Autowired + private ICasesService casesService; + + @Test + void queryPageCasesV2() { + CasePageVo pageVo = new CasePageVo(); +// pageVo.setYears(ListUtil.toList(2023)); + pageVo.setPageIndex(1); + pageVo.setPageSize(10); + pageVo.setUserId("199"); + pageVo.setExcellent(Boolean.TRUE); + PageList casesV2 = casesService.queryPageCasesV2(pageVo); + System.out.println(casesV2); + } +} \ No newline at end of file diff --git a/servers/boe-server-task/src/main/java/com/xboe/constants/CasesPushStatusEnum.java b/servers/boe-server-task/src/main/java/com/xboe/constants/CasesPushStatusEnum.java new file mode 100644 index 00000000..5112411a --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/constants/CasesPushStatusEnum.java @@ -0,0 +1,40 @@ +package com.xboe.constants; + +/** + * @author : civism + * @version 1.0 + * @date 2023/6/17 16:13 + */ +public enum CasesPushStatusEnum { + + /** + * 推送状态1未推送2推送中3已推送4推送失败5已撤回 + */ + WAIT_PUSH(1,"未推送"), + PUSH_ING(2,"推送中"), + PUSH_SUCCESS(3,"已推送"), + PUSH_FAIL(4,"推送失败"), + PUSH_REVOKE(5,"已撤回"), + + ; + + + CasesPushStatusEnum(Integer status, String desc) { + this.status = status; + this.desc = desc; + } + + private Integer status; + + + private String desc; + + + public Integer getStatus() { + return status; + } + + public String getDesc() { + return desc; + } +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/dao/CasesRecommendDao.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/dao/CasesRecommendDao.java new file mode 100644 index 00000000..974bb579 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/dao/CasesRecommendDao.java @@ -0,0 +1,10 @@ +package com.xboe.module.cases.dao; + +import com.xboe.core.orm.BaseDao; +import com.xboe.module.cases.entity.CasesRecommend; +import org.springframework.stereotype.Repository; + +@Repository +public class CasesRecommendDao extends BaseDao { +} + diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/dao/CasesRecommendPushRecordDao.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/dao/CasesRecommendPushRecordDao.java new file mode 100644 index 00000000..d811200a --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/dao/CasesRecommendPushRecordDao.java @@ -0,0 +1,9 @@ +package com.xboe.module.cases.dao; + +import com.xboe.core.orm.BaseDao; +import com.xboe.module.cases.entity.CasesRecommendPushRecord; +import org.springframework.stereotype.Repository; + +@Repository +public class CasesRecommendPushRecordDao extends BaseDao { +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/entity/CasesRecommend.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/entity/CasesRecommend.java new file mode 100644 index 00000000..a3032134 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/entity/CasesRecommend.java @@ -0,0 +1,56 @@ +package com.xboe.module.cases.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xboe.core.SysConstant; +import com.xboe.core.orm.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import java.time.LocalDateTime; + +/** + * 案例推荐表 + * */ +@Data +@Entity +@EqualsAndHashCode(callSuper = false) +@Table(name = SysConstant.TABLE_PRE+"cases_recommend") +public class CasesRecommend extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /**推荐人ID*/ + @Column(name = "recommend_id",nullable = false,length = 100) + private String recommendId; + + /**推荐人*/ + @Column(name = "recommend_by", length = 255) + private String recommendBy; + + /**推荐时间*/ + @Column(name = "recommend_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime recommendTime; + /**案例数*/ + @Column(name = "case_count",length = 11) + private Integer caseCount; + /**用户数*/ + @Column(name = "user_count",length = 11) + private Integer userCount; + /**推送进度*/ + @Column(name = "push_progress", length = 255) + private String pushProgress; + /**查看率*/ + @Column(name = "view_rate", length = 255) + private String viewRate; + /**推荐组织ID*/ + @Column(name = "recommend_org_id", length = 20) + private String recommendOrgId; + + /**推荐组织名称*/ + @Column(name = "recommend_org_name", length = 255) + private String recommendOrgName; +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/entity/CasesRecommendPushRecord.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/entity/CasesRecommendPushRecord.java new file mode 100644 index 00000000..e7c2e16f --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/entity/CasesRecommendPushRecord.java @@ -0,0 +1,95 @@ +package com.xboe.module.cases.entity; + +import com.xboe.core.SysConstant; +import com.xboe.core.orm.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import java.util.Date; + +/** + * 案例推荐发起导入 + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = false) +@Table(name = SysConstant.TABLE_PRE + "cases_recommend_push_record") +public class CasesRecommendPushRecord extends BaseEntity { + + /** + * 推送id + */ + @Column(name = "recommend_id") + private String recommendId; + + /** + * 案例id + */ + @Column(name = "case_id") + private String caseId; + + + /** + * 案例标题 + */ + @Column(name = "case_title") + private String caseTitle; + + + /** + * 推送用户id + */ + @Column(name = "push_user_id") + private String pushUserId; + + + /** + * 推送用户名称 + */ + @Column(name = "push_user_name") + private String pushUserName; + + + /** + * 推送状态1未推送2推送中3已推送4推送失败5已撤回 + */ + @Column(name = "push_status") + private Integer pushStatus; + + + /** + * 推送时间 + */ + @Column(name = "push_time") + private Date pushTime; + + + /** + * 查看标识 + */ + @Column(name = "read_flag") + private Integer readFlag; + + /** + * 首次查看时间 + */ + @Column(name = "read_start_time") + private Date readStartTime; + + /** + * 最后查看时间 + */ + @Column(name = "read_end_time") + private Date readEndTime; + + /** + * 备注 + */ + @Column(name = "remark") + private String remark; + + +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/ICasesRecommendPushRecordService.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/ICasesRecommendPushRecordService.java new file mode 100644 index 00000000..6f827539 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/ICasesRecommendPushRecordService.java @@ -0,0 +1,24 @@ +package com.xboe.module.cases.service; + +import com.xboe.module.cases.entity.CasesRecommendPushRecord; + +import java.util.List; + +public interface ICasesRecommendPushRecordService { + + /** + * 查询推送纪录通过推送状态 + * + * @param pushStatusList + * @return + */ + List queryPushRecordByPushStatus(List pushStatusList); + + + /** + * 修改 + * @param casesRecommendPushRecord + * @return + */ + boolean update(CasesRecommendPushRecord casesRecommendPushRecord); +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/ICasesRecommendService.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/ICasesRecommendService.java new file mode 100644 index 00000000..6d57d469 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/ICasesRecommendService.java @@ -0,0 +1,25 @@ +package com.xboe.module.cases.service; + +import com.xboe.module.cases.entity.CasesRecommend; + +import java.util.List; + +public interface ICasesRecommendService { + + /** + * 通过推送状态查询 + * + * @param pushProgress + * @return + */ + List queryByPushProgress(String pushProgress); + + /** + * 修改 + * + * @param casesRecommend + * @return + */ + boolean update(CasesRecommend casesRecommend); + +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/impl/CasesRecommendPushRecordServiceImpl.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/impl/CasesRecommendPushRecordServiceImpl.java new file mode 100644 index 00000000..a2d59f44 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/impl/CasesRecommendPushRecordServiceImpl.java @@ -0,0 +1,28 @@ +package com.xboe.module.cases.service.impl; + +import com.xboe.core.orm.FieldFilters; +import com.xboe.module.cases.dao.CasesRecommendPushRecordDao; +import com.xboe.module.cases.entity.CasesRecommendPushRecord; +import com.xboe.module.cases.service.ICasesRecommendPushRecordService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushRecordService { + + @Resource + private CasesRecommendPushRecordDao casesRecommendPushRecordDao; + + @Override + public List queryPushRecordByPushStatus(List pushStatusList) { + return casesRecommendPushRecordDao.getGenericDao().findList(CasesRecommendPushRecord.class, FieldFilters.in("push_status", pushStatusList)); + } + + + @Override + public boolean update(CasesRecommendPushRecord casesRecommendPushRecord) { + return casesRecommendPushRecordDao.getGenericDao().update(casesRecommendPushRecord) != null; + } +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/impl/CasesRecommendServiceImpl.java b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/impl/CasesRecommendServiceImpl.java new file mode 100644 index 00000000..1c1cf224 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/module/cases/service/impl/CasesRecommendServiceImpl.java @@ -0,0 +1,28 @@ +package com.xboe.module.cases.service.impl; + +import com.xboe.core.orm.FieldFilters; +import com.xboe.module.cases.dao.CasesRecommendDao; +import com.xboe.module.cases.entity.CasesRecommend; +import com.xboe.module.cases.service.ICasesRecommendService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class CasesRecommendServiceImpl implements ICasesRecommendService { + + @Resource + private CasesRecommendDao casesRecommendDao; + + @Override + public List queryByPushProgress(String pushProgress) { + return casesRecommendDao.getGenericDao().findList(CasesRecommend.class, FieldFilters.eq("push_progress", pushProgress)); + } + + + @Override + public boolean update(CasesRecommend casesRecommend) { + return casesRecommendDao.getGenericDao().update(casesRecommend) != null; + } +} diff --git a/servers/boe-server-task/src/main/java/com/xboe/task/CasesRecommendPushSchedule.java b/servers/boe-server-task/src/main/java/com/xboe/task/CasesRecommendPushSchedule.java new file mode 100644 index 00000000..7546b148 --- /dev/null +++ b/servers/boe-server-task/src/main/java/com/xboe/task/CasesRecommendPushSchedule.java @@ -0,0 +1,96 @@ +package com.xboe.task; + +import com.xboe.constants.CasesPushStatusEnum; +import com.xboe.core.event.IEventDataSender; +import com.xboe.module.cases.entity.CasesRecommend; +import com.xboe.module.cases.entity.CasesRecommendPushRecord; +import com.xboe.module.cases.service.ICasesRecommendPushRecordService; +import com.xboe.module.cases.service.ICasesRecommendService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author : civism + * @version 1.0 + * @date 2023/6/18 10:50 + */ +@EnableScheduling +@Component("com.xboe.casetask.CasesRecommendPushSchedule") +@Slf4j +public class CasesRecommendPushSchedule { + + + @Resource + private ICasesRecommendService casesRecommendService; + + + @Resource + private ICasesRecommendPushRecordService casesRecommendPushRecordService; + + @Resource + private IEventDataSender eventDataSender; + + + /** + * 每分钟执行一次 + */ + @Scheduled(cron = "0 * * * * ? ") + public void execute() { + List casesRecommends = casesRecommendService.queryByPushProgress(CasesPushStatusEnum.WAIT_PUSH.name()); + if (CollectionUtils.isEmpty(casesRecommends)) { + log.warn("没有推送纪录,无需推送"); + return; + } + for (CasesRecommend casesRecommend : casesRecommends) { + List pushStatusList = new ArrayList<>(); + pushStatusList.add(CasesPushStatusEnum.WAIT_PUSH.getStatus()); + pushStatusList.add(CasesPushStatusEnum.WAIT_PUSH.getStatus()); + List casesRecommendPushRecords = casesRecommendPushRecordService.queryPushRecordByPushStatus(pushStatusList); + if (CollectionUtils.isEmpty(casesRecommendPushRecords)) { + //修改为推送完成 --- 无数据 无需推送 + CasesRecommend tempUpdate = new CasesRecommend(); + tempUpdate.setId(casesRecommend.getId()); + tempUpdate.setPushProgress(CasesPushStatusEnum.PUSH_SUCCESS.name()); + casesRecommendService.update(tempUpdate); + continue; + } + //修改为推送中 + CasesRecommend tempUpdate = new CasesRecommend(); + tempUpdate.setId(casesRecommend.getId()); + tempUpdate.setPushProgress(CasesPushStatusEnum.PUSH_ING.name()); + casesRecommendService.update(tempUpdate); + + for (CasesRecommendPushRecord casesRecommendPushRecord : casesRecommendPushRecords) { + + CasesRecommendPushRecord pushRecordTemp = new CasesRecommendPushRecord(); + pushRecordTemp.setId(casesRecommendPushRecord.getId()); + pushRecordTemp.setPushTime(new Date()); + try { + + eventDataSender.send("案例推荐", "recommendCases", "案例推荐【" + casesRecommendPushRecord.getCaseTitle() + "】", + casesRecommendPushRecord.getCaseId(), "99", casesRecommendPushRecord.getCaseTitle(), + casesRecommendPushRecord.getSysCreateAid(), casesRecommendPushRecord.getSysCreateBy(), ""); + + pushRecordTemp.setPushStatus(CasesPushStatusEnum.PUSH_SUCCESS.getStatus()); + } catch (Exception e) { + pushRecordTemp.setPushStatus(CasesPushStatusEnum.PUSH_FAIL.getStatus()); + } + casesRecommendPushRecordService.update(pushRecordTemp); + } + + //修改为推送完成 --- 无数据 无需推送 + CasesRecommend finishTemp = new CasesRecommend(); + finishTemp.setId(casesRecommend.getId()); + finishTemp.setPushProgress(CasesPushStatusEnum.PUSH_SUCCESS.name()); + casesRecommendService.update(finishTemp); + } + } +}