Merge remote-tracking branch 'boe/dev0731' into dev0731

This commit is contained in:
yujicun
2023-08-08 11:18:54 +08:00
26 changed files with 636 additions and 216 deletions

View File

@@ -38,6 +38,11 @@
<version>${nacos-client.version}</version>
</dependency>
<!-- end -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>

View File

@@ -31,29 +31,38 @@ public class ThirdApi {
@Value("${userBasic.searchUserList}")
private String searchUserListUrl;
@Value("${statApi.userdynamicList}")
private String userdynamicListUrl;
public List<UserInfoList> getAllUserList(UserListParam userListParam, String token) {
public List<UserInfoListVo> getAllUserList(UserListParam userListParam, String token) {
log.info("获取用户");
String resp = Optional.ofNullable(HttpRequest.post(searchUserListUrl).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("获取用户返回值 {}",resp);
UserInfoListRootBean userInfoListRootBean1 = JSONUtil.toBean(resp, UserInfoListRootBean.class);
log.info("userInfoListRootBean1 = " + userInfoListRootBean1);
List<UserInfoListVo> list = userInfoListRootBean1.getResult().getList();
log.info("list = " + list);
log.info("获取用户返回值1 {}",resp);
return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, UserInfoListRootBean.class).success())
.map(UserInfoListRootBean::getResult)
.map(result -> Opt.ofEmptyAble(result.getUserInfoList()).peek(t -> nextPage(userListParam, token, t, result)).orElse(ListUtil.toList()))
.map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userListParam, token, t, result)).orElse(ListUtil.toList()))
.orElse(ListUtil.toList());
}
private void getAllUserList(UserListParam userListParam, String token, List<UserInfoList> userInfoLists) {
private void getAllUserList(UserListParam userListParam, String token, List<UserInfoListVo> userInfoLists) {
log.info("获取用户2");
String resp = Optional.ofNullable(HttpRequest.post(searchUserListUrl).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("获取用户返回值 {}",resp);
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, UserInfoListRootBean.class).success()).map(UserInfoListRootBean::getResult).map(UserInfoListRootBean.ResultData::getUserInfoList).stream().flatMap(Collection::stream).forEach(userInfoLists::add);
log.info("获取用户返回值2 {}",resp);
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, UserInfoListRootBean.class).success()).map(UserInfoListRootBean::getResult).map(UserInfoListRootBean.ResultData::getList).stream().flatMap(Collection::stream).forEach(userInfoLists::add);
}
private void nextPage(UserListParam userListParam, String token, List<UserInfoList> userInfoLists, UserInfoListRootBean.ResultData t) {
log.info("获取用户--" + userListParam.getPage());
if (t.getTotalPage() > userListParam.getPage()) {
REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPage(), t.getTotalPage()).parallel().forEach(i -> getAllUserList(userListParam.withPage(i + 1), token, userInfoLists))).join();
private void nextPage(UserListParam userListParam, String token, List<UserInfoListVo> userInfoLists, UserInfoListRootBean.ResultData t) {
log.info("获取用户--" + userListParam.getPageNo());
if (t.getTotalPage() > userListParam.getPageNo()) {
REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPageNo(), t.getTotalPage()).parallel().forEach(i -> getAllUserList(userListParam.withPageNo(i + 1), token, userInfoLists))).join();
}
}
@@ -73,8 +82,8 @@ public class ThirdApi {
}
private void nextPage(AuditListParam userListParam, List<AuditList> t, Result result, String token) {
if (result.getTotalPage() > userListParam.getPage()) {
REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPage(), result.getTotalPage()).parallel().forEach(i -> getAllAudienceList(userListParam.withPage(i + 1), t, token))).join();
if (result.getTotalPage() > userListParam.getPageNo()) {
REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPageNo(), result.getTotalPage()).parallel().forEach(i -> getAllAudienceList(userListParam.withPageNo(i + 1), t, token))).join();
}
}
@@ -83,4 +92,40 @@ public class ThirdApi {
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, AuditRootBean.class).success()).map(AuditRootBean::getResult).map(Result::getList).stream().flatMap(Collection::stream).forEach(list::add);
}
public List<UserDynamic> getAllUserdynamicList(UserdynamicParam userdynamicParam, String token) {
String resp = Optional.ofNullable(HttpRequest.post(userdynamicListUrl).body(JSONUtil.toJsonStr(userdynamicParam)).header("XBOE-Access-Token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.error("=1----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + resp );
return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, DynamicBean.class).success())
.map(DynamicBean::getResult)
.map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userdynamicParam, t, result, token)).orElse(ListUtil.toList()))
.orElse(ListUtil.toList());
}
private void nextPage(UserdynamicParam userdynamicParam, List<UserDynamic> t, UserDynamicResult result, String token) {
log.error("=2----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam );
if (result.getTotalPages() > userdynamicParam.getPageIndex()) {
REQUEST_TASK.submit(() -> IntStream.range(userdynamicParam.getPageIndex(), result.getTotalPages()).parallel().forEach(i -> getAllUserdynamicList(userdynamicParam.withPageIndex(i + 1), t, token))).join();
}
}
private void getAllUserdynamicList(UserdynamicParam userdynamicParam, List<UserDynamic> list, String token) {
log.error("=3----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam );
String resp = Optional.ofNullable(HttpRequest.post(usersByAudienceList).body(JSONUtil.toJsonStr(userdynamicParam.builder().pageSize(1000).build())).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, DynamicBean.class).success()).map(DynamicBean::getResult).map(UserDynamicResult::getList).stream().flatMap(Collection::stream).forEach(list::add);
}
public static void main(String[] args) {
String token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJjb21wYW55Q29kZSI6IkMwMDEiLCJ1SWQiOiI5NjUzNDIwMjc0OTc2MDcxNjgiLCJjb21wYW55SWQiOiIxMDQxNjczOTc3Mzc5OTQ2NDk2IiwibG9naW5JZCI6IjE2ODg0NDg5MjIwNzY0OTE3NzgiLCJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsImV4cCI6MTY5MTM5OTc2NzU1OCwidXNlck5hbWUiOiLmnY7njonlhrAiLCJ1c2VySWQiOiI2QjA0OUZBRi1DMzE0LTdDQ0YtMEQyOC0wRDIzRjRDNDI1MzEifQ==.8b52dcf4d48a790ed258b9ca2b279bb269f5301722095382fbd352705b51c893";
String resp = Optional.ofNullable(HttpRequest.post("https://u-pre.boe.com/statApi/xboe/m/stat/userdynamic/list").body(JSONUtil.toJsonStr(UserdynamicParam.builder().
aid(Long.parseLong("965342027497607168")).pageSize(1000).pageIndex(1).build())).header("XBOE-Access-Token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
System.out.println(" resp = " +resp);
DynamicBean a = JSONUtil.toBean(resp, DynamicBean.class);
System.out.println(" a = " +a);
System.out.println(" a = " + a.getResult().getCount());
List<UserDynamic> list = a.getResult().getList();
System.out.println(" list = " +list.size());
System.out.println(" list = " +list);
}
}

View File

@@ -9,6 +9,6 @@ import lombok.*;
@AllArgsConstructor
public class AuditListParam implements Cloneable {
private String audienceId;
private Integer page;
private Integer pageNo;
private Integer pageSize;
}

View File

@@ -0,0 +1,34 @@
package com.xboe.api.vo;
import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
@Data
@Slf4j
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DynamicBean {
private String error;
private String message;
private String permissions;
private UserDynamicResult result;
private int status;
private Date timestamp;
public DynamicBean success() {
if (this.status != 200) {
log.error("获取受众列表失败----{}", JSONUtil.toJsonPrettyStr(this));
return null;
}
return this;
}
}

View File

@@ -0,0 +1,87 @@
package com.xboe.api.vo;
import com.xboe.core.orm.IdEntity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class UserDynamic extends IdEntity {
private static final long serialVersionUID = -2536708166103273425L;
/**
* 事件动态
*/
public final static int TYPE_EVENT=1;
/**
* 其它动态
*/
public final static int TYPE_OTHER=9;
/**
* 类型
* 1表事件动态 2表非事件动态
* */
private Integer type;
/**
* 动态的标题
*/
private String title;
/**
* 事件的key
* */
private String eventKey;
/**
* 事件id
* */
private String eventId;
/**
* 动态月份
* yyyyMM
* */
private Integer month;
/**
* 内容类型
* */
private String contentType;
/**
* 内容id
* */
private String contentId;
/**
* 动态内容
* */
private String contentInfo;
/**
* 用户自定义信息
*/
private String cusInfo;
/**
* 动态人id
* */
private String aid;
/**
* 用户的名称
*/
private String aname;
/**
* 是否隐藏
* */
private Boolean hidden;
private LocalDateTime eventTime;
}

View File

@@ -0,0 +1,22 @@
package com.xboe.api.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserDynamicResult {
private int count;
private int pageSize;
private int totalPages;
private List<UserDynamic> list;
}

View File

@@ -31,7 +31,7 @@ public class UserInfoListRootBean {
private int totalElement;
private int totalPage;
private List<UserInfoList> userInfoList;
private List<UserInfoListVo> list;
}
}

View File

@@ -0,0 +1,43 @@
package com.xboe.api.vo;
import lombok.Data;
@Data
public class UserInfoListVo {
private long id;
private String bandCode;
private String bandDesc;
private Boolean deleted;
private String departId;
private String description;
private String domainId;
private String departName;
private String duty;
private int employeeStatus;
private String companyId;
private String orgName;
private Integer gender;
private String jobName;
private String kid;
private int learningDuration;
private String mobile;
private String realName;
private String oldDepartId;
private String orgNamePath;
private String orgTreeType;
private String payrollPlaceId;
private String payrollPlaceName;
private long personId;
private String positionMgrLevel;
private String rank;
private long sassId;
private int status;
private String telephoneNo;
private String userNo;
private String email;
private String avatar;
private String positionList;
}

View File

@@ -12,8 +12,10 @@ public class UserListParam {
private String departId;
private String userNo;
private String realName;
// @Builder.Default
// private int page = 1;
@Builder.Default
private int page = 1;
private int pageNo = 1;
@Builder.Default
private int pageSize = 10;
}

View File

@@ -0,0 +1,16 @@
package com.xboe.api.vo;
import lombok.*;
@Data
@Builder
@With
@NoArgsConstructor
@AllArgsConstructor
public class UserdynamicParam {
private Integer pageIndex;
private Integer pageSize = 1000;
private Integer contentType;
private Long aid;
private String hidden;
}

View File

@@ -15,6 +15,8 @@ import com.xboe.module.boecase.vo.CaseExportVo;
import com.xboe.module.dict.entity.DictItem;
import com.xboe.module.excel.ExportsExcelSenderUtil;
import com.xboe.system.user.dao.UserDao;
import com.xboe.system.user.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -58,6 +60,8 @@ public class CasesApi extends ApiBaseController {
@Resource
private CasesMajorTypeDao casesMajorTypeDao;
@Resource
private UserDao userDao;
/**
* 用于后台管理
@@ -150,10 +154,20 @@ public class CasesApi extends ApiBaseController {
}
}
} else {
views = new PageList();
views.setList(Collections.emptyList());
views.setPageSize(req.getPageSize());
views.setCount(0);
}
return success(views);
}
@PostMapping("/caseYears")
public JsonResponse<List<String>> caseYears() {
List<String> result = casesService.getCaseYears();
return success(result);
}
/**
* 案例分页搜索 是否置顶
@@ -242,13 +256,27 @@ public class CasesApi extends ApiBaseController {
try {
outputStream = response.getOutputStream();
LinkedHashMap<String,String> map = new LinkedHashMap<>();
// 标题,摘要,案主姓名,案主工号,案主所在组织全路径,同步时间,查看次数。
map.put("标题","title");
map.put("摘要","summary");
map.put("案主姓名","authorName");
map.put("案主工号","userNo");
map.put("案主所在组织全路径","department");
map.put("同步时间","exportDate");
map.put("查看次数","views");
List<Cases> list = casesService.managerCaseTitleList(caseVo);
List<CaseExportVo> exportVos = new ArrayList<>();
LocalDateTime now = LocalDateTime.now();
for (Cases c:list){
CaseExportVo caseExportVo = new CaseExportVo();
caseExportVo.setTitle(c.getTitle());
caseExportVo.setSummary(c.getSummary()==null?"":c.getSummary());
caseExportVo.setAuthorName(c.getAuthorName()==null?"":c.getAuthorName());
User user = userDao.findOne(FieldFilters.eq("id", c.getAuthorId()));
caseExportVo.setUserNo(user.getUserNo()==null?"":user.getUserNo());
caseExportVo.setDepartment(c.getDepartment()==null?"":c.getDepartment());
caseExportVo.setExportDate(now);
caseExportVo.setViews(c.getViews()==null? 0 :c.getViews());
exportVos.add(caseExportVo);
}

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
@@ -25,9 +26,9 @@ import com.xboe.module.boecase.vo.BrowseDurationVo;
import com.xboe.module.boecase.vo.CasesRecommendLaunchVo;
import com.xboe.module.boecase.vo.CasesRecommendPushVo;
import com.xboe.module.boecase.vo.CasesRecommendVo;
import com.xboe.module.excel.ExportsExcelSenderUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -35,9 +36,7 @@ import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -138,6 +137,7 @@ public class CasesRecommendApi extends ApiBaseController {
// 通过工具类创建writer默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
writer.writeHeadRow(ListUtil.toList("标题"));
writer.autoSizeColumnAll();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=failData.xls");
ServletOutputStream out = response.getOutputStream();
@@ -166,6 +166,7 @@ public class CasesRecommendApi extends ApiBaseController {
if (CollectionUtil.isNotEmpty(dataList)) {
writer.write(dataList);
}
writer.autoSizeColumnAll();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=failData.xls");
ServletOutputStream out = response.getOutputStream();
@@ -207,7 +208,6 @@ public class CasesRecommendApi extends ApiBaseController {
if (StringUtils.isEmpty(token)) {
token = request.getHeader("token");
}
return success(iCasesRecommendPushRecordService.launchPush(casesRecommendLaunch, getCurrent(), token));
}
@@ -218,50 +218,43 @@ public class CasesRecommendApi extends ApiBaseController {
* @throws Exception
*/
@PostMapping("/info_download")
public void infoDownload(@RequestBody CasesRecommendVo vo, HttpServletResponse response) {
public void infoDownload(@RequestBody CasesRecommendVo vo, HttpServletResponse response) throws Exception {
if (StringUtils.isEmpty(vo.getCasesRecommendId())) {
throw new RuntimeException("缺少必要参数");
}
try (OutputStream outputStream = response.getOutputStream()) {
// 用个List<Map>装表格的所有内容
// 拼接上列明。我这里用的最土的方法,很不优雅别学我
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("案例名称", "caseTitle");
map.put("推送用户", "pushUserName");
map.put("所属组织", "recommendOrgName");
map.put("推送时间", "pushTime");
map.put("是否查看", "readFlag");
map.put("首次查看时间", "readStartTime");
map.put("总查看时间", "totalReadTime");
CasesRecommend casesRecommend = iCasesRecommendService.findById(vo.getCasesRecommendId());
CasesRecommend casesRecommend = iCasesRecommendService.findById(vo.getCasesRecommendId());
// 拿取表格里需要的数据
List<CasesRecommendPushRecord> recordList = iCasesRecommendPushRecordService.findAllByRecommendId(vo.getCasesRecommendId());
List<CasesRecommendPushRecordExportVo> exportVos = new ArrayList<>();
if (CollectionUtil.isNotEmpty(recordList)) {
exportVos = recordList.stream().map(record -> {
CasesRecommendPushRecordExportVo exportVo = new CasesRecommendPushRecordExportVo();
exportVo.setCaseTitle(record.getCaseTitle());
exportVo.setPushUserName(record.getPushUserName());
exportVo.setRecommendOrgName(casesRecommend.getRecommendOrgName());
exportVo.setPushTime(DateUtil.formatDateTime(record.getPushTime()));
exportVo.setReadFlag(record.getReadFlag() == 1 ? "" : "");
exportVo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime()));
Long browseDuration = casesBrowseService.getBrowseDuration(record.getCaseId(), getCurrent().getAccountId());
exportVo.setTotalReadTime(browseDuration.toString());
return exportVo;
}).collect(Collectors.toList());
}
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=casesRecommend.xls");
ExportsExcelSenderUtil.export(map, exportVos, outputStream, "yyyy-MM-dd HH:mm:ss");
} catch (Exception e) {
e.printStackTrace();
log.error("导出失败", e.getMessage());
// 拿取表格里需要的数据
List<CasesRecommendPushRecord> recordList = iCasesRecommendPushRecordService.findAllByRecommendId(vo.getCasesRecommendId());
List<CasesRecommendPushRecordExportVo> exportVos = new ArrayList<>();
if (CollectionUtil.isNotEmpty(recordList)) {
exportVos = recordList.stream().map(record -> {
CasesRecommendPushRecordExportVo exportVo = new CasesRecommendPushRecordExportVo();
exportVo.setCaseTitle(record.getCaseTitle());
exportVo.setPushUserName(record.getPushUserName());
exportVo.setRecommendOrgName(casesRecommend.getRecommendOrgName());
exportVo.setPushTime(DateUtil.formatDateTime(record.getPushTime()));
exportVo.setReadFlag(record.getReadFlag() == 1 ? "" : "");
exportVo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime()));
Long browseDuration = casesBrowseService.getBrowseDuration(record.getCaseId(), getCurrent().getAccountId());
exportVo.setTotalReadTime(browseDuration.toString());
return exportVo;
}).collect(Collectors.toList());
}
// 通过工具类创建writer默认创建xls格式
BigExcelWriter writer = ExcelUtil.getBigWriter();
// 设置所有列为自动宽度,不考虑合并单元格
writer.write(exportVos, true);
SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
sheet.trackAllColumnsForAutoSizing();
writer.autoSizeColumnAll();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=casesRecommend.xls");
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
writer.close();
IoUtil.close(out);
}

