diff --git a/servers/boe-server-all/pom.xml b/servers/boe-server-all/pom.xml
index e0f2844b..faacfc00 100644
--- a/servers/boe-server-all/pom.xml
+++ b/servers/boe-server-all/pom.xml
@@ -17,6 +17,11 @@
1.8
+
+ cn.hutool
+ hutool-all
+ 5.8.16
+
com.xboe
xboe-api
diff --git a/servers/boe-server-all/src/main/java/com/xboe/enums/CasesPushStatusEnum.java b/servers/boe-server-all/src/main/java/com/xboe/enums/CasesPushStatusEnum.java
new file mode 100644
index 00000000..f5f74074
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/enums/CasesPushStatusEnum.java
@@ -0,0 +1,40 @@
+package com.xboe.enums;
+
+/**
+ * @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-all/src/main/java/com/xboe/enums/CasesRecommendLaunchTypeEnum.java b/servers/boe-server-all/src/main/java/com/xboe/enums/CasesRecommendLaunchTypeEnum.java
new file mode 100644
index 00000000..5414d969
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/enums/CasesRecommendLaunchTypeEnum.java
@@ -0,0 +1,35 @@
+package com.xboe.enums;
+
+/**
+ * @author : civism
+ * @version 1.0
+ * @date 2023/6/17 16:22
+ */
+public enum CasesRecommendLaunchTypeEnum {
+
+ /**
+ * 发起类型 1 正常选择 2 文件导入
+ */
+ COMMON(1, "正常选择"),
+ IMPORT(2, "文件导入"),
+ ;
+
+
+ private Integer launchType;
+
+ private String desc;
+
+
+ CasesRecommendLaunchTypeEnum(Integer launchType, String desc) {
+ this.launchType = launchType;
+ this.desc = desc;
+ }
+
+ public Integer getLaunchType() {
+ return launchType;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+}
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
new file mode 100644
index 00000000..b9083604
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java
@@ -0,0 +1,157 @@
+package com.xboe.module.boecase.api;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.StrUtil;
+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.CasesRecommendLaunchTypeEnum;
+import com.xboe.module.boecase.entity.CasesRecommend;
+import com.xboe.module.boecase.entity.CasesRecommendLaunchImport;
+import com.xboe.module.boecase.service.ICasesRecommendLaunchImportService;
+import com.xboe.module.boecase.service.ICasesRecommendPushRecordService;
+import com.xboe.module.boecase.service.ICasesRecommendService;
+import com.xboe.module.boecase.vo.CasesRecommendLaunchVo;
+import com.xboe.module.boecase.vo.CasesRecommendVo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 案例推荐表
+ */
+@Slf4j
+@RestController
+@RequestMapping(value = "xboe/m/boe/cases/recommend")
+public class CasesRecommendApi extends ApiBaseController {
+
+ @Resource
+ private ICasesRecommendService iCasesRecommendService;
+
+ @Resource
+ private ICasesRecommendLaunchImportService iCasesRecommendLaunchImportService;
+
+ @Resource
+ private ICasesRecommendPushRecordService iCasesRecommendPushRecordService;
+
+ /**
+ * 用于后台管理分页
+ *
+ * @param pager
+ * @param casesRecommendVo
+ * @return
+ */
+ @PostMapping("/page")
+ public JsonResponse> page(Pagination pager, CasesRecommendVo casesRecommendVo) {
+ PageList page = iCasesRecommendService.page(pager.getPageIndex(), pager.getPageSize(), casesRecommendVo);
+ return success(page);
+ }
+
+ @PostMapping("/delete")
+ public JsonResponse delete(String id) {
+ if (StringUtils.isBlank(id)) {
+ return badRequest("缺少必要参数");
+ }
+ try {
+ iCasesRecommendService.delete(id);
+ return success(true);
+ } catch (Exception e) {
+ log.error("删除失败", e);
+ return error("删除失败", e.getMessage());
+ }
+ }
+
+
+ /**
+ * 获取导入纪录
+ *
+ * @return
+ * @throws Exception
+ */
+ @GetMapping("/import-info")
+ public JsonResponse excelImport(String importId) {
+ CasesRecommendLaunchImport byId = iCasesRecommendLaunchImportService.getById(importId);
+ return success(byId);
+ }
+
+
+ /**
+ * 导入
+ *
+ * @param file
+ * @return
+ * @throws Exception
+ */
+ @PostMapping("/import")
+ 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);
+ }
+
+
+ /**
+ * 下载错误数据
+ *
+ * @return
+ * @throws Exception
+ */
+ @GetMapping("/download")
+ public void download(String importId, HttpServletResponse response) throws Exception {
+
+ List dataList = iCasesRecommendLaunchImportService.downFailData(importId);
+
+ // 通过工具类创建writer,默认创建xls格式
+ ExcelWriter writer = ExcelUtil.getWriter();
+
+ writer.writeHeadRow(ListUtil.toList("标题"));
+ writer.write(dataList);
+ response.setContentType("application/vnd.ms-excel;charset=utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=failData.xls");
+ ServletOutputStream out = response.getOutputStream();
+
+ writer.flush(out, true);
+ writer.close();
+ IoUtil.close(out);
+
+ }
+
+
+ /**
+ * 发起推送
+ *
+ * @param casesRecommendLaunch
+ * @return
+ */
+ @PostMapping("/launch")
+ public JsonResponse excelImport(@RequestBody CasesRecommendLaunchVo casesRecommendLaunch) {
+ if (CasesRecommendLaunchTypeEnum.COMMON.getLaunchType().equals(casesRecommendLaunch.getLaunchType()) || CasesRecommendLaunchTypeEnum.IMPORT.getLaunchType().equals(casesRecommendLaunch.getLaunchType())) {
+ throw new RuntimeException("参数错误");
+ }
+ if (CasesRecommendLaunchTypeEnum.COMMON.getLaunchType().equals(casesRecommendLaunch.getLaunchType()) && CollectionUtil.isEmpty(casesRecommendLaunch.getCasesIdList())) {
+ throw new RuntimeException("推送案例id不能为空");
+ } else if (CasesRecommendLaunchTypeEnum.IMPORT.getLaunchType().equals(casesRecommendLaunch.getLaunchType()) && StrUtil.isEmpty(casesRecommendLaunch.getImportId())) {
+ throw new RuntimeException("导入id不能为空");
+ }
+ if (CollectionUtil.isEmpty(casesRecommendLaunch.getPushUserIdList())) {
+ throw new RuntimeException("参数错误");
+ }
+
+ return success(iCasesRecommendPushRecordService.launchPush(casesRecommendLaunch));
+ }
+
+
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/RecommendApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/RecommendApi.java
index c23a7d55..0200fc26 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/RecommendApi.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/RecommendApi.java
@@ -1,14 +1,5 @@
package com.xboe.module.boecase.api;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
import com.xboe.common.utils.StringUtil;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
@@ -16,12 +7,18 @@ import com.xboe.core.log.AutoLog;
import com.xboe.module.boecase.dto.AcceptVo;
import com.xboe.module.boecase.entity.Recommend;
import com.xboe.module.boecase.service.IRecommendService;
-
import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
/**
* 案例推荐表
- * */
+ */
@Slf4j
@RestController
@RequestMapping(value = "xboe/m/boe/recommend")
@@ -29,32 +26,33 @@ public class RecommendApi extends ApiBaseController {
@Resource
private IRecommendService recommendService;
+
/**
* 推荐
- * */
+ */
@PostMapping("/save")
- @AutoLog(module = "案例推荐",action = "推荐案例",info = "推荐案例")
- public JsonResponse save(String id, AcceptVo acceptVo){
- if(StringUtil.isBlank(id)){
+ @AutoLog(module = "案例推荐", action = "推荐案例", info = "推荐案例")
+ public JsonResponse save(String id, AcceptVo acceptVo) {
+ if (StringUtil.isBlank(id)) {
return badRequest("缺少案例id");
}
try {
- recommendService.save(id,acceptVo);
+ recommendService.save(id, acceptVo);
return success(true);
} catch (Exception e) {
- log.error("推荐失败",e);
- return error("推荐失败",e.getMessage());
+ log.error("推荐失败", e);
+ return error("推荐失败", e.getMessage());
}
}
+
/**
* 推荐列表
- * */
+ */
@GetMapping("/query")
- public JsonResponse> selectRecommend(){
+ public JsonResponse> selectRecommend() {
List recommends = recommendService.selectRecommend();
return success(recommends);
}
-
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesDao.java
index e5dc25a0..21b0a098 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesDao.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesDao.java
@@ -1,32 +1,37 @@
package com.xboe.module.boecase.dao;
-import java.util.List;
-
-import org.springframework.stereotype.Repository;
-
import com.xboe.common.OrderCondition;
import com.xboe.common.PageList;
import com.xboe.core.orm.BaseDao;
+import com.xboe.core.orm.FieldFilters;
import com.xboe.core.orm.IFieldFilter;
import com.xboe.module.boecase.entity.Cases;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
@Repository
public class CasesDao extends BaseDao {
/**
* 案例列表分页
- * */
- public PageList queryPageCases(int pageIndex, int pageSize, String keyWord,OrderCondition order, List filters){
+ */
+ public PageList queryPageCases(int pageIndex, int pageSize, String keyWord, OrderCondition order, List filters) {
PageList page = this.getGenericDao().findPage(pageIndex, pageSize, getEntityClass(), filters, order);
return page;
}
+
/**
* 案例列表置顶分页*
- * */
- public PageList queryPageIsTop(int pageIndex,int pageSize,String keyWord,OrderCondition order,List filters){
+ */
+ public PageList queryPageIsTop(int pageIndex, int pageSize, String keyWord, OrderCondition order, List filters) {
PageList page = this.getGenericDao().findPage(pageIndex, pageSize, getEntityClass(), filters, order);
return page;
}
+ public Cases getByTitle(String title) {
+ return this.getGenericDao().findOne(Cases.class, FieldFilters.eq("title", title));
+ }
+
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendDao.java
new file mode 100644
index 00000000..69685510
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendDao.java
@@ -0,0 +1,10 @@
+package com.xboe.module.boecase.dao;
+
+import com.xboe.core.orm.BaseDao;
+import com.xboe.module.boecase.entity.CasesRecommend;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class CasesRecommendDao extends BaseDao {
+}
+
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendLaunchImportDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendLaunchImportDao.java
new file mode 100644
index 00000000..c350d138
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendLaunchImportDao.java
@@ -0,0 +1,9 @@
+package com.xboe.module.boecase.dao;
+
+import com.xboe.core.orm.BaseDao;
+import com.xboe.module.boecase.entity.CasesRecommendLaunchImport;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class CasesRecommendLaunchImportDao extends BaseDao {
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendLaunchImportDataDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendLaunchImportDataDao.java
new file mode 100644
index 00000000..6d90bbb4
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendLaunchImportDataDao.java
@@ -0,0 +1,9 @@
+package com.xboe.module.boecase.dao;
+
+import com.xboe.core.orm.BaseDao;
+import com.xboe.module.boecase.entity.CasesRecommendLaunchImportData;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class CasesRecommendLaunchImportDataDao extends BaseDao {
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendPushRecordDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendPushRecordDao.java
new file mode 100644
index 00000000..3eb8fba2
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecommendPushRecordDao.java
@@ -0,0 +1,9 @@
+package com.xboe.module.boecase.dao;
+
+import com.xboe.core.orm.BaseDao;
+import com.xboe.module.boecase.entity.CasesRecommendPushRecord;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class CasesRecommendPushRecordDao extends BaseDao {
+}
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
new file mode 100644
index 00000000..8ba103f8
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommend.java
@@ -0,0 +1,56 @@
+package com.xboe.module.boecase.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-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
new file mode 100644
index 00000000..0c593482
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImport.java
@@ -0,0 +1,45 @@
+package com.xboe.module.boecase.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;
+
+/**
+ * 案例推荐发起导入
+ */
+@Data
+@Entity
+@EqualsAndHashCode(callSuper = false)
+@Table(name = SysConstant.TABLE_PRE + "cases_recommend_launch_import")
+public class CasesRecommendLaunchImport extends BaseEntity {
+
+ /**
+ * 总条数
+ */
+ @Column(name = "total_num",length = 20)
+ private Integer totalNum;
+
+ /**
+ * 成功条数
+ */
+ @Column(name = "success_num",length = 20)
+ private Integer successNum;
+
+ /**
+ * 失败条数
+ */
+ @Column(name = "fail_num",length = 20)
+ private Integer failNum;
+
+ /**
+ * 上传状态1进行中2成功3失败
+ */
+ @Column(name = "process_status",length = 20)
+ private Integer processStatus;
+
+}
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
new file mode 100644
index 00000000..66e342c5
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendLaunchImportData.java
@@ -0,0 +1,45 @@
+package com.xboe.module.boecase.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;
+
+/**
+ * 案例推荐发起导入
+ */
+@Data
+@Entity
+@EqualsAndHashCode(callSuper = false)
+@Table(name = SysConstant.TABLE_PRE + "cases_recommend_launch_import")
+public class CasesRecommendLaunchImportData extends BaseEntity {
+
+ /**
+ * 导入id
+ */
+ @Column(name = "import_id", length = 20)
+ private String importId;
+
+ /**
+ * 导入类容第一例标题
+ */
+ @Column(name = "case_title")
+ private String caseTitle;
+
+ /**
+ * 导入类容匹配的案例id
+ */
+ @Column(name = "case_id")
+ private String caseId;
+
+ /**
+ * 状态1成功2失败
+ */
+ @Column(name = "status")
+ private Integer status;
+
+}
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
new file mode 100644
index 00000000..8761d514
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java
@@ -0,0 +1,95 @@
+package com.xboe.module.boecase.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 Integer 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-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportDataService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportDataService.java
new file mode 100644
index 00000000..99b362aa
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportDataService.java
@@ -0,0 +1,7 @@
+package com.xboe.module.boecase.service;
+
+
+
+public interface ICasesRecommendLaunchImportDataService {
+
+}
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
new file mode 100644
index 00000000..6b784dd0
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendLaunchImportService.java
@@ -0,0 +1,35 @@
+package com.xboe.module.boecase.service;
+
+
+import com.xboe.module.boecase.entity.CasesRecommendLaunchImport;
+
+import java.util.List;
+
+public interface ICasesRecommendLaunchImportService {
+
+ /**
+ * 导入数据
+ *
+ * @param dataList
+ * @return
+ */
+ String importData(List> dataList);
+
+
+ /**
+ * 下载失败的数据
+ *
+ * @param importId
+ * @return
+ */
+ List downFailData(String importId);
+
+ /**
+ * 获取导入结果信息
+ *
+ * @param id
+ * @return
+ */
+ CasesRecommendLaunchImport getById(String id);
+
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendPushRecordService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendPushRecordService.java
new file mode 100644
index 00000000..86bb4715
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendPushRecordService.java
@@ -0,0 +1,16 @@
+package com.xboe.module.boecase.service;
+
+import com.xboe.module.boecase.vo.CasesRecommendLaunchVo;
+
+public interface ICasesRecommendPushRecordService {
+
+
+ /**
+ * 案例推送
+ *
+ * @param casesRecommendLaunch
+ * @return
+ */
+ boolean launchPush(CasesRecommendLaunchVo casesRecommendLaunch);
+
+}
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
new file mode 100644
index 00000000..fbfc2b3e
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java
@@ -0,0 +1,22 @@
+package com.xboe.module.boecase.service;
+
+import com.xboe.common.PageList;
+import com.xboe.module.boecase.entity.CasesRecommend;
+import com.xboe.module.boecase.vo.CasesRecommendVo;
+
+public interface ICasesRecommendService {
+ /**
+ * 分页并查询案例推荐列表
+ * @param pageIndex
+ * @param pageSize
+ * @param casesRecommendVo
+ * @return
+ */
+ PageList page(int pageIndex, int pageSize, CasesRecommendVo casesRecommendVo);
+
+ /**
+ * 删除
+ * @param id
+ */
+ void delete(String id);
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportDataServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportDataServiceImpl.java
new file mode 100644
index 00000000..3de47775
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportDataServiceImpl.java
@@ -0,0 +1,10 @@
+package com.xboe.module.boecase.service.impl;
+
+
+import com.xboe.module.boecase.service.ICasesRecommendLaunchImportDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CasesRecommendLaunchImportDataServiceImpl implements ICasesRecommendLaunchImportDataService {
+
+}
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
new file mode 100644
index 00000000..02083a94
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendLaunchImportServiceImpl.java
@@ -0,0 +1,83 @@
+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.module.boecase.dao.CasesDao;
+import com.xboe.module.boecase.dao.CasesRecommendLaunchImportDao;
+import com.xboe.module.boecase.dao.CasesRecommendLaunchImportDataDao;
+import com.xboe.module.boecase.entity.Cases;
+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 javax.annotation.Resource;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class CasesRecommendLaunchImportServiceImpl implements ICasesRecommendLaunchImportService {
+
+ @Resource
+ private CasesRecommendLaunchImportDao casesRecommendLaunchImportDao;
+
+ @Resource
+ private CasesRecommendLaunchImportDataDao casesRecommendLaunchImportDataDao;
+
+ @Resource
+ private CasesDao casesDao;
+
+ @Override
+ public String importData(List> dataList) {
+ if (CollectionUtil.isEmpty(dataList)) {
+ throw new RuntimeException("导入数据为空");
+ }
+ int totalNum = dataList.size();
+ int successNum = 0;
+ int failNum = 0;
+ Long importId = IdUtil.getSnowflakeNextId();
+
+ for (int i = 1; i < dataList.size(); i++) {
+ String caseTitle = dataList.get(i).get(0).toString();
+ CasesRecommendLaunchImportData casesRecommendLaunchImportData = new CasesRecommendLaunchImportData();
+ casesRecommendLaunchImportData.setImportId(importId + "");
+ casesRecommendLaunchImportData.setCaseTitle(caseTitle);
+ Cases cases = casesDao.getByTitle(caseTitle);
+ if (cases == null) {
+ failNum++;
+ casesRecommendLaunchImportData.setStatus(2);
+ } else {
+ casesRecommendLaunchImportData.setStatus(1);
+ casesRecommendLaunchImportData.setCaseTitle(caseTitle);
+ }
+ casesRecommendLaunchImportDataDao.save(casesRecommendLaunchImportData);
+ successNum++;
+ }
+ CasesRecommendLaunchImport casesRecommendLaunchImport = new CasesRecommendLaunchImport();
+ casesRecommendLaunchImport.setFailNum(failNum);
+ casesRecommendLaunchImport.setId(importId + "");
+ casesRecommendLaunchImport.setSuccessNum(successNum);
+ casesRecommendLaunchImport.setTotalNum(totalNum);
+ casesRecommendLaunchImportDao.save(casesRecommendLaunchImport);
+ return importId + "";
+ }
+
+
+ @Override
+ public List downFailData(String importId) {
+
+ List dataList = casesRecommendLaunchImportDataDao.findList(FieldFilters.eq("import_id", importId));
+ if (CollectionUtil.isEmpty(dataList)) {
+ return Collections.emptyList();
+ }
+ return dataList.stream().map(CasesRecommendLaunchImportData::getCaseTitle).collect(Collectors.toList());
+ }
+
+ @Override
+ public CasesRecommendLaunchImport getById(String id) {
+ return casesRecommendLaunchImportDao.get(id);
+ }
+}
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
new file mode 100644
index 00000000..24379ec2
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java
@@ -0,0 +1,96 @@
+package com.xboe.module.boecase.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.xboe.core.orm.FieldFilters;
+import com.xboe.data.dto.UserData;
+import com.xboe.data.outside.IOutSideDataService;
+import com.xboe.enums.CasesPushStatusEnum;
+import com.xboe.module.boecase.dao.CasesDao;
+import com.xboe.module.boecase.dao.CasesRecommendDao;
+import com.xboe.module.boecase.dao.CasesRecommendLaunchImportDataDao;
+import com.xboe.module.boecase.dao.CasesRecommendPushRecordDao;
+import com.xboe.module.boecase.entity.Cases;
+import com.xboe.module.boecase.entity.CasesRecommend;
+import com.xboe.module.boecase.entity.CasesRecommendLaunchImportData;
+import com.xboe.module.boecase.entity.CasesRecommendPushRecord;
+import com.xboe.module.boecase.service.ICasesRecommendPushRecordService;
+import com.xboe.module.boecase.vo.CasesRecommendLaunchVo;
+import com.xboe.system.user.dao.UserDao;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+@Transactional
+public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushRecordService {
+
+
+ @Resource
+ private UserDao userDao;
+
+ @Resource
+ private IOutSideDataService outSideDataService;
+
+ @Resource
+ private CasesDao casesDao;
+
+ @Resource
+ private CasesRecommendDao casesRecommendDao;
+
+ @Resource
+ private CasesRecommendLaunchImportDataDao casesRecommendLaunchImportDataDao;
+
+ @Resource
+ private CasesRecommendPushRecordDao casesRecommendPushRecordDao;
+
+ @Override
+ public boolean launchPush(CasesRecommendLaunchVo casesRecommendLaunch) {
+ //当前用户登录信息
+ UserData userInfoByUserId = outSideDataService.getUserInfoByUserId(null);
+
+ CasesRecommend casesRecommend = new CasesRecommend();
+ casesRecommend.setRecommendId(userInfoByUserId.getId());
+ casesRecommend.setRecommendBy(userInfoByUserId.getName());
+ casesRecommend.setRecommendTime(LocalDateTime.now());
+ casesRecommend.setCaseCount(casesRecommendLaunch.getCasesIdList().size());
+ casesRecommend.setUserCount(casesRecommendLaunch.getPushUserIdList().size());
+ casesRecommend.setRecommendOrgName(casesRecommendLaunch.getRecommendOrgName());
+ casesRecommendDao.save(casesRecommend);
+
+ List caseIds = new ArrayList<>();
+ if (casesRecommendLaunch.getLaunchType() == 1) {
+ caseIds.addAll(casesRecommendLaunch.getCasesIdList());
+ } else {
+ List importDataList = casesRecommendLaunchImportDataDao.findList(FieldFilters.eq("import_id", casesRecommendLaunch.getImportId()));
+ List caseIdList = importDataList.stream().filter(casesRecommendLaunchImportData -> casesRecommendLaunchImportData.getStatus() == 1).map(CasesRecommendLaunchImportData::getCaseId).collect(Collectors.toList());
+ caseIds.addAll(caseIdList);
+ }
+ for (String caseId : caseIds) {
+ Cases cases = casesDao.get(caseId);
+ List pushRecords = new ArrayList<>();
+ Map userMap = userDao.findMap("id", "name", FieldFilters.in("id", casesRecommendLaunch.getPushUserIdList()));
+
+ for (String userId : casesRecommendLaunch.getPushUserIdList()) {
+ CasesRecommendPushRecord casesRecommendPushRecord = new CasesRecommendPushRecord();
+ casesRecommendPushRecord.setRecommendId(casesRecommend.getId());
+ casesRecommendPushRecord.setCaseId(caseId);
+ casesRecommendPushRecord.setCaseTitle(cases.getTitle());
+ casesRecommendPushRecord.setPushUserId(userId);
+ casesRecommendPushRecord.setPushUserName(userMap.get(userId) != null ? userMap.get(userId).toString() : null);
+ casesRecommendPushRecord.setPushStatus(CasesPushStatusEnum.WAIT_PUSH.getStatus());
+ pushRecords.add(casesRecommendPushRecord);
+ }
+ if (CollectionUtil.isNotEmpty(pushRecords)) {
+ casesRecommendPushRecordDao.saveList(pushRecords);
+ }
+ }
+
+ return true;
+ }
+}
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
new file mode 100644
index 00000000..530c385a
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java
@@ -0,0 +1,49 @@
+package com.xboe.module.boecase.service.impl;
+
+import com.xboe.common.OrderCondition;
+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.module.boecase.dao.CasesRecommendDao;
+import com.xboe.module.boecase.entity.CasesRecommend;
+import com.xboe.module.boecase.service.ICasesRecommendService;
+import com.xboe.module.boecase.vo.CasesRecommendVo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+
+@Service
+@Transactional
+public class CasesRecommendServiceImpl implements ICasesRecommendService {
+
+ @Resource
+ private CasesRecommendDao casesRecommendDao;
+
+ @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()));
+ }
+ if(!CollectionUtils.isEmpty(casesRecommendVo.getRecommendTimeList())){
+ query.addFilter(FieldFilters.ge("recommendTime",casesRecommendVo.getRecommendTimeList().get(0)));
+ query.addFilter(FieldFilters.le("recommendTime",casesRecommendVo.getRecommendTimeList().get(1)));
+ }
+
+ query.addOrder(OrderCondition.desc("sysCreateTime"));
+ query.setPageIndex(pageIndex);
+ query.setPageSize(pageSize);
+ PageList page = casesRecommendDao.findPage(query.builder());
+ return page;
+ }
+
+ @Override
+ public void delete(String id) {
+ casesRecommendDao.setDeleted(id);
+ }
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendLaunchVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendLaunchVo.java
new file mode 100644
index 00000000..6b0c1c6f
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendLaunchVo.java
@@ -0,0 +1,40 @@
+package com.xboe.module.boecase.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author : civism
+ * @version 1.0
+ * @date 2023/6/17 09:46
+ */
+@Data
+public class CasesRecommendLaunchVo {
+
+
+ /**
+ * 发起类型 1 正常选择 2 文件导入
+ */
+ private Integer launchType;
+
+ /**
+ * 如果launchType为2 必须传递 其他情况不用传递
+ */
+ private String importId;
+
+ /**
+ * 推送的文章标题id launchType 为1必须传递 其他情况不用传递
+ */
+ private List casesIdList;
+
+ /**
+ * 推送的用户id
+ */
+ private List pushUserIdList;
+
+ /**
+ * 推荐机构
+ */
+ private String recommendOrgName;
+}
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
new file mode 100644
index 00000000..24988595
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendVo.java
@@ -0,0 +1,17 @@
+package com.xboe.module.boecase.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class CasesRecommendVo {
+
+ /** 推荐人姓名 */
+ private String recommendName;
+
+ /** 推荐时间区间 */
+ private List recommendTimeList;
+
+}