提交 2d19e029 authored 作者: zjm's avatar zjm

feat(文件模块): 添加维修模块的单据接口

在原有的单据上面备注修改为维修原因
上级 96408939
...@@ -59,6 +59,17 @@ public class FileController { ...@@ -59,6 +59,17 @@ public class FileController {
return ResponseEntity.ok(JavaToPdfHtmlFreeMarker.createPdf(content,url,preview,"documents/")); return ResponseEntity.ok(JavaToPdfHtmlFreeMarker.createPdf(content,url,preview,"documents/"));
} }
/**
* 生成维修单据
*/
@ApiOperation(value = "生成维修单据")
@PostMapping("/printRepair")
public ResponseEntity printRepair(@RequestBody Documents documents) throws IOException, DocumentException {
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRenderRepair(documents,url+"htmlModel/");
log.info("[file] 调用了生成出入单据对接口 出入库单据");
return ResponseEntity.ok(JavaToPdfHtmlFreeMarker.createPdf(content,url,preview,"documents/"));
}
/** /**
......
...@@ -233,6 +233,49 @@ public class JavaToPdfHtmlFreeMarker { ...@@ -233,6 +233,49 @@ public class JavaToPdfHtmlFreeMarker {
return null; return null;
} }
/**
* freemarker渲染html 维修业务单据 生成html页面。
*/
public static String[] freeMarkerRenderRepair(Documents documents,String htmlPath) {
Writer out = new StringWriter();
String [] strings=new String[100000];
int index=0;
try {
String QRCode= ZXingUtil.encode(documents.getId());
// 获取模板,并设置编码方式
Template template = freemarkerCfg.getTemplate("repair.html");
template.setEncoding("UTF-8");
List<DocumentDevice> list=documents.getDocumentDevices();
List<List<DocumentDevice>> listList=toDocList(list);
int count=listList.size();
for (int i=1; i<=3; i++){
Integer page=1;
for (List<DocumentDevice> list1:listList) {
String htmlname=htmlPath+ UUID.randomUUID().toString()+".html";
// 合并数据模型与模板
FileWriter fileWriter = new FileWriter(new File(htmlname));
template.process(toMap(documents,list1,MAP.get(i),page,count,QRCode),fileWriter);
out.flush();
strings[index]=htmlname;
index++;
page++;
}
}
return strings;
} catch (Exception e) {
log.error("[freeMarkerRender] 方法找不到地址:{}",htmlPath);
} finally {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return null;
}
public static String[] freeMarkerRender1(Documents documents,String htmlPath) { public static String[] freeMarkerRender1(Documents documents,String htmlPath) {
Writer out = new StringWriter(); Writer out = new StringWriter();
String [] strings=new String[100000]; String [] strings=new String[100000];
......
...@@ -299,12 +299,20 @@ ...@@ -299,12 +299,20 @@
<#list checks as dev> <#list checks as dev>
<table class="altrowstable" border="0" id="alternatecolor"> <table class="altrowstable" border="0" id="alternatecolor">
<#if (dev.model)??> <#if (dev.model)??>
<#if dev.isPart == 0>
<tr>
<td style="font-weight: bold;:overflow: hidden">${dev.model!}</td>
<td style="font-weight: bold;overflow: hidden">${dev.name!}</td>
<td style="font-weight: bold;">${dev.count!}</td>
</tr>
<#else>
<tr> <tr>
<td style="overflow: hidden">${dev.model!}</td> <td style="overflow: hidden">${dev.model!}</td>
<td style="overflow: hidden">${dev.name!}</td> <td style="overflow: hidden">${dev.name!}</td>
<td width="40px">${dev.count!}</td> <td>${dev.count!}</td>
</tr> </tr>
</#if> </#if>
</#if>
<tr> <tr>
<#if dev.oneCount == 1> <#if dev.oneCount == 1>
<td colspan="3" style="text-align: left;padding: 0 2em;color: #555;">${dev.seqStirng!}</td> <td colspan="3" style="text-align: left;padding: 0 2em;color: #555;">${dev.seqStirng!}</td>
...@@ -382,7 +390,7 @@ ...@@ -382,7 +390,7 @@
</#list> </#list>
</div> </div>
</div> </div>
<p class="person" style="margin-top: 20px;font-size: 10px;width: 100%;text-align: left;"> <p class="person" style="margin-top: 10px;font-size: 15px;width: 100%;text-align: left;">
<span style="width: 200px;text-align: center;width: 24%;margin: 0;">制表单位:${unit!}</span> <span style="width: 200px;text-align: center;width: 24%;margin: 0;">制表单位:${unit!}</span>
<span style="width: 200px;text-align: center;width: 24%;margin: 0;">制表时间:${time!}</span> <span style="width: 200px;text-align: center;width: 24%;margin: 0;">制表时间:${time!}</span>
<span style="width: 200px;text-align: center;width: 24%;margin: 0;">经办人:</span> <span style="width: 200px;text-align: center;width: 24%;margin: 0;">经办人:</span>
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style>
body,span,p,tr,td {
font-size: 15px;
font-family: FangSong_GB2312;
margin: 0;
padding: 0;
}
/*@page{size:297mm 210mm;}<!-- 设置PDF页面大小,此配置只对生成PDF文件有效,不会对页面显示生效 -->*/
@page {
size: 297mm 210mm;
}
.erwei{
width: 43px;
height: 43px;
position: fixed;
left: 150px;
top: 0px;
}
.bottomTxt {
text-align: center;
font-size: 15px;
color: #000;
height: 10px;
line-height: 10px;
margin-top: 4px;
}
.returnTablePrint {
width: 100%;
height: 100%;
overflow: hidden;
color: #000;
cursor: default;
}
.returnTablePrint .content {
width: 100%;
height: 100%;
}
.returnTablePrint .content>div {
width: 100%;
height: 100%;
background: #fff;
/* padding: 30px; */
box-sizing: border-box;
}
/* .returnTablePrint .content>p{
width: 100%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #4a475d;
} */
.returnTablePrint .listWrapper {
/*margin: 0 auto;*/
/* height: calc(100% - 40px); */
box-sizing: border-box;
}
.returnTablePrint .list {
/*margin: 0 auto;*/
height: calc(100% - 12px)
}
.returnTablePrint .title {
width: 100%;
font-size: 22px;
text-align: center;
position: relative;
/* margin: 0 0 15px; */
box-sizing: border-box;
margin-bottom: 4px;
}
/* .returnTablePrint .title span:nth-child(2){
font-size: 28px;
color: #000000;
}
.returnTablePrint .title span:nth-child(2) span{
font-size: 20px;
color: #141414;
} */
.returnTablePrint .title .number {
font-size: 15px;
color: #000;
}
/* .returnTablePrint .other{
width: 100%;
color: #141414;
font-size: 20px;
margin-top: 20px;
padding-left: 50px;
position: relative;
box-sizing: border-box;
margin-bottom: 20px;
}
.returnTablePrint .other>span span:nth-child(2){
display: inline-block;
margin:0 40px 0 10px;
} */
.returnTablePrint .listCon {
height: 100%;
border: 1px solid #7f7f7f;
}
.returnTablePrint .line1 {
width: 100%;
font-size: 15px;
box-sizing: border-box;
border-bottom: 1px solid #7f7f7f;
color: #333;
line-height: 20px;
height: 24px;
}
.returnTablePrint .line1 .sendTo {
display: inline-block;
width: 49%;
height: 24px;
color: #000;
line-height: 24px;
box-sizing: border-box;
/*padding-left: 20px;*/
}
.returnTablePrint .line1 .sendNum {
display: inline-block;
width: 49%;
font-size: 15px;
height: 24px;
line-height: 24px;
color: #000;
box-sizing: border-box;
/*padding-left: 20px;*/
}
.returnTablePrint .line1 .sendTo {
border-right: 1px solid #7f7f7f;
}
.returnTablePrint .line1 .sendTo span:nth-child(2),
.returnTablePrint .line1 .sendNum span:nth-child(2) {
display: inline-block;
margin-left: 5px;
}
.returnTablePrint .line2 {
height: 100%;
/* padding: 20px; */
border-bottom: 1px solid #7f7f7f;
}
.returnTablePrint .tableList {
height: 375px;
overflow:hidden;
}
.returnTablePrint .line2>>>.el-table tbody tr:nth-child(odd) {
background-color: #fff;
}
.returnTablePrint .line2>>>.el-table tbody tr:nth-child(even) {
background-color: #fff;
}
.returnTablePrint .line3 {
height: 164px;
width: 100%;
}
.returnTablePrint .line3 .left {
display: inline-block;
width: 47%;
box-sizing: border-box;
position: relative;
/* padding-bottom: 80px; */
}
.returnTablePrint .line3 .right {
display: inline-block;
/* width: 49%; */
box-sizing: border-box;
position: relative;
/* padding-bottom: 80px; */
}
.returnTablePrint .line3 .left {
border-right: 1px solid #7f7f7f;
padding: 5px 10px 0;
height:97%;
}
.returnTablePrint .line3 .left>span,
.returnTablePrint .line3 .right>span {
display: block;
/* line-height: 50px; */
}
.returnTablePrint .line3 .right {
height: 100%;
padding: 5px 10px;
box-sizing: border-box;
}
.returnTablePrint .line3 .left>span>span:nth-child(2),
.returnTablePrint .line3 .right>span>span:nth-child(2) {
margin-left: 8px;
}
.returnTablePrint .line3 i {
display: block;
text-align: right;
position: absolute;
right: 5px;
bottom: 5px;
font-style: normal;
font-size: 12px;
}
.returnTablePrint .line3 .right i {
font-style: normal;
}
.returnTablePrint .line3 i>span>span {
display: block;
}
.returnTablePrint>>>.el-scrollbar__wrap {
overflow-x: hidden;
margin-bottom: 0;
}
.returnTablePrint .checkName span:nth-child(2) {
color: #000;
display: inline-block;
}
.returnTablePrint>>>.el-table tbody .cell {
color: #000;
}
.returnTablePrint .label {
color: #000;
font-size: 15px;
}
.returnTablePrint .value {
color: #000;
font-size: 15px;
}
.returnTablePrint .main-title span{
font-size: 22px;
color: #333;
font-weight: bold;
}
.returnTablePrint .main-title {
font-size: 22px;
color: #333;
line-height: 20px;
text-align: center;
margin-bottom: 4px;
}
.returnTablePrint .footer {
display: flex;
justify-content: flex-end;
padding: 0 40px;
box-sizing: border-box;
}
.button-submit {
margin-left: 50px;
}
table.altrowstable2 {
width: 100%;
font-size: 16px;
color: #000;
border-width: 0px;
border-color: #a9c6c9;
border-collapse: collapse;
text-align: center;
table-layout: fixed;
word-break: break-all;
}
table.altrowstable2 th {
height: 25px;
line-height:25px;
font-size: 15px;
background-color: #fff;
border:1px solid #bebebe;
padding-top: 0;
}
table.altrowstable2 td {
height: 25px;
line-height:25px;
font-size: 15px;
word-break: break-all;
word-wrap: break-word;
border:1px solid #bebebe;
width: 100%;
}
.td2{
height: 50px !important;
}
.td3{
height: 75px !important;
}
.td4{
height: 100px !important;
}
.td5{
height: 125px !important;
}
.td6{
height: 150px !important;
}
.td7{
height: 175px !important;
}
.td8{
height: 200px !important;
}
.td9{
height: 225px !important;
}
.td10{
height: 250px !important;
}
.td11{
height: 275px !important;
}
.td12{
height: 300px !important;
}
.td13{
height: 325px !important;
}
table.altrowstable {
width: 100%;
font-size: 16px;
color: #000;
border-width: 0px;
border-color: #a9c6c9;
border-collapse: collapse;
text-align: center;
table-layout: fixed;
word-break: break-all;
}
table.altrowstable th {
height: 24px;
line-height:24px;
font-size: 15px;
background-color: #ebebeb;
marign-top:none;
border:1px solid #bebebe;
padding-top: 0;
padding-bottom: 0;
}
table.altrowstable td {
height: 24px;
line-height:24px;
font-size: 15px;
word-break: normal;
word-wrap: normal;
border:1px solid #bebebe;
width: 100%;
}
/*table.altrowstable .altrowstableTr:nth-child(odd) {
height: 18px;
word-break: break-all;
word-wrap: break-word;
background-color: #f2f2f2;
} */
.leftImg {
position: absolute;
bottom: 0px;
right: 150px;
}
.rightImg {
position: absolute;
bottom: 0px;
right: 150px;
.oddrowcolor {
background-color: #fff;
}
.evenrowcolor {
background-color: #fafafa;
}
/*tr:nth-child(odd) {*/
/* background: #fafafa;*/
/*}*/
</style>
</head>
<body>
<div class="returnTablePrint">
<img class="erwei" src=${QRCode} />
<div class="content">
<div>
<div class="listWrapper">
<div class="list">
<div class="title">
<div class="main-title">
<span>
${title!}
</span>
</div>
<div style="width:100%;font-size: 1px;">
<div style="display:inline-block;text-align:left; width: 33%; font-size: 10px;"
class="number">
<span>${number!}</span>
</div>
<div style="display:inline-block;text-align:center; width: 33%; font-size: 10px;"
class="number">
<span>(${ul!})</span>
</div>
<div style="display:inline-block;text-align:right; width: 33%; font-size: 10px;"
class="number">
<span>机密</span>
</div>
</div>
</div>
<div class="listCon">
<div class="line1">
<span class="sendTo">
<span style="text-indent: 5px; display: inline-block;">发往:</span>
<span>${receiveUnit!}</span>
</span>
<span class="sendNum">
<span style="text-indent: 5px; display: inline-block;">批复文号:</span>
<span>${replyNum!}</span>
</span>
</div>
<div class="line2 tableList">
<table class="altrowstable" id="alternatecolor">
<tr style="border-bottom: 1px solid #dedede; border-top: 1px solid #dedede;">
<!-- <th>序号</th><th>型号</th><th>形态</th><th>密级</th><th>应用领域</th><th>数量</th><th style="width: 420px;">装备序列号</th><th>备注</th> -->
<th width="70px">序号</th>
<th width="96px">型号</th>
<th width="96px">部件</th>
<th width="50px">密级</th>
<th width="100px">应用领域</th>
<th width="72px">数量</th>
<th width="120px">装备序列号</th>
<th>维修原因</th>
</tr>
<#list documentDevices as dev>
<tr class="altrowstableTr">
<td>
${dev.code!}
</td>
<td>${dev.model!}</td><td>${dev.parts!}</td><td>${dev.securityClassification!}</td><td>${dev.applicationField!}</td>
<td>
${dev.count!}
</td>
<!--<td>${dev.deviceSerialNumber!}</td>-->
<#if dev.oneCount == 1>
<td>${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 2>
<td class="td2">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 3>
<td class="td3">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 4>
<td class="td4">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 5>
<td class="td5">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 6>
<td class="td6">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 7>
<td class="td7">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 8>
<td class="td8">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 9>
<td class="td9">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 10>
<td class="td10">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 11>
<td class="td11">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 12>
<td class="td12">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 13>
<td class="td13">${dev.deviceSerialNumber!}</td>
<#elseif dev.oneCount == 14>
<td class="td14">${dev.deviceSerialNumber!}</td>
</#if>
<td>${dev.remark!}</td>
</tr>
</#list>
</table>
<table class="altrowstable2" id="alternatecolor">
<tr style="border-bottom: 1px solid #dedede;">
<th width="70px"></th>
<th width="96px"></th>
<th width="96px"></th>
<th width="50px"></th>
<th width="100px"></th>
<th width="72px"></th>
<th width="420px"></th>
<th></th>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="altrowstableTr">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
<div class="line3">
<span class="left">
<span style="padding:20px 0 32px ;">
<span class="label">发件单位:</span>
<span class="value">${senderUnit!}</span>
</span>
<span style="padding-bottom:32px ;">
<span class="label"><span style="letter-spacing: 7px;">签发</span>人:</span>
<span class="value">${nameA1!}</span>
</span>
<span>
<span class="label"><span style="letter-spacing: 7px;">经办</span>人:</span>
<span class="value">${nameA!}</span>
</span>
<i>
<span style="color: #000">
<span style="margin-bottom: 5px;">(公章)</span>
<span><span style="color: #fff;">1234</span><span
style="color: #fff;">0121</span><span
style="color: #fff;">0232</span></span>
<div class="leftImg">
<div id="pos0">
<img style="width:80px;height:80px" src=${srcA} class="" id="" />
</div>
</div>
</span>
</i>
</span>
<span class="right">
<div style="width: 100%;">
<span style="width: 100%;display: inline-block;padding:20px 0 32px ;">
<span class="label">收件单位:</span>
<span class="value">${receiveUnit}</span>
</span>
<span style="width: 100%;display: inline-block;padding-bottom:32px ;">
<span class="label"><span style="letter-spacing: 7px;">经办</span>人:</span>
<span class="value">${nameB!}</span>
</span>
<span style="width: 100%;display: inline-block;">
<span class="label"><span style="letter-spacing: 7px;">经办</span>人:</span>
<span class="value">${nameB1!}</span>
</span>
</div>
<div style="left: 250px;top: 38px;">
<!--<div style="position: relative;left: 250px;top: 38px;">-->
<#if srcB=='"1"'>
<i style="position: absolute;bottom: 10px;right: -150px;">
<#else>
<i style="position: absolute;bottom: 10px;right: -85px;">
</#if>
<!--<i style="bottom: 30px;right: 90px;"> -->
<span style="color: #000">
<span style="margin-bottom: 5px;">(公章)</span>
<span><span style="color: #fff;">1234</span><span
style="color: #fff;">0121</span><span
style="color: #fff;">0232</span></span>
<!--<div class="rightImg">-->
<!--<div id="pos1">-->
<img id="imgB" style="position: fixed;bottom: 95px;right: 164px;width:80px;height:80px" src=${srcB} />
<!--</div>-->
<!--</div>-->
</span>
</i>
</div>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<p class="bottomTxt" style="float: left;">注:编号连续使用"-"省略</p>
<p class="bottomTxt" style="float: right;">第${page}页/共${count}页</p>
</div>
</div>
</body>
</html>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论