Merge remote-tracking branch 'origin/master'

This commit is contained in:
Boolean
2023-06-28 23:58:47 +08:00
4 changed files with 99 additions and 18 deletions

View File

@@ -37,7 +37,6 @@ import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -123,6 +122,27 @@ public class CasesRecommendApi extends ApiBaseController {
} }
/**
* 下载错误数据
*
* @return
* @throws Exception
*/
@PostMapping("/download-template")
public void downloadTemplate(HttpServletResponse response) throws Exception {
// 通过工具类创建writer默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
writer.writeHeadRow(ListUtil.toList("标题"));
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);
}
/** /**
* 下载错误数据 * 下载错误数据
* *
@@ -186,17 +206,17 @@ public class CasesRecommendApi extends ApiBaseController {
throw new RuntimeException("缺少必要参数"); throw new RuntimeException("缺少必要参数");
} }
try(OutputStream outputStream = response.getOutputStream()) { try (OutputStream outputStream = response.getOutputStream()) {
// 用个List<Map>装表格的所有内容 // 用个List<Map>装表格的所有内容
// 拼接上列明。我这里用的最土的方法,很不优雅别学我 // 拼接上列明。我这里用的最土的方法,很不优雅别学我
LinkedHashMap<String,String> map = new LinkedHashMap<>(); LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("案例名称","caseTitle"); map.put("案例名称", "caseTitle");
map.put("推送用户","pushUserName"); map.put("推送用户", "pushUserName");
map.put("所属组织","recommendOrgName"); map.put("所属组织", "recommendOrgName");
map.put("推送时间","pushTime"); map.put("推送时间", "pushTime");
map.put("是否查看","readFlag"); map.put("是否查看", "readFlag");
map.put("首次查看时间","readStartTime"); map.put("首次查看时间", "readStartTime");
map.put("总查看时间","totalReadTime"); map.put("总查看时间", "totalReadTime");
CasesRecommend casesRecommend = iCasesRecommendService.findById(vo.getCasesRecommendId()); CasesRecommend casesRecommend = iCasesRecommendService.findById(vo.getCasesRecommendId());
@@ -212,7 +232,7 @@ public class CasesRecommendApi extends ApiBaseController {
exportVo.setPushTime(DateUtil.formatDateTime(record.getPushTime())); exportVo.setPushTime(DateUtil.formatDateTime(record.getPushTime()));
exportVo.setReadFlag(record.getReadFlag() == 1 ? "" : ""); exportVo.setReadFlag(record.getReadFlag() == 1 ? "" : "");
exportVo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime())); exportVo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime()));
if (ObjectUtil.isNotEmpty(record.getReadStartTime()) && ObjectUtil.isNotEmpty(record.getReadEndTime())){ if (ObjectUtil.isNotEmpty(record.getReadStartTime()) && ObjectUtil.isNotEmpty(record.getReadEndTime())) {
exportVo.setTotalReadTime(DateUtil.formatBetween(record.getReadStartTime(), record.getReadEndTime())); exportVo.setTotalReadTime(DateUtil.formatBetween(record.getReadStartTime(), record.getReadEndTime()));
} }
return exportVo; return exportVo;
@@ -221,10 +241,10 @@ public class CasesRecommendApi extends ApiBaseController {
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=casesRecommend.xls"); response.setHeader("Content-disposition", "attachment;filename=casesRecommend.xls");
ExportsExcelSenderUtil.export(map, exportVos, outputStream,"yyyy-MM-dd HH:mm:ss"); ExportsExcelSenderUtil.export(map, exportVos, outputStream, "yyyy-MM-dd HH:mm:ss");
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("导出失败",e.getMessage()); log.error("导出失败", e.getMessage());
} }
} }

View File

@@ -1,8 +1,11 @@
package com.xboe.module.boecase.service.impl; package com.xboe.module.boecase.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.xboe.core.CurrentUser; import com.xboe.core.CurrentUser;
import com.xboe.core.event.IEventDataSender;
import com.xboe.core.orm.FieldFilters; import com.xboe.core.orm.FieldFilters;
import com.xboe.core.orm.UpdateBuilder;
import com.xboe.data.outside.IOutSideDataService; import com.xboe.data.outside.IOutSideDataService;
import com.xboe.enums.CasesPushStatusEnum; import com.xboe.enums.CasesPushStatusEnum;
import com.xboe.module.boecase.dao.CasesDao; import com.xboe.module.boecase.dao.CasesDao;
@@ -16,19 +19,24 @@ import com.xboe.module.boecase.entity.CasesRecommendPushRecord;
import com.xboe.module.boecase.service.ICasesRecommendPushRecordService; import com.xboe.module.boecase.service.ICasesRecommendPushRecordService;
import com.xboe.module.boecase.vo.CasesRecommendLaunchVo; import com.xboe.module.boecase.vo.CasesRecommendLaunchVo;
import com.xboe.system.user.dao.UserDao; import com.xboe.system.user.dao.UserDao;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@Transactional @Transactional
@Slf4j
public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushRecordService { public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushRecordService {
@@ -50,6 +58,10 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
@Resource @Resource
private CasesRecommendPushRecordDao casesRecommendPushRecordDao; private CasesRecommendPushRecordDao casesRecommendPushRecordDao;
@Autowired(required = false)
private IEventDataSender eventDataSender;
@Override @Override
public boolean launchPush(CasesRecommendLaunchVo casesRecommendLaunch, CurrentUser currentUser) { public boolean launchPush(CasesRecommendLaunchVo casesRecommendLaunch, CurrentUser currentUser) {
@@ -63,6 +75,7 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
casesRecommend.setRecommendOrgName(casesRecommendLaunch.getRecommendOrgName()); casesRecommend.setRecommendOrgName(casesRecommendLaunch.getRecommendOrgName());
casesRecommend.setPushProgress(CasesPushStatusEnum.WAIT_PUSH.getStatus()); casesRecommend.setPushProgress(CasesPushStatusEnum.WAIT_PUSH.getStatus());
casesRecommendDao.save(casesRecommend); casesRecommendDao.save(casesRecommend);
log.info("案例推送对象 {}", JSONUtil.toJsonStr(casesRecommend));
List<String> caseIds = new ArrayList<>(); List<String> caseIds = new ArrayList<>();
if (casesRecommendLaunch.getLaunchType() == 1) { if (casesRecommendLaunch.getLaunchType() == 1) {
@@ -93,10 +106,59 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR
casesRecommendPushRecordDao.saveList(pushRecords); casesRecommendPushRecordDao.saveList(pushRecords);
} }
} }
try {
//发送推送案例消息
sendCasesRecommend(casesRecommend);
} catch (Exception e) {
log.error("推送失败", e);
}
return true; return true;
} }
/**
* 修改轧辊天
*
* @param id
* @param pushProgress
* @return
*/
private boolean updateProcessStatus(String id, Integer pushProgress) {
return casesRecommendDao.updateMultiFieldById(id, UpdateBuilder.create("pushProgress", pushProgress)) > 0;
}
private void sendCasesRecommend(CasesRecommend casesRecommend) {
List<Integer> pushStatusList = new ArrayList<>();
pushStatusList.add(CasesPushStatusEnum.WAIT_PUSH.getStatus());
List<CasesRecommendPushRecord> casesRecommendPushRecords = casesRecommendPushRecordDao.getGenericDao().findList(CasesRecommendPushRecord.class, FieldFilters.in("pushStatus", pushStatusList));
if (CollectionUtils.isEmpty(casesRecommendPushRecords)) {
//修改为推送完成 --- 无数据 无需推送
updateProcessStatus(casesRecommend.getId(), CasesPushStatusEnum.PUSH_SUCCESS.getStatus());
return;
}
//修改为推送中
updateProcessStatus(casesRecommend.getId(), CasesPushStatusEnum.PUSH_ING.getStatus());
for (CasesRecommendPushRecord casesRecommendPushRecord : casesRecommendPushRecords) {
Integer pushStatus;
try {
eventDataSender.send("案例推荐", "recommendCases", "案例推荐【" + casesRecommendPushRecord.getCaseTitle() + "",
casesRecommendPushRecord.getCaseId(), "99", casesRecommendPushRecord.getCaseTitle(),
casesRecommendPushRecord.getSysCreateAid(), casesRecommendPushRecord.getSysCreateBy(), "");
pushStatus = CasesPushStatusEnum.PUSH_SUCCESS.getStatus();
} catch (Exception e) {
log.error("推荐案例失败", e);
pushStatus = CasesPushStatusEnum.PUSH_FAIL.getStatus();
}
casesRecommendPushRecordDao.updateMultiFieldById(casesRecommendPushRecord.getId(), UpdateBuilder.create("pushStatus", pushStatus), UpdateBuilder.create("pushTime", new Date()));
}
//修改为推送完成 --- 无数据 无需推送
updateProcessStatus(casesRecommend.getId(), CasesPushStatusEnum.PUSH_SUCCESS.getStatus());
}
@Override @Override
public List<CasesRecommendPushRecord> findAllByRecommendId(String recommendId) { public List<CasesRecommendPushRecord> findAllByRecommendId(String recommendId) {
CasesRecommendPushRecord ex = new CasesRecommendPushRecord(); CasesRecommendPushRecord ex = new CasesRecommendPushRecord();

View File

@@ -6,7 +6,7 @@
<!--应用名称--> <!--应用名称-->
<property name="APP_NAME" value="boe-server-all"/> <property name="APP_NAME" value="boe-server-all"/>
<!--日志文件保存路径--> <!--日志文件保存路径-->
<property name="LOG_FILE_PATH" value="~/app/logs/"/> <property name="LOG_FILE_PATH" value="/app/logs/"/>
<contextName>${APP_NAME}</contextName> <contextName>${APP_NAME}</contextName>
<!--每天记录日志到文件appender--> <!--每天记录日志到文件appender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

View File

@@ -10,7 +10,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -42,7 +41,7 @@ public class CasesRecommendPushSchedule {
/** /**
* 每分钟执行一次 * 每分钟执行一次
*/ */
@Scheduled(cron = "0 */1 * * * ?") // @Scheduled(cron = "0 */1 * * * ?")
public void execute() { public void execute() {
log.info("启动案例推荐定时任务"); log.info("启动案例推荐定时任务");
List<CasesRecommend> casesRecommends = casesRecommendService.queryByPushProgress(CasesPushStatusEnum.WAIT_PUSH.getStatus()); List<CasesRecommend> casesRecommends = casesRecommendService.queryByPushProgress(CasesPushStatusEnum.WAIT_PUSH.getStatus());