jiangbiao 1 год назад
Родитель
Сommit
90eed929c9

+ 3 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFirstplanController.java

@@ -140,6 +140,9 @@ public class TTsFirstplanController extends BaseController {
         tTsFirstplan.setUserId(getUserId());
         tTsFirstplan.setNickName(getNickName());
         if ("1".equals(tTsFirstplan.getTrainerConfirm())) {
+            if (StringUtils.isEmpty(firstplan.getTrainer()) || !firstplan.getTrainer().trim().equals(getNickName())) {
+                return AjaxResult.error("仅讲师可确认成绩!");
+            }
             tTsFirstplan.setTrainerConfirm(getNickName());
         }
         if ("1".equals(tTsFirstplan.getStudentConfirm())) {

+ 66 - 16
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsNewController.java

@@ -24,10 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
@@ -342,7 +339,8 @@ public class TTsNewController extends BaseController {
      */
     private String genAppraisalFormWord(TTsNew tTsNew) throws IOException {
         //渲染文本
-        Map<String, Object> params = getAppraisalFormWordData(tTsNew);
+        Map<String, Map<String, Object>> appraisalFormWordData = getAppraisalFormWordData(tTsNew);
+        Map<String, Object> params = appraisalFormWordData.get("params");
         // 模板路径
         String templatePath = "static/word/training/appraisalForm.docx";
         // 生成word的路径
@@ -351,6 +349,7 @@ public class TTsNewController extends BaseController {
         String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
         String fileName = time + tTsNew.getNewId() + ".docx";
         String wordPath = this.createWord(templatePath, fileDir, fileName, params, "appraisalFormWord");
+        wordPath = this.createWord(wordPath, fileDir, fileName, genSign(appraisalFormWordData.get("signs")), "appraisalFormWord",true);
         return wordPath;
     }
 
@@ -466,20 +465,43 @@ public class TTsNewController extends BaseController {
         return params;
     }
 
+    private Map<String, Object> genSign(Map<String, Object> map) {
+        Map<String, Object> params = new HashMap<>();
+        for (String s : map.keySet()) {
+            if (s.equals("traineeSignature")){
+                params.put(s, map.get(s));
+            }
+            if (Objects.nonNull(map.get(s))) {
+                SysUser sysUser = new SysUser();
+                sysUser.setNickName(map.get(s).toString().replaceAll(" ",""));
+                sysUser.setDeptId(103L);
+                List<SysUser> sysUsers = sysUserService.selectUserList(sysUser);
+                if (CollectionUtils.isNotEmpty(sysUsers)) {
+                    if (sysUsers.get(0).getSignUrl() != null) {
+                        s = s.replace("{{@","");
+                        s = s.replace("}}","");
+                        params.put(s, Pictures.ofLocal(fileName(sysUsers.get(0).getSignUrl())).size(100, 40).create());
+                    }
+                }
+            }
+        }
+        return params;
+    }
+
     /**
      * 获取word数据 - Appraisal Form
      */
-    private Map<String, Object> getAppraisalFormWordData(TTsNew tTsNew) {
+    private Map<String, Map<String, Object>> getAppraisalFormWordData(TTsNew tTsNew) {
         Map<String, Object> params = new HashMap<>();
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
         //装置级培训
         TTsFirstplan tTsFirstplan = new TTsFirstplan();
         tTsFirstplan.setNewId(tTsNew.getNewId());
         List<TTsFirstplan> tTsFirstplans = tTsFirstplanService.selectTTsFirstplanListByNewId(tTsFirstplan);
-        RowRenderData[] plantList  = new RowRenderData[tTsFirstplans.size() + 1];
+        RowRenderData[] plantList = new RowRenderData[tTsFirstplans.size() + 1];
         plantList[0] = Rows.create("序号", "计划培训日期", "培训主题", "材料版本", "培训时长h", "讲师", "培训日期", "讲师签名", "考试评估方式", "评估结果", "学员签名");
         int i = 0;
-        new HashSet<String>();
+        Map<String, Object> signMap = new HashMap<>();
         for (TTsFirstplan firstplan : tTsFirstplans) {
             i++;
             String planDate = "";
@@ -490,15 +512,29 @@ public class TTsNewController extends BaseController {
             if (firstplan.getCourseDate() != null) {
                 trainDate = formatter.format(firstplan.getCourseDate());
             }
+            String tn = "";
+            String trainerSign="";
+            String traineeSign="";
+            if (StringUtils.isNotEmpty(firstplan.getTrainerConfirm())) {
+                if (StringUtils.isNotEmpty(firstplan.getTrainer())){
+                    tn = firstplan.getTrainer().replaceAll(" ","");
+                    trainerSign = "{{@trainSign" + tn + "}}";
+                    signMap.put(trainerSign, tn);
+                }
+            }
+            if(StringUtils.isNotEmpty(firstplan.getStudentConfirm())){
+                traineeSign="{{@traineeSignature}}";
+            }
             plantList[i] = Rows.create(String.valueOf(i), planDate, firstplan.getTopic(), firstplan.getMaterialVer(), String.valueOf(firstplan.getCourseHour())
-                    , firstplan.getTrainer(), trainDate, "{{@trainSign"+firstplan.getTrainer()+"}}",firstplan.getCourseType(), firstplan.getAssess(), "{{@traineeSignature}}");
+                    , firstplan.getTrainer(), trainDate, trainerSign, firstplan.getCourseType(), firstplan.getAssess(), traineeSign);
         }
         params.put("staffId", tTsNew.getStaffId());
         //导师带徒培训
-        Date startDate = new Date(tTsNew.getStartdate().toString());
-        startDate.setMonth(startDate.getMonth() + 1);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(tTsNew.getStartdate());
+        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);
         Date endDate = tTsNew.getEnddate();
-        params.put("startDate", Texts.of(formatter.format(startDate)).create());
+        params.put("startDate", Texts.of(formatter.format(calendar.getTime())).create());
         params.put("endDate", Texts.of(formatter.format(endDate)).create());
         String mentorStaffId = tTsNew.getMentorStaffId();
         String staffId = tTsNew.getStaffId();
@@ -522,8 +558,10 @@ public class TTsNewController extends BaseController {
         }
         if (StringUtils.isNotEmpty(mentor.getSignUrl()))
             params.put("tutorSignature", Pictures.ofLocal(fileName(mentor.getSignUrl())).size(100, 40).create());
-        if (StringUtils.isNotEmpty(apprentice.getSignUrl()))
+        if (StringUtils.isNotEmpty(apprentice.getSignUrl())) {
             params.put("traineeSignature", Pictures.ofLocal(fileName(apprentice.getSignUrl())).size(100, 40).create());
+            signMap.put("traineeSignature", Pictures.ofLocal(fileName(apprentice.getSignUrl())).size(100, 40).create());
+        }
         params.put("tutor", Texts.of(mentor.getNickName()).create());
         params.put("trainee", Texts.of(apprentice.getNickName()).create());
         String label = sysDictDataService.selectDictLabel("training_bccnew_status", tTsNew.getPlanStatus().toString());
@@ -648,7 +686,10 @@ public class TTsNewController extends BaseController {
         params.put("planList", Tables.of(planList.toArray(new RowRenderData[0])).mergeRule(rule).create());
         params.put("plantList", Tables.of(plantList).create());
         // 渲染文本
-        return params;
+        Map<String, Map<String, Object>> result = new HashMap<>();
+        result.put("params", params);
+        result.put("signs", signMap);
+        return result;
     }
 
     private String getPlanDate(int planType, Long id) {
@@ -715,7 +756,7 @@ public class TTsNewController extends BaseController {
      * @param paramMap     参数集合
      * @return 返回word生成的路径
      */
-    private String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap, String directory) throws IOException {
+    private String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap, String directory, boolean... flag) throws IOException {
         Assert.notNull(templatePath, "word模板文件路径不能为空");
         Assert.notNull(fileDir, "生成的文件存放地址不能为空");
         Assert.notNull(fileName, "生成的文件名不能为空");
@@ -728,13 +769,22 @@ public class TTsNewController extends BaseController {
         logger.info("目录文件{}!", fileName);
         String filePath = fileDir + "/" + fileName;
         logger.info("目录{}!", filePath);
+        logger.info("模板{}!", templatePath);
         // 读取模板渲染参数
-        InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
+        InputStream is =  getClass().getClassLoader().getResourceAsStream(templatePath);;
+        if (flag.length>0&&flag[0]) {
+            logger.info("待签名文件地址:{}!", filePath);
+            is = new FileInputStream(filePath);
+            fileName = fileName.replace(".docx","_sign.docx");
+            filePath = fileDir + "/" + fileName;
+        }
+
         XWPFTemplate template = XWPFTemplate.compile(is).render(paramMap);
         try {
             // 将模板参数写入路径
             template.writeToFile(filePath);
             template.close();
+            is.close();
         } catch (Exception e) {
             logger.error("生成word异常{}", e.getMessage());
             e.printStackTrace();

+ 1 - 1
master/src/main/resources/mybatis/system/SysUserMapper.xml

@@ -167,7 +167,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id,u.staffid,u.home_type, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
+		select u.user_id,u.staffid,u.home_type,u.sign_url, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
 		<if test="userName != null and userName != ''">

+ 1 - 0
master/src/main/resources/mybatis/training/bccnew/TTsFirstplanMapper.xml

@@ -94,6 +94,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="planStatus != null "> and plan_status = #{planStatus}</if>
             and d.del_flag = 0
         </where>
+        order by sort_tmpl
     </select>
         
     <insert id="insertTTsFirstplan" parameterType="TTsFirstplan">