Bladeren bron

feat: 优化:提交任务时发起任务h5页面截图事件

lixuesong 1 jaar geleden
bovenliggende
commit
c02dc86611

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -90,6 +90,7 @@ import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.UserSignResultEnum;
+import com.qunzhixinxi.hnqz.admin.event.TaskInfoImgEvent;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageSettleNoteMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScoreTaskTypeMapper;
 import com.qunzhixinxi.hnqz.admin.service.MedicalEquipmentService;
@@ -154,6 +155,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.ResponseEntity;
 import org.springframework.mock.web.MockMultipartFile;
@@ -251,6 +253,7 @@ public class ApiController {
 	private final WmDaHospitalService wmDaHospitalService;
 	private final WmQuizService quizService;
 	private final WmPlatformQuizTestResultService platformQuizTestResultService;
+	private final ApplicationEventPublisher applicationEventPublisher;
 
 	private static final String[] RANDOM_QUIZ_URL = {
 			"生长抑素测试题一|https://lit.yaoyi.net/s/a26d3dfe2e3b44efa2afdd33d756b285",
@@ -3612,6 +3615,9 @@ public class ApiController {
 				} else {
 					return R.failed("任务保存失败");
 				}
+
+				// 推送任务h5截图
+				applicationEventPublisher.publishEvent(new TaskInfoImgEvent(wmTask.getId()));
 			}
 		}
 

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/event/TaskInfoImgEvent.java

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.event;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 任务h5页面截图事件
+ *
+ * @author lixuesong
+ * @date 2024/04/16
+ */
+@Getter
+@AllArgsConstructor
+public class TaskInfoImgEvent {
+
+	/**
+	 * 任务id
+	 */
+	private String taskId;
+
+}

+ 86 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/listener/TaskInfoImgEventListener.java

@@ -0,0 +1,86 @@
+package com.qunzhixinxi.hnqz.admin.listener;
+
+import cn.hutool.core.util.StrUtil;
+import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.event.TaskInfoImgEvent;
+import com.qunzhixinxi.hnqz.admin.service.SysFileService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
+import com.qunzhixinxi.hnqz.admin.util.Html2ImageByJsWrapper;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.annotation.Async;
+
+import javax.imageio.ImageIO;
+import javax.imageio.stream.ImageOutputStream;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+/**
+ * 任务h5页面截图事件监听器
+ *
+ * @author lixuesong
+ * @date 2024/04/16
+ */
+@Slf4j
+@AllArgsConstructor
+@Configuration
+public class TaskInfoImgEventListener {
+
+	private final WmTaskService wmTaskService;
+
+	private final SysFileService sysFileService;
+
+	private final UpmsConfig upmsConfig;
+
+
+	/**
+	 * 推送事件
+	 *
+	 * @param event 事件
+	 */
+	@Async
+	@Order
+	@EventListener(TaskInfoImgEvent.class)
+	public void pushEvent(TaskInfoImgEvent event) {
+		log.info("任务h5页面截图事件参数:taskId={}", event.getTaskId());
+
+		WmTask wmTask = wmTaskService.getById(event.getTaskId());
+		if (null == wmTask) {
+			log.warn("任务不存在:taskId={}", wmTask.getId());
+			return;
+		}
+
+		try {
+			BufferedImage bufferedImage = Html2ImageByJsWrapper.renderHtml2Image(upmsConfig.getApiUrl()
+					+ "/h5/#/pages/task/task-detail/index?id=" + wmTask.getId(), upmsConfig.getServerUrl());
+
+			if (bufferedImage == null || bufferedImage.getWidth() == 0 || bufferedImage.getHeight() == 0) {
+				log.error("图片截取失败: 截图服务处理失败");
+				return;
+			}
+
+			ByteArrayOutputStream bs = new ByteArrayOutputStream();
+			ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
+			ImageIO.write(bufferedImage, "png", imOut);
+
+			InputStream inputStream = new ByteArrayInputStream(bs.toByteArray());
+
+			String path = sysFileService.uploadImgByByte(inputStream);
+			if (StrUtil.isNotBlank(path)) {
+				WmTask updateTask = new WmTask();
+				updateTask.setId(wmTask.getId());
+				updateTask.setTaskInfoImg(path);
+				wmTaskService.updateById(updateTask);
+			}
+		} catch (Exception e) {
+			log.error("图片截取失败", e);
+		}
+	}
+}

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java

@@ -28,6 +28,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.entity.WmUserSign;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.event.TaskInfoImgEvent;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDaHospitalMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskContentMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
@@ -53,6 +54,7 @@ import com.qunzhixinxi.hnqz.common.sequence.sequence.Sequence;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -93,6 +95,7 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 	private final WmTaskTypeSubCategoryService taskTypeSubCategoryService;
 	private final WmTaskSubmissionRuleService taskSubmissionRuleService;
 	private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
+	private final ApplicationEventPublisher applicationEventPublisher;
 	private final Sequence taskSequence;
 
 	private static final DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
@@ -901,6 +904,9 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 					wmUserSign.setSignDate(localDateTime);
 					wmUserSignMapper.insert(wmUserSign);
 				}
+
+				// 推送任务h5截图
+				applicationEventPublisher.publishEvent(new TaskInfoImgEvent(wmTask.getId()));
 			}
 		}
 

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java

@@ -14,6 +14,7 @@ import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.event.TaskInfoImgEvent;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
@@ -25,6 +26,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -68,6 +70,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 	private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
 	private final WmTaskSubmissionRuleService wmTaskSubmissionRuleService;
 	private final WmDaPharmacyService wmDaPharmacyService;
+	private final ApplicationEventPublisher applicationEventPublisher;
 	private final Sequence taskSequence;
 
 	/**
@@ -683,6 +686,9 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 			// 操作积分包
 			operatePkgAndPkgStatus(tWmScorePackage, packageStatus, sysU, taskTypeId, wmUserSign);
 
+			// 推送任务h5截图
+			applicationEventPublisher.publishEvent(new TaskInfoImgEvent(task.getId()));
+
 			return R.ok(task);
 		}