From 8ad863082097ffdcab4a8e7f426d344a1fe6f892 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 07 十一月 2026 00:27:02 +0800
Subject: [PATCH] 修复人员管理接口校验与导出,完善设备保养计划与文件受控功能

---
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java |   90 ++++++++++++++++++++++++++-------------------
 1 files changed, 52 insertions(+), 38 deletions(-)

diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
index 4f45be8..bd81697 100644
--- a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.deepoove.poi.XWPFTemplate;
@@ -11,7 +13,9 @@
 import com.ruoyi.common.core.domain.entity.User;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.mapper.PersonBasicInfoMapper;
 import com.ruoyi.personnel.mapper.PersonPostAuthorizationRecordMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
 import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
 import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
 import com.ruoyi.system.mapper.UserMapper;
@@ -20,6 +24,7 @@
 
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
@@ -39,6 +44,8 @@
 
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private PersonBasicInfoMapper personBasicInfoMapper;
 
     @Value("${file.path}")
     private String imgUrl;
@@ -50,73 +57,80 @@
 
     @Override
     public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response) {
+        if (id == null) {
+            throw new ErrorException("缂哄皯浠昏亴鎺堟潈璁板綍id");
+        }
         PersonPostAuthorizationRecord personPostAuthorizationRecord = baseMapper.selectById(id);
+        if (personPostAuthorizationRecord == null) {
+            throw new ErrorException("浠昏亴鎺堟潈璁板綍涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎");
+        }
+        Integer incumbentUserId;
+        try {
+            incumbentUserId = Integer.valueOf(personPostAuthorizationRecord.getUserId());
+        } catch (Exception e) {
+            throw new ErrorException("璇ヨ褰曟病鏈夐�夋嫨琚换鑱屼汉鍛橈紝鏃犳硶瀵煎嚭涓婂矖璇�");
+        }
         //濮撳悕
-        User user = userMapper.selectById(personPostAuthorizationRecord.getUserId());
+        User user = userMapper.selectById(incumbentUserId);
+        if (user == null) {
+            throw new ErrorException("琚换鑱屼汉鍛樹笉瀛樺湪鎴栧凡琚垹闄わ紝鏃犳硶瀵煎嚭涓婂矖璇�");
+        }
         String name = user.getName();
-        //todo: 浜哄憳浠昏亴鎺堟潈璁板綍濮撳悕鑻辨枃
-//        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
-//        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
-//        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
-//        StringBuilder pinyinBuilder = new StringBuilder();
-//        for (int i = 0; i < name.length(); i++) {
-//            char c = name.charAt(i);
-//            // 鍒ゆ柇鏄惁鏄眽瀛�
-//            if (Character.toString(c).matches("[\\u4E00-\\u9FFF]")) {
-//                // 鑾峰彇姹夊瓧鐨勬嫾闊虫暟缁�
-//                String[] pinyinArray = new String[0];
-//                try {
-//                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
-//                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
-//
-//                }
-//                if (pinyinArray!= null && pinyinArray.length > 0) {
-//                    pinyinBuilder.append(pinyinArray[0]);
-//                }
-//            } else {
-//                pinyinBuilder.append(c);
-//            }
-//        }
-//        String nameEn = pinyinBuilder.toString();
-        String nameEn = user.getNameEn();
-        //鐞嗚鐭ヨ瘑鑰冭瘯鎴愮哗
-        String num1=personPostAuthorizationRecord.getNum1();
-        //鎿嶄綔鎶�鑳借�冭瘯鎴愮哗
-        String num2=personPostAuthorizationRecord.getNum2();
+        //韬唤璇佸彿
+        PersonBasicInfo basicInfo = personBasicInfoMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery()
+                .eq(PersonBasicInfo::getUserId, incumbentUserId)
+                .last("limit 1"));
+        if (basicInfo == null || StringUtils.isBlank(basicInfo.getIdentityCard())) {
+            throw new ErrorException(name + "杩樻病鏈夊湪浜哄憳鍩烘湰淇℃伅涓~鍐欒韩浠借瘉鍙凤紝鏃犳硶瀵煎嚭涓婂矖璇�");
+        }
+        String identityCard = basicInfo.getIdentityCard();
         //璇佷功缂栧彿
         String code = personPostAuthorizationRecord.getCertificateNumber();
+        if (StringUtils.isBlank(code)) {
+            throw new ErrorException("璇ヨ褰曡繕娌℃湁濉啓璇佷功缂栧彿锛屾棤娉曞鍑轰笂宀楄瘉");
+        }
+        //浠昏亴宀椾綅
+        String post = personPostAuthorizationRecord.getPost();
+        String finalPost = StringUtils.isBlank(post) ? "妫�娴�" : post;
         //鍙戣瘉鏃堕棿
         LocalDateTime createTime = personPostAuthorizationRecord.getCreateTime();
+        if (createTime == null) {
+            createTime = LocalDateTime.now();
+        }
         String year = createTime.getYear() + "";
-        String mon = createTime.getMonth().getValue() + "";
+        String mon = createTime.getMonthValue() + "";
         String day = createTime.getDayOfMonth() + "";
         //涓汉鐓х墖
         if (ObjectUtils.isEmpty(user.getPictureUrl())) {
-            throw new ErrorException(name+"鐨勪釜浜虹収鐗囨病鏈変笂浼�");
+            throw new ErrorException(name + "鐨勪釜浜虹収鐗囨病鏈変笂浼狅紝鏃犳硶瀵煎嚭涓婂矖璇�");
         }
         String pictureUrl = user.getPictureUrl();
-
+        if (!new File(imgUrl + "/" + pictureUrl).exists()) {
+            throw new ErrorException(name + "鐨勪釜浜虹収鐗囨枃浠朵笉瀛樺湪锛岃閲嶆柊涓婁紶");
+        }
 
         InputStream inputStream = this.getClass().getResourceAsStream("/static/credentials-deal.docx");
+        if (inputStream == null) {
+            throw new ErrorException("涓婂矖璇佸鍑烘ā鏉夸笉瀛樺湪");
+        }
         ConfigureBuilder builder = Configure.builder();
         builder.useSpringEL(true);
         XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                 new HashMap<String, Object>() {{
                     put("name", name);
-                    put("nameEn", nameEn);
-                    put("num1", num1);
-                    put("num2", num2);
+                    put("identityCard", identityCard);
                     put("code", code);
+                    put("post", finalPost);
                     put("year", year);
                     put("mon", mon);
                     put("day", day);
-                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + pictureUrl));
+                    put("writeUrl", new FilePictureRenderData(100, 140, imgUrl + "/" + pictureUrl));
                 }});
 
         try {
             response.setContentType("application/msword");
             String fileName = URLEncoder.encode(
-                    name+"鐨勫矖浣嶈亴涓氳祫鏍兼寮�", "UTF-8");
+                    name + "鐨勬娴嬩汉鍛樹笂宀楄瘉", "UTF-8");
             response.setHeader("Content-disposition",
                     "attachment;filename=" + fileName + ".docx");
             OutputStream os = response.getOutputStream();

--
Gitblit v1.9.3