View File

@@ -33,38 +33,35 @@ public interface CasesRecordDao extends JpaRepository<Cases, String>, JpaSpecifi
" or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" +
" and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" +
" and if(IFNULL(:#{#condition.majorType},'') !='',b.major_type = :#{#condition.majorType},1=1) " +
" and if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" +
" and if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" +
" and if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" +
" and if(:#{#condition.caseIdsEmpty}, 1=1, b.id in (:#{#condition.caseIds}))" +
" and ("+
" if(:#{#condition.allOrgEmpty}, 1=1, 1=2)" +
" or if(:#{#condition.org1Empty}, 1=2, b.org_domain_parent in (:#{#condition.org1}))" +
" or if(:#{#condition.org2Empty}, 1=2, b.org_domain_parent2 in (:#{#condition.org2}))" +
" or if(:#{#condition.org3Empty}, 1=2, b.org_domain_parent3 in (:#{#condition.org3}))" +
")" +
" order by a.sys_create_time DESC, a.read_flag ASC) as c group by c.id",
countQuery = "select count(*) FROM (select c.* from ( select b.*" +
" from boe_cases_recommend_push_record a INNER JOIN boe_cases b on a.case_id = b.id " +
" where b.deleted=0 and a.push_status = 3 and a.deleted=0 and a.push_user_id= :#{#condition.userId}" +
" and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" +
" and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" +
" and if(IFNULL(:#{#condition.majorType},'') !='' ,b.major_type = :#{#condition.majorType},1=1) " +
" and if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" +
" and if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" +
" and if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" +
" order by a.sys_create_time DESC, a.read_flag ASC ) as c group by c.id) as d")
" from boe_cases_recommend_push_record a INNER JOIN boe_cases b on a.case_id = b.id " +
" where b.deleted=0 and a.push_status = 3 and a.deleted=0 and a.push_user_id= :#{#condition.userId}" +
" and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" +
" or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" +
" and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" +
" and if(:#{#condition.caseIdsEmpty}, 1=1, b.id in (:#{#condition.caseIds}))" +
" and ("+
" if(:#{#condition.allOrgEmpty}, 1=1, 1=2)" +
" or if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" +
" or if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" +
" or if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" +
")" +
" order by a.sys_create_time DESC, a.read_flag ASC ) as c group by c.id) as d")
Page<Cases> queryList(Pageable pageable, @Param("condition") CasePageVo casePage);
// @Query(nativeQuery = true, value = "SELECT bc.*, COUNT(bcrpr.case_id) AS recommends1 FROM boe_cases bc LEFT JOIN boe_cases_recommend_push_record bcrpr ON bc.id = bcrpr.case_id" +
// " where bc.deleted = 0" +
// " and if(IFNULL(:#{#caseVo.keyWord},'')!='',bc.title like CONCAT('%',:#{#caseVo.keyWord},'%'),1=1)" +
// " and if(IFNULL(:#{#caseVo.authorName},'')!='',bc.author_name like CONCAT('%',:#{#caseVo.authorName},'%'),1=1)" +
// " and if(IFNULL(:#{#caseVo.orgDomain},'') !='' ,bc.org_domain_parent = :#{#caseVo.orgDomain},1=1) " +
// " and if(IFNULL(:#{#caseVo.excellent},'') !='' ,bc.excellent = :#{#caseVo.excellent},1=1) " +
// " and if(IFNULL(:#{#caseVo.isTop},'') !='' ,bc.is_top = :#{#caseVo.isTop},1=1) " +
// " GROUP BY bc.id ORDER BY bc.sys_create_time desc")
// List<Cases> exportCase(@Param("caseVo")CaseVo caseVo);
@Query("SELECT new Cases(bc.title, bc.authorName, bc.comments, bc.views, bc.praises, bc.shares, bc.favorites, COUNT(bcrpr.caseId), bc.cites, bc.confidentialityLevel) FROM Cases bc LEFT JOIN CasesRecommendPushRecord bcrpr ON bc.id = bcrpr.caseId" +
" where bc.deleted = false" +
@@ -75,4 +72,8 @@ public interface CasesRecordDao extends JpaRepository<Cases, String>, JpaSpecifi
" and (:isTop IS NULL or bc.isTop = :isTop)" +
" GROUP BY bc.id ORDER BY bc.sysCreateTime desc")
List<Cases> exportCase(String keyWord, String authorName,String orgDomain,Boolean excellent,Boolean isTop);
@Query(nativeQuery = true, value ="SELECT DATE_FORMAT(sys_create_time,'%Y') FROM `boe_cases` where deleted = FALSE GROUP BY DATE_FORMAT(sys_create_time,'%Y')")
List<String> caseYears();
}

