|
@@ -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();
|