Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
device-back
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
device-back
Commits
9e96a44c
提交
9e96a44c
authored
9月 06, 2021
作者:
zjm
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'dev' 到 'master'
合并 dev 至 master 查看合并请求
!13
上级
24f8bc90
095e261f
隐藏空白字符变更
内嵌
并排
正在显示
27 个修改的文件
包含
1461 行增加
和
2285 行删除
+1461
-2285
.gitignore
.gitignore
+2
-0
http-requests-log.http
.idea/httpRequests/http-requests-log.http
+21
-0
BcHash.java
...ain/java/com/tykj/dev/blockcha/subject/entity/BcHash.java
+4
-0
BcText.java
...ain/java/com/tykj/dev/blockcha/subject/entity/BcText.java
+3
-0
BlockChainUtilImpl.java
...dev/blockcha/subject/service/impl/BlockChainUtilImpl.java
+122
-169
BlockChainUtilImplLocal.java
...lockcha/subject/service/impl/BlockChainUtilImplLocal.java
+411
-0
GlobalMap.java
dev-config/src/main/java/com/tykj/dev/config/GlobalMap.java
+11
-6
LogType.java
dev-config/src/main/java/com/tykj/dev/config/LogType.java
+27
-17
FileName.java
...nfig/src/main/java/com/tykj/dev/config/base/FileName.java
+6
-1
CheckChart.java
...a/com/tykj/dev/device/confirmcheck/common/CheckChart.java
+40
-0
DeviceCheckController.java
...device/confirmcheck/controller/DeviceCheckController.java
+773
-317
DeviceCheckDetail.java
.../device/confirmcheck/entity/domain/DeviceCheckDetail.java
+12
-2
CheckDetailVo.java
...tykj/dev/device/confirmcheck/entity/vo/CheckDetailVo.java
+12
-0
CheckExamDetailVo.java
.../dev/device/confirmcheck/entity/vo/CheckExamDetailVo.java
+3
-2
DeviceCheckDetailDao.java
.../device/confirmcheck/repository/DeviceCheckDetailDao.java
+4
-0
ConfirmCheckServiceImpl.java
...ce/confirmcheck/service/impl/ConfirmCheckServiceImpl.java
+3
-3
ObjTransUtil.java
.../com/tykj/dev/device/confirmcheck/utils/ObjTransUtil.java
+0
-1
UseReportFIleServiceImpl.java
...ev/device/file/service/Impl/UseReportFIleServiceImpl.java
+2
-3
JavaToPdfHtmlFreeMarker.java
...om/tykj/dev/device/file/util/JavaToPdfHtmlFreeMarker.java
+5
-5
bill.html
dev-file/src/main/resources/bill.html
+0
-406
bill1.html
dev-file/src/main/resources/bill1.html
+0
-381
bill2.html
dev-file/src/main/resources/bill2.html
+0
-201
bill3.html
dev-file/src/main/resources/bill3.html
+0
-363
docxModel.docx
dev-file/src/main/resources/docxModel.docx
+0
-0
template_freemarker.html
dev-file/src/main/resources/template_freemarker.html
+0
-28
test.html
dev-file/src/main/resources/test.html
+0
-380
没有可用的文件名
+0
-0
没有找到文件。
.gitignore
浏览文件 @
9e96a44c
...
...
@@ -8,6 +8,8 @@ target/
*.log
.log
**/.log
*.gz
C:/*
### STS ###
\~*.xlsx
...
...
.idea/httpRequests/http-requests-log.http
浏览文件 @
9e96a44c
GET http://127.0.0.1:8087/actuator
Accept: application/vnd.spring-boot.actuator.v2+json
<> 2021-09-03T192754.200.json
###
GET http://127.0.0.1:8087/actuator
Accept: application/vnd.spring-boot.actuator.v2+json
<> 2021-09-03T192650.403.json
###
GET http://127.0.0.1:8087/actuator
Accept: application/vnd.spring-boot.actuator.v2+json
<> 2021-09-03T192615.403.json
###
GET http://127.0.0.1:8087/printDocuments1
<> 2021-04-27T124856.403.json
...
...
dev-blockcha/src/main/java/com/tykj/dev/blockcha/subject/entity/BcHash.java
浏览文件 @
9e96a44c
...
...
@@ -27,4 +27,8 @@ public class BcHash {
* 接口返回结果
*/
private
BcHashData
data
;
public
BcHash
toDate
(){
return
new
BcHash
();
}
}
dev-blockcha/src/main/java/com/tykj/dev/blockcha/subject/entity/BcText.java
浏览文件 @
9e96a44c
...
...
@@ -28,4 +28,7 @@ public class BcText {
*/
private
BcTextData
data
;
public
BcText
toData
(){
return
new
BcText
();
}
}
dev-blockcha/src/main/java/com/tykj/dev/blockcha/subject/service/impl/BlockChainUtilImpl.java
浏览文件 @
9e96a44c
...
...
@@ -16,7 +16,7 @@ import java.util.UUID;
* 步骤:
* 1.构建请求参数
* 2.通过rest_template获取数据
*
*
测试
* @author LJJ cnljj1995@gmail.com
* on 2020-08-13
*/
...
...
@@ -25,9 +25,6 @@ import java.util.UUID;
public
class
BlockChainUtilImpl
implements
BlockChainUtil
{
private
String
SECRET_KEY
=
"3mdeM1dw2FfHrd5h6WAuhB3WYdDG6ZAgz96CcM1nzxbiYA8QaaZHW75Je9xKixTTD2rwujyb1gVUNPYm5W6FPZQ8"
;
private
String
SECRET_ID
=
"3yXRRiL9xsLfbt2kv7qRH2so6ChJX3rFkay7Njcsxfbp"
;
//测试环境
...
...
@@ -81,43 +78,44 @@ public class BlockChainUtilImpl implements BlockChainUtil {
request
.
put
(
"subCode"
,
subCode
);
request
.
put
(
"apiSignature"
,
ApiSignatureUtil
.
getApiSignature
(
request
,
SECRET_KEY
));
switch
(
index
){
case
1
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
case
2
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL2
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
case
3
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL3
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
case
4
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL4
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
case
5
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL5
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
}
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// }
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
return
new
BcText
().
toData
();
}
@Override
...
...
@@ -126,11 +124,7 @@ public class BlockChainUtilImpl implements BlockChainUtil {
request
.
put
(
"content"
,
content
);
request
.
put
(
"subCode"
,
subCode
);
request
.
put
(
"apiSignature"
,
ApiSignatureUtil
.
getApiSignature
(
request
,
SECRET_KEY
));
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
SEND_TEXT
,
request
,
BcText
.
class
);
return
new
BcText
().
toData
();
}
// public static void main(String[] args) {
...
...
@@ -147,44 +141,7 @@ public class BlockChainUtilImpl implements BlockChainUtil {
log
.
info
(
"apiSignature:{}"
,
s
);
request
.
put
(
"apiSignature"
,
s
);
switch
(
index
){
case
1
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
case
2
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL2
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
case
3
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL3
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
case
4
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL4
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
case
5
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL5
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
}
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
return
new
BcHash
().
toDate
();
}
@Override
...
...
@@ -197,11 +154,7 @@ public class BlockChainUtilImpl implements BlockChainUtil {
log
.
info
(
"apiSignature:{}"
,
s
);
request
.
put
(
"apiSignature"
,
s
);
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
SEND_HASH
,
request
,
BcHash
.
class
);
return
new
BcHash
().
toDate
();
// }
// else {
// return new BcHash(0, "", new BcHashData("000"));
...
...
@@ -242,39 +195,40 @@ public class BlockChainUtilImpl implements BlockChainUtil {
request
.
put
(
"apiSignature"
,
s
);
switch
(
index
){
case
1
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
case
2
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL2
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
case
3
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL3
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
case
4
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL4
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
case
5
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL5
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
}
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// }
//
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
return
new
BcText
().
toData
();
}
@Override
...
...
@@ -285,10 +239,7 @@ public class BlockChainUtilImpl implements BlockChainUtil {
String
s
=
ApiSignatureUtil
.
getApiSignature
(
request
,
SECRET_KEY
);
request
.
put
(
"apiSignature"
,
s
);
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
APPEND_TEXT
,
request
,
BcText
.
class
);
return
new
BcText
().
toData
();
}
@Override
...
...
@@ -300,44 +251,45 @@ public class BlockChainUtilImpl implements BlockChainUtil {
request
.
put
(
"apiSignature"
,
s
);
switch
(
index
){
case
1
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
case
2
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL2
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
case
3
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL3
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
case
4
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL4
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
case
5
:
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL5
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
}
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// }
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
return
new
BcHash
().
toDate
();
}
...
...
@@ -349,11 +301,12 @@ public class BlockChainUtilImpl implements BlockChainUtil {
String
s
=
ApiSignatureUtil
.
getApiSignature
(
request
,
SECRET_KEY
);
request
.
put
(
"apiSignature"
,
s
);
return
new
RestTemplate
().
postForObject
(
BLOCK_CHAIN_URL
+
BcUrl
.
APPEND_HASH
,
request
,
BcHash
.
class
);
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
return
new
BcHash
().
toDate
();
}
@Override
...
...
dev-blockcha/src/main/java/com/tykj/dev/blockcha/subject/service/impl/BlockChainUtilImplLocal.java
0 → 100644
浏览文件 @
9e96a44c
//package com.tykj.dev.blockcha.subject.service.impl;
//
//import com.tykj.dev.blockcha.conf.BcUrl;
//import com.tykj.dev.blockcha.subject.entity.*;
//import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.client.RestTemplate;
//
//import java.util.Map;
//import java.util.SortedMap;
//import java.util.TreeMap;
//import java.util.UUID;
//
///**
// * 步骤:
// * 1.构建请求参数
// * 2.通过rest_template获取数据
// *
// * @author LJJ cnljj1995@gmail.com
// * on 2020-08-13
// */
//@Slf4j
//@Component
//public class BlockChainUtilImplLocal implements BlockChainUtil {
//
//
//
//
//
// private String SECRET_KEY = "3mdeM1dw2FfHrd5h6WAuhB3WYdDG6ZAgz96CcM1nzxbiYA8QaaZHW75Je9xKixTTD2rwujyb1gVUNPYm5W6FPZQ8";
// private String SECRET_ID = "3yXRRiL9xsLfbt2kv7qRH2so6ChJX3rFkay7Njcsxfbp";
// //测试环境
//
//// public String SECRET_KEY;
//// public String SECRET_ID;
// //测试环境
//// public String SECRET_KEY = "3RJWStDCXN7mqJyZAB8rF59f87arGShdk9aKyDN3wKbzq9JnaXom1Hpe6mHT1k2yx9zfE7VFWidqwuxyT7DtPjCs";
//// public String SECRET_ID = "JAjQyTZdR8bmbHaU6iiFGvrCuUik4cG4U4ostk8KKrbS";
//
// private final static String BLOCK_CHAIN_URL = "http://10.153.4.12:8076";
// private final static String BLOCK_CHAIN_URL2 = "http://10.153.8.10:8076";
// private final static String BLOCK_CHAIN_URL3 = "http://10.153.8.11:8076";
// private final static String BLOCK_CHAIN_URL4 = "http://10.153.110.10:8076";
// private final static String BLOCK_CHAIN_URL5 = "http://10.153.6.11:8076";
//
//// @Value("${useBlockcha:fasle")
//// private String useBlockcha;
//
// @Override
// public BcStatus getStatus() {
//
// SortedMap<Object, Object> request = getRequest();
// request.put("apiSignature", ApiSignatureUtil.getApiSignature(request, SECRET_KEY));
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.GET_STATUS,
// request,
// BcStatus.class);
// }
//
// @Override
// public BcRegister subRegister(String subName) {
//
// SortedMap<Object, Object> request = getRequest();
// request.put("subName", subName);
// request.put("apiSignature", ApiSignatureUtil.getApiSignature(request, SECRET_KEY));
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SUB_CODE_REGISTER,
// request,
// BcRegister.class
// );
// }
//
// @Override
// public BcText sendText(Integer index,Integer subCode, String content) {
//
// SortedMap<Object, Object> request = getRequest();
// request.put("content", content);
// request.put("subCode", subCode);
// request.put("apiSignature", ApiSignatureUtil.getApiSignature(request, SECRET_KEY));
//
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// }
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// }
//
// @Override
// public BcText sendText(Integer subCode, String content) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", content);
// request.put("subCode", subCode);
// request.put("apiSignature", ApiSignatureUtil.getApiSignature(request, SECRET_KEY));
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_TEXT,
// request,
// BcText.class
// );
// }
//
//// public static void main(String[] args) {
//// new BlockChainUtilImpl().sendHash(1,"阿斯顿好看");
//// }
//
//
// @Override
// public BcHash sendHash(Integer index,Integer subCode, String content) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", HexUtil.hex64(content));
// request.put("subCode", subCode);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// log.info("apiSignature:{}",s);
// request.put("apiSignature", s);
//
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
// }
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
// }
//
// @Override
// public BcHash sendHash(Integer subCode, String content) {
//// if ("true".equals(this.useBlockcha)) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", HexUtil.hex64(content));
// request.put("subCode", subCode);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// log.info("apiSignature:{}",s);
// request.put("apiSignature", s);
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.SEND_HASH,
// request,
// BcHash.class
// );
//// }
//// else {
//// return new BcHash(0, "", new BcHashData("000"));
//// }
// }
//
// @Override
// public BcRecord fetchRecord(String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("recordID", recordId);
// request.put("apiSignature", ApiSignatureUtil.getApiSignature(request, SECRET_KEY));
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.FETCH_RECORD,
// request,
// BcRecord.class
// );
// }
//
// @Override
// public BcHistory fetchHistory(Map<String, Object> map) {
//
// SortedMap<Object, Object> request = getRequest();
// map.forEach(request::put);
// request.put("apiSignature", ApiSignatureUtil.getApiSignature(request, SECRET_KEY));
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.FETCH_HISTORY,
// request,
// BcHistory.class
// );
// }
//
// @Override
// public BcText appendText(Integer index,String content, String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", content);
// request.put("recordID", recordId);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// request.put("apiSignature", s);
//
//
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// }
//
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// }
//
// @Override
// public BcText appendText(String content, String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", content);
// request.put("recordID", recordId);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// request.put("apiSignature", s);
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_TEXT,
// request,
// BcText.class);
// }
//
// @Override
// public BcHash appendHash(Integer index,String content, String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", HexUtil.hex64(content));
// request.put("recordID", recordId);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// request.put("apiSignature", s);
//
//
// switch (index){
// case 1:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 2:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL2 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 3:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL3 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 4:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL4 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// case 5:
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL5 + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// }
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
//
// }
//
// @Override
// public BcHash appendHash(String content, String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", HexUtil.hex64(content));
// request.put("recordID", recordId);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// request.put("apiSignature", s);
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.APPEND_HASH,
// request,
// BcHash.class
// );
// }
//
// @Override
// public BcVerify verifyHash(String content, String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", HexUtil.hex64(content));
// request.put("recordID", recordId);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// request.put("apiSignature", s);
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.VERIFY_HASH,
// request,
// BcVerify.class
// );
// }
//
// @Override
// public BcVerify verifyText(String content, String recordId) {
// SortedMap<Object, Object> request = getRequest();
// request.put("content", content);
// request.put("recordID", recordId);
// String s = ApiSignatureUtil.getApiSignature(request, SECRET_KEY);
// request.put("apiSignature", s);
//
// return new RestTemplate().postForObject(
// BLOCK_CHAIN_URL + BcUrl.VERIFY_TEXT,
// request,
// BcVerify.class
// );
// }
//
// @Override
// public String verifyText1(String id, String key) {
// SECRET_KEY=key;
// SECRET_ID=id;
// return SECRET_KEY;
// }
//
// /**
// * 存储通用参数
// *
// * @return request
// */
// private SortedMap<Object, Object> getRequest() {
// long timestamp = System.currentTimeMillis() / 1000;
// String nonce = UUID.randomUUID().toString().trim().replaceAll("-", "");
// SortedMap<Object, Object> request = new TreeMap<Object, Object>();
// request.put("timestamp", timestamp);
// request.put("nonce", nonce);
// request.put("secretID", SECRET_ID);
// return request;
// }
//
//}
dev-config/src/main/java/com/tykj/dev/config/GlobalMap.java
浏览文件 @
9e96a44c
package
com
.
tykj
.
dev
.
config
;
import
com.tykj.dev.misc.base.*
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Arrays
;
import
java.util.Map
;
...
...
@@ -10,6 +13,7 @@ import java.util.stream.Collectors;
/**
* @author dengdiyi
*/
@Slf4j
public
class
GlobalMap
{
public
static
final
Map
<
Integer
,
StatusEnum
>
statusEnumMap
;
...
...
@@ -53,6 +57,7 @@ public class GlobalMap {
.
collect
(
Collectors
.
toMap
(
deviceSecretLevel
->
deviceSecretLevel
.
id
,
Function
.
identity
()));
businessMap
=
Arrays
.
stream
(
BusinessEnum
.
values
())
.
collect
(
Collectors
.
toMap
(
businessEnum
->
businessEnum
.
id
,
businessEnum
->
businessEnum
.
name
));
log
.
info
(
"[初始化] 初始map结束..."
);
}
public
static
Map
<
Integer
,
StatusEnum
>
getStatusEnumMap
()
{
...
...
@@ -71,6 +76,10 @@ public class GlobalMap {
return
deviceLifeStatusMap
;
}
public
static
Map
<
Integer
,
MatchingRange
>
getMatchingRangeMap
()
{
return
matchingRangeMap
;
}
public
static
Map
<
Integer
,
StorageType
>
getStorageTypeMap
()
{
return
storageTypeMap
;
}
...
...
@@ -79,18 +88,14 @@ public class GlobalMap {
return
matchingDeviceTypeMap
;
}
public
static
Map
<
Integer
,
MatchingRange
>
getMatching
RangeMap
()
{
return
matching
RangeMap
;
public
static
Map
<
Integer
,
DeviceInvisibleRange
>
getDeviceInvisible
RangeMap
()
{
return
deviceInvisible
RangeMap
;
}
public
static
Map
<
Integer
,
DeviceSecretLevel
>
getDeviceSecretLevelMap
()
{
return
deviceSecretLevelMap
;
}
public
static
Map
<
Integer
,
DeviceInvisibleRange
>
getDeviceInvisibleRangeMap
()
{
return
deviceInvisibleRangeMap
;
}
public
static
Map
<
Integer
,
String
>
getBusinessMap
()
{
return
businessMap
;
}
...
...
dev-config/src/main/java/com/tykj/dev/config/LogType.java
浏览文件 @
9e96a44c
...
...
@@ -80,7 +80,6 @@ public enum LogType {
REPAIR_SEND_4
(
33
,
REPAIR
.
id
,
WAIT_RECEIVE
.
id
,
END
.
id
,
"上传相关单据,任务结束"
),
//
REPAIR_SEND_5
(
34
,
REPAIR
.
id
,
WAIT_RECEIVE
.
id
,
WAIT_UPLOAD_FILE
.
id
,
"接收维修装备并发起入库(缺少单据)"
),
REPAIR_SEND_6
(
35
,
REPAIR
.
id
,
WAIT_UPLOAD_FILE
.
id
,
END
.
id
,
"上传送修单据"
),
...
...
@@ -107,23 +106,19 @@ public enum LogType {
TRAIN_1
(
46
,
TRAIN
.
id
,
ORIGIN_STATUS
.
id
,
TRAIN1000
.
id
,
"发起培训"
),
CONFIRM_CHECK_DETAIL_NORMAL_0
(
401
,
CONFIRM_CHECK_DETAIL
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_DETAIL_0
.
id
,
"核查详情任务开始"
),
CONFIRM_CHECK_DETAIL_NORMAL_1
(
402
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_0
.
id
,
CHECK_DETAIL_1
.
id
,
"A岗核查成功,等待专管员B操作"
),
CONFIRM_CHECK_DETAIL_NORMAL_2
(
403
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_1
.
id
,
CHECK_DETAIL_2
.
id
,
"B岗核查成功,等待核查组成员A审核"
),
CONFIRM_CHECK_DETAIL_NORMAL_0
(
401
,
CONFIRM_CHECK_DETAIL
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_DETAIL_REGION_0
.
id
,
"核查详情任务开始"
),
CONFIRM_CHECK_DETAIL_NORMAL_
3
(
404
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_2
.
id
,
CHECK_DETAIL_3
.
id
,
"核查组成员A核查成功,等待核查组成员B审核
"
),
CONFIRM_CHECK_DETAIL_NORMAL_
1
(
402
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_REGION_0
.
id
,
CHECK_DETAIL_REGION_1
.
id
,
"A岗核查成功,等待专管员B操作
"
),
CONFIRM_CHECK_DETAIL_NORMAL_
4
(
405
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_3
.
id
,
END
.
id
,
"核查组成员B核查成功,任务结束,上传数据到统计信息
"
),
CONFIRM_CHECK_DETAIL_NORMAL_
2
(
403
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_REGION_1
.
id
,
CHECK_DETAIL_REGION_2
.
id
,
"B岗核查成功,等待核查组成员A审核
"
),
CONFIRM_CHECK_DETAIL_
OTHER_1
(
406
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_1
.
id
,
END
.
id
,
"B岗核查成功,该任务没有核查组成员,任务结束,上传数据到统计信息
"
),
CONFIRM_CHECK_DETAIL_
NORMAL_3
(
404
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_REGION_2
.
id
,
END
.
id
,
"市专管员审核成功,该自查任务完结
"
),
CONFIRM_CHECK_DETAIL_OTHER_
2
(
407
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_1
.
id
,
CHECK_DETAIL_0
.
id
,
"B岗审核失败,跳回A岗人员操作
"
),
CONFIRM_CHECK_DETAIL_OTHER_
1
(
406
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_REGION_1
.
id
,
END
.
id
,
"B岗核查成功,该任务没有核查组成员,任务结束,上传数据到统计信息
"
),
CONFIRM_CHECK_DETAIL_OTHER_
3
(
408
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_2
.
id
,
CHECK_DETAIL_0
.
id
,
"核查组成员A审核失败,跳回
A岗人员操作"
),
CONFIRM_CHECK_DETAIL_OTHER_
2
(
407
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_REGION_1
.
id
,
CHECK_DETAIL_REGION_0
.
id
,
"B岗审核失败,跳回区
A岗人员操作"
),
CONFIRM_CHECK_DETAIL_OTHER_
4
(
409
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_3
.
id
,
CHECK_DETAIL_0
.
id
,
"核查组成员B审核失败,跳回
A岗人员操作"
),
CONFIRM_CHECK_DETAIL_OTHER_
3
(
408
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_REGION_2
.
id
,
CHECK_DETAIL_REGION_0
.
id
,
"市专管员审核失败,跳回区
A岗人员操作"
),
CONFIRM_CHECK_DETAIL_STAT_0
(
410
,
CONFIRM_CHECK_STAT
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_STAT_0
.
id
,
"核查统计任务开始"
),
...
...
@@ -137,20 +132,35 @@ public enum LogType {
CONFIRM_CHECK_EXAM_STAT_2
(
415
,
CONFIRM_CHECK_STAT
.
id
,
CHECK_EXAM_STAT_1
.
id
,
END
.
id
,
"检查统计任务数据已确认完毕,任务完结"
),
CONFIRM_CHECK_EXAM_DETAIL_0
(
416
,
CONFIRM_CHECK_DETAIL
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_
EXAM_DETAIL
_0
.
id
,
"检查详情任务开始"
),
CONFIRM_CHECK_EXAM_DETAIL_0
(
416
,
CONFIRM_CHECK_DETAIL
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_
DETAIL_REGION
_0
.
id
,
"检查详情任务开始"
),
CONFIRM_CHECK_EXAM_DETAIL_1
(
417
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_
EXAM_DETAIL_0
.
id
,
CHECK_EXAM_DETAIL
_1
.
id
,
"A岗核查成功,等待专管员B操作"
),
CONFIRM_CHECK_EXAM_DETAIL_1
(
417
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_
DETAIL_REGION_0
.
id
,
CHECK_DETAIL_REGION
_1
.
id
,
"A岗核查成功,等待专管员B操作"
),
CONFIRM_CHECK_EXAM_DETAIL_2
(
418
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_
EXAM_DETAIL
_1
.
id
,
END
.
id
,
"专管员B核查成功,该地区的检查任务结束了"
),
CONFIRM_CHECK_EXAM_DETAIL_2
(
418
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_
DETAIL_REGION
_1
.
id
,
END
.
id
,
"专管员B核查成功,该地区的检查任务结束了"
),
CONFIRM_CHECK_EXAM_DETAIL_3
(
419
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_
EXAM_DETAIL_1
.
id
,
CHECK_EXAM_DETAIL
_0
.
id
,
"B岗审核失败,跳回A岗人员操作"
),
CONFIRM_CHECK_EXAM_DETAIL_3
(
419
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_
DETAIL_REGION_1
.
id
,
CHECK_DETAIL_REGION
_0
.
id
,
"B岗审核失败,跳回A岗人员操作"
),
CONFIRM_CHECK_EXAM_STAT_3
(
420
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_EXAM_STAT_0
.
id
,
END
.
id
,
"检查统计任务数据已确认完毕,任务完结"
),
CONFIRM_CHECK_SELF_ROLLBACK
(
421
,
CONFIRM_CHECK_DETAIL
.
id
,
END
.
id
,
CHECK_
EXAM_DETAIL
_0
.
id
,
"自查任务已退回至等待专管员A处理状态"
),
CONFIRM_CHECK_SELF_ROLLBACK
(
421
,
CONFIRM_CHECK_DETAIL
.
id
,
END
.
id
,
CHECK_
DETAIL_REGION
_0
.
id
,
"自查任务已退回至等待专管员A处理状态"
),
CONFIRM_CHECK_EXAM_ROLLBACK
(
422
,
CONFIRM_CHECK_DETAIL
.
id
,
END
.
id
,
CHECK_EXAM_STAT_1
.
id
,
"检查任务已退回至等待确认状态"
),
CONFIRM_CHECK_EXAM_CITY_DETAIL_0
(
423
,
CONFIRM_CHECK_DETAIL
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_DETAIL_CITY_0
.
id
,
"检查详情任务开始"
),
CONFIRM_CHECK_EXAM_CITY_DETAIL_1
(
424
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_CITY_0
.
id
,
CHECK_DETAIL_CITY_1
.
id
,
"专管员A操作成功,等待专管员B操作"
),
CONFIRM_CHECK_EXAM_CITY_DETAIL_REDO
(
425
,
CONFIRM_CHECK_DETAIL
.
id
,
END
.
id
,
CHECK_DETAIL_CITY_0
.
id
,
"检查详情任务开始重做"
),
CONFIRM_CHECK_EXAM_CITY_VERIFY_DONE
(
426
,
CONFIRM_CHECK_DETAIL
.
id
,
CONFIRM_STAT_0
.
id
,
END
.
id
,
"市统计数据确认完毕"
),
CONFIRM_CHECK_EXAM_CITY_DETAIL_DONE
(
427
,
CONFIRM_CHECK_DETAIL
.
id
,
CHECK_DETAIL_CITY_1
.
id
,
END
.
id
,
"专管员B处理完毕,任务结束"
),
CONFIRM_CHECK_EXAM_CITY_STAT_0
(
428
,
CONFIRM_CHECK_STAT
.
id
,
ORIGIN_STATUS
.
id
,
CHECK_STAT_1
.
id
,
"统计任务开始"
),
ALLOT_BACK_1
(
57
,
ALLOT_BACK
.
id
,
ORIGIN_STATUS
.
id
,
ALLOT_BACKING
.
id
,
"发起装备退回"
),
ALLOT_BACK_2
(
58
,
ALLOT_BACK
.
id
,
ALLOT_BACKING
.
id
,
END
.
id
,
"接收退回装备并上传相关单据"
),
...
...
dev-config/src/main/java/com/tykj/dev/config/base/FileName.java
浏览文件 @
9e96a44c
...
...
@@ -34,7 +34,12 @@ public enum FileName {
/**
* 丢失单
*/
LOSS
(
7
,
"丢失单"
);
LOSS
(
7
,
"丢失单"
),
/**
* 丢失单
*/
SelfCheck
(
8
,
"自查单"
);
public
Integer
id
;
...
...
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/common/CheckChart.java
0 → 100644
浏览文件 @
9e96a44c
package
com
.
tykj
.
dev
.
device
.
confirmcheck
.
common
;
import
com.tykj.dev.config.Log
;
import
com.tykj.dev.misc.base.StatusEnum
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.HashMap
;
import
java.util.Map
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
StatusEnum
.*;
/**
* CheckChart. 里面用于存放核查模块要用到的一些对照表Map
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2021/8/19 at 3:14 下午
*/
@Data
@Slf4j
public
class
CheckChart
{
/**
* key = 任务状态编号 , value = 核查情况 , 用于市区自核查页面
*/
public
static
Map
<
Integer
,
String
>
taskStatus2Situation
=
new
HashMap
<>();
static
{
taskStatus2Situation
.
put
(
CHECK_DETAIL_CITY_0
.
id
,
"无"
);
taskStatus2Situation
.
put
(
CHECK_DETAIL_CITY_1
.
id
,
"进行中"
);
taskStatus2Situation
.
put
(
CHECK_DETAIL_REGION_0
.
id
,
"无"
);
taskStatus2Situation
.
put
(
CHECK_DETAIL_REGION_1
.
id
,
"进行中"
);
taskStatus2Situation
.
put
(
CHECK_DETAIL_REGION_2
.
id
,
"等待市审核"
);
taskStatus2Situation
.
put
(
END
.
id
,
"完成"
);
log
.
info
(
"[核查模块] 初始化taskStatus2Situation 完毕 , size = {}"
,
CheckChart
.
taskStatus2Situation
.
size
());
}
}
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/controller/DeviceCheckController.java
浏览文件 @
9e96a44c
...
...
@@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableMap;
import
com.google.common.collect.Lists
;
import
com.tykj.dev.config.GlobalMap
;
import
com.tykj.dev.config.swagger.AutoDocument
;
import
com.tykj.dev.device.confirmcheck.common.CheckChart
;
import
com.tykj.dev.device.confirmcheck.common.CheckType
;
import
com.tykj.dev.device.confirmcheck.common.TaskPeriod
;
import
com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail
;
...
...
@@ -18,6 +19,7 @@ import com.tykj.dev.device.confirmcheck.utils.ObjTransUtil;
import
com.tykj.dev.device.file.entity.FileRet
;
import
com.tykj.dev.device.file.service.FilesUtil
;
import
com.tykj.dev.device.library.repository.DeviceLibraryDao
;
import
com.tykj.dev.device.library.service.DeviceLibraryCacheService
;
import
com.tykj.dev.device.library.subject.domin.DeviceLibrary
;
import
com.tykj.dev.device.selfcheck.controller.SelfCheckController
;
import
com.tykj.dev.device.task.repository.TaskDao
;
...
...
@@ -33,6 +35,7 @@ import com.tykj.dev.device.user.subject.entity.Units;
import
com.tykj.dev.device.user.subject.entity.User
;
import
com.tykj.dev.device.user.subject.entity.bto.AreaUnit
;
import
com.tykj.dev.device.user.subject.service.AuService
;
import
com.tykj.dev.device.user.subject.service.UserService
;
import
com.tykj.dev.device.user.util.AuthenticationUtils
;
import
com.tykj.dev.misc.base.ResultObj
;
import
com.tykj.dev.misc.base.StatusEnum
;
...
...
@@ -44,11 +47,11 @@ import io.swagger.annotations.ApiOperation;
import
io.swagger.annotations.ApiParam
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.*
;
import
java.time.LocalDate
;
...
...
@@ -57,7 +60,6 @@ import java.time.LocalTime;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.function.Predicate
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
BusinessEnum
.
CONFIRM_CHECK_DETAIL
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
BusinessEnum
.
CONFIRM_CHECK_STAT
;
...
...
@@ -71,7 +73,7 @@ import static java.util.stream.Collectors.*;
@RestController
@RequestMapping
(
value
=
"/check/confirm"
)
@AutoDocument
@Transactional
(
rollbackFor
=
Exception
.
class
)
//
@Transactional(rollbackFor = Exception.class)
@Slf4j
@Api
(
tags
=
"核查模块"
,
description
=
"核查模块"
,
position
=
1
)
public
class
DeviceCheckController
{
...
...
@@ -93,6 +95,8 @@ public class DeviceCheckController {
@Autowired
private
DeviceCheckDetailDao
detailRepo
;
@Autowired
private
DeviceLibraryCacheService
dcService
;
@Autowired
private
ObjTransUtil
transUtil
;
@Autowired
private
TaskDao
taskRepo
;
...
...
@@ -107,7 +111,11 @@ public class DeviceCheckController {
@Autowired
private
ConfirmCheckService
ccService
;
@Autowired
private
UserService
userService
;
@Autowired
private
MyWebSocket
myWebSocket
;
@Autowired
private
SelfCheckController
selfCheckController
;
@GetMapping
(
"/area/{fatherId}"
)
@ApiOperation
(
value
=
"查询指定区域下的所有区域信息"
)
...
...
@@ -121,10 +129,78 @@ public class DeviceCheckController {
@GetMapping
(
"/unit"
)
@ApiOperation
(
value
=
"查询默认的可以被核查单位的清单(省本直,省直属,市局)"
)
public
ResponseEntity
findDefaultUnits
()
{
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
unitsRepo
.
findAllByTypeNotInAndLevelIn
(
Lists
.
newArrayList
(
3
),
Lists
.
newArrayList
(
0
,
1
,
2
))));
}
/**
* @param id
* @return
*/
@GetMapping
(
"/handleUsers/{id}"
)
@ApiOperation
(
value
=
"查询该detail经手的相关人员"
)
public
ResponseEntity
getDetailHanderUsers
(
@PathVariable
Integer
id
)
{
DeviceCheckDetail
detail
=
detailRepo
.
findById
(
id
).
orElseThrow
(()
->
new
ApiException
(
"没有找到id = "
+
id
+
"的detail自查单!"
));
Map
<
String
,
String
>
handUsers
=
new
HashMap
<>();
Integer
startUserId
=
detail
.
getCreateUserId
();
Integer
userAId
=
detail
.
getUserAId
();
Integer
userBId
=
detail
.
getUserBId
();
Integer
userCId
=
detail
.
getUserCId
();
if
(
Objects
.
nonNull
(
startUserId
)
&&
startUserId
!=
0
)
{
handUsers
.
put
(
"startUserId"
,
userService
.
findByUser
(
startUserId
).
getName
());
}
else
{
handUsers
.
put
(
"startUserId"
,
"NoBody"
);
}
if
(
Objects
.
nonNull
(
userAId
)
&&
userAId
!=
0
)
{
handUsers
.
put
(
"userA"
,
userService
.
findByUser
(
userAId
).
getName
());
}
else
{
handUsers
.
put
(
"userA"
,
"NoBody"
);
}
if
(
Objects
.
nonNull
(
userBId
)
&&
userBId
!=
0
)
{
handUsers
.
put
(
"userBId"
,
userService
.
findByUser
(
userBId
).
getName
());
}
else
{
handUsers
.
put
(
"userBId"
,
"NoBody"
);
}
if
(
Objects
.
nonNull
(
userCId
)
&&
userCId
!=
0
)
{
handUsers
.
put
(
"userCId"
,
userService
.
findByUser
(
userCId
).
getName
());
}
else
{
handUsers
.
put
(
"userCId"
,
"NoBody"
);
}
return
ResponseEntity
.
ok
(
handUsers
);
}
@GetMapping
(
"/judge/{taskId}"
)
@ApiOperation
(
value
=
"根据taskId判断该task任务是由核查发起的还是由检查发起的"
)
public
ResponseEntity
judgeExamDetail
(
@PathVariable
Integer
taskId
)
{
Task
task
=
taskRepo
.
findById
(
taskId
).
orElseThrow
(()
->
new
ApiException
(
"没有找到该Task任务,你提供的taskId = "
+
taskId
));
Task
finalTaks
;
if
(
task
.
getParentTaskId
()
!=
null
&&
task
.
getParentTaskId
()
!=
0
)
{
Integer
pId
=
task
.
getParentTaskId
();
Task
parentTask
=
taskRepo
.
findById
(
pId
).
get
();
// 存在父任务,找到父任务,二次判断
if
(
parentTask
.
getParentTaskId
()
!=
null
&&
parentTask
.
getParentTaskId
()
!=
0
)
{
Integer
ppId
=
parentTask
.
getParentTaskId
();
Task
doubleParentTask
=
taskRepo
.
findById
(
ppId
).
get
();
finalTaks
=
doubleParentTask
;
}
else
{
// 不存在二级父任务,那么头节点就是父任务
finalTaks
=
parentTask
;
}
}
else
{
// 不存在父任务,那么头节点就是自己
finalTaks
=
task
;
}
return
ResponseEntity
.
ok
(
finalTaks
.
getCustomInfo
());
}
@ApiOperation
(
value
=
"根据id查询核查统计数据"
,
notes
=
"可以通过这个接口查询核查统计数据"
)
@GetMapping
(
"/stat/{id}"
)
public
CheckStatVo
findStatById
(
@PathVariable
Integer
id
)
{
...
...
@@ -135,7 +211,6 @@ public class DeviceCheckController {
return
statVoList
;
}
@ApiOperation
(
value
=
"根据关键字分页查询核查统计数据"
)
@PostMapping
(
"/stat"
)
public
Page
<
CheckStatTableVo
>
findStatByKeyword
(
...
...
@@ -144,6 +219,7 @@ public class DeviceCheckController {
return
ccService
.
findAllStatTable
(
checkBillSelectVo
);
}
@ApiOperation
(
value
=
"根据id查询核查详情数据"
,
notes
=
"可以通过这个接口查询核查详情数据"
)
@GetMapping
(
"/detail/{id}"
)
public
ResponseEntity
<
ResultObj
<
CheckDetailVo
>>
findDetail
(
@PathVariable
Integer
id
)
{
...
...
@@ -153,13 +229,27 @@ public class DeviceCheckController {
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
detailVoList
));
}
@ApiOperation
(
value
=
"根据id查询核查详情数据"
,
notes
=
"可以通过这个接口查询核查详情数据"
)
@GetMapping
(
"/detail/unit/{unitId}"
)
public
ResponseEntity
<
ResultObj
<
List
<
CheckDetailVo
>>>
findDetailsByUnitId
(
@PathVariable
Integer
unitId
)
{
Units
unit
=
unitsRepo
.
findById
(
unitId
).
get
();
Specification
<
DeviceCheckDetail
>
pred
=
Specifications
.<
DeviceCheckDetail
>
and
()
.
eq
(
"checkUnit"
,
unit
.
getName
())
.
build
();
List
<
CheckDetailVo
>
detailVoList
=
detailRepo
.
findAll
(
pred
).
stream
()
.
map
(
transUtil:
:
CheckDetailDo2Vo
)
.
collect
(
toList
());
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
detailVoList
));
}
@ApiOperation
(
value
=
"根据id 刷新 核查详情数据"
,
notes
=
"可以通过这个接口 刷新 核查详情数据"
)
@GetMapping
(
"/detail/refresh/{id}"
)
public
ResponseEntity
<
ResultObj
<
CheckDetailVo
>>
refreshDetail
(
@PathVariable
Integer
id
)
{
DeviceCheckDetail
detail
=
detailRepo
.
findById
(
id
).
get
();
DeviceCheckDetail
detail
=
detailRepo
.
findById
(
id
)
.
orElseThrow
(()
->
new
ApiException
(
"没有找到指定的detail数据,你提供的是 id = "
+
id
));
String
checkUnit
=
detail
.
getCheckUnit
();
//查出所有装备 分为4类 A 所在是本单位 B 所属是本单位 其中
List
<
DeviceLibrary
>
allDevices
=
d
eviceRepo
.
findAll
();
List
<
DeviceLibrary
>
allDevices
=
d
cService
.
getAllDeviceLibraryList
();
//在库 = A and B & not B 去除掉ls = 10 的装备 把ls = 11 的装备加入到非在库
Map
<
Boolean
,
List
<
DeviceLibrary
>>
locationMap
=
allDevices
.
stream
()
.
collect
(
partitioningBy
(
d
->
d
.
getLocationUnit
().
equals
(
checkUnit
)));
...
...
@@ -191,7 +281,6 @@ public class DeviceCheckController {
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
cdVo
));
}
/**
* 该接口负责处理以下跳转情况
* 1 - 统计跳转
...
...
@@ -222,16 +311,33 @@ public class DeviceCheckController {
List
<
LinkCheckDetail
>
lcdList
=
new
ArrayList
<>();
List
<
LinkExamDetail
>
ledList
=
new
ArrayList
<>();
// if else 结果 1.核查页面(市检查and省直属单位自查) 2.检查页面 (均为单位自查)
// check type = 0 核查页面 看见的是市检查与省直属自查
if
(
ctVo
.
getCheckType
()
==
0
)
{
linkVo
.
setType
(
1
);
// 根据tpye和billId找到父级节点 - 默认了最顶级的省核查节点应当为一个
Task
rootTask
=
taskRepo
.
findAllByBillIdAndBusinessType
(
billId
,
type
).
get
(
0
);
// 先检出所有类型为7或者8的Task集合 方便后续操作
Specification
<
Task
>
pred
=
Specifications
.<
Task
>
and
()
.
in
(
"businessType"
,
7
,
8
)
.
build
();
List
<
Task
>
cacheTask
=
taskRepo
.
findAll
(
pred
)
.
stream
()
.
filter
(
task
->
Objects
.
nonNull
(
task
.
getParentTaskId
()))
.
collect
(
toList
());
//key = parentId , value childList
Map
<
Integer
,
List
<
Task
>>
parentTaskMap
=
cacheTask
.
stream
()
.
collect
(
groupingBy
(
Task:
:
getParentTaskId
));
// 找到所有的子节点
List
<
Task
>
childTask
=
taskRepo
.
findAllByParentTaskId
(
rootTask
.
getId
());
List
<
Task
>
childTask
=
parentTaskMap
.
get
(
rootTask
.
getId
());
long
startTime
=
System
.
currentTimeMillis
();
long
finalTime
=
System
.
currentTimeMillis
();
for
(
Task
child
:
childTask
)
{
// 将子节点任务中的 统计数据确认任务 给过滤掉
if
(
child
.
getTitle
().
contains
(
"统计数据确认任务"
))
{
...
...
@@ -251,12 +357,17 @@ public class DeviceCheckController {
DeviceCheckStat
cdc
=
statRepo
.
findById
(
child
.
getBillId
()).
get
();
CheckStatVo
cdcVo
=
transUtil
.
checkStatDo2Vo
(
cdc
);
//todo 这里更改从detail中去查看并求和
//找到chilid的子child detail 并求和
List
<
Task
>
cctask
=
taskRepo
.
findAllByParentTaskId
(
child
.
getId
());
//找到chilid的子child detail 并求和 ccTask即为所有的自查任务集合
List
<
Task
>
cctask
=
parentTaskMap
.
get
(
child
.
getId
());
if
(
Objects
.
isNull
(
cctask
))
{
cctask
=
new
ArrayList
<>();
}
List
<
CheckAreaStatVo
>
totalList
=
new
ArrayList
<>();
for
(
Task
cct
:
cctask
)
{
long
start1
=
System
.
currentTimeMillis
();
Integer
detailId
=
cct
.
getBillId
();
DeviceCheckDetail
childDetail
=
detailRepo
.
findById
(
detailId
).
get
();
...
...
@@ -265,12 +376,14 @@ public class DeviceCheckController {
.
flatMap
(
checkAreaStatVos
->
checkAreaStatVos
.
stream
())
.
collect
(
toList
());
totalList
.
addAll
(
casList
);
long
end1
=
System
.
currentTimeMillis
();
log
.
info
(
"[性能分析] task id = {} cost {} ms"
,
cct
.
getId
(),
end1
-
start1
);
}
//
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitId
,
child
.
getOwnUnit
()).
getName
();
CheckAreaStatVo
cas
=
combineCaList
(
totalList
,
areaName
);
//
LinkCheckDetail
lcd
=
cas2lcd
(
totalList
,
child
,
cctask
,
areaName
);
LinkCheckDetail
lcd
=
rev2lcd
(
child
,
endTime
,
updateTime
,
cas
.
reverse
());
lcd
.
setCheckUnit
(
unitName
);
if
(
child
.
getTitle
().
contains
(
"统计确认待办任务"
))
{
lcd
.
setCheckSituation
(
"统计确认待办任务"
);
...
...
@@ -300,16 +413,13 @@ public class DeviceCheckController {
if
(
casList
.
isEmpty
())
{
cas
=
new
CheckAreaStatVo
(
"默认地区"
,
0
,
0
,
0
,
0
,
0
,
0
);
}
else
{
cas
=
combineCaList
(
casList
,
unitName
);
// cas = combineCaList(casList, unitName);
cas
=
casList
.
get
(
0
);
}
// CheckAreaStatVo cas = parseStatString2Vo(child.parse2Bto(), childDetail).stream()
// .map(CheckDeviceStatVo::getAreaStatList)
// .flatMap(checkAreaStatVos -> checkAreaStatVos.stream())
// .reduce(CheckAreaStatVo::combine)
// .orElse(new CheckAreaStatVo("默认地区", 0, 0, 0, 0, 0, 0));
// LinkExamDetail led = rev2led(child, endTime, updateTime, cas.reverse());
LinkExamDetail
led
=
cas2led
(
cas
,
child
,
endTime
,
updateTime
);
LinkExamDetail
led
=
rev2led
(
child
,
endTime
,
updateTime
,
cas
.
reverse
());
led
.
setCheckUnit
(
unitName
);
ledList
.
add
(
led
);
...
...
@@ -327,7 +437,7 @@ public class DeviceCheckController {
linkVo
.
setType
(
2
);
//看到的都是自查 根据tpye和billId找到父级节点 这里的根节点只能是检查节点
Task
rootTask
=
taskRepo
.
findAllByBillIdAndBusinessType
(
billId
,
type
).
stream
()
.
filter
(
task
->
task
.
get
Title
().
contains
(
"检查
"
))
.
filter
(
task
->
task
.
get
CustomInfo
().
contains
(
"exam
"
))
.
findFirst
()
.
orElseThrow
(()
->
new
ApiException
(
"[核查模块]没有找到对应billId的检查任务,您给的billId = "
+
billId
));
// 找到所有的子节点
...
...
@@ -356,34 +466,7 @@ public class DeviceCheckController {
int
i
=
0
;
for
(
Task
child
:
childTask
)
{
Integer
childBusType
=
child
.
getBusinessType
();
Integer
childBusId
=
child
.
getBillId
();
DeviceCheckDetail
childDetail
=
detailRepo
.
findById
(
childBusId
).
get
();
String
unitName
=
childDetail
.
getCheckUnit
();
List
<
CheckAreaStatVo
>
casList
=
parseStatString2Vo
(
child
.
parse2Bto
(),
childDetail
).
stream
()
.
map
(
CheckDeviceStatVo:
:
getAreaStatList
)
.
flatMap
(
checkAreaStatVos
->
checkAreaStatVos
.
stream
())
.
collect
(
toList
());
//自查的areaName要从detail里找
String
areaName
=
childDetail
.
getCheckUnit
();
CheckAreaStatVo
cas
;
if
(
casList
.
isEmpty
())
{
cas
=
new
CheckAreaStatVo
(
"默认地区"
,
0
,
0
,
0
,
0
,
0
,
0
);
}
else
{
cas
=
combineCaList
(
casList
,
areaName
);
}
//
// CheckAreaStatVo cas = parseStatString2Vo(child.parse2Bto(), childDetail).stream()
// .map(CheckDeviceStatVo::getAreaStatList)
// .flatMap(checkAreaStatVos -> checkAreaStatVos.stream())
// .reduce(CheckAreaStatVo::combine)
// .get();
LinkExamDetail
led
=
rev2led
(
child
,
endTime
,
updateTime
,
cas
.
reverse
());
led
.
setCheckUnit
(
unitName
);
LinkExamDetail
led
=
getLed
(
endTime
,
updateTime
,
child
);
//设置名称
led
.
setExamName
(
groupNames
.
get
(
i
));
...
...
@@ -409,132 +492,251 @@ public class DeviceCheckController {
}
//进行了更新 使用修改时间去做是否逾期判断
private
LinkCheckDetail
rev2lcd
(
Task
task
,
LocalDateTime
endTime
,
LocalDateTime
updateTime
,
RevAreaStat
revAreaStat
)
{
@NotNull
private
LinkExamDetail
getLed
(
LocalDateTime
endTime
,
LocalDateTime
updateTime
,
Task
child
)
{
Integer
childBusType
=
child
.
getBusinessType
();
Integer
childBusId
=
child
.
getBillId
();
DeviceCheckDetail
childDetail
=
detailRepo
.
findById
(
childBusId
).
get
();
String
unitName
=
childDetail
.
getCheckUnit
();
List
<
CheckAreaStatVo
>
casList
=
parseStatString2Vo
(
child
.
parse2Bto
(),
childDetail
).
stream
()
.
map
(
CheckDeviceStatVo:
:
getAreaStatList
)
.
flatMap
(
checkAreaStatVos
->
checkAreaStatVos
.
stream
())
.
collect
(
toList
());
//自查的areaName要从detail里找
String
areaName
=
childDetail
.
getCheckUnit
();
CheckAreaStatVo
cas
;
if
(
casList
.
isEmpty
())
{
cas
=
new
CheckAreaStatVo
(
"默认地区"
,
0
,
0
,
0
,
0
,
0
,
0
);
}
else
{
cas
=
casList
.
get
(
0
);
}
LinkExamDetail
led
=
cas2led
(
cas
,
child
,
endTime
,
updateTime
);
led
.
setCheckUnit
(
unitName
);
return
led
;
}
/**
* lcd 里的列表都为检查,因此是集合对
*
* @return
*/
private
LinkCheckDetail
cas2lcd
(
List
<
CheckAreaStatVo
>
casList
,
Task
task
,
List
<
Task
>
detailTasks
,
String
finalCityName
)
{
LinkCheckDetail
lcd
=
new
LinkCheckDetail
();
lcd
.
setId
(
task
.
getBillId
());
String
finalSituation
=
""
;
//核查情况 无误/有误/逾期
if
(
revAreaStat
.
getComSituation
()
==
-
1
)
{
lcd
.
setCheckSituation
(
"重新检查"
);
}
else
if
(
revAreaStat
.
getComSituation
()
==
1
)
{
lcd
.
setCheckSituation
(
"有误"
);
}
else
if
(
revAreaStat
.
getComSituation
()
==
0
)
{
if
(
revAreaStat
.
getComProgress
()
==
0
)
{
lcd
.
setCheckSituation
(
"无"
);
}
else
{
lcd
.
setCheckSituation
(
"无误"
);
}
// 核查结果的判断具体细节可以查看 docs/confirmCheck.md文档
List
<
String
>
situationList
=
detailTasks
.
stream
()
.
map
(
this
::
getDetailSituation
)
.
collect
(
toList
());
// 如果 size = 0 或全都是 无 ,则无
if
(
situationList
.
size
()
==
0
)
{
finalSituation
=
"无"
;
}
else
{
lcd
.
setCheckSituation
(
"异常"
);
boolean
allIsNothing
=
situationList
.
stream
().
allMatch
(
s
->
s
.
equals
(
"无"
));
if
(
allIsNothing
)
{
finalSituation
=
"无"
;
}
//如果 有任意一个区状态是待审核
boolean
anyIsAudit
=
situationList
.
stream
().
anyMatch
(
s
->
s
.
equals
(
"等待市审核"
));
if
(
anyIsAudit
)
{
finalSituation
=
"等待市审核"
;
}
//如果 全都是 完成,那么是完成
boolean
allIsFinish
=
situationList
.
stream
().
allMatch
(
s
->
s
.
equals
(
"完成"
));
if
(
allIsFinish
)
{
finalSituation
=
"完成"
;
}
// 其他情况,则是进行中
if
(
StringUtils
.
isEmpty
(
finalSituation
))
{
finalSituation
=
"进行中"
;
}
}
//核查结果
// if (endTime.isBefore(LocalDateTime.now())) {
// if (revAreaStat.getComProgress() ==1){
// lcd.setCheckResult("逾期进行中");
// }else if (task.getBillStatus() != 9999 || revAreaStat.getComProgress() != 2) {
// lcd.setCheckResult("逾期");
// } else {
// lcd.setCheckResult("逾期完成");
// }
// } else {
if
(
task
.
getBillStatus
()
==
9999
)
{
// if (endTime.isBefore(LocalDateTime.now())) {
// lcd.setCheckResult("逾期完成");
// }
if
(
endTime
.
isBefore
(
updateTime
))
{
lcd
.
setCheckResult
(
"逾期完成"
);
}
else
{
lcd
.
setCheckResult
(
"完成"
);
lcd
.
setCheckSituation
(
finalSituation
);
// 核查情况 所有子任务都是初始状态 = 无 10=未
String
checkReuslt
=
""
;
// Task 先将历史数据给过滤掉 - 方法是按照billId分组排序,跳出主键id最大的即最新的一条
detailTasks
=
detailTasks
.
stream
()
.
collect
(
groupingBy
(
Task:
:
getTitle
,
collectingAndThen
(
maxBy
(
Comparator
.
comparing
(
Task:
:
getId
)),
Optional:
:
get
)))
.
values
().
stream
()
.
collect
(
toList
());
// 不能存在有9999的任务
boolean
notExistsEnd
=
detailTasks
.
stream
()
.
allMatch
(
t
->
!
t
.
getBillStatus
().
equals
(
END
.
id
));
if
(
notExistsEnd
)
{
checkReuslt
=
"无"
;
}
else
{
// 任意一个是10则是待审核
boolean
waitAudit
=
casList
.
stream
()
.
anyMatch
(
cas
->
cas
.
getComSituation
()
==
10
);
boolean
notPassed
=
casList
.
stream
()
.
anyMatch
(
cas
->
cas
.
getComSituation
()
==
13
);
// 需要每一个城市都有无误(即12) 才算无误
Map
<
String
,
List
<
CheckAreaStatVo
>>
map
=
casList
.
stream
()
.
collect
(
groupingBy
(
CheckAreaStatVo:
:
getAreaName
));
long
okCount
=
0
;
for
(
List
<
CheckAreaStatVo
>
vos
:
map
.
values
())
{
boolean
containsOk
=
vos
.
stream
()
.
anyMatch
(
checkAreaStatVo
->
checkAreaStatVo
.
getComSituation
()
==
12
);
if
(
containsOk
)
{
okCount
++;
}
}
}
else
if
(
revAreaStat
.
getComProgress
()
==
3
)
{
lcd
.
setCheckResult
(
"已退回"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
0
)
{
lcd
.
setCheckResult
(
"未开始"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
1
)
{
lcd
.
setCheckResult
(
"进行中"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
2
&&
task
.
getBillStatus
()
%
10
==
0
)
{
lcd
.
setCheckResult
(
"进行中"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
2
&&
task
.
getBillStatus
()
%
10
==
1
)
{
lcd
.
setCheckResult
(
"进行中"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
2
)
{
// if (endTime.isBefore(LocalDateTime.now())) {
// lcd.setCheckResult("逾期完成");
// }
if
(
endTime
.
isBefore
(
updateTime
))
{
lcd
.
setCheckResult
(
"逾期完成"
);
boolean
allOk
=
okCount
>=
map
.
size
();
if
(
waitAudit
)
{
checkReuslt
=
"等待省审核"
;
}
else
if
(
allOk
)
{
checkReuslt
=
"无误"
;
}
else
if
(
notPassed
)
{
checkReuslt
=
"未通过"
;
}
else
{
lcd
.
setCheckResult
(
"完成"
)
;
checkReuslt
=
"进行中"
;
}
}
lcd
.
setCheckResult
(
checkReuslt
);
//核查单位名
lcd
.
setCheckUnit
(
revAreaStat
.
getAreaName
()
+
"局"
);
//备注判断 新增缺失
lcd
.
setRemark
(
revAreaStat
.
getActualCount
()
-
revAreaStat
.
getSupposeCount
());
lcd
.
setCheckUnit
(
finalCityName
+
"局"
);
return
lcd
;
}
//修改
private
LinkExamDetail
rev2led
(
Task
task
,
LocalDateTime
endTime
,
LocalDateTime
updateTime
,
RevAreaStat
revAreaStat
)
{
LinkExamDetail
led
=
new
LinkExamDetail
();
led
.
setId
(
task
.
getBillId
());
//核查情况 重新检查/无误/有误/逾期
if
(
revAreaStat
.
getComSituation
()
==
-
1
)
{
led
.
setCheckSituation
(
"重新检查"
);
}
else
if
(
revAreaStat
.
getComSituation
()
==
1
)
{
led
.
setCheckSituation
(
"有误"
);
}
else
if
(
revAreaStat
.
getComSituation
()
==
0
)
{
if
(
revAreaStat
.
getComProgress
()
==
0
)
{
led
.
setCheckSituation
(
"无"
);
}
else
{
led
.
setCheckSituation
(
"无误"
);
@GetMapping
(
"/test/test"
)
private
String
justForTest
()
{
CheckChart
.
taskStatus2Situation
.
forEach
((
k
,
v
)
->
System
.
out
.
println
(
v
));
return
"test"
;
}
/**
* 获得自查的核查情况
*/
private
String
getDetailSituation
(
Task
task
)
{
Integer
taskStatus
=
task
.
getBillStatus
();
String
situation
=
CheckChart
.
taskStatus2Situation
.
get
(
taskStatus
);
// 无的情况要分两种 一种是初始的无 一种是重做导致的无 通过判断task的remark
String
remark
=
task
.
getRemark
();
if
(
situation
.
equals
(
"无"
))
{
if
(
Objects
.
nonNull
(
remark
)
&&
remark
.
contains
(
"ROLLBACK"
))
{
situation
=
"未通过"
;
}
}
else
{
led
.
setCheckSituation
(
"异常"
);
}
//核查结果
if
(
task
.
getBillStatus
()
==
9999
)
{
// if (endTime.isBefore(LocalDateTime.now())) {
// led.setCheckResult("逾期完成");
// }
if
(
endTime
.
isBefore
(
updateTime
))
{
led
.
setCheckResult
(
"逾期完成"
);
return
situation
;
}
/**
* led 里的列表都为自查,因此都是单个对象
*
* @return
*/
private
LinkExamDetail
cas2led
(
CheckAreaStatVo
cas
,
Task
task
,
LocalDateTime
endTime
,
LocalDateTime
updateTime
)
{
LinkExamDetail
led
=
new
LinkExamDetail
();
led
.
setId
(
task
.
getBillId
());
int
comProgress
=
cas
.
getComProgress
();
int
comSituation
=
cas
.
getComSituation
();
// 核查情况依照 新的与task status来对应 详情可以查看docs/confirmcheck.md里的对应表 对照表
String
situation
=
getDetailSituation
(
task
);
// 逾期的处理,只在完成的那一步才判断
if
(
situation
.
equals
(
"完成"
)
&&
updateTime
.
isAfter
(
endTime
))
{
situation
=
"逾期完成"
;
}
led
.
setCheckSituation
(
situation
);
String
checkResult
=
""
;
String
remark
=
task
.
getRemark
();
// 核查结果 - 如果省的自查任务,核查情况是完成了之后,核查结果就是无误
String
unitName
=
detailRepo
.
findById
(
task
.
getBillId
()).
get
().
getCheckUnit
();
Integer
areaType
=
auService
.
findOne
(
AuExample
.
UnitName
,
unitName
).
getType
();
if
(!
situation
.
contains
(
"完成"
))
{
checkResult
=
"无"
;
}
else
if
(
areaType
==
1
)
{
checkResult
=
"无误"
;
}
else
if
(
comSituation
==
10
)
{
// 再判断一下 是2级结构(检查统计)还是3级结构(核查统计)
Integer
rootId
=
taskService
.
findByTaskId
(
task
.
getParentTaskId
()).
getParentTaskId
();
boolean
isTwoLevel
=
rootId
==
null
||
rootId
==
0
;
// 2级结构 - 检查统计 发起人单位是省,结果为等待省审核,发起人是市则是无
if
(
isTwoLevel
)
{
Integer
startUnitId
=
userService
.
findById
(
task
.
getCreateUserId
()).
getUnitsId
();
if
(
startUnitId
!=
1
)
{
checkResult
=
"无"
;
}
else
{
//根据detail userC为省且任务状态是完结状态时 变为无误 否则是等待省审核
Integer
detailId
=
task
.
getBillId
();
Integer
userCId
=
detailRepo
.
findById
(
detailId
).
get
().
getUserCId
();
if
(
task
.
getBillStatus
().
equals
(
END
.
id
)
&&
Objects
.
nonNull
(
userCId
)
&&
userIsProv
(
userCId
)){
checkResult
=
"无误"
;
}
else
{
checkResult
=
"等待省审核"
;
}
}
}
else
{
led
.
setCheckResult
(
"完成"
);
checkResult
=
"等待省审核"
;
}
}
else
if
(
comSituation
==
12
)
{
checkResult
=
"无误"
;
}
else
if
(
comSituation
==
13
)
{
int
redoTime
=
1
;
if
(
Objects
.
nonNull
(
remark
)
&&
remark
.
contains
(
"ROLLBACK"
))
{
redoTime
=
Integer
.
valueOf
(
remark
.
split
(
"-"
)[
1
]);
}
}
else
if
(
revAreaStat
.
getComProgress
()
==
3
)
{
led
.
setCheckResult
(
"已退回"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
0
)
{
led
.
setCheckResult
(
"未开始"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
1
)
{
led
.
setCheckResult
(
"进行中"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
2
&&
task
.
getBillStatus
()
%
10
==
0
)
{
led
.
setCheckResult
(
"进行中"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
2
&&
task
.
getBillStatus
()
%
10
==
1
)
{
led
.
setCheckResult
(
"进行中"
);
}
else
if
(
revAreaStat
.
getComProgress
()
==
2
)
{
if
(
endTime
.
isBefore
(
updateTime
))
{
led
.
setCheckResult
(
"逾期完成"
);
checkResult
=
redoTime
+
"次未通过"
;
}
else
if
(
comSituation
==
0
)
{
if
(
task
.
getBillStatus
().
equals
(
END
.
id
))
{
int
redoTime
=
1
;
if
(
Objects
.
nonNull
(
remark
)
&&
remark
.
contains
(
"ROLLBACK"
))
{
redoTime
=
Integer
.
valueOf
(
remark
.
split
(
"-"
)[
1
]);
}
checkResult
=
redoTime
+
"次未通过"
;
}
else
{
led
.
setCheckResult
(
"完成"
)
;
checkResult
=
"等待省审核"
;
}
}
else
{
checkResult
=
"状态异常"
;
}
led
.
setCheckResult
(
checkResult
);
//核查单位名
led
.
setCheckUnit
(
revAreaStat
.
getAreaName
()
+
"局"
);
//备注判断 新增缺失
led
.
setRemark
(
revAreaStat
.
getActualCount
()
-
revAreaStat
.
getSupposeCount
());
led
.
setCheckUnit
(
cas
.
getAreaName
()
+
"局"
);
return
led
;
}
/**
* 判断用户是否是省级用户
*
* @return
*/
private
boolean
userIsProv
(
Integer
userId
)
{
Integer
unitsId
=
userService
.
findById
(
userId
).
getUnitsId
();
Integer
level
=
unitsRepo
.
findById
(
unitsId
).
get
().
getLevel
();
return
level
==
1
;
}
/**
* @param periodId 1-月度 2-季度 3-年度
* @return
...
...
@@ -587,7 +789,7 @@ public class DeviceCheckController {
Integer
provId
=
taskService
.
get
(
examJobId
).
getParentTaskId
();
// 检查的job id 找到 father 进而找到 father的billid 进而找到title Id
Integer
statId
=
taskService
.
get
(
provId
).
getBillId
();
DeviceCheckStat
deviceCheckStat
=
statRepo
.
getOne
(
statId
);
DeviceCheckStat
deviceCheckStat
=
statRepo
.
findById
(
statId
).
get
(
);
String
title
=
deviceCheckStat
.
getTitle
();
String
remark
=
deviceCheckStat
.
getRemark
();
return
ResponseEntity
.
ok
(
new
CheckTitleAndTimeVo
(
title
,
deviceCheckStat
.
getEndTime
(),
remark
));
...
...
@@ -600,9 +802,10 @@ public class DeviceCheckController {
return
new
ResultObj
<>(
resultIds
,
"自动核查任务发起成功"
);
}
@ApiOperation
(
value
=
"根据地区ID获取下级的单位"
,
notes
=
"根据地区ID获取下级的单位"
)
@GetMapping
(
"/under/{areaId}"
)
public
ResponseEntity
getUnitsUnderAreaId
(
@PathVariable
Integer
areaId
)
{
public
ResponseEntity
getUnitsUnderAreaId
(
@PathVariable
Integer
areaId
,
@RequestParam
(
defaultValue
=
"true"
)
boolean
filter
)
{
//1.获取child AreaId List
List
<
Integer
>
areaIds
=
areaRepo
.
findAllByFatherId
(
areaId
).
stream
()
.
map
(
Area:
:
getId
)
...
...
@@ -611,14 +814,20 @@ public class DeviceCheckController {
//2. 根据childId 获得对应的unit
List
<
Units
>
unitsList
=
unitsRepo
.
findAllByAreaIdIn
(
areaIds
);
return
ResponseEntity
.
ok
(
unitsList
);
// 根据filter 决定是否将没有数据的装备给过滤掉
if
(
filter
)
{
unitsList
=
unitsList
.
stream
()
.
filter
(
unit
->
deviceRepo
.
findAllByOwnUnit
(
unit
.
getName
()).
size
()
!=
0
)
.
collect
(
toList
());
}
return
ResponseEntity
.
ok
(
unitsList
);
}
@ApiOperation
(
value
=
"检查地区是否
发起核查"
,
notes
=
"检查地区是否
发起核查"
)
@ApiOperation
(
value
=
"检查地区是否
可以发起核查"
,
notes
=
"检查地区是否可以
发起核查"
)
@PostMapping
(
"/checkPossible"
)
public
ResponseEntity
checkPossible
(
@RequestBody
UnitIds
u
uid
)
{
List
<
String
>
unitNames
=
u
uid
.
getIds
().
stream
()
public
ResponseEntity
checkPossible
(
@RequestBody
UnitIds
u
nitIds
)
{
List
<
String
>
unitNames
=
u
nitIds
.
getIds
().
stream
()
.
map
(
id
->
auService
.
findOne
(
AuExample
.
UnitId
,
id
))
.
map
(
AreaUnit:
:
getUnitName
)
.
collect
(
toList
());
...
...
@@ -640,6 +849,11 @@ public class DeviceCheckController {
return
ResponseEntity
.
ok
(
ImmutableMap
.
of
(
"empty"
,
findEmpty
,
"msg"
,
alertString
));
}
private
String
getUnitDateString
(
Units
units
,
String
title
)
{
return
"["
+
units
.
getUnitDesc
()
+
"]"
+
title
;
}
@ApiOperation
(
value
=
"发起核查"
,
notes
=
"对指定单位发起核查任务"
)
@PostMapping
(
"/startCheck"
)
public
ResponseEntity
startCheck
(
@RequestBody
CheckCheckVo
ccVO
)
{
...
...
@@ -662,7 +876,7 @@ public class DeviceCheckController {
.
collect
(
toList
());
// 构建省的统计任务
TaskBto
provStatTask
=
new
Task
(
CHECK_STAT_1
.
id
,
"省"
+
CONFIRM_CHECK_STAT
.
name
,
0
,
".0."
,
CONFIRM_CHECK_STAT
.
id
,
statId
,
startUnitId
)
TaskBto
provStatTask
=
new
Task
(
CHECK_STAT_1
.
id
,
getUnitDateString
(
startUnit
,
ccVO
.
getTitle
())
,
0
,
".0."
,
CONFIRM_CHECK_STAT
.
id
,
statId
,
startUnitId
)
.
parse2Bto
();
provStatTask
.
getInvolveUserIdList
().
add
(
authenticationUtils
.
getAuthentication
().
getCurrentUserInfo
().
getUserId
());
provStatTask
.
getInvolveUserIdList
().
add
(-
1
);
...
...
@@ -687,7 +901,7 @@ public class DeviceCheckController {
log
.
info
(
"[核查模块] {} 检查统计账单构建完毕,id 为 {}"
,
unit
.
getName
(),
cityStatId
);
// 构建市的统计任务
TaskBto
cityStatTask
=
new
TaskBto
(
CHECK_EXAM_STAT_0
.
id
,
unit
.
getName
()
+
"检查统计任务"
,
provStatTask
.
getId
(),
addNode
(
provStatTask
.
getNodeIdDetail
(),
provStatTask
.
getId
()),
CONFIRM_CHECK_STAT
.
id
,
cityStatId
,
unit
.
getUnitId
(),
0
);
TaskBto
cityStatTask
=
new
TaskBto
(
CHECK_EXAM_STAT_0
.
id
,
getUnitDateString
(
unit
,
ccVO
.
getTitle
())
,
provStatTask
.
getId
(),
addNode
(
provStatTask
.
getNodeIdDetail
(),
provStatTask
.
getId
()),
CONFIRM_CHECK_STAT
.
id
,
cityStatId
,
unit
.
getUnitId
(),
0
);
cityStatTask
.
getInvolveUserIdList
().
add
(
0
);
cityStatTask
.
setCurrentPoint
(
1
);
cityStatTask
.
setCustomInfo
(
"exam"
);
...
...
@@ -703,13 +917,13 @@ public class DeviceCheckController {
.
collect
(
toList
());
// 获取所有在库装备 lifeStatus ==2 or 14
Map
<
String
,
List
<
DeviceLibrary
>>
devInLib
=
d
eviceRepo
.
findAll
().
stream
()
Map
<
String
,
List
<
DeviceLibrary
>>
devInLib
=
d
cService
.
getAllDeviceLibraryList
().
stream
()
// .filter(device -> device.getOwnUnit().equals(device.getLocationUnit()))
.
filter
(
d
->
d
.
getLifeStatus
()
==
2
||
d
.
getLifeStatus
()
==
14
)
.
collect
(
groupingBy
(
DeviceLibrary:
:
getOwnUnit
));
// 获取所有非在库装备 ls != 2 and != 14
Map
<
String
,
List
<
DeviceLibrary
>>
devNotInLib
=
d
eviceRepo
.
findAll
().
stream
()
Map
<
String
,
List
<
DeviceLibrary
>>
devNotInLib
=
d
cService
.
getAllDeviceLibraryList
().
stream
()
// .filter(device -> !device.getOwnUnit().equals(device.getLocationUnit()))
.
filter
(
d
->
d
.
getLifeStatus
()
!=
2
&&
d
.
getLifeStatus
()
!=
14
)
.
collect
(
groupingBy
(
DeviceLibrary:
:
getOwnUnit
));
...
...
@@ -720,8 +934,26 @@ public class DeviceCheckController {
for
(
Units
unit
:
selfCheckUnits
)
{
//核查组成员名称用当前登录用户
String
names
=
loginUser
.
getName
();
// 如果是市level=2 的话,father Id为市的检查id
Integer
fatherId
=
0
;
Integer
initStatusId
=
0
;
// level = 1 或者2 市省级 否则 区级 ,市省级的自查初始状态160,区级的自查初始状态140
if
(
unit
.
getLevel
()
==
1
||
unit
.
getLevel
()
==
2
)
{
fatherId
=
cityExamIdMap
.
get
(
unit
.
getUnitId
());
initStatusId
=
CHECK_DETAIL_CITY_0
.
id
;
if
(
fatherId
==
null
)
{
fatherId
=
provStatTask
.
getId
();
}
}
else
{
fatherId
=
provStatTask
.
getId
();
initStatusId
=
CHECK_DETAIL_REGION_0
.
id
;
}
// 3-1 构建被查单位的 自查账单
DeviceCheckDetail
unitDetailDoc
=
DeviceCheckDetail
.
EmptyWithChecker
(
names
+
"|"
+
"默认备注"
,
ccVO
.
getRemark
(),
0
,
0
,
0
,
0
,
unit
.
getName
(),
devInLib
.
getOrDefault
(
unit
.
getName
(),
new
ArrayList
<>()),
devNotInLib
.
getOrDefault
(
unit
.
getName
(),
new
ArrayList
<>()));
unitDetailDoc
.
setVar2
(
String
.
valueOf
(
initStatusId
));
DeviceCheckDetail
detail
=
detailRepo
.
save
(
unitDetailDoc
);
// 将id放入统计中去 model -> areaName -> detailId
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitId
,
unit
.
getUnitId
()).
getName
();
...
...
@@ -735,13 +967,6 @@ public class DeviceCheckController {
}
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态) 这里的父级任务应该是省统计
// 如果是市level=2 的话,father Id为市的检查id
Integer
fatherId
=
0
;
if
(
unit
.
getLevel
()
==
2
)
{
fatherId
=
cityExamIdMap
.
get
(
unit
.
getUnitId
());
}
else
{
fatherId
=
provStatTask
.
getId
();
}
//处理ownUnit的代码 - 用于处理没有账号的单位的可见性
Integer
ownUnitId
=
0
;
...
...
@@ -751,7 +976,7 @@ public class DeviceCheckController {
ownUnitId
=
unit
.
getUnitId
();
}
TaskBto
checkedTask
=
new
TaskBto
(
CHECK_EXAM_DETAIL_0
.
id
,
unit
.
getName
()
+
"自核查任务"
,
fatherId
,
addNode
(
provStatTask
.
getNodeIdDetail
(),
provStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
detail
.
getId
(),
ownUnitId
,
0
);
TaskBto
checkedTask
=
new
TaskBto
(
initStatusId
,
getUnitDateString
(
unit
,
ccVO
.
getTitle
())
,
fatherId
,
addNode
(
provStatTask
.
getNodeIdDetail
(),
provStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
detail
.
getId
(),
ownUnitId
,
0
);
checkedTask
.
setCustomInfo
(
"manual"
);
taskService
.
start
(
checkedTask
);
}
...
...
@@ -786,12 +1011,15 @@ public class DeviceCheckController {
}
List
<
String
>
tmpString
=
new
ArrayList
<>();
// 拼接检查组和检查组成员
for
(
CheckExamDetailVo
vo
:
examDetailVos
)
{
tmpString
.
add
(
vo
.
getGroupName
()
+
","
+
vo
.
getUserNames
().
stream
().
collect
(
joining
(
","
)));
for
(
Integer
u
:
vo
.
getUnitIds
())
{
tmpString
.
add
(
vo
.
getGroupName
()
+
","
+
vo
.
getUserNames
().
stream
().
collect
(
joining
(
","
)));
}
}
String
groupUserString
=
tmpString
.
stream
().
collect
(
joining
(
"|"
));
List
<
Integer
>
unitIds
=
examDetailVos
.
stream
().
map
(
CheckExamDetailVo:
:
getUnitId
).
collect
(
toList
());
List
<
Integer
>
unitIds
=
examDetailVos
.
stream
().
flatMap
(
cv
->
cv
.
getUnitIds
().
stream
()
).
collect
(
toList
());
List
<
Units
>
checkedUnits
=
unitsRepo
.
findAllById
(
unitIds
);
List
<
String
>
checkedUnitNames
=
checkedUnits
.
stream
().
map
(
Units:
:
getName
).
collect
(
toList
());
...
...
@@ -822,9 +1050,9 @@ public class DeviceCheckController {
Integer
currentUserId
=
authenticationUtils
.
getAuthentication
().
getCurrentUserInfo
().
getUserId
();
TaskBto
cityStatTask
;
if
(
ceVo
.
getExamStatId
()
==
0
)
{
cityStatTask
=
new
Task
(
CHECK_EXAM_STAT_1
.
id
,
CHECK_EXAM_STAT_0
.
name
,
0
,
".0."
,
CONFIRM_CHECK_STAT
.
id
,
statId
,
startUnitId
)
cityStatTask
=
new
Task
(
CHECK_EXAM_STAT_1
.
id
,
getUnitDateString
(
startUnit
,
ceVo
.
getTitle
())
,
0
,
".0."
,
CONFIRM_CHECK_STAT
.
id
,
statId
,
startUnitId
)
.
parse2Bto
();
cityStatTask
.
setRemark
(
String
.
valueOf
(
CHECK_EXAM_STAT_1
.
id
));
//
cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id));
cityStatTask
.
setCustomInfo
(
"exam"
);
cityStatTask
.
getInvolveUserIdList
().
add
(
currentUserId
);
// 检查变为待办
...
...
@@ -836,7 +1064,7 @@ public class DeviceCheckController {
cityStatTask
=
taskRepo
.
findByBillIdAndBusinessType
(
ceVo
.
getExamStatId
(),
CONFIRM_CHECK_STAT
.
id
).
get
().
parse2Bto
();
//检查变为待办
cityStatTask
.
getInvolveUserIdList
().
add
(
0
);
cityStatTask
.
setRemark
(
String
.
valueOf
(
CHECK_EXAM_STAT_1
.
id
));
//
cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id));
cityStatTask
.
setCustomInfo
(
"exam"
);
cityStatTask
.
setCurrentPoint
(
cityStatTask
.
getCurrentPoint
()
+
1
);
cityStatTask
.
setCreateUserId
(
currentUserId
);
...
...
@@ -846,44 +1074,69 @@ public class DeviceCheckController {
// 3 构建被查单位的 自查账单 与 自查任务
// 获取所有在库装备 ls == 2 or ls == 14
Map
<
String
,
List
<
DeviceLibrary
>>
devInLib
=
d
eviceRepo
.
findAll
().
stream
()
Map
<
String
,
List
<
DeviceLibrary
>>
devInLib
=
d
cService
.
getAllDeviceLibraryList
().
stream
()
.
filter
(
d
->
d
.
getLifeStatus
()
==
2
||
d
.
getLifeStatus
()
==
14
)
// .filter(device -> device.getOwnUnit().equals(device.getLocationUnit()))
.
collect
(
groupingBy
(
DeviceLibrary:
:
getOwnUnit
));
// 非在库装备 ls !=2 and ls !=14
Map
<
String
,
List
<
DeviceLibrary
>>
devNotInLib
=
d
eviceRepo
.
findAll
().
stream
()
Map
<
String
,
List
<
DeviceLibrary
>>
devNotInLib
=
d
cService
.
getAllDeviceLibraryList
().
stream
()
.
filter
(
d
->
d
.
getLifeStatus
()
!=
2
&&
d
.
getLifeStatus
()
!=
14
)
// .filter(device -> !device.getOwnUnit().equals(device.getLocationUnit()))
.
collect
(
groupingBy
(
DeviceLibrary:
:
getOwnUnit
));
// 3. 构建被核查单位的详情账单与Task
// 对每个需要核查的单位构建其detail账单与task
boolean
isProvUser
=
authenticationUtils
.
getAuthentication
()
.
getCurrentUserInfo
().
getUnitsId
()
==
1
;
for
(
CheckExamDetailVo
ed
:
examDetailVos
)
{
Units
unit
=
unitsRepo
.
findById
(
ed
.
getUnitId
()).
get
();
String
names
=
ed
.
getUserNames
().
stream
().
collect
(
joining
(
","
));
// 3-1 构建被查单位的 自查账单
DeviceCheckDetail
unitDetailDoc
=
DeviceCheckDetail
.
EmptyWithChecker
(
names
+
"|"
+
ed
.
getRemark
(),
ceVo
.
getTitle
()
+
"%^&"
+
ed
.
getRemark
(),
0
,
0
,
0
,
0
,
unit
.
getName
(),
devInLib
.
getOrDefault
(
unit
.
getName
(),
new
ArrayList
<>()),
devNotInLib
.
getOrDefault
(
unit
.
getName
(),
new
ArrayList
<>()));
DeviceCheckDetail
detail
=
detailRepo
.
save
(
unitDetailDoc
);
detailIds
.
add
(
detail
.
getId
());
// 将id放入统计中去 model -> areaName -> detailId
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitId
,
unit
.
getUnitId
()).
getName
();
for
(
CheckDeviceStatVo
statVo
:
deviceStatVos
)
{
for
(
CheckAreaStatVo
asv
:
statVo
.
getAreaStatList
())
{
if
(
asv
.
getAreaName
().
equals
(
areaName
))
{
asv
.
setAreaStatId
(
statId
);
asv
.
setAreaDetailId
(
detail
.
getId
());
List
<
Integer
>
uid
=
ed
.
getUnitIds
();
for
(
Integer
u
:
uid
)
{
Units
unit
=
unitsRepo
.
findById
(
u
).
get
();
String
names
=
ed
.
getUserNames
().
stream
().
collect
(
joining
(
","
));
// 根据发起人决定初始状态id 省发起人- 160 其他发起人 被查的市160 被查的是区140
int
initTaskStatusId
=
0
;
if
(
isProvUser
)
{
initTaskStatusId
=
CHECK_DETAIL_CITY_0
.
id
;
}
else
{
//再根据被查单位的级别 level = 3 区140 level =2市 160
if
(
unit
.
getLevel
()
==
3
)
{
initTaskStatusId
=
CHECK_DETAIL_REGION_0
.
id
;
}
else
{
initTaskStatusId
=
CHECK_DETAIL_CITY_0
.
id
;
}
}
// 3-1 构建被查单位的 自查账单
DeviceCheckDetail
unitDetailDoc
=
DeviceCheckDetail
.
EmptyWithChecker
(
names
+
"|"
+
ed
.
getRemark
(),
ceVo
.
getTitle
()
+
"%^&"
+
ed
.
getRemark
(),
0
,
0
,
0
,
0
,
unit
.
getName
(),
devInLib
.
getOrDefault
(
unit
.
getName
(),
new
ArrayList
<>()),
devNotInLib
.
getOrDefault
(
unit
.
getName
(),
new
ArrayList
<>()));
unitDetailDoc
.
setVar2
(
String
.
valueOf
(
initTaskStatusId
));
DeviceCheckDetail
detail
=
detailRepo
.
save
(
unitDetailDoc
);
detailIds
.
add
(
detail
.
getId
());
// 将id放入统计中去 model -> areaName -> detailId
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitId
,
unit
.
getUnitId
()).
getName
();
for
(
CheckDeviceStatVo
statVo
:
deviceStatVos
)
{
for
(
CheckAreaStatVo
asv
:
statVo
.
getAreaStatList
())
{
if
(
asv
.
getAreaName
().
equals
(
areaName
))
{
asv
.
setAreaStatId
(
statId
);
asv
.
setAreaDetailId
(
detail
.
getId
());
}
}
}
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态)
TaskBto
checkedTask
=
new
TaskBto
(
initTaskStatusId
,
getUnitDateString
(
unit
,
ceVo
.
getTitle
()),
cityStatTask
.
getId
(),
addNode
(
cityStatTask
.
getNodeIdDetail
(),
cityStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
detail
.
getId
(),
unit
.
getUnitId
(),
0
);
// checkedTask.setRemark(String.valueOf(CHECK_EXAM_DETAIL_0.id));
checkedTask
.
setCustomInfo
(
"manual"
);
checkedTask
=
taskService
.
start
(
checkedTask
);
desBillMap
.
put
(
detail
.
getId
(),
ed
.
getRemark
());
desMap
.
put
(
checkedTask
.
getId
(),
ed
.
getRemark
());
}
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态)
TaskBto
checkedTask
=
new
TaskBto
(
CHECK_EXAM_DETAIL_0
.
id
,
"自核查任务"
,
cityStatTask
.
getId
(),
addNode
(
cityStatTask
.
getNodeIdDetail
(),
cityStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
detail
.
getId
(),
unit
.
getUnitId
(),
0
);
checkedTask
.
setRemark
(
String
.
valueOf
(
CHECK_EXAM_DETAIL_0
.
id
));
checkedTask
.
setCustomInfo
(
"manual"
);
checkedTask
=
taskService
.
start
(
checkedTask
);
desBillMap
.
put
(
detail
.
getId
(),
ed
.
getRemark
());
desMap
.
put
(
checkedTask
.
getId
(),
ed
.
getRemark
());
}
// 4. 重新设置并保存统计账单
...
...
@@ -917,7 +1170,6 @@ public class DeviceCheckController {
}
/**
* 根据taskId查询Remark
*/
...
...
@@ -928,7 +1180,6 @@ public class DeviceCheckController {
return
ResponseEntity
.
ok
(
desBillMap
.
get
(
billId
));
}
private
TaskBto
selectProvTask
(
Integer
taskId
)
{
TaskBto
taskBto
=
taskService
.
get
(
taskId
);
if
(
taskBto
.
getParentTaskId
()
==
0
)
{
...
...
@@ -937,7 +1188,6 @@ public class DeviceCheckController {
return
selectProvTask
(
taskBto
.
getParentTaskId
());
}
/**
* 对于专员A来说的逻辑
* 1. 修改detailString
...
...
@@ -951,7 +1201,19 @@ public class DeviceCheckController {
public
ResponseEntity
<
ResultObj
>
checkUserA
(
@PathVariable
Integer
id
,
@RequestParam
int
assignUserId
,
@RequestParam
String
checkResult
,
@RequestBody
DevLibVo
devLibVo
)
{
@RequestParam
String
terminalInfo
,
@RequestBody
DetailVo
detailVo
)
{
// 获取参数
DevLibVo
devLibVo
=
detailVo
.
getDevLibVo
();
List
<
FileRet
>
checkFiles
=
detailVo
.
getCheckFiles
();
//是否上传检查单
if
(
checkFiles
!=
null
&&
checkFiles
.
size
()
>
0
)
{
DeviceCheckDetail
deviceCheckDetail
=
detailRepo
.
findById
(
id
).
get
();
deviceCheckDetail
.
setCheckFiles
(
FilesUtil
.
stringFileToList
(
checkFiles
));
detailRepo
.
save
(
deviceCheckDetail
);
}
//1. 更新checkDetail
log
.
info
(
"[核查模块] 专管员A正在进行详情账单核查,且指定下一个审核人B id 为 {}"
,
assignUserId
);
String
detailString
=
transUtil
.
devLib2String
(
devLibVo
.
getDevInLibrary
(),
devLibVo
.
getDevNotInLibrary
());
...
...
@@ -959,7 +1221,7 @@ public class DeviceCheckController {
long
count
=
devLibVo
.
getDevInLibrary
().
stream
()
.
filter
(
deviceInLibVo
->
deviceInLibVo
.
getProofResult
()
%
10
!=
9
)
.
count
();
detailRepo
.
updateCheckDetail
(
id
,
detailString
,
checkResult
,
currentUser
.
getUserId
(),
assignUserId
,
(
int
)
count
);
detailRepo
.
updateCheckDetail
WithT
(
id
,
detailString
,
checkResult
,
currentUser
.
getUserId
(),
assignUserId
,
(
int
)
count
,
terminalInfo
);
//2. 推进TASK 状态
TaskBto
currentTask
=
taskService
.
get
(
id
,
CONFIRM_CHECK_DETAIL
.
id
);
currentTask
.
getInvolveUserIdList
().
set
(
0
,
authenticationUtils
.
getAuthentication
().
getCurrentUserInfo
().
getUserId
());
...
...
@@ -1049,11 +1311,12 @@ public class DeviceCheckController {
// 审核通过与不通过的逻辑不同
TaskBto
currentTask
=
taskService
.
get
(
id
,
CONFIRM_CHECK_DETAIL
.
id
);
boolean
CEDStep1
=
currentTask
.
getBillStatus
().
equals
(
CHECK_DETAIL_
1
.
id
)
||
currentTask
.
getBillStatus
().
equals
(
CHECK_EXAM_DETAIL
_1
.
id
);
boolean
CEDStep1
=
currentTask
.
getBillStatus
().
equals
(
CHECK_DETAIL_
REGION_1
.
id
)
||
currentTask
.
getBillStatus
().
equals
(
CHECK_DETAIL_CITY
_1
.
id
);
if
(!
CEDStep1
)
{
return
ResponseEntity
.
status
(
400
).
body
(
new
ResultObj
<>(
String
.
format
(
"当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s"
,
GlobalMap
.
getStatusEnumMap
().
get
(
currentTask
.
getBillStatus
()),
CHECK_DETAIL_1
.
name
)));
return
ResponseEntity
.
status
(
400
).
body
(
new
ResultObj
<>(
String
.
format
(
"当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s"
,
GlobalMap
.
getStatusEnumMap
().
get
(
currentTask
.
getBillStatus
()),
CHECK_DETAIL_
REGION_
1
.
name
)));
}
DeviceCheckDetail
currentDetail
=
detailRepo
.
findById
(
id
).
get
();
if
(
checkStatus
==
1
)
{
// 只要通过了,且更新了详情结果,那么这里就进行一次更新
if
(
isUpdate
==
1
)
{
...
...
@@ -1068,7 +1331,6 @@ public class DeviceCheckController {
//依据detail账单对应的checkUserId来判断是2流程还是多流程的
DeviceCheckDetail
currentDetail
=
detailRepo
.
findById
(
id
).
get
();
Integer
userAId
=
currentDetail
.
getCheckUserAId
();
Integer
userBId
=
currentDetail
.
getCheckUserBId
();
...
...
@@ -1085,14 +1347,18 @@ public class DeviceCheckController {
taskService
.
moveToNext
(
currentTask
,
userAId
);
}
else
{
// 如果是2流程的,则直接结束该任务
log
.
info
(
"[核查模块]
该详情任务是一个2流程任务,结束任务并统计数据
..."
);
taskService
.
moveTo
End
(
currentTask
);
log
.
info
(
"[核查模块]
详情任务推进到下个阶段
..."
);
taskService
.
moveTo
Next
(
currentTask
);
summaryDetail
(
currentTask
,
currentDetail
);
}
}
else
{
//不通过则回到第一阶段
StatusEnum
firstStatus
=
getFirstStatus
(
currentTask
.
getBillStatus
());
taskService
.
moveToSpecial
(
currentTask
,
firstStatus
,
currentTask
.
getFirstUserId
());
log
.
info
(
"[核查模块] 核查员B退回自查任务..."
);
StatusEnum
firstStatus
=
getFirstStatus
(
currentTask
.
getBillStatus
(),
Integer
.
valueOf
(
currentDetail
.
getVar2
()));
currentDetail
.
setCheckFiles
(
""
);
currentDetail
.
setCheckFileList
(
Lists
.
newArrayList
());
detailRepo
.
save
(
currentDetail
);
taskService
.
moveToSpecial
(
currentTask
,
firstStatus
,
0
);
}
log
.
info
(
"[核查模块] 专管员B操作成功"
);
//完结系统自查业务
...
...
@@ -1101,84 +1367,253 @@ public class DeviceCheckController {
}
/**
*
用于核查的回退
接口
*
市人员审核区自查数据的
接口
*
* @param id 办结的done接口id
* @param detailId
* @param pass 是否通过 true - 通过 ,false - 未通过
* @return
*/
@ApiOperation
(
value
=
"核查回退"
)
@PutMapping
(
"/check/rollback/{id}"
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ResponseEntity
checkRollback
(
@PathVariable
Integer
id
)
{
log
.
info
(
"[核查模块] 将id = {} 的检查任务进行回退"
,
id
);
Specification
<
Task
>
donePred
=
Specifications
.<
Task
>
and
()
.
eq
(
"billStatus"
,
CONFIRM_STAT_0
.
id
)
.
eq
(
"billId"
,
id
)
.
eq
(
"businessType"
,
CONFIRM_CHECK_STAT
.
id
)
.
build
();
TaskBto
doneTask
=
taskRepo
.
findOne
(
donePred
).
get
().
parse2Bto
();
@PutMapping
(
"/city/audit/{id}"
)
@ApiOperation
(
value
=
"市专管人员审核区自查数据的接口"
)
public
ResponseEntity
cityAudit
(
@PathVariable
(
name
=
"id"
)
Integer
detailId
,
@RequestParam
boolean
pass
)
{
Specification
<
Task
>
checkPred
=
Specifications
.<
Task
>
and
()
.
eq
(
"customInfo"
,
"exam"
)
.
eq
(
"billId"
,
id
)
.
eq
(
"businessType"
,
CONFIRM_CHECK_STAT
.
id
)
.
build
();
Task
checkTask
=
taskRepo
.
findOne
(
checkPred
).
get
();
//1.将市检查的任务节点回退到等待办结的状态
taskService
.
moveToSpecial
(
checkTask
.
parse2Bto
(),
CHECK_EXAM_STAT_1
);
TaskBto
currentTask
=
taskService
.
get
(
detailId
,
CONFIRM_CHECK_DETAIL
.
id
);
DeviceCheckDetail
currentDetail
=
detailRepo
.
findById
(
detailId
).
get
();
//2.删除掉省的办结任务
if
(
Objects
.
isNull
(
doneTask
))
{
log
.
info
(
"[核查模块] 没有找到对应的办结任务"
);
if
(
pass
)
{
// 通过的话就推进任务进度,合并数据
log
.
info
(
"[核查模块] 市专管员审核通过,结束 {} 区的自查任务并汇总数据"
,
currentDetail
.
getCheckUnit
());
taskService
.
moveToNext
(
currentTask
);
Integer
userId
=
authenticationUtils
.
getAuthentication
().
getCurrentUserInfo
().
getUserId
();
currentDetail
.
setUserCId
(
userId
);
currentDetail
=
detailRepo
.
save
(
currentDetail
);
summaryDetail
(
currentTask
,
currentDetail
);
return
ResponseEntity
.
ok
(
"市专管员审核通过,结束"
+
currentDetail
.
getCheckUnit
()
+
" 区的自查任务并汇总数据"
);
}
else
{
log
.
info
(
"[核查模块] 删除id = {}的办结任务"
,
doneTask
.
getId
());
taskRepo
.
deleteById
(
doneTask
.
getId
());
log
.
info
(
"[核查模块] 市专管员审核未通过,回滚该任务到初始状态,任务id = {}"
,
currentTask
.
getId
());
// 重置Task任务本身的任务状态,使其回滚到等待专管员A处理时的状态,并在Task里添加特殊的回滚标记,用来鉴别这是一个回滚任务
StatusEnum
firstStatus
=
getFirstStatus
(
currentTask
.
getBillStatus
(),
Integer
.
valueOf
(
currentDetail
.
getVar2
()));
currentTask
.
setRemark
(
"ROLLBACK-0"
);
taskService
.
moveToSpecial
(
currentTask
,
firstStatus
,
0
);
//重置该自查详情里的各个装备的自查详情
currentDetail
=
setDetailCheckNumber
(
currentDetail
,
119
);
currentDetail
.
setCheckFiles
(
""
);
currentDetail
.
setCheckFileList
(
Lists
.
newArrayList
());
Integer
userId
=
authenticationUtils
.
getAuthentication
().
getCurrentUserInfo
().
getUserId
();
currentDetail
.
setUserCId
(
0
);
currentDetail
=
detailRepo
.
save
(
currentDetail
);
//该detail对应的stat数据里相应的数据剔除(写一个通用的剔除方法), 否则在第二次审核通过的时候会重复计算一次数据
TaskBto
fatherTask
=
taskService
.
get
(
currentTask
.
getParentTaskId
());
DeviceCheckStat
dcs
=
statRepo
.
findById
(
fatherTask
.
getBillId
()).
get
();
removeDetailFromDcs
(
currentDetail
,
dcs
);
return
ResponseEntity
.
ok
(
"回退成功!回滚该任务到初始状态,id = "
+
currentTask
.
getId
());
}
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
"核查回退操作成功!"
));
}
/**
* 省专管员审核自查数据的方法
*
* @param detailId 自查主键id
* @param pass 是否通过 true - 通过 ,false - 未通过
* @return
*/
@PutMapping
(
"/prov/audit/{id}"
)
@ApiOperation
(
value
=
"省专管人员审核区自查数据的接口"
)
public
ResponseEntity
provAudit
(
@PathVariable
(
name
=
"id"
)
Integer
detailId
,
@RequestParam
boolean
pass
)
{
if
(
pass
)
{
log
.
info
(
"[核查模块] 省专管员审查detailId = {} 的自查数据-审核通过"
,
detailId
);
return
provAuditPass
(
detailId
);
}
else
{
log
.
info
(
"[核查模块] 省专管员审查detailId = {} 的自查数据-审核未通过"
,
detailId
);
return
provAuitNotPassed
(
detailId
);
}
}
/**
* 将detail里的detailString里的检查数字该为指定数值
*
* @param detail
* @param number
*/
private
DeviceCheckDetail
setDetailCheckNumber
(
DeviceCheckDetail
detail
,
Integer
number
)
{
String
detailString
=
detail
.
getCheckDetail
();
String
updatedString
=
Arrays
.
stream
(
detailString
.
split
(
","
))
.
map
(
s
->
s
.
split
(
"-"
)[
0
]
+
"-"
+
number
)
.
collect
(
joining
(
","
));
detail
.
setCheckDetail
(
updatedString
);
return
detail
;
}
/**
*
用于检查页面的回退接口
*
省对区审查 未通过的 逻辑
*
* @param id
自查的detail i
d
* @param id
detail I
d
* @return
*/
@ApiOperation
(
value
=
" "
)
@PutMapping
(
"/exam/rollback/{id}"
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ResponseEntity
examRollback
(
@PathVariable
Integer
id
)
{
log
.
info
(
"[核查模块] 进行检查回退操作,要回退的检查detail id为 {}"
,
id
);
//1. 回退device-detail数据 包括 detail String,checkResult,userAId,userBid,checkedCount
// 将原来的checkDetail 的检查状态统一更改为 8 - 已退回
String
detail
=
detailRepo
.
getOne
(
id
).
getCheckDetail
();
String
updateDetail
=
Arrays
.
stream
(
detail
.
split
(
","
))
.
map
(
s
->
s
.
split
(
"-"
)[
0
]
+
"-"
+
"8"
)
private
ResponseEntity
provAuitNotPassed
(
Integer
id
)
{
//1. bill单的自查将百位数变为3
DeviceCheckDetail
detail
=
detailRepo
.
findById
(
id
).
get
();
String
detailString
=
detail
.
getCheckDetail
();
String
initalDetail
=
Arrays
.
stream
(
detailString
.
split
(
","
))
.
map
(
s
->
s
.
split
(
"-"
)[
0
]
+
"-"
+
119
)
.
collect
(
joining
(
","
));
String
updateDetail
=
changeHunds
(
detailString
,
3
);
detailRepo
.
updateCheckDetail
(
id
,
updateDetail
,
""
,
0
,
0
,
0
);
//2. 回退任务Task
//2. 当前任务结束,开启一个新的 退回任务(连带一个新的detail)
TaskBto
currentTask
=
taskService
.
get
(
id
,
CONFIRM_CHECK_DETAIL
.
id
);
StatusEnum
firstStatus
=
GlobalMap
.
getStatusEnumMap
().
get
(
Integer
.
valueOf
(
currentTask
.
getRemark
()));
taskService
.
moveToSpecial
(
currentTask
,
firstStatus
,
currentTask
.
getFirstUserId
());
//3.如果父级任务状态已经到确认阶段,则同样回退一个阶段
String
remark
=
currentTask
.
getRemark
();
if
(
Objects
.
nonNull
(
remark
)
&&
remark
.
contains
(
"ROLLBACK"
))
{
Integer
times
=
Integer
.
valueOf
(
remark
.
split
(
"-"
)[
1
]);
remark
=
"ROLLBACK-"
+
++
times
;
}
else
{
remark
=
"ROLLBACK-1"
;
}
currentTask
.
setRemark
(
remark
);
TaskBto
newTask
=
currentTask
.
toDo
().
copy
().
parse2Bto
();
currentTask
.
setCustomInfo
(
currentTask
.
getCustomInfo
());
taskService
.
moveToEnd
(
currentTask
);
// 创建新的detail 新的detail会在B的时候加入,所以老的stat要去除掉
DeviceCheckDetail
cDetail
=
detail
.
copyWithoutId
();
cDetail
.
setId
(
null
);
cDetail
.
setCheckDetail
(
initalDetail
);
cDetail
.
setCheckFiles
(
""
);
cDetail
.
setCheckFileList
(
Lists
.
newArrayList
());
cDetail
=
detailRepo
.
save
(
cDetail
);
// 创建新的任务(被拒绝的自查单位如果是区则是140状态,否则是160状态)
String
unitName
=
cDetail
.
getCheckUnit
();
Integer
level
=
unitsRepo
.
findByName
(
unitName
).
getLevel
();
Integer
initStatusId
=
0
;
if
(
level
==
3
)
{
initStatusId
=
CHECK_DETAIL_REGION_0
.
id
;
}
else
{
initStatusId
=
CHECK_DETAIL_CITY_0
.
id
;
}
newTask
.
setBillStatus
(
initStatusId
);
newTask
.
setBillId
(
cDetail
.
getId
());
newTask
.
setId
(
0
);
newTask
.
setCustomInfo
(
newTask
.
getCustomInfo
());
newTask
.
getInvolveUserIdList
().
add
(
0
);
newTask
.
setCurrentPoint
(
newTask
.
getInvolveUserIdList
().
size
()
-
1
);
// 尝试从老任务中获取重做次数 - 新任务老任务都需要更新remark
newTask
.
setRemark
(
remark
);
log
.
info
(
"[核查模块] 省回退操作中... 任务remark = {}"
,
remark
);
newTask
.
setRemark
(
remark
);
taskService
.
start
(
newTask
);
//3. 在stat的remark中追加信息 - 找到currentTask在其中的顺位
TaskBto
fatherTask
=
taskService
.
get
(
currentTask
.
getParentTaskId
());
// log.info("[核查模块] 父级统计节点的task id = {} , bill id = {}", fatherTask.getId(), fatherTask.getBillId());
// if (fatherTask.getBillStatus().equals(CHECK_EXAM_STAT_1.id)) {
// log.info("[核查模块] 检测到父级节点已经进入确认阶段,回滚父级节点");
// taskService.moveToSpecial(fatherTask, CHECK_EXAM_STAT_0, fatherTask.getFirstUserId());
// }
//3. 回退合并上去的数据
String
unitName
=
detailRepo
.
findById
(
id
).
get
().
getCheckUnit
();
AreaUnit
areaUnit
=
auService
.
findOne
(
AuExample
.
UnitName
,
unitName
);
String
cityName
=
areaUnit
.
getName
();
List
<
Task
>
childTask
=
taskRepo
.
findAllByParentTaskId
(
fatherTask
.
getId
());
int
pos
=
0
;
for
(
int
i
=
0
;
i
<
childTask
.
size
();
i
++)
{
if
(
childTask
.
get
(
i
).
getId
().
equals
(
currentTask
.
getId
()))
{
log
.
info
(
"[核查模块] 记录remark的pos位置 = {}"
,
i
);
}
}
DeviceCheckStat
dcs
=
statRepo
.
findById
(
fatherTask
.
getBillId
()).
get
();
String
[]
groups
=
dcs
.
getRemark
().
split
(
"\\|"
);
String
pading
=
groups
[
pos
];
dcs
.
setRemark
(
dcs
.
getRemark
()
+
"|"
+
pading
);
log
.
info
(
"[核查模块] 补充remark = {}"
,
pading
);
// 老的stat要去除掉对应areaName的数据
removeDetailFromDcs
(
detail
,
dcs
);
resetStatByCity
(
fatherTask
.
getBillId
(),
cityName
);
//4.父级任务变为进行中
fatherTask
.
setBillStatus
(
CHECK_EXAM_STAT_1
.
id
);
taskRepo
.
save
(
fatherTask
.
toDo
());
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
"回退操作成功!"
));
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
"检查回退操作成功!"
));
}
/**
* 省对区审查通过的逻辑
*
* @param id detail Id
* @return
*/
private
ResponseEntity
provAuditPass
(
Integer
id
)
{
//将自查的情况的百位数全部替换成2
DeviceCheckDetail
detail
=
detailRepo
.
findById
(
id
).
get
();
String
updatedString
=
changeHunds
(
detail
.
getCheckDetail
(),
2
);
detail
.
setCheckDetail
(
updatedString
);
log
.
info
(
"[核查模块] 审核通过 - 更新后的detailString形如 {}"
,
updatedString
.
split
(
","
)[
0
]);
detailRepo
.
save
(
detail
);
//将对应stat中地区的comProgress 改为 2 comsitution 改为12
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitName
,
detail
.
getCheckUnit
()).
getName
();
TaskBto
currentTask
=
taskService
.
get
(
id
,
CONFIRM_CHECK_DETAIL
.
id
);
TaskBto
fatherTask
=
taskService
.
get
(
currentTask
.
getParentTaskId
());
DeviceCheckStat
dcs
=
statRepo
.
findById
(
fatherTask
.
getBillId
()).
get
();
CheckStatVo
csv
=
transUtil
.
checkStatDo2Vo
(
dcs
);
for
(
CheckDeviceStatVo
vo
:
csv
.
getDeviceStatVoList
())
{
for
(
CheckAreaStatVo
av
:
vo
.
getAreaStatList
())
{
if
(
av
.
getAreaName
().
equals
(
areaName
))
{
log
.
info
(
"[核查模块] 审核通过 - 地区 = {} 的统计数据在统计信息中被成功修改了"
,
areaName
);
av
.
auditPassed
();
}
}
}
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
"审核通过!"
));
}
private
void
removeDetailFromDcs
(
DeviceCheckDetail
detail
,
DeviceCheckStat
dcs
)
{
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitName
,
detail
.
getCheckUnit
()).
getName
();
CheckStatVo
csv
=
transUtil
.
checkStatDo2Vo
(
dcs
);
for
(
CheckDeviceStatVo
vo
:
csv
.
getDeviceStatVoList
())
{
List
<
CheckAreaStatVo
>
filterList
=
vo
.
getAreaStatList
().
stream
()
.
filter
(
casv
->
!
casv
.
getAreaName
().
equals
(
areaName
)).
collect
(
toList
());
if
(
filterList
.
size
()
!=
vo
.
getAreaStatList
().
size
())
{
log
.
info
(
"[核查模块] 回退操作-将退回的数据从统计中去除了."
);
vo
.
setAreaStatList
(
filterList
);
}
}
statRepo
.
save
(
csv
.
toDo
());
}
/**
* 将detailString里的百位数改为指定数字
*
* @param detailString 要更改的自查详情字符串
* @param value 想要改成的数字
* @return
*/
private
String
changeHunds
(
String
detailString
,
Integer
value
)
{
String
updateDetail
=
Arrays
.
stream
(
detailString
.
split
(
","
))
.
filter
(
s
->
StringUtils
.
isNoneEmpty
(
s
))
.
map
(
s
->
{
Integer
number
=
Integer
.
valueOf
(
s
.
split
(
"-"
)[
1
]);
int
digit
=
number
%
10
;
int
tens
=
number
/
10
%
10
;
number
=
value
*
100
+
tens
*
10
+
digit
;
return
s
.
split
(
"-"
)[
0
]
+
"-"
+
number
;
})
.
collect
(
joining
(
","
));
return
updateDetail
;
}
/**
* 将统计数据中指定城市的统计数据重置
*
...
...
@@ -1199,43 +1634,6 @@ public class DeviceCheckController {
statRepo
.
save
(
statVo
.
toDo
());
}
@ApiOperation
(
value
=
"核查组A/B确认核查详情单"
)
@PutMapping
(
"/detail/C/{id}"
)
public
ResponseEntity
<
ResultObj
>
checkUserC
(
@PathVariable
Integer
id
,
@RequestParam
boolean
pass
)
{
TaskBto
currentTask
=
taskService
.
get
(
id
,
CONFIRM_CHECK_DETAIL
.
id
);
DeviceCheckDetail
currentDetail
=
detailRepo
.
findById
(
id
).
get
();
if
(
pass
)
{
// 如果当前是第3步(利用余数来判断),则需要指定核查组B的人来接受任务
boolean
stepC
=
currentTask
.
getBillStatus
()
%
10
==
2
;
boolean
stepD
=
currentTask
.
getBillStatus
()
%
10
==
3
;
if
(
stepC
)
{
log
.
info
(
"[核查模块] C 检查组成员A正在进行核查操作,核查详情账单id为 : {}"
,
id
);
if
(!
currentTask
.
getBillStatus
().
equals
(
CHECK_DETAIL_2
.
id
))
{
return
ResponseEntity
.
status
(
400
).
body
(
new
ResultObj
<>(
String
.
format
(
"当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s"
,
GlobalMap
.
getStatusEnumMap
().
get
(
currentTask
.
getBillStatus
()),
CHECK_DETAIL_2
.
name
)));
}
taskService
.
moveToNext
(
currentTask
,
currentDetail
.
getCheckUserBId
());
log
.
info
(
"[核查模块] C 操作完毕"
);
}
if
(
stepD
)
{
if
(!
currentTask
.
getBillStatus
().
equals
(
CHECK_DETAIL_3
.
id
))
{
return
ResponseEntity
.
status
(
400
).
body
(
new
ResultObj
<>(
String
.
format
(
"当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s"
,
GlobalMap
.
getStatusEnumMap
().
get
(
currentTask
.
getBillStatus
()),
CHECK_DETAIL_3
.
name
)));
}
// 如果当前是第4步,则直接结束任务,并且进行结果汇总
log
.
info
(
"[核查模块] D 检查组成员A正在进行核查操作,核查详情账单id为 : {}"
,
id
);
summaryDetail
(
currentTask
,
currentDetail
);
currentTask
=
taskService
.
moveToEnd
(
currentTask
);
log
.
info
(
"[核查模块] D 操作完毕"
);
}
}
else
{
// 如果没通过则返回第1步
StatusEnum
firstStatus
=
getFirstStatus
(
currentTask
.
getBillStatus
());
taskService
.
moveToSpecial
(
currentTask
,
firstStatus
,
currentTask
.
getFirstUserId
());
}
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
"操作成功"
));
}
/**
* @param taskId 待办任务id
* @param statId 市级统计的STAT ID
...
...
@@ -1304,8 +1702,7 @@ public class DeviceCheckController {
log
.
info
(
"[核查模块] 办结统计待办操作成功"
);
return
ResponseEntity
.
ok
(
new
ResultObj
<>(
"办结统计待办确认完毕"
));
}
@Autowired
private
SelfCheckController
selfCheckController
;
/**
* @param statId 统计账单主键id
*/
...
...
@@ -1320,16 +1717,35 @@ public class DeviceCheckController {
Integer
parentTaskId
=
currentTask
.
getParentTaskId
();
boolean
hasParent
=
parentTaskId
!=
0
;
//尝试寻找老的市办结任务,如果有的话就删除加END
//5.需要将上一次市的确认任务给清理掉
// 父级的父级,就是省的任务,然后子child里名字包含 统计数据确认任务 的任务给 END 吧
Task
verifyTask
=
taskRepo
.
findAllByParentTaskId
(
parentTaskId
)
.
stream
()
.
filter
(
task
->
task
.
getTitle
().
contains
(
"统计数据确认任务"
))
.
sorted
(
Comparator
.
comparing
(
Task:
:
getId
))
.
findFirst
()
.
orElse
(
null
);
if
(
Objects
.
nonNull
(
verifyTask
))
{
log
.
info
(
"[核查模块] 发现了id = {}市的统计确认任务,将其完结并剔除整个树节点"
,
verifyTask
.
getId
());
verifyTask
.
setParentTaskId
(
0
);
taskService
.
moveToEnd
(
verifyTask
.
parse2Bto
());
}
if
(
hasParent
)
{
//市统计的办结 -> 开启对应市 数据确认任务for 省
//市统计的办结 -> 开启对应市 数据确认任务for 省s
Units
units
=
unitsRepo
.
findById
(
currentTask
.
getOwnUnit
()).
get
();
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitId
,
currentTask
.
getOwnUnit
()).
getName
();
Integer
provId
=
areaRepo
.
findAreasByType
(
1
).
stream
()
.
min
(
Comparator
.
comparing
(
Area:
:
getId
))
.
get
()
.
getId
();
TaskBto
cityDoneTask
=
new
TaskBto
(
CONFIRM_STAT_0
.
id
,
areaName
+
"统计数据确认任务"
,
parentTaskId
,
"."
,
CONFIRM_CHECK_STAT
.
id
,
statId
,
provId
,
0
);
String
provTitle
=
taskRepo
.
findById
(
parentTaskId
).
get
().
getTitle
();
TaskBto
cityDoneTask
=
new
TaskBto
(
CONFIRM_STAT_0
.
id
,
provTitle
+
"统计数据确认任务"
,
parentTaskId
,
"."
,
CONFIRM_CHECK_STAT
.
id
,
statId
,
provId
,
0
);
cityDoneTask
.
getInvolveUserIdList
().
add
(
0
);
cityDoneTask
.
setCurrentPoint
(
cityDoneTask
.
getCurrentPoint
()
+
1
);
cityDoneTask
.
setCustomInfo
(
""
);
cityDoneTask
=
taskService
.
start
(
cityDoneTask
);
log
.
info
(
"[核查模块] 统计确认待办任务生成成功, id为 : {}"
,
cityDoneTask
.
getId
());
}
...
...
@@ -1345,7 +1761,11 @@ public class DeviceCheckController {
* @param currentDetail 需要汇总的详情核查数据对象
*/
private
void
summaryDetail
(
TaskBto
currentTask
,
DeviceCheckDetail
currentDetail
)
{
log
.
info
(
"[核查模块] 正在进行数据汇总"
);
log
.
info
(
"[核查模块] 正在尝试进行Task id = {} 的自查数据汇总..."
,
currentTask
.
getId
());
if
(!
currentTask
.
getBillStatus
().
equals
(
END
.
id
))
{
log
.
info
(
"[核查模块] 该自查任务还未完成,结束汇总,当前任务状态id = {}"
,
currentTask
.
getBillStatus
());
}
// 先找到汇总地区的账单id 查询当前detail task 的 父级TASK
Integer
fatherTaskId
=
currentTask
.
getParentTaskId
();
int
statId
=
taskRepo
.
findBillId
(
fatherTaskId
,
CONFIRM_CHECK_STAT
.
id
);
...
...
@@ -1412,9 +1832,14 @@ public class DeviceCheckController {
*
* @param currentStatusId 任务状态id
*/
private
StatusEnum
getFirstStatus
(
Integer
currentStatusId
)
{
private
StatusEnum
getFirstStatus
(
Integer
currentStatusId
,
Integer
defaultStatusId
)
{
int
remainder
=
currentStatusId
%
10
;
return
GlobalMap
.
getStatusEnumMap
().
get
(
currentStatusId
-
remainder
);
StatusEnum
resultEnum
=
GlobalMap
.
getStatusEnumMap
().
get
(
currentStatusId
-
remainder
);
if
(
Objects
.
isNull
(
resultEnum
))
{
return
GlobalMap
.
getStatusEnumMap
().
get
(
defaultStatusId
);
}
else
{
return
resultEnum
;
}
}
public
List
<
CheckDeviceStatVo
>
parseStatString2Vo
(
TaskBto
task
,
DeviceCheckDetail
detail
)
{
...
...
@@ -1424,6 +1849,8 @@ public class DeviceCheckController {
String
[]
statArray
=
statString
.
split
(
","
);
//将 id - status 转化为 model - count - status(只统计新增和无误的作为数量)
long
start1
=
System
.
currentTimeMillis
();
// 根这里unid可以从detail里拿,根据unitId 查到 areaId 根据 areaId 查询到 areaName
String
areaName
=
auService
.
findOne
(
AuExample
.
UnitName
,
detail
.
getCheckUnit
()).
getName
();
...
...
@@ -1433,48 +1860,75 @@ public class DeviceCheckController {
int
statId
=
Optional
.
ofNullable
(
taskRepo
.
findBillId
(
task
.
getParentTaskId
(),
CONFIRM_CHECK_STAT
.
id
))
.
orElse
(
0
);
long
end1
=
System
.
currentTimeMillis
();
log
.
info
(
"[核查TEST] 基础数据查询消耗 {} ms "
,
end1
-
start1
);
// checkDevice 批量查询做一个MAP缓存
long
start
=
System
.
currentTimeMillis
();
List
<
Integer
>
idList
=
Arrays
.
stream
(
statArray
)
.
filter
(
StringUtils:
:
isNotEmpty
)
.
map
(
s
->
s
.
split
(
"-"
)[
0
])
.
filter
(
StringUtils:
:
isNotEmpty
)
.
map
(
Integer:
:
parseInt
)
.
collect
(
toList
());
long
start
=
System
.
currentTimeMillis
();
Map
<
Integer
,
DeviceLibrary
>
deviceMap
=
deviceRepo
.
findAllByIdIn
(
idList
)
.
stream
()
List
<
DeviceLibrary
>
allDevice
=
dcService
.
getAllDeviceLibraryList
();
Map
<
Integer
,
DeviceLibrary
>
deviceMap
=
allDevice
.
stream
()
.
filter
(
d
->
idList
.
contains
(
d
.
getId
()))
.
collect
(
toMap
(
DeviceLibrary:
:
getId
,
Function
.
identity
()));
long
end
=
System
.
currentTimeMillis
();
log
.
info
(
"[核查TEST] 批量查询id集合耗时 {} ms "
,
end
-
start
);
long
start2
=
System
.
currentTimeMillis
();
for
(
String
s
:
statArray
)
{
if
(
StringUtils
.
isEmpty
(
s
))
{
continue
;
}
String
[]
device
=
s
.
split
(
"-"
);
if
(
device
.
length
<
2
||
StringUtils
.
isEmpty
(
device
[
0
]))
{
continue
;
}
int
deviceId
=
Integer
.
parseInt
(
device
[
0
]);
int
proofResult
=
Integer
.
parseInt
(
device
[
1
]);
DeviceLibrary
checkDevice
=
deviceMap
.
get
(
deviceId
);
if
(
Objects
.
isNull
(
checkDevice
))
{
continue
;
}
CheckAreaStatVo
checkAreaStatVo
;
// 百位数 0/1 待审核 2 无误 3未通过
// 十位数 1 人工 2 自动
// 0缺失1无误2新增3不在库 8已退回 9未检查
int
digits
=
proofResult
%
10
;
int
tens
=
proofResult
/
10
%
10
;
int
huns
=
proofResult
/
100
%
10
;
if
(
digits
==
8
)
{
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
3
,
-
1
,
statId
,
detailId
);
}
else
if
(
digits
==
9
)
{
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
0
,
0
,
statId
,
detailId
);
// 个位数判断自查结果
if
(
digits
==
9
)
{
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
0
,
10
,
statId
,
detailId
);
}
else
if
(
digits
==
3
)
{
//跳过非在库的统计
continue
;
}
else
if
(
digits
==
1
)
{
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
2
,
0
,
statId
,
detailId
);
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
2
,
1
0
,
statId
,
detailId
);
}
else
if
(
digits
==
0
)
{
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
0
,
1
,
2
,
1
,
statId
,
detailId
);
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
0
,
1
,
2
,
1
0
,
statId
,
detailId
);
}
else
{
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
2
,
1
,
statId
,
detailId
);
checkAreaStatVo
=
new
CheckAreaStatVo
(
areaName
,
1
,
1
,
2
,
10
,
statId
,
detailId
);
}
// 百位数判断审核情况 0,1未检查 2是无误 3是未通过
if
(
huns
==
0
||
huns
==
1
)
{
checkAreaStatVo
.
setComSituation
(
10
);
}
else
if
(
huns
==
2
)
{
checkAreaStatVo
.
setComSituation
(
12
);
}
else
if
(
huns
==
3
)
{
checkAreaStatVo
.
setComSituation
(
13
);
}
List
<
CheckAreaStatVo
>
areaStatVoList
=
new
ArrayList
<>();
...
...
@@ -1482,6 +1936,8 @@ public class DeviceCheckController {
statVoList
.
add
(
new
CheckDeviceStatVo
(
checkDevice
.
getModel
(),
checkDevice
.
getName
(),
1
,
areaStatVoList
));
}
long
end2
=
System
.
currentTimeMillis
();
log
.
info
(
"[核查TEST] 拼装deviceStat数据消耗了 {} ms "
,
end2
-
start2
);
return
statVoList
;
}
...
...
@@ -1501,7 +1957,7 @@ public class DeviceCheckController {
.
map
(
units
->
auService
.
findOne
(
AuExample
.
UnitId
,
units
.
getUnitId
()))
.
collect
(
toList
());
List
<
CheckDeviceStatVo
>
cdv
=
d
eviceRepo
.
findAll
()
List
<
CheckDeviceStatVo
>
cdv
=
d
cService
.
getAllDeviceLibraryList
()
.
stream
()
.
filter
(
dev
->
unitNameList
.
contains
(
dev
.
getOwnUnit
()))
.
filter
(
dev
->
initUnitNames
.
contains
(
dev
.
getOwnUnit
()))
...
...
@@ -1552,7 +2008,7 @@ public class DeviceCheckController {
.
collect
(
toList
());
Collection
<
CheckDeviceStatVo
>
statVos
;
List
<
CheckDeviceStatVo
>
cds
=
d
eviceRepo
.
findAll
()
List
<
CheckDeviceStatVo
>
cds
=
d
cService
.
getAllDeviceLibraryList
()
.
stream
()
.
filter
(
dev
->
unitNameList
.
contains
(
dev
.
getOwnUnit
()))
// .filter(d->d.getLifeStatus() != 2 & d.getLifeStatus() != 14)
...
...
@@ -1657,7 +2113,7 @@ public class DeviceCheckController {
return
new
CheckAreaStatVo
(
finalCityName
,
actualCount
,
supposeCount
,
finalProgress
,
finalSituation
,
0
,
0
);
}
private
void
findBySystem
(){
private
void
findBySystem
()
{
selfCheckController
.
findBySystem1
();
}
...
...
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/entity/domain/DeviceCheckDetail.java
浏览文件 @
9e96a44c
...
...
@@ -71,6 +71,7 @@ public class DeviceCheckDetail extends BaseEntity {
@ApiModelProperty
(
value
=
"本级经办人id(A岗)"
)
@Column
(
name
=
"userA_id"
)
private
Integer
userAId
;
/**
* 本级审核人id(B岗)
*/
...
...
@@ -78,10 +79,13 @@ public class DeviceCheckDetail extends BaseEntity {
@ApiModelProperty
(
value
=
"本级审核人id(B岗)"
)
@Column
(
name
=
"userB_id"
)
private
Integer
userBId
;
@ApiModelProperty
(
value
=
"上级审核人id"
)
@Column
(
name
=
"userC_id"
)
private
Integer
userCId
;
/**
* 核查时间
*/
@ApiModelProperty
(
value
=
"核查时间"
)
private
Date
checkTime
;
/**
...
...
@@ -128,7 +132,7 @@ public class DeviceCheckDetail extends BaseEntity {
private
String
remark
;
/**
* 预留字段2
* 预留字段2
现在用来记录该自查任务的初始状态号
*/
@ApiModelProperty
(
value
=
"预留字段2"
)
private
String
var2
;
...
...
@@ -139,6 +143,12 @@ public class DeviceCheckDetail extends BaseEntity {
@Column
(
name
=
"check_files"
,
columnDefinition
=
"TEXT"
)
private
String
checkFiles
;
/**
* 手持终端信息字段
*/
@ApiModelProperty
(
value
=
"手持终端信息字段"
)
private
String
terminalInfo
;
@Transient
private
List
<
FileRet
>
checkFileList
=
new
ArrayList
<>();
...
...
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/entity/vo/CheckDetailVo.java
浏览文件 @
9e96a44c
...
...
@@ -79,6 +79,12 @@ public class CheckDetailVo {
@ApiModelProperty
(
value
=
"本级审核人id(B岗)"
)
private
Integer
userBId
;
/**
* 上级审核人Id
*/
@ApiModelProperty
(
value
=
"上级审核人id"
)
private
Integer
userCId
;
/**
* 核查时间
*/
...
...
@@ -108,6 +114,12 @@ public class CheckDetailVo {
@ApiModelProperty
(
value
=
"核查结果"
)
private
String
checkResult
;
/**
* 手持终端信息字段
*/
@ApiModelProperty
(
value
=
"终端信息"
)
private
String
terminalInfo
;
@ApiModelProperty
(
value
=
"在库装备列表"
)
private
List
<
DeviceInLibVo
>
devInLibrary
;
...
...
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/entity/vo/CheckExamDetailVo.java
浏览文件 @
9e96a44c
...
...
@@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Collections
;
import
java.util.List
;
/**
...
...
@@ -27,12 +28,12 @@ public class CheckExamDetailVo {
private
List
<
String
>
userNames
;
@ApiModelProperty
(
name
=
"需要被检查的区域id"
)
private
Integer
unitId
;
private
List
<
Integer
>
unitIds
;
@ApiModelProperty
(
name
=
"备注"
)
private
String
remark
;
public
CheckExamDetailVo
copy
(
Integer
unitId
,
String
remark
)
{
return
new
CheckExamDetailVo
(
this
.
groupName
,
this
.
userNames
,
unitId
,
remark
);
return
new
CheckExamDetailVo
(
this
.
groupName
,
this
.
userNames
,
Collections
.
singletonList
(
unitId
)
,
remark
);
}
}
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/repository/DeviceCheckDetailDao.java
浏览文件 @
9e96a44c
...
...
@@ -24,6 +24,10 @@ public interface DeviceCheckDetailDao extends JpaRepository<DeviceCheckDetail, I
@Query
(
"update DeviceCheckDetail o set o.checkDetail=?2,o.checkResult = ?3,o.userAId =?4,o.userBId=?5,o.checkedCount=?6 where o.id=?1"
)
void
updateCheckDetail
(
Integer
id
,
String
checkDetail
,
String
checkResult
,
int
userAId
,
int
userBId
,
Integer
checkedCount
);
@Modifying
@Query
(
"update DeviceCheckDetail o set o.checkDetail=?2,o.checkResult = ?3,o.userAId =?4,o.userBId=?5,o.checkedCount=?6,o.terminalInfo=?7 where o.id=?1"
)
void
updateCheckDetailWithT
(
Integer
id
,
String
checkDetail
,
String
checkResult
,
int
userAId
,
int
userBId
,
Integer
checkedCount
,
String
terminalInfo
);
/**
* 根据id更新checkDetail 用于专管员B检查
*
...
...
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/service/impl/ConfirmCheckServiceImpl.java
浏览文件 @
9e96a44c
...
...
@@ -57,7 +57,7 @@ import java.util.stream.Collectors;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
BusinessEnum
.
CONFIRM_CHECK_DETAIL
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
BusinessEnum
.
CONFIRM_CHECK_STAT
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
StatusEnum
.
CHECK_DETAIL_0
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
StatusEnum
.
CHECK_DETAIL_
REGION_
0
;
import
static
com
.
tykj
.
dev
.
misc
.
base
.
StatusEnum
.
CHECK_STAT_0
;
import
static
java
.
util
.
stream
.
Collectors
.*;
...
...
@@ -210,7 +210,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
.
collect
(
toList
());
statVoList
.
addAll
(
cityStatVoList
);
// 构建市自查TASK
TaskBto
cityDetailTask
=
new
TaskBto
(
CHECK_DETAIL_0
.
id
,
cityUnit
.
getName
()
+
"自动核查自查"
,
cityStatTask
.
getId
(),
addNode
(
cityStatTask
.
getNodeIdDetail
(),
cityStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
cityDetail
.
getId
(),
cityUnit
.
getUnitId
(),
0
);
TaskBto
cityDetailTask
=
new
TaskBto
(
CHECK_DETAIL_
REGION_
0
.
id
,
cityUnit
.
getName
()
+
"自动核查自查"
,
cityStatTask
.
getId
(),
addNode
(
cityStatTask
.
getNodeIdDetail
(),
cityStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
cityDetail
.
getId
(),
cityUnit
.
getUnitId
(),
0
);
cityDetailTask
.
setCustomInfo
(
"auto"
);
cityDetailTask
=
taskService
.
start
(
cityDetailTask
);
resultIds
.
get
(
"taskId"
).
add
(
cityDetailTask
.
getId
());
...
...
@@ -236,7 +236,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
statVoList
.
addAll
(
countyStatVoList
);
//构建县自查TASK
TaskBto
countyDetailTask
=
new
TaskBto
(
CHECK_DETAIL_0
.
id
,
countyUnit
.
getName
()
+
"自动核查自查"
,
cityStatTask
.
getId
(),
addNode
(
cityStatTask
.
getNodeIdDetail
(),
cityStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
countyDetail
.
getId
(),
countyUnit
.
getUnitId
(),
0
);
TaskBto
countyDetailTask
=
new
TaskBto
(
CHECK_DETAIL_
REGION_
0
.
id
,
countyUnit
.
getName
()
+
"自动核查自查"
,
cityStatTask
.
getId
(),
addNode
(
cityStatTask
.
getNodeIdDetail
(),
cityStatTask
.
getId
()),
CONFIRM_CHECK_DETAIL
.
id
,
countyDetail
.
getId
(),
countyUnit
.
getUnitId
(),
0
);
countyDetailTask
.
setCustomInfo
(
"auto"
);
countyDetailTask
=
taskService
.
start
(
countyDetailTask
);
resultIds
.
get
(
"taskId"
).
add
(
countyDetailTask
.
getId
());
...
...
dev-confirmcheck/src/main/java/com/tykj/dev/device/confirmcheck/utils/ObjTransUtil.java
浏览文件 @
9e96a44c
...
...
@@ -137,7 +137,6 @@ public class ObjTransUtil {
// 构建完成情况参数 未完成数量/总数
// 获得当前节点的子节点总数 = 总数 其中状态为9999的为已完成
//
TaskBto
fatherTask
=
taskService
.
get
(
stat
.
getId
(),
BusinessEnum
.
CONFIRM_CHECK_STAT
.
id
);
Integer
fatherTaskId
=
fatherTask
.
getId
();
...
...
dev-file/src/main/java/com/tykj/dev/device/file/service/Impl/UseReportFIleServiceImpl.java
浏览文件 @
9e96a44c
...
...
@@ -76,7 +76,7 @@ public class UseReportFIleServiceImpl implements UseReportFIleService {
params
.
put
(
"TitleTimeStart"
,
wrodParameter
.
getTitleTimeStart
());
params
.
put
(
"TitleUnitName"
,
wrodParameter
.
getTitleUnitName
());
String
fileName
=
wrodParameter
.
getTitleTimeStart
()+
"至"
+
wrodParameter
.
getTitleTimeEnd
()+
"使用报告"
+
".doc"
;
String
templatePath
=
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
docModel
;
String
templatePath
=
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"docTemplate/"
+
docModel
;
url
=
url
+
"report/"
;
String
uuidName
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
)
+
".doc"
;
String
fileUrl
=
WordUtil
.
createWord
(
templatePath
,
url
,
uuidName
,
params
);
...
...
@@ -201,11 +201,10 @@ public class UseReportFIleServiceImpl implements UseReportFIleService {
}
catch
(
FileNotFoundException
e
)
{
log
.
error
(
file
.
getAbsolutePath
()
+
"文件不存在"
);
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
//log.error(file.getAbsolutePath() + "文件读取异常");
log
.
error
(
file
.
getAbsolutePath
()
+
"文件用户终止下载"
);
e
.
printStackTrace
();
}
finally
{
try
{
bs
.
close
();
...
...
dev-file/src/main/java/com/tykj/dev/device/file/util/JavaToPdfHtmlFreeMarker.java
浏览文件 @
9e96a44c
...
...
@@ -63,7 +63,7 @@ public class JavaToPdfHtmlFreeMarker {
freemarkerCfg
=
new
Configuration
();
//freemarker的模板目录
try
{
freemarkerCfg
.
setDirectoryForTemplateLoading
(
new
File
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()));
freemarkerCfg
.
setDirectoryForTemplateLoading
(
new
File
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()
+
"htmlTemplate/"
));
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -118,8 +118,8 @@ public class JavaToPdfHtmlFreeMarker {
renderer
.
setDocument
(
htmlFile
);
// 解决中文不显示问题
ITextFontResolver
fontResolver
=
renderer
.
getFontResolver
();
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"simhei.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"simhei2.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"
font/
simhei.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"
font/
simhei2.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
renderer
.
layout
();
renderer
.
createPDF
(
os
);
PdfReader
pdfReader
=
new
PdfReader
(
os
.
toByteArray
());
...
...
@@ -162,8 +162,8 @@ public class JavaToPdfHtmlFreeMarker {
renderer
.
setDocument
(
htmlFile
);
// 解决中文不显示问题
ITextFontResolver
fontResolver
=
renderer
.
getFontResolver
();
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"simhei.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"simhei2.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"
font/
simhei.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
fontResolver
.
addFont
(
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()+
"
font/
simhei2.ttf"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
renderer
.
layout
();
renderer
.
createPDF
(
os
);
PdfReader
pdfReader
=
new
PdfReader
(
os
.
toByteArray
());
...
...
dev-file/src/main/resources/bill.html
deleted
100755 → 0
浏览文件 @
24f8bc90
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<title>
Document
</title>
<style>
body
{
font-family
:
SimHei
;
}
/*
@page
{
size
:
297mm
210mm
;}
<!
--
设置
PDF
页面大小,此配置只对生成
PDF
文件有效,不会对页面显示生效
--
>*/
@page
{
size
:
297mm
210mm
;
//纸张大小A4
/*margin: 0.25in;*/
/*-fs-flow-bottom: "footer";*/
/*-fs-flow-left: "left";*/
/*-fs-flow-right: "right";*/
/*border: thin solid black;*/
/*padding: 1em;*/
}
#footer
{
font-size
:
90%
;
font-style
:
italic
;
position
:
absolute
;
top
:
0
;
left
:
0
;
-fs-move-to-flow
:
"footer"
;
}
#pagenumber
:before
{
content
:
counter
(
page
);
}
#pagecount
:before
{
content
:
counter
(
pages
);
}
.returnTablePrint
{
width
:
100%
;
height
:
100%
;
overflow
:
hidden
;
color
:
#000
;
cursor
:
default
;
}
.returnTablePrint
.content
{
width
:
100%
;
height
:
100%
;
/* background: url("../../../assets/img/detailsBg.png") no-repeat; */
/*background-size: 100% 100%;*/
/*padding: 30px;*/
/*box-sizing: border-box;*/
}
.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
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
height
:
calc
(
100%
-
70px
);
/*padding: 10px 30px;*/
box-sizing
:
border-box
;
}
.returnTablePrint
.list
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
/* height: calc(100% - 75px); */
height
:
calc
(
100%
-
12px
)
}
.returnTablePrint
.title
{
width
:
100%
;
font-size
:
20px
;
text-align
:
center
;
position
:
relative
;
margin
:
0
0
15px
;
padding
:
0
20px
;
box-sizing
:
border-box
;
}
.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
:
20px
;
color
:
#646464
;
}
.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
:
calc
(
100%
-
90px
);
border
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.line1
{
width
:
100%
;
font-size
:
20px
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
#7f7f7f
;
color
:
#000
;
line-height
:
60px
;
}
.returnTablePrint
.line1
.sendTo
{
display
:
inline-block
;
width
:
49%
;
text-indent
:
20px
;
box-sizing
:
border-box
;
/*padding-left: 20px;*/
}
.returnTablePrint
.line1
.sendNum
{
display
:
inline-block
;
width
:
49%
;
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
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
.line2
{
height
:
100%
;
/* padding: 20px; */
border-bottom
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.tableList
{
height
:
300px
;
}
.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
{
width
:
100%
;
/* box-sizing: border-box; */
/*height:150px;*/
/*display: flex;*/
/* height:170px; */
/* padding:20px 0 20px 0; */
}
.returnTablePrint
.line3
.left
{
display
:
inline-block
;
width
:
49%
;
box-sizing
:
border-box
;
/*padding-left: 20px;*/
position
:
relative
;
}
.returnTablePrint
.line3
.right
{
display
:
inline-block
;
width
:
50%
;
box-sizing
:
border-box
;
/*padding-left: 20px;*/
position
:
relative
;
}
.returnTablePrint
.line3
.left
{
border-right
:
1px
solid
#7f7f7f
;
/*padding-bottom: 40px;*/
}
.returnTablePrint
.line3
.left
>
span
{
text-indent
:
10px
;
}
.returnTablePrint
.line3
.left
>
span
,
.returnTablePrint
.line3
.right
>
span
{
display
:
block
;
margin
:
15px
0px
;
}
.returnTablePrint
.line3
.right
{
height
:
100%
;
}
.returnTablePrint
.line3
.left
>
span
>
span
:nth-child
(
2
),
.returnTablePrint
.line3
.right
>
span
>
span
:nth-child
(
2
)
{
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
.line3
i
{
display
:
block
;
text-align
:
right
;
position
:
absolute
;
right
:
5px
;
bottom
:
5px
;
font-style
:
normal
;
}
.returnTablePrint
.line3
.right
i
{
font-style
:
normal
;
/* right: -10px;
bottom: -60px; */
}
.returnTablePrint
.line3
i
>
span
>
span
{
display
:
block
;
}
.returnTablePrint
>>>
.el-scrollbar__wrap
{
overflow-x
:
hidden
;
margin-bottom
:
0
;
}
.returnTablePrint
.checkName
span
:nth-child
(
2
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
>>>
.el-table
tbody
.cell
{
color
:
#141414
;
}
.returnTablePrint
.label
{
color
:
#646464
;
font-size
:
20px
;
;
}
.returnTablePrint
.value
{
color
:
#000
;
font-size
:
20px
;
;
}
.returnTablePrint
.main-title
{
font-size
:
28px
;
color
:
#000000
;
margin-bottom
:
20px
;
text-align
:
center
;
}
.returnTablePrint
.footer
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
0
40px
;
box-sizing
:
border-box
;
}
.button-submit
{
margin-left
:
50px
;
}
table
.altrowstable
{
width
:
100%
;
font-size
:
20px
;
color
:
#141414
;
border-width
:
0px
;
border-color
:
#a9c6c9
;
border-collapse
:
collapse
;
text-align
:
center
;
/*table-layout: fixed;*/
/*word-break:break-all;*/
}
table
.altrowstable
th
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
}
table
.altrowstable
td
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
/*word-break:break-all;*/
/*word-wrap : break-word;*/
}
.oddrowcolor
{
background-color
:
#fff
;
}
.evenrowcolor
{
background-color
:
#fafafa
;
}
</style>
</head>
<body>
<!--<div id="footer" style=""> Page <span id="pagenumber"/> of <span id="pagecount"/> </div>-->
<div
class=
"returnTablePrint"
>
<div
class=
"content"
>
<div>
<div
class=
"listWrapper"
>
<div
class=
"list"
>
<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"
>
${number}
</span>
</div>
<div
style=
"text-align:center;display: inline-block; width: 29%"
class=
"number"
>
<span
>
${ul}
</span>
</div>
<div
style=
"text-align:right;display: inline-block; width: 33%"
class=
"number"
>
<span>
机密
</span>
</div>
</div>
</p>
<div
class=
"listCon"
>
<div
class=
"line1"
>
<span
class=
"sendTo"
>
<span>
发往:
</span>
<span>
${receiveUnit}
</span>
</span>
<span
class=
"sendNum"
>
<span>
批复文号:
</span>
<span>
${replyNum}
</span>
</span>
</div>
<div
class=
"line2 tableList"
>
<table
class=
"altrowstable"
id=
"alternatecolor"
>
<tr>
<th>
型号
</th><th>
形态
</th><th>
密级
</th><th>
应用领域
</th><th>
数量
</th><th>
装备序列号
</th><th>
备注
</th>
</tr>
<
#
list
documentDevices
as
dev
>
<tr>
<td>
${dev.model}
</td><td>
${dev.parts}
</td><td>
${dev.securityClassification}
</td><td>
${dev.applicationField}
</td><td>
${dev.count}
</td><td>
${dev.deviceSerialNumber}
</td><td>
${dev.remark}
</td>
</tr>
</
#
list>
</table>
</div>
<div
class=
"line3"
>
<span
class=
"left"
>
<span>
<span
class=
"label"
>
发件单位:
</span>
<span
class=
"value"
>
${senderUnit}
</span>
</span>
<span>
<span
class=
"label"
>
签发人:
</span>
<span
class=
"value"
></span>
</span>
<span>
<span
class=
"label"
>
经办人:
</span>
<span
class=
"value"
></span>
</span>
<i>
<span
style=
"position: relative;color: #646464"
>
<span
style=
"margin-bottom: 20px;"
>
(公章)
</span>
<span><span
style=
"color: #fff;"
>
1234
</span>
年
<span
style=
"color: #fff;"
>
0121
</span>
月
<span
style=
"color: #fff;"
>
0232
</span>
日
</span>
<div
style=
"position: absolute"
>
<div
id=
"pos0"
></div>
</div>
</span>
</i>
</span>
<span
class=
"right"
>
<span>
<span
class=
"label"
>
收件单位:
</span>
<span
class=
"value"
>
${receiveUnit}
</span>
</span>
<span>
<span
class=
"label"
>
经办人:
</span>
<span
class=
"value"
>
xxxxxx
</span>
</span>
<span>
<span
class=
"label"
>
经办人:
</span>
<span
class=
"value"
></span>
</span>
<i>
<span
style=
"color: #646464"
>
<span
style=
"margin-bottom: 20px;"
>
(公章)
</span>
<span><span
style=
"color: #fff;"
>
1234
</span>
年
<span
style=
"color: #fff;"
>
0121
</span>
月
<span
style=
"color: #fff;"
>
0232
</span>
日
</span>
</span>
</i>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--<script type="text/javascript">-->
<!--function altRows(id){-->
<!--if(document.getElementsByTagName){-->
<!--var table = document.getElementById(id);-->
<!--var rows = table.getElementsByTagName("tr");-->
<!--for(i = 0; i < rows.length; i++){-->
<!--if(i % 2 == 0){-->
<!--rows[i].className = "evenrowcolor";-->
<!--}else{-->
<!--rows[i].className = "oddrowcolor";-->
<!--}-->
<!--}-->
<!--}-->
<!--}-->
<!--window.onload=function(){-->
<!--altRows('alternatecolor');-->
<!--}-->
<!--</script>-->
</body>
</html>
\ No newline at end of file
dev-file/src/main/resources/bill1.html
deleted
100755 → 0
浏览文件 @
24f8bc90
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<title>
Document
</title>
<style>
body
{
font-family
:
SimHei
;
}
/*
@page
{
size
:
297mm
210mm
;}
<!
--
设置
PDF
页面大小,此配置只对生成
PDF
文件有效,不会对页面显示生效
--
>*/
@page
{
size
:
297mm
210mm
;
/*margin: 0.25in;*/
/*-fs-flow-bottom: "footer";*/
/*-fs-flow-left: "left";*/
/*-fs-flow-right: "right";*/
/*border: thin solid black;*/
/*padding: 1em;*/
}
#footer
{
font-size
:
90%
;
font-style
:
italic
;
position
:
absolute
;
top
:
0
;
left
:
0
;
-fs-move-to-flow
:
"footer"
;
}
#pagenumber
:before
{
content
:
counter
(
page
);
}
#pagecount
:before
{
content
:
counter
(
pages
);
}
.returnTablePrint
{
width
:
100%
;
height
:
100%
;
overflow
:
hidden
;
color
:
#000
;
cursor
:
default
;
}
.returnTablePrint
.content
{
width
:
100%
;
height
:
100%
;
/* background: url("../../../assets/img/detailsBg.png") no-repeat; */
/*background-size: 100% 100%;*/
/*padding: 30px;*/
/*box-sizing: border-box;*/
}
.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
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
height
:
calc
(
100%
-
70px
);
/*padding: 10px 30px;*/
box-sizing
:
border-box
;
}
.returnTablePrint
.list
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
/* height: calc(100% - 75px); */
height
:
calc
(
100%
-
12px
)
}
.returnTablePrint
.title
{
width
:
100%
;
font-size
:
20px
;
text-align
:
center
;
position
:
relative
;
margin
:
0
0
15px
;
padding
:
0
20px
;
box-sizing
:
border-box
;
}
.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
:
20px
;
color
:
#646464
;
}
.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
:
calc
(
100%
-
90px
);
border
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.line1
{
width
:
100%
;
font-size
:
20px
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
#7f7f7f
;
color
:
#000
;
line-height
:
60px
;
}
.returnTablePrint
.line1
.sendTo
{
display
:
inline-block
;
width
:
33%
;
text-indent
:
20px
;
box-sizing
:
border-box
;
/*padding-left: 20px;*/
}
.returnTablePrint
.line1
.sendNum
{
display
:
inline-block
;
width
:
33%
;
box-sizing
:
border-box
;
text-indent
:
20px
;
border-left
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.line1
.sendTo
span
:nth-child
(
2
),
.returnTablePrint
.line1
.sendNum
span
:nth-child
(
2
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
.line2
{
height
:
100%
;
/* padding: 20px; */
border-bottom
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.tableList
{
height
:
300px
;
}
.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
{
width
:
100%
;
/* box-sizing: border-box; */
/*height:150px;*/
/*display: flex;*/
/* height:170px; */
/* padding:20px 0 20px 0; */
}
.returnTablePrint
.line3
.left
{
display
:
inline-block
;
width
:
calc
(
25%
-
3px
);
box-sizing
:
border-box
;
/*padding-left: 20px;*/
position
:
relative
;
}
.returnTablePrint
.line3
.left
{
border-right
:
1px
solid
#7f7f7f
;
/*padding-bottom: 40px;*/
}
.returnTablePrint
.line3
.left
:last-child
{
border-right
:
none
;
/*padding-bottom: 40px;*/
}
.returnTablePrint
.line3
.left
>
span
{
text-indent
:
10px
;
}
.returnTablePrint
.line3
.left
>
span
{
display
:
block
;
margin
:
15px
0px
;
}
.returnTablePrint
.line3
.left
>
span
>
span
:nth-child
(
2
)
{
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
.line3
i
{
display
:
block
;
text-align
:
right
;
position
:
absolute
;
right
:
5px
;
bottom
:
5px
;
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
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
>>>
.el-table
tbody
.cell
{
color
:
#141414
;
}
.returnTablePrint
.label
{
color
:
#646464
;
font-size
:
20px
;
;
}
.returnTablePrint
.value
{
color
:
#000
;
font-size
:
20px
;
;
}
.returnTablePrint
.main-title
{
font-size
:
28px
;
color
:
#000000
;
margin-bottom
:
20px
;
text-align
:
center
;
}
.returnTablePrint
.footer
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
0
40px
;
box-sizing
:
border-box
;
}
.button-submit
{
margin-left
:
50px
;
}
table
.altrowstable
{
width
:
100%
;
font-size
:
20px
;
color
:
#141414
;
border-width
:
0px
;
border-color
:
#a9c6c9
;
border-collapse
:
collapse
;
text-align
:
center
;
/*table-layout: fixed;*/
/*word-break:break-all;*/
}
table
.altrowstable
th
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
}
table
.altrowstable
td
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
/*word-break:break-all;*/
/*word-wrap : break-word;*/
}
.oddrowcolor
{
background-color
:
#fff
;
}
.evenrowcolor
{
background-color
:
#fafafa
;
}
tr
:nth-child
(
odd
)
{
background
:
#fafafa
;
}
</style>
</head>
<body>
<!--<div id="footer" style=""> Page <span id="pagenumber"/> of <span id="pagecount"/> </div>-->
<div
class=
"returnTablePrint"
>
<div
class=
"content"
>
<div>
<div
class=
"listWrapper"
>
<div
class=
"list"
>
<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"
>
${number}
</span>
</div>
<div
style=
"text-align:center;display: inline-block; width: 29%"
class=
"number"
>
<span
>
${ul}
</span>
</div>
<div
style=
"text-align:right;display: inline-block; width: 33%"
class=
"number"
>
<span>
机密
</span>
</div>
</div>
</p>
<div
class=
"listCon"
>
<div
class=
"line1"
>
<span
class=
"sendTo"
>
<span>
销毁单位:
</span>
<span>
${receiveUnit}
</span>
</span>
<span
class=
"sendNum"
>
<span>
型号:
</span>
<span>
${replyNum}
</span>
</span>
<span
class=
"sendNum"
>
<span>
名称:
</span>
<span>
${replyNum}
</span>
</span>
</div>
<div
class=
"line2 tableList"
>
<table
class=
"altrowstable"
id=
"alternatecolor"
>
<tr>
<th>
型号
</th><th>
形态
</th>
>
<th>
密级
</th><th>
应用领域
</th><th>
数量
</th><th>
装备序列号
</th><th>
备注
</th>
</tr>
<
#
list
documentDevices
as
dev
>
<tr>
<td>
${dev.model}
</td><td>
${dev.parts}
</td><td>
${dev.securityClassification}
</td><td>
${dev.applicationField}
</td><td>
${dev.count}
</td><td>
${dev.deviceSerialNumber}
</td><td>
${dev.remark}
</td>
</tr>
</
#
list>
</table>
</div>
<div
class=
"line3"
>
<span
class=
"left"
>
<span>
<span
class=
"label"
>
监销人:
</span>
<span
class=
"value"
>
${senderUnit}
</span>
</span>
</span>
<span
class=
"left"
>
<span>
<span
class=
"label"
>
主管领导:
</span>
<span
class=
"value"
>
${senderUnit}
</span>
</span>
</span>
<span
class=
"left"
>
<span>
<span
class=
"label"
>
经办人:
</span>
<span
class=
"value"
>
${senderUnit}
</span>
</span>
</span>
<span
class=
"left"
>
<span>
<span
class=
"label"
>
承办人:
</span>
<span
class=
"value"
>
${senderUnit}
</span>
</span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script
type=
"text/javascript"
>
function
altRows
(
id
){
if
(
document
.
getElementsByTagName
){
var
table
=
document
.
getElementById
(
id
);
var
rows
=
table
.
getElementsByTagName
(
"tr"
);
for
(
i
=
0
;
i
<
rows
.
length
;
i
++
){
if
(
i
%
2
==
0
){
rows
[
i
].
className
=
"evenrowcolor"
;
}
else
{
rows
[
i
].
className
=
"oddrowcolor"
;
}
}
}
}
window
.
onload
=
function
(){
altRows
(
'alternatecolor'
);
}
</script>
</body>
</html>
\ No newline at end of file
dev-file/src/main/resources/bill2.html
deleted
100755 → 0
浏览文件 @
24f8bc90
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<title>
Document
</title>
<style>
body
{
font-family
:
SimHei
;
}
/*
@page
{
size
:
297mm
210mm
;}
<!
--
设置
PDF
页面大小,此配置只对生成
PDF
文件有效,不会对页面显示生效
--
>*/
@page
{
size
:
210mm
297mm
;
/*margin: 0.25in;*/
/*-fs-flow-bottom: "footer";*/
/*-fs-flow-left: "left";*/
/*-fs-flow-right: "right";*/
/*border: thin solid black;*/
/*padding: 1em;*/
}
#footer
{
font-size
:
90%
;
font-style
:
italic
;
position
:
absolute
;
top
:
0
;
left
:
0
;
-fs-move-to-flow
:
"footer"
;
}
#pagenumber
:before
{
content
:
counter
(
page
);
}
#pagecount
:before
{
content
:
counter
(
pages
);
}
.returnTablePrint
{
width
:
100%
;
height
:
100%
;
overflow
:
hidden
;
color
:
#000
;
cursor
:
default
;
}
.returnTablePrint
.content
{
width
:
100%
;
height
:
100%
;
/* background: url("../../../assets/img/detailsBg.png") no-repeat; */
/*background-size: 100% 100%;*/
/*padding: 30px;*/
/*box-sizing: border-box;*/
}
.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
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
height
:
calc
(
100%
-
70px
);
/*padding: 10px 30px;*/
box-sizing
:
border-box
;
}
.returnTablePrint
.list
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
/* height: calc(100% - 75px); */
height
:
calc
(
100%
-
12px
)
}
.returnTablePrint
.title
{
width
:
100%
;
font-size
:
20px
;
text-align
:
center
;
position
:
relative
;
margin
:
0
0
15px
;
padding
:
0
20px
;
box-sizing
:
border-box
;
}
.returnTablePrint
.title
span
:nth-child
(
2
)
{
font-size
:
28px
;
color
:
#000000
;
}
.returnTablePrint
.title
span
:nth-child
(
2
)
span
{
font-size
:
20px
;
color
:
#141414
;
}
.returnTablePrint
.main-title
{
font-size
:
28px
;
color
:
#000000
;
margin-bottom
:
20px
;
text-align
:
center
;
}
table
.altrowstable
{
width
:
100%
;
font-size
:
20px
;
color
:
#141414
;
border-width
:
0px
;
border-color
:
#a9c6c9
;
border-collapse
:
collapse
;
text-align
:
center
;
/*table-layout: fixed;*/
/*word-break:break-all;*/
}
table
.altrowstable
th
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
}
table
.altrowstable
td
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
/*word-break:break-all;*/
/*word-wrap : break-word;*/
}
.oddrowcolor
{
background-color
:
#fff
;
}
.evenrowcolor
{
background-color
:
#fafafa
;
}
.person
{
color
:
#4a475b
;
text-align
:
right
;
font-size
:
18pt
;
}
.person
>
span
{
display
:
inline-block
;
margin-right
:
30pt
;
}
tr
:nth-child
(
odd
)
{
background
:
#fafafa
;
}
</style>
</head>
<body>
<!--<div id="footer" style=""> Page <span id="pagenumber"/> of <span id="pagecount"/> </div>-->
<div
class=
"returnTablePrint"
>
<div
class=
"content"
>
<div>
<div
class=
"listWrapper"
>
<div
class=
"list"
>
<p
class=
"title"
>
<div
class=
"main-title"
>
<span>
${title}
</span>
</div>
</p>
<table
class=
"altrowstable"
id=
"alternatecolor"
>
<tr>
<th>
序号
</th><th>
型号
</th><th>
形态
</th><th>
密级
</th><th>
应用领域
</th><th>
装备序列号
</th>
</tr>
<
#
list
documentDevices
as
dev
>
<tr>
<td>
${dev.model}
</td><td>
${dev.model}
</td><td>
${dev.parts}
</td><td>
${dev.category}
</td><td>
${dev.securityClassification}
</td><td>
${dev.applicationField}
</td>
</tr>
</
#
list>
</table>
</div>
<p
class=
"person"
style=
"margin-top: 50px"
>
<span
style=
"width: 200px;text-align: left"
>
经办人:
</span>
<span
style=
"width: 200px;text-align: left"
>
审核人:
</span>
</p>
</div>
</div>
</div>
</div>
<!--<script type="text/javascript">-->
<!--function altRows(id){-->
<!--if(document.getElementsByTagName){-->
<!--var table = document.getElementById(id);-->
<!--var rows = table.getElementsByTagName("tr");-->
<!--for(i = 0; i < rows.length; i++){-->
<!--if(i % 2 == 0){-->
<!--rows[i].className = "evenrowcolor";-->
<!--}else{-->
<!--rows[i].className = "oddrowcolor";-->
<!--}-->
<!--}-->
<!--}-->
<!--}-->
<!--window.onload=function(){-->
<!--altRows('alternatecolor');-->
<!--}-->
<!--</script>-->
</body>
</html>
\ No newline at end of file
dev-file/src/main/resources/bill3.html
deleted
100755 → 0
浏览文件 @
24f8bc90
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<title>
Document
</title>
<style>
body
{
font-family
:
SimHei
;
margin
:
0
;
padding
:
0
;
}
/*
@page
{
size
:
297mm
210mm
;}
<!
--
设置
PDF
页面大小,此配置只对生成
PDF
文件有效,不会对页面显示生效
--
>*/
@page
{
size
:
297mm
210mm
;
}
.bottomTxt
{
text-align
:
center
;
font-size
:
10px
;
color
:
#646464
;
height
:
10px
;
line-height
:
10px
;
}
.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; */
padding
:
0
20px
;
box-sizing
:
border-box
;
}
/* .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
:
12px
;
color
:
#646464
;
}
/* .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
:
12px
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
#7f7f7f
;
color
:
#000
;
line-height
:
20px
;
}
.returnTablePrint
.line1
.sendTo
{
display
:
inline-block
;
width
:
49%
;
text-indent
:
5px
;
box-sizing
:
border-box
;
/*padding-left: 20px;*/
}
.returnTablePrint
.line1
.sendNum
{
display
:
inline-block
;
width
:
49%
;
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
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
5px
;
}
.returnTablePrint
.line2
{
height
:
100%
;
/* padding: 20px; */
border-bottom
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.tableList
{
height
:
546px
;
}
.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
{
width
:
100%
;
height
:
70px
;
/* box-sizing: border-box; */
/*height:150px;*/
/*display: flex;*/
/* height:170px; */
/* padding:20px 0 20px 0; */
}
.returnTablePrint
.line3
.left
{
display
:
inline-block
;
width
:
25%
;
box-sizing
:
border-box
;
/*padding-left: 20px;*/
position
:
relative
;
line-height
:
70px
;
}
.returnTablePrint
.line3
.left
{
border-right
:
1px
solid
#7f7f7f
;
/*padding-bottom: 40px;*/
}
.returnTablePrint
.line3
.left
:last-child
{
border-right
:
none
;
/*padding-bottom: 40px;*/
}
.returnTablePrint
.line3
.left
>
span
{
display
:
block
;
/* margin: 15px 0px; */
}
.returnTablePrint
.line3
.left
>
span
>
span
:nth-child
(
2
)
{
display
:
inline-block
;
margin-left
:
10px
;
}
.returnTablePrint
>>>
.el-scrollbar__wrap
{
overflow-x
:
hidden
;
margin-bottom
:
0
;
}
.returnTablePrint
.checkName
span
:nth-child
(
2
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
>>>
.el-table
tbody
.cell
{
color
:
#141414
;
}
.returnTablePrint
.label
{
color
:
#646464
;
font-size
:
12px
;
}
.returnTablePrint
.value
{
color
:
#000
;
font-size
:
12px
;
}
.returnTablePrint
.main-title
{
font-size
:
20px
;
color
:
#000000
;
line-height
:
20px
;
text-align
:
center
;
}
.returnTablePrint
.footer
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
0
40px
;
box-sizing
:
border-box
;
}
.button-submit
{
margin-left
:
50px
;
}
table
.altrowstable
{
width
:
100%
;
font-size
:
11px
;
color
:
#141414
;
border-width
:
0px
;
border-color
:
#a9c6c9
;
border-collapse
:
collapse
;
text-align
:
center
;
table-layout
:
fixed
;
word-break
:
break-all
;
}
table
.altrowstable
th
{
border-width
:
0px
;
padding
:
5px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
background-color
:
#dedede
;
}
table
.altrowstable
td
{
border-width
:
0px
;
padding
:
5px
;
/*border-style: solid;*/
/*border-color: #a9c6c9;*/
word-break
:
break-all
;
word-wrap
:
break-word
;
border-bottom
:
1px
solid
#bebebe
;
}
.oddrowcolor
{
background-color
:
#fff
;
}
.evenrowcolor
{
background-color
:
#fafafa
;
}
/*tr:nth-child(odd) {*/
/* background: #fafafa;*/
/*}*/
</style>
</head>
<body>
<div
class=
"returnTablePrint"
>
<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%;text-align:left"
>
<div
style=
"text-align:left;display: inline-block; width: 32%"
class=
"number"
>
<span
class=
"number"
>
时间:${number}
</span>
</div>
<div
style=
"text-align:center;display: inline-block; width: 32%"
class=
"number"
>
<span></span>
</div>
<div
style=
"text-align:right;display: inline-block; width: 28%"
class=
"number"
>
<span>
机密
</span>
</div>
</div>
</div>
<div
class=
"listCon"
>
<!-- <div class="line1">
<span class="sendTo">
<span>发往:</span>
<span>${receiveUnit}</span>
</span>
<span class="sendNum">
<span>批复文号:</span>
<span>${replyNum}</span>
</span>
</div> -->
<div
class=
"line2 tableList"
>
<table
class=
"altrowstable"
id=
"alternatecolor"
>
<tr>
<th>
序号
</th><th>
型号
</th><th>
名称
</th><th>
在库
</th><th>
维修
</th><th>
报废
</th><th>
清退
</th><th>
其他
</th><th
style=
"width: 300px;"
>
装备序列号
</th>
</tr>
<
#
list
documentDevices
as
dev
>
<tr>
<td>
<
#
if
dev
.
code
!=
0
>
${dev.code}
</
#
if>
</td>
<td>
${dev.model}
</td><td>
${dev.name}
</td><td>
${dev.inLibrary}
</td><td>
${dev.maintenance}
</td><td>
${dev.scrap}
</td><td>
${dev.repel}
</td><td>
${dev.other}
</td>
<td>
<
#
if
dev
.
count
!=
0
>
${dev.count}
</
#
if>
</td>
<td>
${dev.deviceSerialNumber}
</td>
</tr>
</
#
list>
</table>
</div>
<div
class=
"line3"
style=
"position: relative;"
>
<span
class=
"left"
>
<span>
<span
style=
"position: absolute; top: -20px; left: 8px;"
class=
"label"
>
监销人:
</span>
<span
class=
"value"
></span>
</span>
</span>
<span
class=
"left"
>
<span>
<span
style=
"position: absolute; top: -20px; left: 8px;"
class=
"label"
>
主管领导:
</span>
<span
class=
"value"
></span>
</span>
</span>
<span
class=
"left"
style=
"width: 23%;"
>
<span>
<span
style=
"position: absolute; top: -20px; left: 8px;"
class=
"label"
>
经办人:
</span>
<span
class=
"value"
></span>
</span>
</span>
<span
class=
"left"
style=
"width: 23%;"
>
<span>
<span
style=
"position: absolute; top: -20px; left: 8px;"
class=
"label"
>
承办人:
</span>
<span
class=
"value"
></span>
</span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<p
class=
"bottomTxt"
>
第1页/共1页
</p
>
</div>
<!--<script type="text/javascript">-->
<!--function altRows(id){-->
<!--if(document.getElementsByTagName){-->
<!--var table = document.getElementById(id);-->
<!--var rows = table.getElementsByTagName("tr");-->
<!--for(i = 0; i < rows.length; i++){-->
<!--if(i % 2 == 0){-->
<!--rows[i].className = "evenrowcolor";-->
<!--}else{-->
<!--rows[i].className = "oddrowcolor";-->
<!--}-->
<!--}-->
<!--}-->
<!--}-->
<!--window.onload=function(){-->
<!--altRows('alternatecolor');-->
<!--}-->
<!--</script>-->
</body>
</html>
\ No newline at end of file
dev-file/src/main/resources/docxModel.docx
deleted
100644 → 0
浏览文件 @
24f8bc90
File deleted
dev-file/src/main/resources/template_freemarker.html
deleted
100644 → 0
浏览文件 @
24f8bc90
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<title>
Title
</title>
<style>
body
{
font-family
:
SimHei
;
}
.blue
{
color
:
blue
;
}
</style>
</head>
<body>
<div
class=
"blue"
>
你好,${name}
</div>
<div>
<
#
list
userList
as
user
>
用户名:${user.name}
密 码:${user.code}
年 龄: ${user.age}
</
#
list>
</div>
</body>
</html>
\ No newline at end of file
dev-file/src/main/resources/test.html
deleted
100644 → 0
浏览文件 @
24f8bc90
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<title>
Document
</title>
<style>
body
{
font-family
:
SimHei
;
}
.returnTablePrint
{
width
:
100%
;
height
:
100%
;
overflow
:
hidden
;
color
:
#000
;
cursor
:
default
;
}
.returnTablePrint
.content
{
height
:
calc
(
100%
-
70px
);
width
:
100%
;
/* background: url("../../../assets/img/detailsBg.png") no-repeat; */
background-size
:
100%
100%
;
padding
:
30px
;
box-sizing
:
border-box
;
}
.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
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
height
:
calc
(
100%
-
70px
);
padding
:
30px
;
box-sizing
:
border-box
;
}
.returnTablePrint
.list
{
/* width: 92%; */
margin
:
0
auto
;
/* padding: 0px 20px 20px 20px; */
/* height: calc(100% - 75px); */
height
:
calc
(
100%
-
12px
)
}
.returnTablePrint
.title
{
width
:
100%
;
font-size
:
20px
;
text-align
:
center
;
position
:
relative
;
margin
:
15px
0
;
padding
:
0
20px
;
box-sizing
:
border-box
;
}
.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
:
20px
;
color
:
#646464
;
}
.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
:
calc
(
100%
-
90px
);
border
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.line1
{
width
:
100%
;
font-size
:
20px
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
#7f7f7f
;
color
:
#000
;
line-height
:
60px
;
}
.returnTablePrint
.line1
.sendTo
{
display
:
inline-block
;
width
:
50%
;
box-sizing
:
border-box
;
padding-left
:
20px
;
}
.returnTablePrint
.line1
.sendNum
{
display
:
inline-block
;
width
:
49%
;
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
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
.line2
{
height
:
100%
;
/* padding: 20px; */
border-bottom
:
1px
solid
#7f7f7f
;
}
.returnTablePrint
.tableList
{
height
:
300px
;
}
.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
{
width
:
100%
;
/* box-sizing: border-box; */
height
:
150px
;
display
:
flex
;
/* height:170px; */
/* padding:20px 0 20px 0; */
}
.returnTablePrint
.line3
.left
,
.returnTablePrint
.line3
.right
{
display
:
inline-block
;
width
:
50%
;
box-sizing
:
border-box
;
padding-left
:
20px
;
position
:
relative
;
}
.returnTablePrint
.line3
.left
{
border-right
:
1px
solid
#7f7f7f
;
padding-bottom
:
40px
;
}
.returnTablePrint
.line3
.left
>
span
,
.returnTablePrint
.line3
.right
>
span
{
display
:
block
;
margin
:
15px
0px
;
}
.returnTablePrint
.line3
.right
{
height
:
100%
;
}
.returnTablePrint
.line3
.left
>
span
>
span
:nth-child
(
2
),
.returnTablePrint
.line3
.right
>
span
>
span
:nth-child
(
2
)
{
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
.line3
i
{
display
:
block
;
text-align
:
right
;
position
:
absolute
;
right
:
20px
;
bottom
:
20px
;
}
.returnTablePrint
.line3
.right
i
{
/* right: -10px;
bottom: -60px; */
}
.returnTablePrint
.line3
i
>
span
>
span
{
display
:
block
;
}
.returnTablePrint
>>>
.el-scrollbar__wrap
{
overflow-x
:
hidden
;
margin-bottom
:
0
;
}
.returnTablePrint
.checkName
span
:nth-child
(
2
)
{
color
:
#4a475d
;
display
:
inline-block
;
margin-left
:
20px
;
}
.returnTablePrint
>>>
.el-table
tbody
.cell
{
color
:
#141414
;
}
.returnTablePrint
.label
{
color
:
#646464
;
font-size
:
20px
;
;
}
.returnTablePrint
.value
{
color
:
#000
;
font-size
:
20px
;
;
}
.returnTablePrint
.main-title
{
font-size
:
28px
;
color
:
#000000
;
margin-bottom
:
20px
;
text-align
:
center
;
}
.returnTablePrint
.footer
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
0
40px
;
box-sizing
:
border-box
;
}
.button-submit
{
margin-left
:
50px
;
}
table
.altrowstable
{
width
:
100%
;
font-size
:
20px
;
color
:
#141414
;
border-width
:
0px
;
border-color
:
#a9c6c9
;
border-collapse
:
collapse
;
text-align
:
center
;
}
table
.altrowstable
th
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
}
table
.altrowstable
td
{
border-width
:
0px
;
padding
:
8px
;
border-style
:
solid
;
border-color
:
#a9c6c9
;
}
.oddrowcolor
{
background-color
:
#fff
;
}
.evenrowcolor
{
background-color
:
#fafafa
;
}
</style>
</head>
<body>
<div>
阿苏妲己卡迪拉克家啊顺利到家啦睡觉啦
</div>
<div
class=
"returnTablePrint"
>
<div
class=
"content"
>
<div>
<div
class=
"listWrapper"
>
<div
class=
"list"
>
<p
class=
"title"
>
<div
class=
"main-title"
>
<span>
密码装备清退单
</span>
</div>
<div
style=
"width:100%;align-items: center;display: flex;"
>
<div
style=
"text-align:left;flex: 1;"
class=
"number"
>
<span
class=
"number"
>
No:第37463473647号
</span>
</div>
<div
style=
"text-align:center;flex: 1;"
class=
"number"
>
<span
>
(第一联XXX单位)
</span>
</div>
<div
style=
"text-align:right;flex: 1;"
class=
"number"
>
<span>
机密
</span>
</div>
</div>
</p>
<div
class=
"listCon"
>
<div
class=
"line1"
>
<span
class=
"sendTo"
>
<span>
发往:
</span>
<span>
XXXXXXX
</span>
</span>
<span
class=
"sendNum"
>
<span>
批复文号:
</span>
<span>
XXXXXXX
</span>
</span>
</div>
<div
class=
"line2 tableList"
>
<table
class=
"altrowstable"
id=
"alternatecolor"
>
<tr>
<th>
型号
</th><th>
部件
</th><th>
类型
</th><th>
密级
</th><th>
应用领域
</th><th>
数量
</th><th>
装备序列号
</th><th>
生产序列号
</th><th>
备注
</th>
</tr>
<tr>
<td>
占金名
</td><td>
占金名
</td><td>
占金名
</td><td>
占金名
</td><td>
占金名
</td><td>
1
</td><td>
占金名
</td><td>
占金名
</td><td>
占金名
</td>
</tr>
<tr>
<td>
占金名1
</td><td>
占金名1
</td><td>
占金名1
</td><td>
占金名1
</td><td>
占金名1
</td><td>
1
</td><td>
占金名1
</td><td>
占金名1
</td><td>
占金名1
</td>
</tr>
<tr>
<td>
占金名2
</td><td>
占金名2
</td><td>
占金名2
</td><td>
占金名2
</td><td>
占金名2
</td><td>
1
</td><td>
占金名2
</td><td>
占金名2
</td><td>
占金名2
</td>
</tr>
用户名:占金名
密 码:1
年 龄: 19
用户名:占金名1
密 码:1
年 龄: 19
用户名:占金名2
密 码:1
年 龄: 19
</table>
</div>
<div
class=
"line3"
>
<span
class=
"left"
>
<span>
<span
class=
"label"
>
发件单位:
</span>
<span
class=
"value"
>
xxx
</span>
</span>
<span>
<span
class=
"label"
>
签发人:
</span>
<span
class=
"value"
>
xxxxx
</span>
</span>
<span>
<span
class=
"label"
>
经办人:
</span>
<span
class=
"value"
>
xxxxx
</span>
</span>
<i>
<span
style=
"position: relative;color: #646464"
>
<span>
(公章)
</span>
<span>
1221年01月02
</span>
<div
style=
"position: absolute"
>
<div
id=
"pos0"
></div>
</div>
</span>
</i>
</span>
<span
class=
"right"
>
<span>
<span
class=
"label"
>
收件单位:
</span>
<span
class=
"value"
>
xxxxxxxxxx
</span>
</span>
<span>
<span
class=
"label"
>
经办人:
</span>
<span
class=
"value"
></span>
</span>
<i>
<span
style=
"color: #646464"
>
<span>
(公章)
</span>
<span>
1221年01月02
</span>
</span>
</i>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--<script type="text/javascript">-->
<!--function altRows(id){-->
<!--if(document.getElementsByTagName){-->
<!--var table = document.getElementById(id);-->
<!--var rows = table.getElementsByTagName("tr");-->
<!--for(i = 0; i < rows.length; i++){-->
<!--if(i % 2 == 0){-->
<!--rows[i].className = "evenrowcolor";-->
<!--}else{-->
<!--rows[i].className = "oddrowcolor";-->
<!--}-->
<!--}-->
<!--}-->
<!--}-->
<!--window.onload=function(){-->
<!--altRows('alternatecolor');-->
<!--}-->
<!--</script>-->
</body>
</html>
\ No newline at end of file
浏览文件 @
9e96a44c
No preview for this file type
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论