Преглед на файлове

feat: 封装报告导出状态

shc преди 3 години
родител
ревизия
492922c8e8

+ 5 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java

@@ -74,4 +74,9 @@ public interface CacheConstants {
 	 */
 	String MONITORING_INDICATOR = "monitoring_indicator";
 
+	/**
+	 * zb报告导出缓存
+	 */
+	String EXPORT_ZB_REPORT_CACHE = "export:zb_report:%s";
+
 }

+ 18 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/MqConstants.java

@@ -0,0 +1,18 @@
+package com.qunzhixinxi.hnqz.admin.api.constant;
+
+/**
+ * {@code MqConstants}
+ * <p>
+ * 消息队列常量
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/17 11:21
+ */
+public class MqConstants {
+
+	/**
+	 * 众包队列
+	 */
+	String DIRECT_MODE_REPORT_EXPORT_ZB_QUEUE = "direct_mode_report_export_zb_queue";
+}

+ 46 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmReportOpt.java

@@ -0,0 +1,46 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import cn.hutool.core.date.DatePattern;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * {@code WmReportOpt}
+ * <p>
+ * 报告导出
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/17 11:37
+ */
+@Data
+public class WmReportOpt {
+
+	/**
+	 * 生成状态
+	 */
+	private WmReportOptStatus status;
+
+	/**
+	 * 最近可用
+	 */
+	private String latestUrl;
+
+	/**
+	 * 当前报告最后可用下载时间
+	 */
+	@JsonFormat(pattern = DatePattern.CHINESE_DATE_TIME_PATTERN)
+	private LocalDateTime ttl;
+
+
+	public enum WmReportOptStatus {
+		// 未生成
+		NOT_GENERATE,
+		// 生成中
+		GENERATING,
+		// 已生成
+		GENERATED;
+	}
+}

+ 4 - 0
hnqz-upms/hnqz-upms-biz/pom.xml

@@ -33,6 +33,10 @@
 	<description>hnqz 通用用户权限管理系统业务处理模块</description>
 
 	<dependencies>
+		<dependency>
+			<groupId>com.qunzhixinxi</groupId>
+			<artifactId>hnqz-common-mq</artifactId>
+		</dependency>
 		<!--upms api、model 模块-->
 		<dependency>
 			<groupId>com.qunzhixinxi</groupId>

+ 50 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -27,9 +27,11 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.ImmutableMap;
+import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
 import com.qunzhixinxi.hnqz.admin.api.vo.ErrorInfoVo;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.api.vo.WmScorePackageVO;
@@ -56,6 +58,8 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -70,6 +74,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -103,7 +108,7 @@ public class WmScorePackageController {
 	private final WmDaDrugEntMapper wmDaDrugEntMapper;
 	private final WmDaAgentMapper wmDaAgentMapper;
 	private final SysUserMapper sysUserMapper;
-	private final WmReportMapper wmReportMapper;
+	private final StringRedisTemplate redisTemplate;
 
 
 	/**
@@ -1395,6 +1400,8 @@ public class WmScorePackageController {
 
 			}
 
+			// 封装报告导出状态
+			getReportOpt(finalRecords);
 			pageAnswer.setRecords(finalRecords);
 		} catch (ExecutionException | InterruptedException e) {
 			log.error("获取分页信息失败");
@@ -1404,6 +1411,48 @@ public class WmScorePackageController {
 		return R.ok(pageAnswer);
 	}
 
+	/**
+	 * 查询报告导出状态
+	 * @param finalRecords 列表
+	 */
+	private void getReportOpt(List<WmScorePackage> finalRecords){
+
+		ValueOperations<String, String> ops = redisTemplate.opsForValue();
+
+		finalRecords.forEach(record ->{
+
+			WmReportOpt opt = new WmReportOpt();
+
+			final String key = String.format(CacheConstants.EXPORT_ZB_REPORT_CACHE,record.getId());
+
+			String url = ops.get(key);
+
+			// 存在key
+			if (redisTemplate.hasKey(key)){
+
+				Long expire = ops.getOperations().getExpire(key, TimeUnit.MINUTES);
+
+				LocalDateTime expiry;
+				// 永久有效为正在生成的状态否则就是生成成功了的
+				if (!Long.valueOf(-1L).equals(expire)){
+					opt.setStatus(WmReportOpt.WmReportOptStatus.GENERATING);
+				} else {
+					expiry = LocalDateTime.now().plusSeconds(expire);
+					opt.setTtl(expiry);
+					opt.setLatestUrl(url);
+					opt.setStatus(WmReportOpt.WmReportOptStatus.GENERATED);
+				}
+
+			} else {
+				opt.setStatus(WmReportOpt.WmReportOptStatus.NOT_GENERATE);
+			}
+
+			record.setReportOpt(opt);
+
+		});
+
+	}
+
 
 	/**
 	 * 获取关联积分包名称 二期  业务平台

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -479,6 +480,12 @@ public class WmScorePackage extends Model<WmScorePackage> {
 	@TableField(exist = false)
 	private PackageStopStatus stopStatus;
 
+	/**
+	 * 报告操作状态
+	 */
+	@TableField(exist = false)
+	private WmReportOpt reportOpt;
+
 	/**
 	 * 关联药品的生产厂商列表
 	 */