Merge remote-tracking branch 'origin/master'

This commit is contained in:
金星
2023-06-19 17:12:40 +08:00
11 changed files with 475 additions and 27 deletions

View File

@@ -0,0 +1,22 @@
package com.xboe.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* excellent 最佳案例
* recommend 推荐
*/
@AllArgsConstructor
@Getter
public enum CasesSearchTypeEnum {
excellent("excellent","最佳案例"),
recommend("recommend","推荐"),
;
private String type;
private String name;
}

View File

@@ -113,6 +113,40 @@ public class CasesApi extends ApiBaseController {
}
return success(views);
}
@PostMapping("/queryListV2")
public JsonResponse<PageList<Cases>> queryCaseBreV2(@RequestBody CasePageVo req){
String type = req.getType();
PageList<Cases> views = null;
if (type.equals("recommend")) {
views = casesService.queryRecommendPageCasesV2(req);
} else {
views = casesService.queryPageCasesV2(req);
}
if(views!=null){
if(views.getList()!=null && !views.getList().isEmpty()){
for (Cases c:views.getList()) {
StringBuffer stringBuffer = new StringBuffer();
List<CasesMajorType> caseId = casesMajorTypeDao.findList(FieldFilters.eq("caseId", c.getId()));
if(caseId!=null && !caseId.isEmpty()){
for (CasesMajorType cm:caseId) {
stringBuffer.append(cm.getMajorId());
stringBuffer.append(",");
}
}
if(stringBuffer.length()>0){
stringBuffer.deleteCharAt(stringBuffer.length()-1);
c.setMajorType(stringBuffer.toString());
}
}
}
}
return success(views);
}
/**
* 案例分页搜索 是否置顶
* */

View File