View File

@@ -1,13 +1,9 @@
package com.xboe.module.boecase.dto;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.xboe.module.scorm.rte.model.datatype.Int;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class CasePageVo extends PageDto {
@@ -63,22 +59,29 @@ public class CasePageVo extends PageDto {
*/
private String userId;
/**
* 案例ids
*/
private List<String> caseIds;
public boolean isCaseIdsEmpty() {
return CollUtil.isEmpty(this.caseIds);
}
/**
* 推荐id
*/
private Long refId;
private List<String> org1;
private List<String> org2;
private List<String> org3;
public boolean isYearsEmpty() {
return CollUtil.isEmpty(this.years);
}
public List<String> getOrg1() {
if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) {
return orgDomainDtos.stream().map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList());
}
return null;
}
public boolean isOrg1Empty() {
return CollUtil.isEmpty(this.getOrg1());
}
@@ -91,18 +94,8 @@ public class CasePageVo extends PageDto {
return CollUtil.isEmpty(this.getOrg3());
}
public List<String> getOrg2() {
if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) {
return orgDomainDtos.stream().flatMap(it->it.getChildren().stream()).map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList());
}
return null;
}
public List<String> getOrg3() {
if (CollectionUtils.isNotEmpty(this.orgDomainDtos)) {
return orgDomainDtos.stream().flatMap(it->it.getChildren().stream().flatMap(i->i.getChildren().stream())).map(OrgDomainDto::getParent).filter(StrUtil::isNotBlank).collect(Collectors.toList());
}
return null;
public boolean isAllOrgEmpty() {
return this.isOrg1Empty() && this.isOrg2Empty() && this.isOrg3Empty();
}
}

