提交 ae7747c3 authored 作者: 133's avatar 133

[清退 FILE] 修改代码 以及添加了生成单据、word

上级 ffa39774
......@@ -65,6 +65,11 @@
<artifactId>xmlworker</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.5.0</version>
</dependency>
</dependencies>
......
......@@ -6,6 +6,7 @@ import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.file.entity.DocumentDevice;
import com.tykj.dev.device.file.entity.Documents;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.file.service.UseReportFIleService;
......@@ -16,10 +17,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartRequest;
......@@ -59,10 +57,44 @@ public class FileController {
@ApiOperation(value = "生成单据")
@PostMapping("/printDocuments")
public ResponseEntity printDocuments(@RequestBody Documents documents) throws IOException, DocumentException {
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents);
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents,url+"htmlModel/");
log.info("[file] 调用了生成出入单据对接口");
return ResponseEntity.ok(JavaToPdfHtmlFreeMarker.createPdf(content,url,preview));
}
/**
* 生成单据
* @return
*/
@ApiOperation(value = "生成单据1")
@GetMapping("/printDocuments1")
public ResponseEntity printDocuments(HttpServletResponse response) throws IOException, DocumentException {
Documents documents=new Documents();
documents.setNumber("NO:第221321134号");
documents.setReceiveUnit("杭州机要");
documents.setReplyNum("123123123131");
documents.setSenderUnit("浙江省");
documents.setTitle("密码装备清退单");
List<DocumentDevice> documentDevices=new ArrayList<>();
for (int i=0;i<20;i++){
DocumentDevice documentDevice=new DocumentDevice();
documentDevice.setCount(i);
documentDevice.setModel("MM001");
documentDevice.setRemark("备注");
documentDevice.setApplicationField("省一级");
documentDevice.setDeviceSerialNumber("asdq1231232");
documentDevice.setProductionSerialNumber("12312312312");
documentDevice.setParts("密码机");
documentDevice.setCategory("装备");
documentDevice.setSecurityClassification("机密");
documentDevices.add(documentDevice);
}
documents.setDocumentDevices(documentDevices);
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents,url+"htmlModel/");
showPdf(response,JavaToPdfHtmlFreeMarker.createPdf(content,url,preview).getFilePath());
return ResponseEntity.ok("ok");
}
/**
......@@ -115,7 +147,7 @@ public class FileController {
@ApiOperation(value = "上传图片转pdf")
@PostMapping("/print/pdf/{type}")
public ResponseEntity fileUpload(HttpServletRequest request, @PathVariable int type) throws IOException, DocumentException {
log.info("触发图片转pdf的接口");
log.info("{}触发图片转pdf的接口");
List<MultipartFile> multipartFiles = ((MultipartHttpServletRequest) request).getFiles("file");
log.info("数量{}",multipartFiles.size());
File file1 = new File(url + "print/");
......@@ -172,7 +204,6 @@ public class FileController {
private FileRet fileUpload(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
System.out.println(originalFilename);
File file1 = new File(url);
if (!file1.exists()) {
file1.mkdirs();
......@@ -230,7 +261,6 @@ public class FileController {
private FileRet fileUpload1(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
System.out.println(originalFilename);
File file1 = new File(url);
if (!file1.exists()) {
file1.mkdirs();
......@@ -286,5 +316,17 @@ public class FileController {
return new FileRet(originalFilename, url + newName, preview + newName);
}
private static void showPdf( HttpServletResponse response, String fileName) throws IOException{
response.setContentType("application/pdf");
FileInputStream in = new FileInputStream(new File(fileName));
OutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
while ((in.read(b))!=-1) {
out.write(b);
}
out.flush();
in.close();
out.close();
}
}
......@@ -2,6 +2,7 @@ package com.tykj.dev.device.file.service.Impl;
import com.tykj.dev.device.file.entity.WrodParameter;
import com.tykj.dev.device.file.service.UseReportFIleService;
import com.tykj.dev.device.file.util.WordUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
......@@ -9,10 +10,13 @@ import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.ResourceUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
......@@ -32,76 +36,22 @@ public class UseReportFIleServiceImpl implements UseReportFIleService {
@Override
public void findToFileService(WrodParameter wrodParameter, HttpServletResponse response, HttpServletRequest httpServletRequest) throws IOException {
XWPFDocument doc = new XWPFDocument();// 创建Word文件
XWPFParagraph p = doc.createParagraph();// 新建一个段落
// p.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
// p.setBorderBottom(Borders.DOUBLE);//设置下边框
// p.setBorderTop(Borders.DOUBLE);//设置上边框
// p.setBorderRight(Borders.DOUBLE);//设置右边框
// p.setBorderLeft(Borders.DOUBLE);//设置左边框
p.setAlignment(ParagraphAlignment.CENTER);
XWPFRun title1 = p.createRun();//创建段落文本
title1.setText(wrodParameter.getTitle1());
title1.setBold(true);//设置为粗体
// r.setColor("FF0000");
Map<String, Object> params = new HashMap<>();
// 渲染文本
params.put("title1",wrodParameter.getTitle1());
params.put("title2",wrodParameter.getTitle2());
params.put("total",wrodParameter.getTotal());
params.put("comfirm",wrodParameter.getComfirmCheck());
params.put("unitName",wrodParameter.getUnitsName());
p = doc.createParagraph();
p.setAlignment(ParagraphAlignment.CENTER);// 新建一个段落
XWPFRun title2 = p.createRun();
title2.setText(wrodParameter.getTitle2());
p = doc.createParagraph();
p.setIndentationFirstLine(100);
p.setSpacingBeforeLines(50);
XWPFRun z = p.createRun();
z.setText("根据相关规定要求,我省/本单位辖区范围内本年度装备使用情况统计如下:");
//总的统计内容
p = doc.createParagraph();
p.setIndentationFirstLine(100);
p.setSpacingBeforeLines(50);
XWPFRun title3 = p.createRun();
title3.setText(wrodParameter.getTotal());
//自查统计内容
p = doc.createParagraph();
p.setIndentationFirstLine(100);
p.setSpacingBeforeLines(50);
XWPFRun title4 = p.createRun();
title4.setText(wrodParameter.getComfirmCheck());
//核查统计内容
p = doc.createParagraph();
p.setIndentationFirstLine(100);
p.setSpacingBeforeLines(50);
// p.setSpacingAfterLines(150);
XWPFRun title5 = p.createRun();
title5.setText(wrodParameter.getSelfCheck());
p = doc.createParagraph();
p.setIndentationFirstLine(100);
p.setSpacingBeforeLines(50);
// p.setSpacingAfterLines(150);
XWPFRun c = p.createRun();
c.setText("装备使用过程中未发现装备丢失、报废、泄密等事件,装备运行情况良好,符合实际业务需求。");
//单位
p = doc.createParagraph();
XWPFRun title6 = p.createRun();
title6.setText("专管员签字: " + wrodParameter.getUnitsName());
//时间
p = doc.createParagraph();
p.setAlignment(ParagraphAlignment.RIGHT);
XWPFRun title7 = p.createRun();
title7.setText(wrodParameter.getTime());
params.put("time",wrodParameter.getTime());
String fileName = wrodParameter.getTitle1() + ".doc";
url = url + UUID.randomUUID().toString().replace("-", "") + ".doc";
FileOutputStream out = new FileOutputStream(url);
doc.write(out);
out.close();
String templatePath = ResourceUtils.getURL("classpath:").getPath()+"docxModel.docx";
url=url+"report/";
String uuidName=UUID.randomUUID().toString().replace("-", "") + ".doc";
String fileUrl= WordUtil.createWord(templatePath,url,uuidName,params);
response.setContentType("application/x-download");
try {
......@@ -116,7 +66,7 @@ public class UseReportFIleServiceImpl implements UseReportFIleService {
BufferedInputStream bs = null;
byte[] buffer = new byte[1024];
try {
is = new FileInputStream(new File(url));
is = new FileInputStream(new File(fileUrl));
bs = new BufferedInputStream(is);
os = response.getOutputStream();
int i = bs.read(buffer);
......@@ -150,7 +100,6 @@ public class UseReportFIleServiceImpl implements UseReportFIleService {
@Override
public void download(String url, String name, HttpServletResponse response, HttpServletRequest httpServletRequest) {
String fileName = name;
log.info("---------");
// response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/x-download");
try {
......
......@@ -12,6 +12,7 @@ import com.tykj.dev.device.file.entity.FileRet;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ResourceUtils;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
......@@ -48,7 +49,7 @@ public class JavaToPdfHtmlFreeMarker {
freemarkerCfg =new Configuration();
//freemarker的模板目录
try {
freemarkerCfg.setDirectoryForTemplateLoading(new File("/Users/zjm/Downloads/equip/dev-file/src/main/resources/"));
freemarkerCfg.setDirectoryForTemplateLoading(new File(ResourceUtils.getURL("classpath:").getPath()));
} catch (IOException e) {
e.printStackTrace();
}
......@@ -81,7 +82,7 @@ public class JavaToPdfHtmlFreeMarker {
documentDevices.add(documentDevice);
}
documents.setDocumentDevices(documentDevices);
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents);
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents,"/Users/zjm/code/test-tu/htmlModel/");
JavaToPdfHtmlFreeMarker.createPdf(content,"/Users/zjm/code/test-tu/","12313");
}
......@@ -93,9 +94,10 @@ public class JavaToPdfHtmlFreeMarker {
Long startTime = System.currentTimeMillis();
Document document = new Document();
String name=UUID.randomUUID().toString()+".pdf";
String pdfPath=path+"documents/"+name;
PdfCopy pdfCopy = null; //创建一个新文件
try {
pdfCopy = new PdfCopy(document, new FileOutputStream(path+name));
pdfCopy = new PdfCopy(document, new FileOutputStream(pdfPath));
document.open();
for (String htmlFile : htmlFiles) {
if (htmlFile != null) {
......@@ -118,7 +120,7 @@ public class JavaToPdfHtmlFreeMarker {
}
Long endTime = System.currentTimeMillis();
System.out.print("Itext parse Html to Pdf End -> " + (endTime - startTime));
return new FileRet("", path + "print/" + name, preview + "print/" + name);
return new FileRet("", pdfPath, preview +"documents/"+ name);
} catch (IOException | DocumentException e) {
e.printStackTrace();
} finally {
......@@ -132,10 +134,10 @@ public class JavaToPdfHtmlFreeMarker {
/**
* freemarker渲染html
*/
public static String[] freeMarkerRender(Documents documents) {
public static String[] freeMarkerRender(Documents documents,String htmlPath) {
Writer out = new StringWriter();
String [] strings=new String[100000];
Integer index=0;
int index=0;
try {
// 获取模板,并设置编码方式
Template template = freemarkerCfg.getTemplate("bill.html");
......@@ -165,7 +167,7 @@ public class JavaToPdfHtmlFreeMarker {
endPoint = totalNum;
}
String htmlname="/Users/zjm/code/Template/"+ UUID.randomUUID().toString()+".html";
String htmlname=htmlPath+ UUID.randomUUID().toString()+".html";
// 合并数据模型与模板
FileWriter fileWriter = new FileWriter(new File(htmlname));
template.process(toMap(documents,list.subList(startPoint, endPoint),MAP.get(i)),fileWriter);
......@@ -175,7 +177,6 @@ public class JavaToPdfHtmlFreeMarker {
pageNum++;
}
}
return strings;
} catch (Exception e) {
e.printStackTrace();
......
package com.tykj.dev.device.file.util;
import com.deepoove.poi.XWPFTemplate;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
* @author zjm
* @version 1.0.0
* @ClassName util.java
* @Description TODO
* @createTime 2021年01月24日 14:19:00
*/
public class WordUtil {
/**
* 根据模板填充内容生成word
* 调用方法参考下面的main方法,详细文档参考官方文档
* Poi-tl模板引擎官方文档:http://deepoove.com/poi-tl/
*
* @param templatePath word模板文件路径
* @param fileDir 生成的文件存放地址
* @param fileName 生成的文件名,不带格式。假如要生成abc.docx,则fileName传入abc即可
* @param paramMap 替换的参数集合
* @return 生成word成功返回生成的文件的路径,失败返回空字符串
*/
public static String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) {
// 生成的word格式
String formatSuffix = ".docx";
// 拼接后的文件名
fileName = fileName + formatSuffix;
// 生成的文件的存放路径
if (!fileDir.endsWith("/")) {
fileDir = fileDir + File.separator;
}
File dir = new File(fileDir);
if (!dir.exists()) {
dir.mkdirs();
}
String filePath = fileDir + fileName;
// 读取模板templatePath并将paramMap的内容填充进模板,即编辑模板+渲染数据
XWPFTemplate template = XWPFTemplate.compile(templatePath).render(paramMap);
try {
// 将填充之后的模板写入filePath
template.writeToFile(filePath);
template.close();
} catch (Exception e) {
e.printStackTrace();
return "";
}
return filePath;
}
public static void main(String[] args) {
Map<String, Object> params = new HashMap<>();
// 渲染文本
params.put("title1","2021年度省机要局装备使用情况报告");
params.put("title2","2021年1月至2021年一月使用");
params.put("total","2021年度本单位总件数11,其中入库总台数0,维修建设");
params.put("comfirm","列装总台数0台,退装总数0台");
params.put("unitName","省机要局");
params.put("time","2021年10月1日");
// 渲染图片
// TODO 渲染其他类型的数据请参考官方文档
String templatePath = "/Users/zjm/code/ty/spring-cloud-study-poi/src/main/resources/人物模板2.docx";
String fileDir = "/Users/zjm/code/ty/spring-cloud-study-poi/src/main/resources/";
String fileName = "zdd2";
String wordPath = WordUtil.createWord(templatePath, fileDir, fileName, params);
System.out.println("生成文档路径:" + wordPath);
}
}
......@@ -291,15 +291,15 @@
<p class="title">
<div class="main-title">
<span>
密码装备清退单
${title}
</span>
</div>
<div style="width:100%;text-align:left">
<div style="text-align:left;display: inline-block; width: 33%" class="number">
<span class="number">No:第37463473647号</span>
<span class="number">${number}</span>
</div>
<div style="text-align:center;display: inline-block; width: 29%" class="number">
<span >(第一联XXX单位)</span>
<span >${ul}</span>
</div>
<div style="text-align:right;display: inline-block; width: 33%" class="number">
<span>机密</span>
......@@ -310,11 +310,11 @@
<div class="line1">
<span class="sendTo">
<span>发往:</span>
<span></span>
<span>${receiveUnit}</span>
</span>
<span class="sendNum">
<span>批复文号:</span>
<span></span>
<span>${replyNum}</span>
</span>
</div>
<div class="line2 tableList">
......@@ -333,7 +333,7 @@
<span class="left">
<span>
<span class="label">发件单位:</span>
<span class="value"></span>
<span class="value">${senderUnit}</span>
</span>
<span>
<span class="label">签发人:</span>
......@@ -356,7 +356,7 @@
<span class="right">
<span>
<span class="label">收件单位:</span>
<span class="value"></span>
<span class="value">${receiveUnit}</span>
</span>
<span>
<span class="label">经办人:</span>
......
......@@ -6,6 +6,12 @@ import com.tykj.dev.device.sendback.entity.vo.ModelAndTypeVo;
import com.tykj.dev.device.sendback.entity.vo.RepelManagementVo;
import com.tykj.dev.device.sendback.entity.vo.SendBackOutFormVo;
import com.tykj.dev.device.sendback.service.RepelQueryService;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.device.task.subject.vo.TaskSelectVo;
import com.tykj.dev.device.task.subject.vo.TaskUserVo;
import com.tykj.dev.device.task.utils.TaskUtils;
import com.tykj.dev.misc.utils.PageUtil;
import com.tykj.dev.misc.utils.ResultUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -13,6 +19,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author zjm
......@@ -29,6 +36,12 @@ public class RepelQueryController {
@Autowired
RepelQueryService repelQueryService;
@Autowired
TaskService taskService;
@Autowired
TaskUtils taskUtils;
@GetMapping(value ="/repelTaskStatistical/{taskId}/{billId}")
@ApiOperation(value = "省、市清退任务的统计页面详情", notes = "省、市清退任务的统计页面")
public ResponseEntity findRepelTaskStatisticals(@PathVariable Integer taskId, @PathVariable Integer billId){
......@@ -125,9 +138,25 @@ public class RepelQueryController {
return ResponseEntity.ok(repelQueryService.findRepelListModelNameGroup(modelAndTypeVo));
}
/**
* 查询清退单列表
*/
@ApiOperation(value = "查询清退单列表")
@GetMapping("/getList")
public ResponseEntity getList() {
return ResponseEntity.ok(repelQueryService.getList());
}
/**
* 查询清退任务
* @param taskSelectVo
* @return
*/
@ApiOperation(value = "查询清退任务", notes = "可以通过这个接口查询查询清退任务")
@PostMapping(value = "/taskList")
public ResponseEntity selectRepairTasks(@RequestBody TaskSelectVo taskSelectVo){
List<TaskUserVo> taskUserVos = taskService.getManageList(taskSelectVo).stream().filter(taskUserVo -> taskUserVo.getBusinessType()==18||taskUserVo.getBusinessType()==16).collect(Collectors.toList());
return ResultUtil.success(PageUtil.getPerPage(taskSelectVo.getPage(), taskSelectVo.getSize(), taskUtils.orderByTopDesc(taskUserVos), taskSelectVo.getPageable()));
}
}
......@@ -113,7 +113,6 @@ public class RepelBusinessServiceImpl implements RepelBusinessService {
deviceRepel.getModels().forEach(i->{
modelCounts.add(new ModelCount(i,0));
});
String model=JacksonUtil.toJSon(modelCounts);
deviceRepel.getTaskScopes().forEach(
unisId-> {
if (unisId != units.getUnitId()) {
......@@ -147,9 +146,11 @@ public class RepelBusinessServiceImpl implements RepelBusinessService {
deviceRepelDetail.setSendUnit(units.getName());
deviceRepelDetail.setId(null);
if (directlUnderUnit.get()&&deviceLibraryDao.existsAllByPackingIdInAndOwnUnitIn(deviceRepel.getFieldingIds(), directlUnderUnitNames)){
deviceRepel.getModels().forEach(i->{
modelCounts.add(new ModelCount(i,deviceLibraryDao.countAllByModelAndOwnUnitIn(i,directlUnderUnitNames)));
});
if (deviceRepel.getRepelStatus()==1) {
deviceRepel.getModels().forEach(i -> {
modelCounts.add(new ModelCount(i, deviceLibraryDao.countAllByModelAndOwnUnitIn(i, directlUnderUnitNames)));
});
}
TaskBto taskBto2 = directlyUnderTask(units.getUnitId(), deviceRepelDetailService.saveDeviceRepelDetail(deviceRepelDetail).getId(), taskBto.getId(),deviceRepel.getTitle());
list.add(new RepelTaskStatistical(deviceRepel1.getId(), taskBto.getId(), taskBto2.getId(), 0, "省直属", JacksonUtil.toJSon(modelCounts), ""));
}
......@@ -158,9 +159,12 @@ public class RepelBusinessServiceImpl implements RepelBusinessService {
strings.add(units.getName());
if (correspondingLevel.get()&&deviceLibraryDao.existsAllByPackingIdInAndOwnUnitIn(deviceRepel.getFieldingIds(),strings)){
deviceRepel.getModels().forEach(i->{
modelCounts.add(new ModelCount(i,deviceLibraryDao.countAllByModelAndOwnUnitIn(i,strings)));
});
if (deviceRepel.getRepelStatus()==1) {
deviceRepel.getModels().forEach(i -> {
modelCounts.add(new ModelCount(i, deviceLibraryDao.countAllByModelAndOwnUnitIn(i, strings)));
});
}
TaskBto taskBto1 = oneselfTask(units.getUnitId(),deviceRepelDetailService.saveDeviceRepelDetail(deviceRepelDetail).getId(), taskBto.getId(),deviceRepel.getTitle());
list.add(new RepelTaskStatistical(deviceRepel1.getId(),taskBto.getId(),taskBto1.getId(),0,"省本级",JacksonUtil.toJSon(modelCounts),""));
}
......
差异被折叠。
......@@ -176,8 +176,9 @@ public class UserServiceImpl implements UserService {
boolean isName = user.getName().contains(userConditionsVo.getDim());
boolean isSex = user.getSex() != 1 ? "男".contains(userConditionsVo.getDim()) : "女".contains(userConditionsVo.getDim());
boolean isUnit = unitsService.findById(user.getUnitsId()).getName().contains(userConditionsVo.getDim());
boolean isMobile=user.getMobile()!=null&&user.getMobile().contains(userConditionsVo.getDim());
boolean isPosition = user.getPosition() == 1 ? "领导".contains(userConditionsVo.getDim()) : "专管员".contains(userConditionsVo.getDim());
return isName || isSex || isUnit || isPosition;
return isName || isSex || isUnit || isPosition||isMobile;
}else {
return true;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论