@@ -186,29 +186,31 @@ public class CasesRecommendApi extends ApiBaseController {
row.put("总查看时间", it.getReadEndTime());
return row;
}).collect(Collectors.toList());
// 通过工具类创建writer
try (ExcelWriter writer = ExcelUtil.getWriter(true);
// 输出流
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);
// 此处的response.setContentType 和教程里的不同
response.setContentType("application/octet-stream");
// filename就是表格的名字这个无所谓反正前端还会重命名
response.setHeader("Content-Disposition","attachment;filename=test.xlsx");
if (CollectionUtil.isNotEmpty(rows)){
// 通过工具类创建writer
try (ExcelWriter writer = ExcelUtil.getWriter(true);
// 输出流
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);
// 此处的response.setContentType 和教程里的不同
response.setContentType("application/octet-stream");
// filename就是表格的名字这个无所谓反正前端还会重命名
response.setHeader("Content-Disposition","attachment;filename=推荐信息.xlsx");
writer.flush(servletOutputStream,true);
}catch (Exception e){
throw new RuntimeException(e.getMessage());
writer.flush(servletOutputStream,true);
}catch (Exception e){
throw new RuntimeException(e.getMessage());
}
}
}
@@ -227,11 +229,11 @@ public class CasesRecommendApi extends ApiBaseController {
}
// 查询
CasesRecommend db = iCasesRecommendService.findById(casesRecommendPushVo.getCasesRecommendId());
if (CasesPushStatusEnum.PUSH_SUCCESS.name().equalsIgnoreCase(db.getPushProgress())){
if (CasesPushStatusEnum.PUSH_SUCCESS.getStatus().equals(db.getPushProgress())){
// 当为推送成功时为
iCasesRecommendPushRecordService.rePushOrWithdraw(true, casesRecommendPushVo.getCasesRecommendId());
}else if (CasesPushStatusEnum.PUSH_FAIL.name().equalsIgnoreCase(db.getPushProgress())
|| CasesPushStatusEnum.PUSH_REVOKE.name().equalsIgnoreCase(db.getPushProgress())){
}else if (CasesPushStatusEnum.PUSH_FAIL.getStatus().equals(db.getPushProgress())
|| CasesPushStatusEnum.PUSH_REVOKE.getStatus().equals(db.getPushProgress())){
// 推送失败或者已撤回时
iCasesRecommendPushRecordService.rePushOrWithdraw(false, casesRecommendPushVo.getCasesRecommendId());
}

View File

@@ -0,0 +1,54 @@
package com.xboe.module.boecase.dto;
import lombok.Data;
import java.util.List;
@Data
public class CasePageVo extends PageDto {
private String keyWord;
private Boolean breCommend;
private String orderField;
private Boolean orderAsc;
private List<OrgDomainDto> orgDomainDtos;//后台查询一级
/**
* 专业分类
*/
private String majorType;
/**
* 置顶
*/
private Boolean isTop;
private String caseType;
/**
* 最佳案例
*/
private Boolean excellent;
private String authorName;
private List<String> years;
/**
* 已经返回给前端的案例需要过滤掉
*/
private List<Long> notInIds;
/**
* excellent 最佳案例
* recommend 推荐
*/
private String type;
}

View File

@@ -0,0 +1,20 @@
package com.xboe.module.boecase.dto;
import lombok.Data;
@Data
public class OrgDomainDto {
/**
* 组织领域1级
*/
private String orgDomainParent;
/**
* 组织领域2级
*/
private String orgDomainParent2;
/**
* 组织领域3级
*/
private String orgDomainParent3;
}

View File

@@ -0,0 +1,10 @@
package com.xboe.module.boecase.dto;
import lombok.Data;
@Data
public class PageDto {
private int pageIndex = 1;
private int pageSize = 10;
}

View File

@@ -245,6 +245,9 @@ public class Cases extends BaseEntity {
private String caseValue;
/**
* 最佳案例标识
*/
@Column(name = "excellent")
private Boolean excellent;

View File

@@ -42,7 +42,7 @@ public class CasesRecommend extends BaseEntity {
private Integer userCount;
/**推送进度*/
@Column(name = "push_progress", length = 255)
private String pushProgress;
private Integer pushProgress;
/**查看率*/
@Column(name = "view_rate", length = 255)
private String viewRate;

View File

@@ -14,6 +14,8 @@ public interface ICasesService{
* */
PageList<Cases> queryPageCases(int pageIndex, int pageSize, CaseVo caseVo);
PageList<Cases> queryPageCasesV2(CasePageVo caseVo);
/**
* 案例管理列表搜索
* */
@@ -97,5 +99,6 @@ public interface ICasesService{
void excellent(String id,Boolean excellent);
PageList<Cases> queryRecommendPageCasesV2(CasePageVo req);
}

View File

@@ -62,7 +62,7 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
casesRecommend.setCaseCount(casesRecommendLaunch.getCasesIdList().size());
casesRecommend.setUserCount(casesRecommendLaunch.getPushUserIdList().size());
casesRecommend.setRecommendOrgName(casesRecommendLaunch.getRecommendOrgName());
casesRecommend.setPushProgress(CasesPushStatusEnum.WAIT_PUSH.name());
casesRecommend.setPushProgress(CasesPushStatusEnum.WAIT_PUSH.getStatus());
casesRecommendDao.save(casesRecommend);
List<String> caseIds = new ArrayList<>();

View File

@@ -7,6 +7,8 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.xboe.common.utils.IDGenerator;
import com.xboe.module.boecase.dao.CasesMajorTypeDao;
import com.xboe.module.boecase.dto.*;
@@ -160,6 +162,303 @@ public class CasesServiceImpl implements ICasesService {
return page;
}
/**
* 案例分页查询,用于门户的查询 v2
* */
@Override
public PageList<Cases> queryPageCasesV2(CasePageVo caseVo) {
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>();
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<Long> notInIds = caseVo.getNotInIds();
if (CollUtil.isNotEmpty(notInIds)) {
filters.add(FieldFilters.notIn("id", notInIds));
}
if(StringUtil.isNotBlank(caseVo.getKeyWord())) {
filters.add(FieldFilters.or(likes));
}
List<OrgDomainDto> 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.getOrgDomainParent();
String orgDomainParent2 = domainDto.getOrgDomainParent2();
String orgDomainParent3 = domainDto.getOrgDomainParent3();
List<IFieldFilter> fieldFilters = new ArrayList<>();
IFieldFilter itemFilter = null;
if (StrUtil.isNotBlank(orgDomainParent)) {
itemFilter = FieldFilters.eq("orgDomainParent",orgDomainParent);
}
if (StrUtil.isNotBlank(orgDomainParent2)) {
IFieldFilter orgDomainParentFilter = FieldFilters.eq("orgDomainParent2", orgDomainParent2);
if (Objects.nonNull(itemFilter)) {
itemFilter = FieldFilters.and(itemFilter, orgDomainParentFilter);
} else {
itemFilter = orgDomainParentFilter;
}
}
if (StrUtil.isNotBlank(orgDomainParent3)) {
IFieldFilter orgDomainParent3Filter = FieldFilters.eq("orgDomainParent3", orgDomainParent3);
if (Objects.nonNull(itemFilter)) {
itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter);
} else {
itemFilter = orgDomainParent3Filter;
}
}
if (i==0) {
orgDomain = itemFilter;
} else {
orgDomain = FieldFilters.or(orgDomain, itemFilter);
}
}
}
if (Objects.nonNull(orgDomain)) {
filters.add(orgDomain);
}
//创建时间过滤
List<String> years = caseVo.getYears();
if (CollUtil.isNotEmpty(years)) {
FieldFilters.in("YEAR(sysCreateTime)",years);
}
//增加只是查询有附件的
filters.add(FieldFilters.isNotNull("filePath"));
filters.add(FieldFilters.ne("filePath",""));
if(StringUtil.isNotBlank(caseVo.getMajorType())){
QueryBuilder from = QueryBuilder.from(CasesMajorType.class);
//前端直接字符串拼接传,后端转化数组
if(caseVo.getMajorType().contains(",")){
String[] split = caseVo.getMajorType().split(",");
List<String> strings = Arrays.asList(split);
from.addFilter(FieldFilters.in("majorId",strings));
}else{
from.addFilter(FieldFilters.eq("majorId",caseVo.getMajorType()));
}
from.addGroupBy("caseId");
from.addFields("id","caseId");
// List<CasesMajorType> list = casesMajorTypeDao.findList(from.builder());
List<Object[]> listFields=null;
try {
listFields = casesMajorTypeDao.findListFields(from.builder());
} catch (Exception e) {
log.error("查询失败",e);
}
List<String> list1 = new ArrayList<>();
if(listFields!=null && !listFields.isEmpty()){
for (Object[] obj:listFields) {
list1.add((String) obj[1]);
}
}
if(list1!=null &&!list1.isEmpty()){
query.addFilter(FieldFilters.in("id",list1));
}else {
//如果所点击的内容分类都没有案例数据,应该返回空
return page;
}
}
if(StringUtils.isNotBlank(caseVo.getCaseType())){
filters.add(FieldFilters.eq("caseType",caseVo.getCaseType()));
}
if(caseVo.getBreCommend()!=null){
if(!caseVo.getBreCommend()){
filters.add(FieldFilters.eq("breCommend",0));
}else {
filters.add(FieldFilters.eq("breCommend", 1));
}
}
if(caseVo.getIsTop()!=null && caseVo.getIsTop()) {
query.addOrder(OrderCondition.desc("isTop"));
query.addOrder(OrderCondition.desc("topTime"));
}
//如果选择的是优秀案例,那么这里就按优秀案例的试试排序
if(caseVo.getExcellent()!=null && caseVo.getExcellent()){
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());
return page;
}
@Override
public PageList<Cases> queryRecommendPageCasesV2(CasePageVo caseVo) {
String hql = "SELECT c.* FROM CasesRecommendPushRecord as rp INNER JOIN Cases as c ON rp.caseId = c.id WHERE 1 = 1";
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>();
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<Long> notInIds = caseVo.getNotInIds();
if (CollUtil.isNotEmpty(notInIds)) {
filters.add(FieldFilters.notIn("id", notInIds));
}
if(StringUtil.isNotBlank(caseVo.getKeyWord())) {
filters.add(FieldFilters.or(likes));
}
List<OrgDomainDto> 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.getOrgDomainParent();
String orgDomainParent2 = domainDto.getOrgDomainParent2();
String orgDomainParent3 = domainDto.getOrgDomainParent3();
List<IFieldFilter> fieldFilters = new ArrayList<>();
IFieldFilter itemFilter = null;
if (StrUtil.isNotBlank(orgDomainParent)) {
itemFilter = FieldFilters.eq("orgDomainParent",orgDomainParent);
}
if (StrUtil.isNotBlank(orgDomainParent2)) {
IFieldFilter orgDomainParentFilter = FieldFilters.eq("orgDomainParent2", orgDomainParent2);
if (Objects.nonNull(itemFilter)) {
itemFilter = FieldFilters.and(itemFilter, orgDomainParentFilter);
} else {
itemFilter = orgDomainParentFilter;
}
}
if (StrUtil.isNotBlank(orgDomainParent3)) {
IFieldFilter orgDomainParent3Filter = FieldFilters.eq("orgDomainParent3", orgDomainParent3);
if (Objects.nonNull(itemFilter)) {
itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter);
} else {
itemFilter = orgDomainParent3Filter;
}
}
if (i==0) {
orgDomain = itemFilter;
} else {
orgDomain = FieldFilters.or(orgDomain, itemFilter);
}
}
}
if (Objects.nonNull(orgDomain)) {
filters.add(orgDomain);
}
//创建时间过滤
List<String> years = caseVo.getYears();
if (CollUtil.isNotEmpty(years)) {
FieldFilters.in("YEAR(sysCreateTime)",years);
}
//增加只是查询有附件的
filters.add(FieldFilters.isNotNull("filePath"));
filters.add(FieldFilters.ne("filePath",""));
if(StringUtil.isNotBlank(caseVo.getMajorType())){
QueryBuilder from = QueryBuilder.from(CasesMajorType.class);
//前端直接字符串拼接传,后端转化数组
if(caseVo.getMajorType().contains(",")){
String[] split = caseVo.getMajorType().split(",");
List<String> strings = Arrays.asList(split);
from.addFilter(FieldFilters.in("majorId",strings));
}else{
from.addFilter(FieldFilters.eq("majorId",caseVo.getMajorType()));
}
from.addGroupBy("caseId");
from.addFields("id","caseId");
// List<CasesMajorType> list = casesMajorTypeDao.findList(from.builder());
List<Object[]> listFields=null;
try {
listFields = casesMajorTypeDao.findListFields(from.builder());
} catch (Exception e) {
log.error("查询失败",e);
}
List<String> list1 = new ArrayList<>();
if(listFields!=null && !listFields.isEmpty()){
for (Object[] obj:listFields) {
list1.add((String) obj[1]);
}
}
if(list1!=null &&!list1.isEmpty()){
query.addFilter(FieldFilters.in("id",list1));
}else {
//如果所点击的内容分类都没有案例数据,应该返回空
return page;
}
}
if(StringUtils.isNotBlank(caseVo.getCaseType())){
filters.add(FieldFilters.eq("caseType",caseVo.getCaseType()));
}
if(caseVo.getBreCommend()!=null){
if(!caseVo.getBreCommend()){
filters.add(FieldFilters.eq("breCommend",0));
}else {
filters.add(FieldFilters.eq("breCommend", 1));
}
}
if(caseVo.getIsTop()!=null && caseVo.getIsTop()) {
query.addOrder(OrderCondition.desc("isTop"));
query.addOrder(OrderCondition.desc("topTime"));
}
//如果选择的是优秀案例,那么这里就按优秀案例的试试排序
if(caseVo.getExcellent()!=null && caseVo.getExcellent()){
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());
return page;
}
/**
* 案例分页查询,是否置顶*/
@Override
@@ -651,4 +950,5 @@ public class CasesServiceImpl implements ICasesService {
}
}