View File

@@ -1,9 +1,8 @@
package com.xboe.module.boecase.dto;
import lombok.Data;
import cn.hutool.core.annotation.Alias;
import javax.persistence.Column;
import java.util.Date;
@Data
public class CasesRecommendPushRecordExportVo {
@@ -11,23 +10,29 @@ public class CasesRecommendPushRecordExportVo {
/**
* 案例标题
*/
@Alias(value = "案例名称")
private String caseTitle;
/**
* 推送用户名称
*/
@Alias(value = "目标用户")
private String pushUserName;
/**推荐组织名称*/
@Alias(value = "所属组织")
private String recommendOrgName;
@Alias(value = "推送时间")
private String pushTime;
@Alias(value = "是否查看")
private String readFlag;
/**
* 首次查看时间
*/
@Alias(value = "首次查看时间")
private String readStartTime;
@Alias(value = "总查看时间(分)")
private String totalReadTime;
}

View File

@@ -108,5 +108,7 @@ public interface ICasesService{
List<CasesVo> caseIndexV2(CurrentUser current);
List<String> getCaseYears();
}

View File

@@ -85,9 +85,11 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
long tt = System.currentTimeMillis();
for (String orgId : casesRecommendLaunch.getDeptIds()) {
UserListParam build = UserListParam.builder().departId(orgId).pageSize(100).build();
List<UserInfoList> allUserList = thirdApi.getAllUserList(build, token);
List<UserInfoListVo> allUserList = thirdApi.getAllUserList(build, token);
log.info("---------组织查询 {}", allUserList);
if (CollectionUtil.isNotEmpty(allUserList)) {
for (UserInfoList userInfo : allUserList) {
for (UserInfoListVo userInfo : allUserList) {
log.info("---------userInfo.getId() {}", userInfo.getId());
userIds.add(String.valueOf(userInfo.getId()));
}
}
@@ -98,13 +100,14 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
if (CollectionUtil.isNotEmpty(casesRecommendLaunch.getGroupIds())) {
long t2 = System.currentTimeMillis();
for (String groupId : casesRecommendLaunch.getGroupIds()) {
List<AuditList> allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(groupId).pageSize(100).page(1).build(), token);
List<AuditList> allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(groupId).pageSize(100).pageNo(1).build(), token);
if (CollectionUtil.isNotEmpty(allAudienceList)) {
allAudienceList.forEach(auditList -> userIds.add(String.valueOf(auditList.getUserId())));
}
}
log.info("耗时受众查询 {}", (System.currentTimeMillis() - t2) / 1000);
}
log.info("---------userIds {}", userIds);
if (CollectionUtil.isEmpty(userIds)) {
throw new RuntimeException("推荐人不能为空");
}
@@ -134,6 +137,10 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
casesRecommendPushRecord.setCaseTitle(cases.getTitle());
casesRecommendPushRecord.setPushUserId(userId);
casesRecommendPushRecord.setPushUserName(userMap.get(userId) != null ? userMap.get(userId).toString() : null);
if (userMap.get(userId) == null){
log.info("---------PushUserName=null {}", userMap.get(userId));
continue;
}
casesRecommendPushRecord.setPushStatus(CasesPushStatusEnum.WAIT_PUSH.getStatus());
//默认未查看
casesRecommendPushRecord.setReadFlag(0);

View File

@@ -45,8 +45,8 @@ public class CasesRecommendServiceImpl implements ICasesRecommendService {
query.addFilter(FieldFilters.like("recommend_by", LikeMatchMode.ANYWHERE, casesRecommendVo.getRecommendName()));
}
if (!CollectionUtils.isEmpty(casesRecommendVo.getRecommendTimeList())) {
query.addFilter(FieldFilters.ge("recommend_time", casesRecommendVo.getRecommendTimeList().get(0)));
query.addFilter(FieldFilters.le("recommend_time", casesRecommendVo.getRecommendTimeList().get(1)));
query.addFilter(FieldFilters.ge("recommend_time", casesRecommendVo.getRecommendTimeList().get(0)+" 00:00:00"));
query.addFilter(FieldFilters.le("recommend_time", casesRecommendVo.getRecommendTimeList().get(1)+" 23:59:59"));
}
query.addOrder(OrderCondition.desc("sys_create_time"));

View File

@@ -34,16 +34,6 @@ import javax.transaction.Transactional;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import com.xboe.module.boecase.dao.CasesMajorTypeDao;
import com.xboe.core.orm.FieldFilters;
import com.xboe.core.orm.FieldUpdateType;
import com.xboe.core.orm.IFieldFilter;
import com.xboe.core.orm.LikeMatchMode;
import com.xboe.core.orm.QueryBuilder;
import com.xboe.core.orm.UpdateBuilder;
import com.xboe.module.boecase.dao.CasesDao;
import com.xboe.module.boecase.entity.Cases;
@Slf4j
@Service
@@ -73,14 +63,14 @@ public class CasesServiceImpl implements ICasesService {
/**
* 案例分页查询,用于门户的查询
* */
*/
@Override
public PageList<Cases> queryPageCases(int pageIndex, int pageSize, CaseVo caseVo) {
QueryBuilder query=QueryBuilder.from(Cases.class);
PageList<Cases> page=null;
QueryBuilder query = QueryBuilder.from(Cases.class);
PageList<Cases> page = null;
List<IFieldFilter> filters = new ArrayList<>();
filters.add(FieldFilters.eq("deleted",false));
List<IFieldFilter> likes=new ArrayList<IFieldFilter>();
filters.add(FieldFilters.eq("deleted", false));
List<IFieldFilter> likes = new ArrayList<IFieldFilter>();
likes.add(FieldFilters.like("title", LikeMatchMode.ANYWHERE, caseVo.getKeyWord()));
likes.add(FieldFilters.like("authorName", LikeMatchMode.ANYWHERE, caseVo.getKeyWord()));
likes.add(FieldFilters.like("keyword1", LikeMatchMode.ANYWHERE, caseVo.getKeyWord()));
@@ -90,23 +80,22 @@ public class CasesServiceImpl implements ICasesService {
likes.add(FieldFilters.like("keyword5", LikeMatchMode.ANYWHERE, caseVo.getKeyWord()));
if(StringUtil.isNotBlank(caseVo.getKeyWord())) {
if (StringUtil.isNotBlank(caseVo.getKeyWord())) {
filters.add(FieldFilters.or(likes));
}
if(StringUtils.isNotBlank(caseVo.getOrgDomain())){
if(caseVo.getOrgDomain().contains(",")){
if (StringUtils.isNotBlank(caseVo.getOrgDomain())) {
if (caseVo.getOrgDomain().contains(",")) {
String[] split = caseVo.getOrgDomain().split(",");
List<String> strings = Arrays.asList(split);
filters.add(FieldFilters.in("orgDomainParent",strings));
}else{
filters.add(FieldFilters.eq("orgDomainParent",caseVo.getOrgDomain()));
filters.add(FieldFilters.in("orgDomainParent", strings));
} else {
filters.add(FieldFilters.eq("orgDomainParent", caseVo.getOrgDomain()));
}
}
//增加只是查询有附件的
filters.add(FieldFilters.isNotNull("filePath"));
filters.add(FieldFilters.ne("filePath", ""));
@@ -144,8 +133,8 @@ public class CasesServiceImpl implements ICasesService {
}
}
if(StringUtils.isNotBlank(caseVo.getCaseType())){
filters.add(FieldFilters.eq("caseType",caseVo.getCaseType()));
if (StringUtils.isNotBlank(caseVo.getCaseType())) {
filters.add(FieldFilters.eq("caseType", caseVo.getCaseType()));
}
if (caseVo.getBreCommend() != null) {
if (!caseVo.getBreCommend()) {
@@ -172,7 +161,7 @@ public class CasesServiceImpl implements ICasesService {
} else {
order = OrderCondition.desc("sysCreateTime");
}
query.addFilters(filters);
query.addOrder(order);
@@ -189,6 +178,12 @@ public class CasesServiceImpl implements ICasesService {
@Override
public PageList<Cases> queryPageCasesV2(CasePageVo caseVo) {
String type = caseVo.getType();
if (!StrUtil.equals(type,"excellent")) {
caseVo.setOrderField("");
caseVo.setOrderAsc(null);
}
String keyword = caseVo.getKeyWord();
QueryBuilder query = QueryBuilder.from(Cases.class);
PageList<Cases> page = null;
@@ -232,38 +227,52 @@ public class CasesServiceImpl implements ICasesService {
}
}
List<OrgDomainDto> orgDomainDtos = caseVo.getOrgDomainDtos();
IFieldFilter orgDomain = null;
List<String> level1 = new ArrayList<>();
List<String> level2 = new ArrayList<>();
List<String> level3 = new ArrayList<>();
if (CollUtil.isNotEmpty(orgDomainDtos)) {
for (int i = 0; i < orgDomainDtos.size(); i++) {
OrgDomainDto domainDto = orgDomainDtos.get(i);
String orgDomainParent = domainDto.getParent();
IFieldFilter itemFilter = FieldFilters.eq("orgDomainParent", orgDomainParent);
List<OrgDomainDto> orgDomainParent2 = domainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent2)) {
List<String> 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<OrgDomainDto> orgDomainParent3 = orgDomainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent3)) {
List<String> thirds = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList());
IFieldFilter orgDomainParent3Filter = FieldFilters.eq("orgDomainParent3", thirds);
itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter);
for (OrgDomainDto orgDomainDto : orgDomainParent2) {
List<OrgDomainDto> orgDomainParent3 = orgDomainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent3)) {
List<String> parent = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList());
level3.addAll(parent);
} else {
String parent = orgDomainDto.getParent();
level2.add(parent);
}
}
}
if (i == 0) {
orgDomain = itemFilter;
} else {
orgDomain = FieldFilters.or(orgDomain, itemFilter);
} else {
String orgDomainParent = domainDto.getParent();
level1.add(orgDomainParent);
}
}
}
if (Objects.nonNull(orgDomain)) {
filters.add(orgDomain);
List<IFieldFilter> subFilter = new ArrayList();
if (CollUtil.isNotEmpty(level1)) {
IFieldFilter filter1 = FieldFilters.in("orgDomainParent", level1);
subFilter.add(filter1);
}
if (CollUtil.isNotEmpty(level2)) {
IFieldFilter filter2 = FieldFilters.in("orgDomainParent2", level2);
subFilter.add(filter2);
}
if (CollUtil.isNotEmpty(level3)) {
IFieldFilter filter3 = FieldFilters.in("orgDomainParent3", level3);
subFilter.add(filter3);
}
if (CollUtil.isNotEmpty(subFilter)) {
if (subFilter.size() == 1) {
filters.add(subFilter.get(0));
} else if(subFilter.size() == 2) {
filters.add(FieldFilters.or(subFilter.get(0), subFilter.get(1)));
} else {
filters.add(FieldFilters.or(subFilter));
}
}
if (StringUtils.isNotBlank(caseVo.getCaseType())) {
filters.add(FieldFilters.eq("caseType", caseVo.getCaseType()));
}
@@ -282,13 +291,16 @@ public class CasesServiceImpl implements ICasesService {
} else {
order = OrderCondition.desc(caseVo.getOrderField());
}
} else {
order = OrderCondition.desc("sysCreateTime");
}
if (StrUtil.equals(type,"new")) {
order = OrderCondition.desc("sysCreateTime");
} else if (StrUtil.equals(type,"hot")) {
order = OrderCondition.desc("views");
}
if(Objects.nonNull(order)) {
query.addOrder(order);
}
query.addFilters(filters);
query.addOrder(order);
query.addOrder(OrderCondition.rand());
query.setPageIndex(caseVo.getPageIndex());
query.setPageSize(caseVo.getPageSize());
page = casesDao.findPage(query.builder());
@@ -343,6 +355,48 @@ public class CasesServiceImpl implements ICasesService {
public PageList<Cases> queryRecommendPageCasesV2(CasePageVo caseVo) {
PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex() - 1, caseVo.getPageSize());
String majorType = caseVo.getMajorType();
if (StringUtil.isNotBlank(majorType)) {
List<CasesMajorType> casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ","));
if (CollUtil.isNotEmpty(casesTypes)) {
List<String> caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList());
caseVo.setCaseIds(caseIds);
} else {
return null;
}
}
List<OrgDomainDto> orgDomainDtos = caseVo.getOrgDomainDtos();
List<String> level1 = new ArrayList<>();
List<String> level2 = new ArrayList<>();
List<String> level3 = new ArrayList<>();
if (CollUtil.isNotEmpty(orgDomainDtos)) {
for (int i = 0; i < orgDomainDtos.size(); i++) {
OrgDomainDto domainDto = orgDomainDtos.get(i);
List<OrgDomainDto> orgDomainParent2 = domainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent2)) {
for (OrgDomainDto orgDomainDto : orgDomainParent2) {
List<OrgDomainDto> orgDomainParent3 = orgDomainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent3)) {
List<String> parent = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList());
level3.addAll(parent);
} else {
String parent = orgDomainDto.getParent();
level2.add(parent);
}
}
} else {
String orgDomainParent = domainDto.getParent();
level1.add(orgDomainParent);
}
}
}
caseVo.setOrg1(level1);
caseVo.setOrg2(level2);
caseVo.setOrg3(level3);
Page<Cases> cases = casesRecordDao.queryList(pageRequest,caseVo);
PageList<Cases> pageList = new PageList<>();
pageList.setCount((int) cases.getTotalElements());
@@ -477,7 +531,7 @@ public class CasesServiceImpl implements ICasesService {
order = OrderCondition.desc("sysCreateTime");
}
query.addOrder(order);
query.addField("new Cases(title)");
// query.addField("new Cases(title)");
List<Cases> result = casesDao.findList(query.builder());
return result;
}
@@ -684,7 +738,7 @@ public class CasesServiceImpl implements ICasesService {
/**
* 首页案例
* */
*/
@Override
public List<CaseDto> caseRandom(Integer pageSize, String orderField, Boolean orderAsc) {
@@ -845,7 +899,23 @@ public class CasesServiceImpl implements ICasesService {
@Override
public List<DictItem> majorTypes() {
List<DictItem> major_type = sysDictionaryDao.findByKey("major_type");
String hql = "select cm.majorId,count(cm.id) from CasesMajorType cm,Cases c where cm.caseId=c.id and c.deleted=false and (c.filePath is not null or c.filePath!='') group by cm.majorId";
/* String hql1 = "select majorType from Cases c where c.deleted=false and (c.filePath is not null and c.filePath != '')";
List<String> listByHql = casesDao.findListByHql(hql1);
List<DictItem> dictItems = new ArrayList<>();
for (DictItem d : major_type) {
d.setExplanation("0");
boolean flag = false;
for (String str : listByHql) {
if (str.contains(d.getCode()) && !d.getCode().equals("")) {
d.setExplanation(String.valueOf(Integer.parseInt(d.getExplanation()) + 1));
flag = true;
}
}
if (flag){
dictItems.add(d);
}
}*/
String hql = "select cm.majorId,count(cm.caseId) from CasesMajorType cm,Cases c where cm.caseId=c.id and c.deleted=false and (c.filePath is not null and c.filePath != '') group by cm.majorId";
List<Object[]> listByHql = casesDao.findListByHql(hql);
List<DictItem> dictItems = new ArrayList<>();
for (DictItem d : major_type) {
@@ -937,7 +1007,7 @@ public class CasesServiceImpl implements ICasesService {
String accountId = current.getAccountId();
List<Cases> result = new ArrayList<>();
try {
String hql = "select a.caseId FROM CasesRecommendPushRecord a left join Cases b ON a.caseId = b.id WHERE a.pushUserId=?1 and a.pushStatus=3 and a.deleted = false and b.deleted = false group by a.caseId ORDER By a.pushTime DESC";
String hql = "select a.caseId FROM CasesRecommendPushRecord a left join Cases b ON a.caseId = b.id WHERE a.pushUserId=?1 and a.pushStatus=3 and a.deleted = false and b.deleted = false group by a.caseId ORDER By a.pushTime DESC";
List<String> listFields = casesRecommendDao.findListFields(hql, CASE_LEN, ListUtil.toList(accountId));
// List<String> listFields = new ArrayList<>();
List<String> caseIds = new ArrayList<>();
@@ -988,6 +1058,12 @@ public class CasesServiceImpl implements ICasesService {
return casesVos;
}
@Override
public List<String> getCaseYears() {
List<String> years = this.casesRecordDao.caseYears();
return years;
}
@Override
public void excellent(String id, Boolean excellent) {
//取消时,把时间清空

View File

@@ -36,4 +36,8 @@ public class CaseExportVo {
private LocalDateTime endTime;
private String confidentialityLevel;
private String summary;
private String userNo;
private String department;
}

View File

@@ -1,12 +1,17 @@
package com.xboe.module.course.api;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.xboe.api.ThirdApi;
import com.xboe.api.vo.AuditList;
import com.xboe.api.vo.AuditListParam;
import com.xboe.api.vo.UserDynamic;
import com.xboe.api.vo.UserdynamicParam;
import com.xboe.common.OrderCondition;
import com.xboe.core.JsonResponseStatus;
import com.xboe.module.usergroup.entity.UserGroupItem;
import org.apache.commons.lang3.StringUtils;
@@ -78,6 +83,9 @@ public class CoursePortalApi extends ApiBaseController{
@Autowired
private IStudyCourseService studyCourseService;
@Resource
private ThirdApi thirdApi;
/**
* 根据多个课程id返回对应的课程的图片.返回结果如下,
* {
@@ -226,7 +234,7 @@ public class CoursePortalApi extends ApiBaseController{
* @return
*/
@RequestMapping(value="/detail",method = {RequestMethod.GET,RequestMethod.POST})
public JsonResponse<Map<String,Object>> detail(String id,Boolean addView,Boolean crowd,Boolean preview){
public JsonResponse<Map<String,Object>> detail(String id,Boolean addView,Boolean crowd,Boolean preview, HttpServletRequest request){
if(StringUtils.isBlank(id)) {
return badRequest("参数错误,未指定课程");
}
@@ -253,13 +261,35 @@ public class CoursePortalApi extends ApiBaseController{
preview=true;
}
// StudyCourse sc = new StudyCourse();
// sc.setCourseId(course.getId());
// sc.setAid(aid);
log.debug("=--------- 开始查询是否学习过此课程 ---------------------------------course.getId()= "+ course.getId() + ",aid = " + aid );
// PageList<StudyCourse> rs1= studyCourseService.findPage(1,10, sc, OrderCondition.desc("id"),null);
StudyCourse studyCourse = studyCourseService.findByCourseIdAndAid(course.getId(), aid);
log.debug("=--------- 开始查询是否学习过此课程 ---------------------------------course.getId()= "+ course.getId() + ",aid = " + aid +",studyCourse = " + studyCourse);
boolean pass = false;
if(!preview) {
log.error("=--------- 开始查询受众信息 ---------------------------------aid = " + aid);
String token = request.getHeader("XBOE-Access-Token");
log.debug("=--------- 获取token token = " + token);
if (!courseCrowdList.isEmpty()) {
for (CourseCrowd c : courseCrowdList) {
//同一个受众,同一个只会有一条记录,所以这里就直接查询了
List<UserGroupItem> hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid);
if (hasItem != null && !hasItem.isEmpty()) {
// List<UserGroupItem> hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid);
log.debug("=--------- 开始调研用户中心受众接口 groupId = " + c.getGroupId());
List<AuditList> allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(c.getGroupId()).pageSize(1000).pageNo(1).build(), token);
List<Long> userIdList = allAudienceList.stream().map(AuditList::getUserId).collect(Collectors.toList());
log.debug("=--------- allAudienceList: " +allAudienceList);
/*
List<UserDynamic> userDynamicList = thirdApi.getAllUserdynamicList(UserdynamicParam.builder().aid(Long.parseLong(aid)).pageSize(1000).pageIndex(1).build(), token);
log.error("=--------- 开始查询课程信息信息 ---------------------------------userDynamicList = " + userDynamicList);
List<Long> dynamicList = userDynamicList.stream().map(UserDynamic::getContentId).map(Long::parseLong).collect(Collectors.toList());
log.error(id + "=--------- 开始查询课程信息信息 ---------------------------------dynamicList = " + dynamicList);*/
if (userIdList.contains(Long.parseLong(aid)) || !Objects.isNull(studyCourse)) {
pass = true;
break;
}
@@ -269,10 +299,12 @@ public class CoursePortalApi extends ApiBaseController{
// return wrap(JsonResponseStatus.NO_CONTENT, "您无学习此课程的权限,请与管理员联系",rs);
// }
}else {
pass = true;
}
}
log.debug("=--------- 是否有权限查看此课程: " +pass);
List<CourseContent> cclist=contentService.getByCourseId(id);
List<CourseSection> sectionlist=sectionService.getByCourseId(id);
List<CourseTeacher> teachers=courseService.findTeachersByCourseId(id);
@@ -296,6 +328,7 @@ public class CoursePortalApi extends ApiBaseController{
}
@GetMapping("/detail-study")
public JsonResponse<List<CourseStudyVo>> detailStudy(String courseId, String aid){
if(StringUtil.isBlank(courseId)){

View File

@@ -7,6 +7,7 @@ import com.xboe.constants.CacheName;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.FieldFilters;
import com.xboe.core.utils.OkHttpUtil;
import com.xboe.module.boecase.dao.CasesDao;
import com.xboe.module.course.entity.Course;
import com.xboe.module.dict.dao.SysDictionaryDao;
import com.xboe.module.dict.entity.DictItem;
@@ -33,6 +34,9 @@ public class SysDictionaryServiceImpl implements ISysDictionaryService{
@Resource
SysDictionaryDao dao;
@Resource
CasesDao casesDao;
@Resource
RedisTemplate redisTemplate;
@@ -199,7 +203,7 @@ public class SysDictionaryServiceImpl implements ISysDictionaryService{
@Override
public PageList<DictItem> queryPage(String key,String code,String name,String filter,Integer pageIndex, Integer pageSize) {
//
PageList<DictItem> dictItemPageList = dao.queryPage(key,code,name,filter,pageIndex, pageSize);
return dictItemPageList;
}

View File

@@ -1,11 +1,14 @@
package com.xboe.school.study.api;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import com.xboe.api.ThirdApi;
import com.xboe.api.vo.AuditList;
import com.xboe.api.vo.AuditListParam;
import com.xboe.api.vo.UserDynamic;
import com.xboe.api.vo.UserdynamicParam;
import com.xboe.module.usergroup.entity.UserGroupItem;
import com.xboe.module.usergroup.service.IUserGroupService;
import org.apache.commons.lang3.StringUtils;
@@ -50,6 +53,9 @@ import com.xboe.school.study.service.IStudySignupService;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* 课程学习的内容
*/
@@ -82,7 +88,10 @@ public class StudyCourseApi extends ApiBaseController{
@Autowired
private IUserGroupService userGroupService;
@Resource
private ThirdApi thirdApi;
/**
* 用于查询课程的学习记录
* @param pager
@@ -115,8 +124,6 @@ public class StudyCourseApi extends ApiBaseController{
/**
* 导出课程学习记录
* @param courseId
* @param type
* @return
*/
@RequestMapping(value="/export",method = {RequestMethod.GET,RequestMethod.POST})
@@ -136,11 +143,10 @@ public class StudyCourseApi extends ApiBaseController{
/**
* 学习页面,加载课程的信息用于替换portal中的detail方法
* @param id
* @return
*/
@RequestMapping(value="/studyIndex",method = {RequestMethod.GET,RequestMethod.POST})
public JsonResponse<Map<String,Object>> loadDetail(String cid,Boolean addView,Boolean crowd){
public JsonResponse<Map<String,Object>> loadDetail(String cid,Boolean addView,Boolean crowd, HttpServletRequest request){
if(StringUtils.isBlank(cid)){
return error("无课程信息");
}
@@ -159,16 +165,31 @@ public class StudyCourseApi extends ApiBaseController{
rs.put("crowds",courseCrowdList);
}
StudyCourse studyCourse = service.findByCourseIdAndAid(course.getId(), aid);
log.error("=--------- 开始查询是否学习过此课程 ---------------------------------course.getId()= "+ course.getId() + ",aid = " + aid +",studyCourse = " + studyCourse);
boolean pass = false;
if (!courseCrowdList.isEmpty()) {
log.debug("=---studyIndex------ 开始查询受众信息 ---------------------------------");
String token = request.getHeader("XBOE-Access-Token");
for (CourseCrowd c : courseCrowdList) {
//同一个受众,同一个只会有一条记录,所以这里就直接查询了
List<UserGroupItem> hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid);
if (hasItem != null && !hasItem.isEmpty()) {
// List<UserGroupItem> hasItem = userGroupService.findByGroupIdAndAid(c.getGroupId(),aid);
log.debug("=--------- 开始调研用户中心受众接口 groupId = " + c.getGroupId());
List<AuditList> allAudienceList = thirdApi.getAllAudienceList(AuditListParam.builder().audienceId(c.getGroupId()).pageSize(1000).pageNo(1).build(), token);
List<Long> userIdList = allAudienceList.stream().map(AuditList::getUserId).collect(Collectors.toList());
log.debug("=--------- allAudienceList: " +allAudienceList);
/*List<UserDynamic> userDynamicList = thirdApi.getAllUserdynamicList(UserdynamicParam.builder().aid(Long.parseLong(aid)).pageSize(1000).pageIndex(1).build(), token);
log.error("=--------- 开始查询课程信息信息 ---------------------------------userDynamicList = " + userDynamicList);
List<Long> dynamicList = userDynamicList.stream().map(UserDynamic::getContentId).map(Long::parseLong).collect(Collectors.toList());
log.error(cid + "=--------- 开始查询课程信息信息 ---------------------------------dynamicList = " + dynamicList);*/
if (userIdList.contains(Long.parseLong(aid)) || !Objects.isNull(studyCourse)) {
pass = true;
break;
}
}
}else {
pass = true;
}
List<CourseContent> cclist=contentService.getByCourseId(cid);
@@ -251,7 +272,7 @@ public class StudyCourseApi extends ApiBaseController{
/**
* 记录学习信息,在学习每个资源时都要记录.前端用户打开课程资源按规则调用带着课程及学习信息调用此接口。
* @param studyId
* @param
* @return 返回学习条目的id
*/
@PostMapping("/study")
@@ -382,8 +403,8 @@ public class StudyCourseApi extends ApiBaseController{
* 音视频学习保存,初始化保存学习记录.
* 如果已经保存,就不要再保存第二次了,前端注意控制
* {studyId,contentId,courseId,progress,contentType,studyDuration}
* @param itemId
* @param videoTime
* @param
* @param
* @return
*/
@PostMapping("/study-video-save")
@@ -438,8 +459,8 @@ public class StudyCourseApi extends ApiBaseController{
}
/**
* 视频学习完
* @param itemId
* @param studyId
* @param
* @param
* @return
*/
@PostMapping("/study-video-finish")
@@ -465,7 +486,7 @@ public class StudyCourseApi extends ApiBaseController{
/**
* 记录视频的学习时间点前端可以每10秒记录一次时长是秒
* @param itemId 学习内容条目id
* @param videoTime
* @param
* @return
*/
@PostMapping("/study-video-time")
@@ -491,11 +512,6 @@ public class StudyCourseApi extends ApiBaseController{
/**
* 追加学习时长,如果有id了后台就会增加学习时长如果不是就会减少.
* 已经不再使用,二期移到独立的数据统计中了
* @param stid 记录时间id,非必填项
* @param scid 学习id,
* @param cid 课程id
* @param ccid 内容id
* @param info 学习信息
* @return
*/
@Deprecated

View File

@@ -55,9 +55,12 @@ logging.config=classpath:log/logback-@profileActive@.xml
# config.id.generator.server.num=1
# config.id.generator.datacenter.num=1
boe.domain=https://pretest.zcwytd.com
#boe.domain=https://pretest.zcwytd.com
boe.domain=https://u-pre.boe.com
orgTree.orgTreeList=${boe.domain}/userbasic/org/list
# ????id????????????
orgTree.orgChildTreeList=${boe.domain}/userbasic/org/childOrgs
userBasic.searchUserList=${boe.domain}/userbasic/user/list
audience.usersByAudienceList=${boe.domain}/userbasic/audience/memberList
#获取用户学习课程数据
statApi.userdynamicList=${boe.domain}/statApi/xboe/m/stat/userdynamic/list