diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java index b9083604..2c120fc9 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java @@ -11,13 +11,16 @@ import com.xboe.common.PageList; import com.xboe.common.Pagination; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; +import com.xboe.enums.CasesPushStatusEnum; import com.xboe.enums.CasesRecommendLaunchTypeEnum; import com.xboe.module.boecase.entity.CasesRecommend; import com.xboe.module.boecase.entity.CasesRecommendLaunchImport; +import com.xboe.module.boecase.entity.CasesRecommendPushRecord; 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.CasesRecommendPushVo; import com.xboe.module.boecase.vo.CasesRecommendVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -27,7 +30,11 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 案例推荐表 @@ -153,5 +160,84 @@ public class CasesRecommendApi extends ApiBaseController { return success(iCasesRecommendPushRecordService.launchPush(casesRecommendLaunch)); } + /** + * 信息下载 + * + * @return + * @throws Exception + */ + @GetMapping("/info_download") + public void infoDownload(String casesRecommendId, HttpServletResponse response) { + if (StringUtils.isEmpty(casesRecommendId)) { + throw new RuntimeException("缺少必要参数"); + } + // 拿取表格里需要的数据 + List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(casesRecommendId); + // 用个List装表格的所有内容 + // 拼接上列明。我这里用的最土的方法,很不优雅别学我 + List> rows = recordList.stream().map(it -> { + Map row = new LinkedHashMap<>(); + row.put("案例名称", it.getCaseTitle()); + row.put("推送用户", it.getPushUserName()); + row.put("所属组织", "it.get"); + row.put("推送时间", it.getPushTime()); + row.put("是否查看", it.getReadFlag()); + row.put("首次查看时间", it.getReadStartTime()); + 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"); + + writer.flush(servletOutputStream,true); + }catch (Exception e){ + throw new RuntimeException(e.getMessage()); + } + + } + + + /** + * 重新推送或撤回 + * + * @param casesRecommendPushVo + * @return + */ + @PostMapping("/rePushOrWithdraw") + public JsonResponse rePushOrWithdraw(@RequestBody CasesRecommendPushVo casesRecommendPushVo) { + if (StringUtils.isEmpty(casesRecommendPushVo.getCasesRecommendId())) { + throw new RuntimeException("缺少必要参数"); + } + // 查询 + CasesRecommend db = iCasesRecommendService.findById(casesRecommendPushVo.getCasesRecommendId()); + if (CasesPushStatusEnum.PUSH_SUCCESS.name().equalsIgnoreCase(db.getPushProgress())){ + // 当为推送成功时为 + iCasesRecommendPushRecordService.rePushOrWithdraw(true, casesRecommendPushVo.getCasesRecommendId()); + }else if (CasesPushStatusEnum.PUSH_FAIL.name().equalsIgnoreCase(db.getPushProgress()) + || CasesPushStatusEnum.PUSH_REVOKE.name().equalsIgnoreCase(db.getPushProgress())){ + // 推送失败或者已撤回时 + iCasesRecommendPushRecordService.rePushOrWithdraw(false, casesRecommendPushVo.getCasesRecommendId()); + } + + return success(true); + } + } 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 index 86bb4715..ca60c161 100644 --- 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 @@ -1,7 +1,10 @@ package com.xboe.module.boecase.service; +import com.xboe.module.boecase.entity.CasesRecommendPushRecord; import com.xboe.module.boecase.vo.CasesRecommendLaunchVo; +import java.util.List; + public interface ICasesRecommendPushRecordService { @@ -13,4 +16,17 @@ public interface ICasesRecommendPushRecordService { */ boolean launchPush(CasesRecommendLaunchVo casesRecommendLaunch); + /** + * 根据案例推荐ID查询案例推送列表信息 + * @param recommendId + * @return + */ + List findAllByRecommendId(String recommendId); + + /** + * 重新推送或撤回 + * @param isWithdraw 是否撤回 + * @param casesRecommendId 案例推荐ID + */ + void rePushOrWithdraw(boolean isWithdraw, String casesRecommendId); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java index fbfc2b3e..4ce96881 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesRecommendService.java @@ -19,4 +19,11 @@ public interface ICasesRecommendService { * @param id */ void delete(String id); + + /** + * 根据ID查询 + * @param id + * @return + */ + CasesRecommend findById(String 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 index 24379ec2..30d6ec82 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendPushRecordServiceImpl.java @@ -16,6 +16,7 @@ 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.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -61,6 +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()); casesRecommendDao.save(casesRecommend); List caseIds = new ArrayList<>(); @@ -93,4 +95,31 @@ public class CasesRecommendPushRecordServiceImpl implements ICasesRecommendPushR return true; } + + @Override + public List findAllByRecommendId(String recommendId) { + CasesRecommendPushRecord ex = new CasesRecommendPushRecord(); + ex.setRecommendId(recommendId); + return casesRecommendPushRecordDao.findListByExample(ex); + } + + @Override + public void rePushOrWithdraw(boolean isWithdraw, String casesRecommendId) { + if (StringUtils.isEmpty(casesRecommendId)) { + throw new RuntimeException("缺少必要参数"); + } + List recordList = findAllByRecommendId(casesRecommendId); + if (isWithdraw) { + recordList.stream().forEach(record -> + record.setPushStatus(CasesPushStatusEnum.PUSH_REVOKE.getStatus()) + ); + } else { + recordList.stream().forEach(record -> + record.setPushStatus(CasesPushStatusEnum.PUSH_ING.getStatus()) + ); + } + if (CollectionUtil.isNotEmpty(recordList)) { + casesRecommendPushRecordDao.saveList(recordList); + } + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java index 530c385a..f07f31bf 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesRecommendServiceImpl.java @@ -46,4 +46,9 @@ public class CasesRecommendServiceImpl implements ICasesRecommendService { public void delete(String id) { casesRecommendDao.setDeleted(id); } + + @Override + public CasesRecommend findById(String id) { + return casesRecommendDao.get(id); + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendPushVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendPushVo.java new file mode 100644 index 00000000..6fae162a --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/vo/CasesRecommendPushVo.java @@ -0,0 +1,10 @@ +package com.xboe.module.boecase.vo; + +import lombok.Data; + +@Data +public class CasesRecommendPushVo { + + /** 案例推荐id */ + private String casesRecommendId; +}