Pārlūkot izejas kodu

宠物食品检测附件名称去除不可见字符和空白字符

陈长荣 1 nedēļu atpakaļ
vecāks
revīzija
a5aec0c41a

+ 10 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/constants/ConstantField.java

@@ -0,0 +1,10 @@
+package com.github.jfcloud.gene.constants;
+
+public class ConstantField {
+
+    /**
+     * unicode不可见字符
+     */
+    public static final String INVISIBLE_UNICODE = "[\\p{Cc}\\p{Cf}\\p{Cs}\\p{Co}\\p{Cn}]";
+
+}

+ 23 - 7
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/biz/SampleFoodServiceImpl.java

@@ -1,10 +1,12 @@
 package com.github.jfcloud.gene.sample.service.biz;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.io.resource.ResourceUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.EscapeUtil;
@@ -21,6 +23,7 @@ import com.github.jfcloud.gene.common.constant.StrConstant;
 import com.github.jfcloud.gene.common.constant.WhetherEnum;
 import com.github.jfcloud.gene.common.util.CustomIdGenerator;
 import com.github.jfcloud.gene.common.util.UserUtil;
+import com.github.jfcloud.gene.constants.ConstantField;
 import com.github.jfcloud.gene.constants.GeneStatusEnum;
 import com.github.jfcloud.gene.file.service.FileInfoService;
 import com.github.jfcloud.gene.file.vo.FileVo;
@@ -136,15 +139,15 @@ public class SampleFoodServiceImpl extends ServiceImpl<SampleFoodMapper, SampleF
         checkbox(mappings, "是否以干基计", "☐是      ☐否", WhetherEnum.getLabel(detail.getDryBasis()));
         checkbox(mappings, "其他要求", "☐CNAS    ☐CMA    ☐保密数据", detail.getOtherRequirements());
         checkbox(mappings, "自定义", "☐自定义", detail.getSampleType());
-        mappings.put("自定义-其他", detail.getSampleTypeOther());
+        mappings.put("自定义-其他",  detail.getSampleType().contains("自定义") ? detail.getSampleTypeOther() : "");
         checkbox(mappings, "样品照片", "☐否(不需要)   ☐是(需要)   ☐外观   ☐内容物   ☐其他", detail.getSamplePhoto());
-        mappings.put("样品照片-其他", detail.getSamplePhotoOther());
+        mappings.put("样品照片-其他", detail.getSamplePhoto().contains("其他") ? detail.getSamplePhotoOther(): "");
         checkbox(mappings, "样品储存要求", "☐室温   ☐冷藏(0℃~8℃)   ☐冷冻(≤18℃)   ☐避光   ☐干燥   ☐其他", detail.getStorageRequirements());
-        mappings.put("样品储存要求-其他", detail.getStorageRequirementsOther());
+        mappings.put("样品储存要求-其他", detail.getStorageRequirements().contains("其他") ?  detail.getStorageRequirementsOther(): "");
         checkbox(mappings, "样品保留期限", "☐常规样品一个月(默认)   ☐新鲜产品一周   ☐冷冻产品三周", detail.getRetentionPeriod());
         mappings.put("非危险性样品", (WhetherEnum.NO.getCode().equals(detail.getHazard()) ? "☑" : "☐") + "非危险性样品");
         checkbox(mappings, "危险性样品", "☐易燃易爆  ☐腐蚀性  ☐毒性(非剧毒) ☐氧化剂  ☐其他", detail.getHazardDescription());
-        mappings.put("危险性样品-其他", detail.getHazardDescriptionOther());
+        mappings.put("危险性样品-其他", detail.getHazardDescription().contains("其他") ?  detail.getHazardDescriptionOther(): "");
         checkbox(mappings, "服务时限", "☐标准时间(7个工作日)   ☐5个工作日\n\n☐3个工作日   ☐1个工作日\n\n☐加急", detail.getServiceDeadline());
 
         List<SampleFoodDetailVo> detailList = detail.getDetailList();
@@ -276,7 +279,11 @@ public class SampleFoodServiceImpl extends ServiceImpl<SampleFoodMapper, SampleF
             //保存为excel
             String targetFileName = String.format("食品检测部门送检单(详细)-%s-%s.xlsx", applyDate, RandomUtil.randomString(RandomUtil.BASE_CHAR_NUMBER_LOWER, 4));
             if (StrUtil.isNotBlank(detail.getSenderName())) {
-                targetFileName = String.format("食品检测部门送检单(详细)-%s-%s-%s.xlsx", detail.getSenderName(), applyDate, RandomUtil.randomString(RandomUtil.BASE_CHAR_NUMBER_LOWER, 4));
+                String senderName = detail.getSenderName()
+                        .replaceAll(" ", "")
+                        .replaceAll(ConstantField.INVISIBLE_UNICODE, "");
+                senderName = FileNameUtil.cleanInvalid(senderName);
+                targetFileName = String.format("食品检测部门送检单(详细)-%s-%s-%s.xlsx", senderName, applyDate, RandomUtil.randomString(RandomUtil.BASE_CHAR_NUMBER_LOWER, 4));
             }
             File tmpFile = new File(System.getProperty("user.dir"), targetFileName);
             opcPackagePkg.save(tmpFile);
@@ -305,6 +312,7 @@ public class SampleFoodServiceImpl extends ServiceImpl<SampleFoodMapper, SampleF
         } catch (Exception e) {
             log.error("宠物食品附件生成失败 id={} error={}", sampleId, e.getMessage());
             log.error(e.getMessage(), e);
+            throw new RuntimeException("附件生成失败");
         }
 
     }
@@ -376,8 +384,16 @@ public class SampleFoodServiceImpl extends ServiceImpl<SampleFoodMapper, SampleF
         List<SampleFoodDetail> detailList = sampleFoodDetailService.list(new LambdaQueryWrapper<>(SampleFoodDetail.class)
                 .eq(SampleFoodDetail::getSampleFoodId, sampleFood.getId()));
 
-        SampleFoodVo sampleFoodVo = BeanUtil.copyProperties(sampleFood, SampleFoodVo.class);
-        sampleFoodVo.setDetailList(BeanUtil.copyToList(detailList, SampleFoodDetailVo.class));
+        CopyOptions copyOptions = CopyOptions.create().setFieldValueEditor((fieldName, fieldValue) -> {
+            //字段值为null时,设置为""
+            if (!fieldName.contains("Id") && !fieldName.contains("Date") && fieldValue == null) {
+                return "";
+            }
+            return fieldValue;
+        });
+        SampleFoodVo sampleFoodVo = new SampleFoodVo();
+        BeanUtil.copyProperties(sampleFood, sampleFoodVo, copyOptions);
+        sampleFoodVo.setDetailList(BeanUtil.copyToList(detailList, SampleFoodDetailVo.class, copyOptions));
         return sampleFoodVo;
     }
 }