Browse Source

Merge branch 'feat-guangshengtang18-20220113'

# Conflicts:
#	hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
shc 3 năm trước cách đây
mục cha
commit
92b35ec15c

+ 60 - 12
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -340,7 +340,8 @@ public class ApiController {
 										Map<String, Object> map = new HashMap<>();
 										map.put("label", wmScorePackage.getScorePackageName());
 										map.put("value", wmScorePackage.getId());
-										String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage.getDrugProducerList());
+										String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage
+												.getDrugProducerList());
 										map.put("drugProducer", drugProducer);
 										listMap.add(map);
 									}
@@ -362,7 +363,8 @@ public class ApiController {
 										Map<String, Object> map = new HashMap<>();
 										map.put("label", wmScorePackage.getScorePackageName());
 										map.put("value", wmScorePackage.getId());
-										String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage.getDrugProducerList());
+										String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage
+												.getDrugProducerList());
 										map.put("drugProducer", drugProducer);
 										listMap.add(map);
 									}
@@ -883,22 +885,66 @@ public class ApiController {
 	@SysLog("新增任务内容表")
 	@PostMapping("/saveTaskContent")
 	public R saveTaskContent(@RequestBody WmTaskContent wmTaskContent) {
+		Set<String> errorHash = new HashSet<>();
+		List<String> ducImgUrl = new ArrayList<>();
+		List<String> all = new ArrayList<>();
+
 		String draftKey = wmTaskContent.getDraftKey();
 		String taskTypeId = wmTaskContent.getTemp30();
+
+		Integer id = SecurityUtils.getUser().getId();
+		Field[] fields = wmTaskContent.getClass().getDeclaredFields();
+		for (Field field : fields) {
+
+			field.setAccessible(true);
+
+			try {
+				String fieldVal = (String) field.get(wmTaskContent);
+
+				all = duplicateImage(fieldVal, id, errorHash, ducImgUrl,all);
+			} catch (Exception ignored) {
+			}
+
+		}
+
+		if (CollUtil.isNotEmpty(ducImgUrl)) {
+			// 保存图片
+			log.info("all size:{}",all.size());
+			if (CollUtil.isNotEmpty(all)){
+				all.forEach(hash -> {
+					String  key = String.format("%s:%s", id, hash);
+					log.info("key: {}", key);
+					redisTemplate.delete(key);
+				});
+			}
+			return R.failed(ducImgUrl, "提交重复的图片");
+		}
+
+
 		R r = wmTaskContentService.saveTaskContent(wmTaskContent);
 
 		log.info("结果:{}, 草稿key:{}", r, draftKey);
 		if (r.getCode() == CommonConstants.SUCCESS && StrUtil.isNotEmpty(draftKey)) {
-			HnqzUser user = SecurityUtils.getUser();
-			String key = String.format(CacheConstants.TASK_CONTENT_DRAFT, taskTypeId, user.getId());
+			String key = String.format(CacheConstants.TASK_CONTENT_DRAFT, taskTypeId, id);
 			log.info("删除草稿:{}", key);
 			redisTemplate.delete(key);
 		}
 
+		if (r.getCode() == CommonConstants.FAIL && CollUtil.isNotEmpty(all)){
+			// 保存图片
+			log.info("all size:{}",all.size());
+				all.forEach(hash -> {
+					String  key = String.format("%s:%s", id, hash);
+					log.info("key: {}", key);
+					redisTemplate.delete(key);
+				});
+		}
+
 		return r;
 	}
 
-	private void duplicateImage(String contentValue, Integer userId, Set<String> errorHash) {
+	private List<String> duplicateImage(String contentValue, Integer userId, Set<String> errorHash, List<String> duplicateImageUrl,List<String> all) {
+
 
 		if (contentValue.startsWith("/admin/sys-file/wmkj")) {
 
@@ -910,8 +956,7 @@ public class ApiController {
 				List<String> temp = StrUtil.split(item, StrUtil.DOT);
 				String extName = temp.get(temp.size() - 1);
 
-				if (IMG_EXT_NAME.contains(extName)) {
-
+				if (IMG_EXT_NAME.contains(extName.toLowerCase())) {
 					// 文件md5
 					try {
 						log.info("图片地址:{}", upmsConfig.getClientUrl() + item);
@@ -920,12 +965,15 @@ public class ApiController {
 						byte[] digest = md5.digest(bytes);
 						String hash = new BigInteger(1, digest).toString(16);
 						log.info("图片md5:{}", hash);
-						Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(String.format("%s:%s", userId, hash), item, 7, TimeUnit.DAYS);
-						if (aBoolean != null && !aBoolean) {
-							log.error("上传了重复的图片");
+						Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(String.format("%s:%s", userId, hash), item);
+						if (!aBoolean) {
+							log.error("上传了重复的图片, hash:{}", hash);
 							errorHash.add(hash);
+							duplicateImageUrl.add(upmsConfig.getClientUrl() + item);
+						} else {
+							all.add(hash);
+							log.info("hash:{}, size:{}, list:{}", hash, all.size(), all);
 						}
-
 					} catch (IOException | URISyntaxException | NoSuchAlgorithmException e) {
 						e.printStackTrace();
 					}
@@ -937,7 +985,7 @@ public class ApiController {
 
 
 		}
-
+		return all;
 	}
 
 	/**

+ 87 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java

@@ -17,6 +17,8 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
@@ -35,6 +37,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysFile;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
+import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.entity.AuditEntity;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDistribution;
@@ -64,6 +67,7 @@ import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskRuleService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.entity.BaseMap;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
@@ -76,6 +80,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.util.ResourceUtils;
@@ -97,18 +102,26 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.math.RoundingMode;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -156,6 +169,7 @@ public class WmTaskController {
 
 	private final RabbitMqClient rabbitMqClient;
 	private final RedisTemplate<String,String> redisTemplate;
+	private final UpmsConfig upmsConfig;
 
 	/**
 	 * 分页查询
@@ -1145,7 +1159,79 @@ public class WmTaskController {
 		if (StringUtils.isEmpty(wmTask.getId())) {
 			R.failed("任务id不能为空");
 		}
-		return wmTaskService.approvalTask(wmTask);
+		R result = wmTaskService.approvalTask(wmTask);
+
+
+		// 释放图片
+		if (result.getCode() == CommonConstants.SUCCESS){
+
+			List<String> idList = StrUtil.split(wmTask.getId(), StrUtil.COMMA);
+
+			if (CollUtil.isNotEmpty(idList)){
+				List<WmTask> wmTasks = wmTaskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getId, idList));
+
+				wmTasks.stream().filter(task -> "4".equals(task.getTaskStatus())).forEach(t -> {
+					String userId = t.getTaskUserId();
+
+					WmTaskContent content = wmTaskContentService.getById(t.getTaskContentId());
+
+					Field[] fields = content.getClass().getDeclaredFields();
+					for (Field field : fields) {
+
+						field.setAccessible(true);
+
+						try {
+							String fieldVal = (String) field.get(content);
+
+							if (fieldVal.startsWith("/admin/sys-file/wmkj")) {
+
+								List<String> split = StrUtil.split(fieldVal, StrUtil.COMMA);
+
+								List<String> IMG_EXT_NAME = Arrays.asList("png", "jpg", "gif", "jpeg", "tif", "bmp");
+
+								split.forEach(item -> {
+									List<String> temp = StrUtil.split(item, StrUtil.DOT);
+									String extName = temp.get(temp.size() - 1);
+
+									if (IMG_EXT_NAME.contains(extName.toLowerCase())) {
+										// 文件md5
+										try {
+											log.info("图片地址:{}", upmsConfig.getClientUrl() + item);
+											byte[] bytes = IOUtils.toByteArray(new URI(upmsConfig.getClientUrl() + item));
+											MessageDigest md5 = MessageDigest.getInstance("MD5");
+											byte[] digest = md5.digest(bytes);
+											String hash = new BigInteger(1, digest).toString(16);
+											log.info("图片md5:{}", hash);
+											String key = String.format("%s:%s", userId, hash);
+											log.info("key:{}", key);
+											redisTemplate.delete(key);
+										} catch (IOException | URISyntaxException | NoSuchAlgorithmException e) {
+											e.printStackTrace();
+										}
+
+									}
+
+
+								});
+
+
+							}
+						} catch (Exception ignored) {
+						}
+
+					}
+
+
+				});
+
+			}
+
+
+		}
+
+
+		return result;
+
 	}
 
 	/**