Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
hp-smart
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
platform
hp-smart
Commits
6d401a87
Commit
6d401a87
authored
Mar 26, 2024
by
wancheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
物料清单导入
parent
c04d3f93
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
906 additions
and
5 deletions
+906
-5
DocController.java
...va/com/baosight/hpjx/aspect/annotation/DocController.java
+124
-0
DocRouteEnum.java
src/main/java/com/baosight/hpjx/common/DocRouteEnum.java
+56
-0
ExcelAnno.java
src/main/java/com/baosight/hpjx/common/ExcelAnno.java
+28
-0
ExcelHeadAnon.java
src/main/java/com/baosight/hpjx/common/ExcelHeadAnon.java
+34
-0
HPSC002.java
src/main/java/com/baosight/hpjx/hp/sc/domain/HPSC002.java
+9
-0
ServiceHPSC002.java
.../java/com/baosight/hpjx/hp/sc/service/ServiceHPSC002.java
+32
-0
ServiceHPSC097.java
.../java/com/baosight/hpjx/hp/sc/service/ServiceHPSC097.java
+30
-0
DocExcelUtils.java
src/main/java/com/baosight/hpjx/util/DocExcelUtils.java
+436
-0
HPSC002.js
src/main/webapp/HP/SC/HPSC002.js
+26
-4
HPSC002.jsp
src/main/webapp/HP/SC/HPSC002.jsp
+9
-1
HPSC097.js
src/main/webapp/HP/SC/HPSC097.js
+106
-0
HPSC097.jsp
src/main/webapp/HP/SC/HPSC097.jsp
+16
-0
No files found.
src/main/java/com/baosight/hpjx/aspect/annotation/DocController.java
0 → 100644
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
aspect
.
annotation
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baosight.hpjx.util.DocExcelUtils
;
import
com.baosight.hpjx.util.LogUtils
;
import
com.baosight.hpjx.util.MapUtils
;
import
com.baosight.iplat4j.core.ei.EiConstant
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
import
com.baosight.iplat4j.core.exception.PlatException
;
import
com.baosight.iplat4j.core.service.soa.XLocalManager
;
import
com.baosight.iplat4j.core.web.controller.WebDispatchController
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.math.NumberUtils
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.util.Args
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.web.bind.annotation.CrossOrigin
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.OutputStream
;
import
java.io.Reader
;
import
java.net.URLDecoder
;
import
java.net.URLEncoder
;
import
java.nio.charset.Charset
;
import
java.sql.SQLException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
com.baosight.hpjx.common.DocRouteEnum
;
/**
* DOC 接口类
*
* @author:songx
* @date:2022/5/5,10:04
*/
@CrossOrigin
@RestController
@RequestMapping
(
"/doc"
)
public
class
DocController
extends
WebDispatchController
{
private
final
static
Logger
logger
=
LoggerFactory
.
getLogger
(
DocController
.
class
);
/**
* 批量导入
*
* @param file
* @return
*/
@RequestMapping
(
value
=
"/import/api"
,
method
=
RequestMethod
.
POST
)
public
EiInfo
importExcel
(
MultipartFile
file
,
HttpServletRequest
request
)
{
Map
<
String
,
String
[]>
paramMaps
=
request
.
getParameterMap
();
EiInfo
outInfo
=
new
EiInfo
();
outInfo
.
setStatus
(
EiConstant
.
STATUS_FAILURE
);
try
{
if
(
file
==
null
)
{
outInfo
.
setMsg
(
"导入文件不能为空"
);
return
outInfo
;
}
String
id
=
request
.
getParameter
(
"id"
);
DocRouteEnum
docRouteEnum
=
DocRouteEnum
.
getById
(
id
);
if
(
docRouteEnum
==
null
)
{
outInfo
.
setMsg
(
"导入标识ID不存在"
);
return
outInfo
;
}
String
startRow
=
request
.
getParameter
(
"startRow"
);
List
dataList
=
DocExcelUtils
.
readExcel
(
file
,
NumberUtils
.
createInteger
(
startRow
),
docRouteEnum
.
getClazz
());
if
(
CollectionUtils
.
isEmpty
(
dataList
))
{
outInfo
.
setMsg
(
"未读取到数据"
);
return
outInfo
;
}
outInfo
.
set
(
EiConstant
.
serviceName
,
docRouteEnum
.
getServiceNme
());
outInfo
.
set
(
EiConstant
.
methodName
,
docRouteEnum
.
getMethodName
());
outInfo
.
set
(
"params"
,
this
.
convertParam
(
paramMaps
));
outInfo
.
set
(
"dataList"
,
dataList
);
outInfo
=
XLocalManager
.
call
(
outInfo
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
outInfo
,
e
,
"导入excel失败"
);
}
return
outInfo
;
}
/**
* 参数转换
*
* @param paramMaps
* @return
*/
private
Map
<
String
,
String
>
convertParam
(
Map
<
String
,
String
[]>
paramMaps
)
{
if
(
MapUtils
.
isEmpty
(
paramMaps
))
{
return
new
HashMap
<>();
}
Map
<
String
,
String
>
paramMap
=
new
HashMap
<>();
for
(
Map
.
Entry
<
String
,
String
[]>
entry
:
paramMaps
.
entrySet
())
{
paramMap
.
put
(
entry
.
getKey
(),
entry
.
getValue
()[
0
]);
}
return
paramMap
;
}
}
src/main/java/com/baosight/hpjx/common/DocRouteEnum.java
0 → 100644
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
common
;
import
com.baosight.hpjx.hp.sc.domain.HPSC002
;
/**
* @author:songx
* @date:2022/9/23,14:51
*/
public
enum
DocRouteEnum
{
HT
(
"route_001"
,
"HPSC002"
,
"importData"
,
HPSC002
.
class
);
private
String
id
;
private
String
serviceNme
;
private
String
methodName
;
private
Class
clazz
;
<
T
>
DocRouteEnum
(
String
id
,
String
serviceNme
,
String
methodName
,
Class
<
T
>
clazz
)
{
this
.
id
=
id
;
this
.
serviceNme
=
serviceNme
;
this
.
methodName
=
methodName
;
this
.
clazz
=
clazz
;
}
/**
* 根据ID获取枚举
*
* @param id
* @return
*/
public
static
DocRouteEnum
getById
(
String
id
)
{
for
(
DocRouteEnum
docRouteEnum
:
DocRouteEnum
.
values
())
{
if
(
docRouteEnum
.
id
.
equals
(
id
))
{
return
docRouteEnum
;
}
}
return
null
;
}
public
String
getId
()
{
return
id
;
}
public
String
getServiceNme
()
{
return
serviceNme
;
}
public
String
getMethodName
()
{
return
methodName
;
}
public
Class
getClazz
()
{
return
clazz
;
}
}
src/main/java/com/baosight/hpjx/common/ExcelAnno.java
0 → 100644
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
common
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
/**
* @author:songx
* @date:2021/3/20,21:38
*/
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
ExcelAnno
{
/**
* 列索引
*
* @return
*/
int
index
()
default
0
;
/**
* 列名
*
* @return
*/
String
name
()
default
""
;
}
src/main/java/com/baosight/hpjx/common/ExcelHeadAnon.java
0 → 100644
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
common
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
/**
* @author:songx
* @date:2021/3/20,21:38
*/
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
ExcelHeadAnon
{
/**
* 列索引
*
* @return
*/
int
index
()
default
0
;
/**
* 必须与属性名保持一致,否则会获取不到数据
*
* @return
*/
String
field
()
default
""
;
/**
* 列的中文名
*
* @return
*/
String
name
()
default
""
;
}
src/main/java/com/baosight/hpjx/hp/sc/domain/HPSC002.java
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
hp
.
sc
.
domain
;
package
com
.
baosight
.
hpjx
.
hp
.
sc
.
domain
;
import
com.baosight.hpjx.common.ExcelAnno
;
import
com.baosight.iplat4j.core.util.NumberUtils
;
import
com.baosight.iplat4j.core.util.NumberUtils
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
com.baosight.iplat4j.core.ei.EiColumn
;
import
com.baosight.iplat4j.core.ei.EiColumn
;
...
@@ -119,15 +120,22 @@ public class HPSC002 extends DaoEPBase {
...
@@ -119,15 +120,22 @@ public class HPSC002 extends DaoEPBase {
private
String
leaf
=
"1"
;
/* 是否有叶子节点*/
private
String
leaf
=
"1"
;
/* 是否有叶子节点*/
private
String
sort
=
" "
;
/* 排序字段*/
private
String
sort
=
" "
;
/* 排序字段*/
private
String
icon
=
" "
;
/* 图片地址*/
private
String
icon
=
" "
;
/* 图片地址*/
@ExcelAnno
(
index
=
0
)
private
Integer
prdtType
;
/* 产品类型*/
private
Integer
prdtType
;
/* 产品类型*/
private
String
prdtCode
=
" "
;
/* 产品编码*/
private
String
prdtCode
=
" "
;
/* 产品编码*/
@ExcelAnno
(
index
=
1
)
private
String
prdtName
=
" "
;
/* 产品名称*/
private
String
prdtName
=
" "
;
/* 产品名称*/
@ExcelAnno
(
index
=
2
)
private
BigDecimal
length
=
new
BigDecimal
(
"0"
);
/* 长*/
private
BigDecimal
length
=
new
BigDecimal
(
"0"
);
/* 长*/
@ExcelAnno
(
index
=
3
)
private
BigDecimal
width
=
new
BigDecimal
(
"0"
);
/* 宽*/
private
BigDecimal
width
=
new
BigDecimal
(
"0"
);
/* 宽*/
@ExcelAnno
(
index
=
4
)
private
BigDecimal
thick
=
new
BigDecimal
(
"0"
);
/* 厚*/
private
BigDecimal
thick
=
new
BigDecimal
(
"0"
);
/* 厚*/
private
Long
inventRecordId
;
/* 项目档案ID*/
private
Long
inventRecordId
;
/* 项目档案ID*/
private
String
spec
=
" "
;
/* 规格*/
private
String
spec
=
" "
;
/* 规格*/
@ExcelAnno
(
index
=
6
)
private
BigDecimal
num
=
new
BigDecimal
(
0.000
);
/* 数量*/
private
BigDecimal
num
=
new
BigDecimal
(
0.000
);
/* 数量*/
@ExcelAnno
(
index
=
7
)
private
BigDecimal
unitWt
=
new
BigDecimal
(
0.000
);
/* 单重*/
private
BigDecimal
unitWt
=
new
BigDecimal
(
0.000
);
/* 单重*/
private
BigDecimal
totalWt
=
new
BigDecimal
(
0.000
);
/* 总重*/
private
BigDecimal
totalWt
=
new
BigDecimal
(
0.000
);
/* 总重*/
private
String
filePath1
=
" "
;
/* 文件地址1*/
private
String
filePath1
=
" "
;
/* 文件地址1*/
...
@@ -143,6 +151,7 @@ public class HPSC002 extends DaoEPBase {
...
@@ -143,6 +151,7 @@ public class HPSC002 extends DaoEPBase {
private
String
updatedBy
=
" "
;
/* 更新人*/
private
String
updatedBy
=
" "
;
/* 更新人*/
private
String
updatedName
=
" "
;
/* 修改人名称*/
private
String
updatedName
=
" "
;
/* 修改人名称*/
private
String
updatedTime
=
" "
;
/* 更新时间*/
private
String
updatedTime
=
" "
;
/* 更新时间*/
@ExcelAnno
(
index
=
5
)
private
String
remark
=
" "
;
/* 备注*/
private
String
remark
=
" "
;
/* 备注*/
private
String
pgStatus
=
" "
;
/* 派工状态*/
private
String
pgStatus
=
" "
;
/* 派工状态*/
...
...
src/main/java/com/baosight/hpjx/hp/sc/service/ServiceHPSC002.java
View file @
6d401a87
...
@@ -743,6 +743,38 @@ public class ServiceHPSC002 extends ServiceBase {
...
@@ -743,6 +743,38 @@ public class ServiceHPSC002 extends ServiceBase {
}
}
public
EiInfo
importData
(
EiInfo
inInfo
)
{
try
{
List
<
HPSC002
>
dataList
=
(
List
)
inInfo
.
get
(
"dataList"
);
HashMap
params
=
(
HashMap
)
inInfo
.
get
(
"params"
);
String
parentId
=
(
String
)
params
.
get
(
"parentId"
);
String
projCode
=
(
String
)
params
.
get
(
"projCode"
);
String
projName
=
(
String
)
params
.
get
(
"projName"
);
String
parentPrdtName
=
(
String
)
params
.
get
(
"parentPrdtName"
);
// 写入数据
for
(
HPSC002
hpsc002:
dataList
)
{
/*BigDecimal num = hpsc002.getNum();
BigDecimal unitWt = hpsc002.getUnitWt();
DecimalFormat decimalFormat = new DecimalFormat("#.000");
BigDecimal totalWt = new BigDecimal(decimalFormat.format(num.multiply(unitWt).floatValue()));
hpsc002.setDelStatus(CommonConstant.YesNo.NO_0.intValue());
hpsc002.setTotalWt(totalWt);*/
hpsc002
.
setParentId
(
parentId
);
hpsc002
.
setProjCode
(
projCode
);
hpsc002
.
setProjName
(
projName
);
hpsc002
.
setParentPrdtName
(
parentPrdtName
);
hpsc002
.
setStatus
(
CommonConstant
.
YesNo
.
NO_0
.
intValue
());
add
(
hpsc002
);
}
inInfo
.
setStatus
(
EiConstant
.
STATUS_DEFAULT
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
dataList
.
size
()
+
"]条数据保存成功!"
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"保存失败"
);
}
return
inInfo
;
}
/**
/**
* 部件类型下拉框
* 部件类型下拉框
* @param inInfo 形参
* @param inInfo 形参
...
...
src/main/java/com/baosight/hpjx/hp/sc/service/ServiceHPSC097.java
0 → 100644
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
hp
.
sc
.
service
;
import
com.baosight.hpjx.aspect.annotation.OperationLogAnnotation
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
import
com.baosight.iplat4j.core.service.impl.ServiceBase
;
/**
*
*/
public
class
ServiceHPSC097
extends
ServiceBase
{
/**
* 画面初始化.
*/
@OperationLogAnnotation
(
operModul
=
"附件上传"
,
operType
=
"查询"
,
operDesc
=
"初始化"
)
public
EiInfo
initLoad
(
EiInfo
inInfo
)
{
return
inInfo
;
}
/**
* 附件上传.
*/
@OperationLogAnnotation
(
operModul
=
"附件上传"
,
operType
=
"上传"
,
operDesc
=
"附件上传"
)
public
EiInfo
form
(
EiInfo
inInfo
)
{
return
inInfo
;
}
}
src/main/java/com/baosight/hpjx/util/DocExcelUtils.java
0 → 100644
View file @
6d401a87
package
com
.
baosight
.
hpjx
.
util
;
import
com.baosight.hpjx.common.ExcelAnno
;
import
com.baosight.hpjx.common.ExcelHeadAnon
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.poi.hssf.usermodel.HSSFCell
;
import
org.apache.poi.hssf.usermodel.HSSFCellStyle
;
import
org.apache.poi.hssf.usermodel.HSSFRow
;
import
org.apache.poi.hssf.usermodel.HSSFSheet
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.lang.reflect.Field
;
import
java.math.BigDecimal
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author:songx
* @date:2021/3/20,21:22
*/
@Slf4j
public
class
DocExcelUtils
{
/**
* 读取excel反射实体
*
* @param file MultipartFile
* @param startRow 起始行
* @param clazz entity
* @return
* @throws RuntimeException
*/
public
static
<
T
extends
Object
>
List
<
T
>
readExcel
(
MultipartFile
file
,
Integer
startRow
,
Class
<
T
>
clazz
)
throws
Exception
{
// 得到一个工作表
Sheet
sheet
=
getSheet
(
file
);
return
getRowData
(
sheet
,
startRow
,
clazz
);
}
/**
* 读取excel内容
*
* @param sheet
* @param startRow 起始行
* @param clazz
* @param <T>
* @return
*/
private
static
<
T
>
List
<
T
>
getRowData
(
Sheet
sheet
,
Integer
startRow
,
Class
<
T
>
clazz
)
throws
Exception
{
List
<
T
>
results
=
new
ArrayList
();
// 获取类所有属性
Field
[]
fields
=
clazz
.
getDeclaredFields
();
// 获取行总数
int
rows
=
sheet
.
getLastRowNum
()
+
1
;
for
(
int
i
=
(
startRow
==
null
?
1
:
startRow
);
i
<
rows
;
i
++)
{
// 获取excel行
Row
row
=
sheet
.
getRow
(
i
);
if
(
row
==
null
||
row
.
getCell
(
0
)
==
null
||
row
.
getCell
(
1
)
==
null
)
{
continue
;
}
// 创建实体
T
obj
=
clazz
.
newInstance
();
for
(
Field
f
:
fields
)
{
// 设置属性可访问
f
.
setAccessible
(
true
);
// 判断是否是注解
if
(
f
.
isAnnotationPresent
(
ExcelAnno
.
class
))
{
// 获取注解
ExcelAnno
excelAnno
=
f
.
getAnnotation
(
ExcelAnno
.
class
);
// 获取列索引
int
columnIndex
=
excelAnno
.
index
();
// 获取单元格
Cell
cell
=
row
.
getCell
(
columnIndex
);
// 设置属性
setFieldValue
(
obj
,
f
,
cell
);
}
}
// 添加到集合中
results
.
add
(
obj
);
}
return
results
;
}
/**
* 绑定实体值
*
* @param obj Object
* @param f Field
* @param cell Cell
* @return
* @throws RuntimeException
*/
private
static
void
setFieldValue
(
Object
obj
,
Field
f
,
Cell
cell
)
throws
IOException
{
if
(
cell
==
null
)
{
return
;
}
cell
.
setCellType
(
Cell
.
CELL_TYPE_STRING
);
String
cellValue
=
cell
.
getStringCellValue
();
if
(
cellValue
.
equals
(
"3-零件"
))
{
cellValue
=
"3"
;
}
if
(
cellValue
.
equals
(
"4-部件"
))
{
cellValue
=
"4"
;
}
if
(
cellValue
.
equals
(
"2-耗材"
))
{
cellValue
=
"2"
;
}
try
{
if
(
StringUtils
.
isBlank
(
cellValue
))
{
f
.
set
(
obj
,
f
.
getType
()
==
String
.
class
?
cellValue
:
null
);
return
;
}
if
(
f
.
getType
()
==
byte
.
class
||
f
.
getType
()
==
Byte
.
class
)
{
f
.
set
(
obj
,
Byte
.
parseByte
(
cellValue
));
}
else
if
(
f
.
getType
()
==
int
.
class
||
f
.
getType
()
==
Integer
.
class
)
{
f
.
set
(
obj
,
Integer
.
parseInt
(
cellValue
));
}
else
if
(
f
.
getType
()
==
Double
.
class
||
f
.
getType
()
==
double
.
class
)
{
f
.
set
(
obj
,
Double
.
parseDouble
(
cellValue
));
}
else
if
(
f
.
getType
()
==
BigDecimal
.
class
)
{
f
.
set
(
obj
,
new
BigDecimal
(
cellValue
));
}
else
{
f
.
set
(
obj
,
cellValue
);
}
}
catch
(
Exception
e
)
{
String
msg
=
String
.
format
(
"读取数据值失败,名称[%s],数值[%s],%s"
,
f
.
getName
(),
cellValue
,
e
.
getMessage
());
log
.
error
(
msg
,
e
);
throw
new
IOException
(
msg
);
}
}
/**
* 工作簿处理
*
* @param file
*/
private
static
Sheet
getSheet
(
MultipartFile
file
)
throws
IOException
{
Workbook
workbook
;
try
(
InputStream
is
=
file
.
getInputStream
())
{
// 根据excel文件版本获取工作簿
if
(
file
.
getOriginalFilename
().
endsWith
(
".xls"
))
{
workbook
=
new
HSSFWorkbook
(
is
);
}
else
if
(
file
.
getOriginalFilename
().
endsWith
(
".xlsx"
))
{
workbook
=
new
XSSFWorkbook
(
is
);
}
else
{
throw
new
RuntimeException
(
"非excel文件"
);
}
// 得到一个工作表
return
workbook
.
getSheetAt
(
0
);
}
catch
(
IOException
e
)
{
throw
e
;
}
}
/**
* 导出Excel
*
* @param sheetName 要导出的excel名称
* @param dataList 要导出的数据集合
* @param clazz if dataList is Map, clazz must be null
* @param <T>
*/
public
static
<
T
>
HSSFWorkbook
export
(
String
sheetName
,
List
<
T
>
dataList
,
Class
<
T
>
clazz
)
throws
Exception
{
// 设置默认文件名为当前时间:年月日时分秒
if
(
StringUtils
.
isBlank
(
sheetName
))
{
sheetName
=
"sheet1"
;
}
//创建一个WorkBook,对应一个Excel文件
HSSFWorkbook
wb
=
new
HSSFWorkbook
();
//在Workbook中,创建一个sheet,对应Excel中的工作薄(sheet)
HSSFSheet
sheet
=
wb
.
createSheet
(
sheetName
);
//创建单元格,并设置值表头 设置表头居中
HSSFCellStyle
style
=
wb
.
createCellStyle
();
//创建一个居中格式
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
//style.setAlignment(CellStyle.ALIGN_CENTER);
// 获取excel标题
LinkedHashMap
<
String
,
String
>
fieldMap
=
clazz
==
null
?
getFieldMap
(
dataList
)
:
getFieldMap
(
clazz
);
// 填充工作表
fillSheet
(
sheet
,
dataList
,
fieldMap
,
style
);
return
wb
;
}
/**
* 获取field头
*
* @param dataList
* @param <T>
* @return
*/
private
static
<
T
>
LinkedHashMap
<
String
,
String
>
getFieldMap
(
List
<
T
>
dataList
)
{
LinkedHashMap
<
String
,
String
>
resultMap
=
new
LinkedHashMap
();
if
(
CollectionUtils
.
isEmpty
(
dataList
))
{
return
resultMap
;
}
Map
<
String
,
Object
>
dataMap
=
(
Map
<
String
,
Object
>)
dataList
.
get
(
0
);
for
(
String
key
:
dataMap
.
keySet
())
{
resultMap
.
put
(
key
,
key
);
}
return
resultMap
;
}
/**
* 获取field头
*
* @param clazz
* @return
*/
private
static
<
T
>
LinkedHashMap
<
String
,
String
>
getFieldMap
(
Class
<
T
>
clazz
)
{
LinkedHashMap
<
String
,
String
>
resultMap
=
new
LinkedHashMap
();
if
(
clazz
==
null
)
{
return
resultMap
;
}
Field
[]
fields
=
clazz
.
getDeclaredFields
();
List
<
ExcelHeadAnon
>
excelHeadAnons
=
new
ArrayList
<>();
for
(
Field
f
:
fields
)
{
// 设置属性可访问
f
.
setAccessible
(
true
);
// 判断是否是注解
if
(
f
.
isAnnotationPresent
(
ExcelHeadAnon
.
class
))
{
excelHeadAnons
.
add
(
f
.
getAnnotation
(
ExcelHeadAnon
.
class
));
}
}
// 从小到大正序排
excelHeadAnons
.
sort
(
Comparator
.
comparing
(
ExcelHeadAnon:
:
index
));
for
(
ExcelHeadAnon
excelHeadAnon
:
excelHeadAnons
)
{
resultMap
.
put
(
excelHeadAnon
.
field
(),
excelHeadAnon
.
name
());
}
return
resultMap
;
}
/**
* 根据字段名获取字段对象
*
* @param fieldName 字段名
* @param clazz 包含该字段的类
* @return 字段
*/
public
static
Field
getFieldByName
(
String
fieldName
,
Class
<?>
clazz
)
{
// 拿到本类的所有字段
Field
[]
selfFields
=
clazz
.
getDeclaredFields
();
// 如果本类中存在该字段,则返回
for
(
Field
field
:
selfFields
)
{
//如果本类中存在该字段,则返回
if
(
field
.
getName
().
equals
(
fieldName
))
{
return
field
;
}
}
// 否则,查看父类中是否存在此字段,如果有则返回
Class
<?>
superClazz
=
clazz
.
getSuperclass
();
if
(
superClazz
!=
null
&&
superClazz
!=
Object
.
class
)
{
// 递归
return
getFieldByName
(
fieldName
,
superClazz
);
}
// 如果本类和父类都没有,则返回空
return
null
;
}
/**
* 根据字段名获取字段值
*
* @param fieldName 字段名
* @param o 对象
* @return 字段值
* @throws Exception 异常
*/
public
static
Object
getFieldValueByName
(
String
fieldName
,
Object
o
)
throws
Exception
{
Object
value
=
null
;
//根据字段名得到字段对象
Field
field
=
getFieldByName
(
fieldName
,
o
.
getClass
());
//如果该字段存在,则取出该字段的值
if
(
field
!=
null
)
{
field
.
setAccessible
(
true
);
//类中的成员变量为private,在类外边使用属性值,故必须进行此操作
value
=
field
.
get
(
o
);
//获取当前对象中当前Field的value
}
else
{
throw
new
IllegalArgumentException
(
o
.
getClass
().
getSimpleName
()
+
"类不存在字段名 "
+
fieldName
);
}
return
value
;
}
/**
* 根据带路径或不带路径的属性名获取属性值,即接受简单属性名,
* 如userName等,又接受带路径的属性名,如student.department.name等
*
* @param fieldNameSequence 带路径的属性名或简单属性名
* @param o 对象
* @return 属性值
*/
public
static
Object
getFieldValueByNameSequence
(
String
fieldNameSequence
,
Object
o
)
throws
Exception
{
Object
value
=
null
;
// 将fieldNameSequence进行拆分
String
[]
attributes
=
fieldNameSequence
.
split
(
"\\."
);
if
(
o
instanceof
Map
)
{
value
=
((
Map
)
o
).
get
(
fieldNameSequence
);
}
else
if
(
attributes
.
length
==
1
)
{
value
=
getFieldValueByName
(
fieldNameSequence
,
o
);
}
else
{
// 根据数组中第一个连接属性名获取连接属性对象,如student.department.name
Object
fieldObj
=
getFieldValueByName
(
attributes
[
0
],
o
);
//截取除第一个属性名之后的路径
String
subFieldNameSequence
=
fieldNameSequence
.
substring
(
fieldNameSequence
.
indexOf
(
"."
)
+
1
);
//递归得到最终的属性对象的值
value
=
getFieldValueByNameSequence
(
subFieldNameSequence
,
fieldObj
);
}
return
value
;
}
/**
* 向工作表中填充数据
*
* @param sheet excel的工作表名称
* @param dataList 数据源
* @param fieldMap 中英文字段对应关系的Map
* @param style 表格中的格式
* @throws Exception 异常
*/
public
static
<
T
>
void
fillSheet
(
HSSFSheet
sheet
,
List
<
T
>
dataList
,
LinkedHashMap
<
String
,
String
>
fieldMap
,
HSSFCellStyle
style
)
throws
Exception
{
// 定义存放英文字段名和中文字段名的数组
String
[]
enFields
=
new
String
[
fieldMap
.
size
()];
String
[]
cnFields
=
new
String
[
fieldMap
.
size
()];
// 填充数组
int
count
=
0
;
for
(
Map
.
Entry
<
String
,
String
>
entry
:
fieldMap
.
entrySet
())
{
enFields
[
count
]
=
entry
.
getKey
();
cnFields
[
count
]
=
entry
.
getValue
();
count
++;
}
//在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow
row
=
sheet
.
createRow
((
int
)
0
);
// 填充表头
for
(
int
i
=
0
;
i
<
cnFields
.
length
;
i
++)
{
HSSFCell
cell
=
row
.
createCell
(
i
);
cell
.
setCellValue
(
cnFields
[
i
]);
cell
.
setCellStyle
(
style
);
sheet
.
autoSizeColumn
(
i
);
}
// 填充内容
for
(
int
index
=
0
;
index
<
dataList
.
size
();
index
++)
{
row
=
sheet
.
createRow
(
index
+
1
);
// 获取单个对象
T
item
=
dataList
.
get
(
index
);
for
(
int
i
=
0
;
i
<
enFields
.
length
;
i
++)
{
Object
objValue
=
getFieldValueByNameSequence
(
enFields
[
i
],
item
);
String
fieldValue
=
convertValue
(
objValue
);
row
.
createCell
(
i
).
setCellValue
(
fieldValue
);
}
}
}
/**
* 转换值
*
* @param objValue
* @return
*/
private
static
String
convertValue
(
Object
objValue
)
{
if
(
objValue
==
null
)
{
return
""
;
}
if
(
objValue
instanceof
Date
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
return
sdf
.
format
(
objValue
);
}
return
objValue
.
toString
();
}
//
// /**
// * 创建独立下拉框
// *
// * @param workbook 工作簿
// * @param targetSheet 目标sheet
// * @param options 下拉框值(key-value)
// * @param column 下拉框所在的列索引(0开始)
// * @param sheetIndex sheet也索引(0开始)
// * @author lanheng
// * 2019-05-27 15:32:35
// */
// public static void addValidationToSheet(Workbook workbook, Sheet targetSheet, List<String> options, int column,
// int sheetIndex) {
// String sheetName = "hidden" + sheetIndex;
// Sheet optionsSheet = workbook.createSheet(sheetName);
// String nameName = sheetName + "_parent";
//
// int rowIndex = 0;
// for (String option : options) {
// Row row = optionsSheet.createRow(rowIndex);
// Cell cell = row.createCell(0);
// cell.setCellValue(option);
// rowIndex++;
// }
//
// // 将码值sheet页做成excel公式
// Name namedCell = workbook.createName();
// namedCell.setNameName(nameName);
// namedCell.setRefersToFormula(sheetName + "!$A$1:$A$" + (options.size() > 0 ? options.size() : 1));
//
// if (optionsSheet instanceof HSSFSheet) {
// DVConstraint constraint = DVConstraint.createFormulaListConstraint(nameName);
// CellRangeAddressList regions = new CellRangeAddressList(0, 65535, column, column);
// targetSheet.addValidationData(new HSSFDataValidation(regions, constraint));
// } else if (optionsSheet instanceof XSSFSheet) {
// XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(
// DataValidationConstraint.ValidationType.LIST, nameName);
// // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
// CellRangeAddressList regions = new CellRangeAddressList(0, 100, column, column);
// // 数据有效性对象
// DataValidationHelper help = new XSSFDataValidationHelper((XSSFSheet) optionsSheet);
// DataValidation validation = help.createValidation(constraint, regions);
// targetSheet.addValidationData(validation);
// } else if (optionsSheet instanceof SXSSFSheet) {
// DataValidationHelper help = optionsSheet.getDataValidationHelper();
// DataValidationConstraint constraint = help.createFormulaListConstraint(nameName);
// CellRangeAddressList regions = new CellRangeAddressList(0, 65535, column, column);
// DataValidation validation = help.createValidation(constraint, regions);
// targetSheet.addValidationData(validation);
// }
// workbook.setSheetHidden(sheetIndex, true);
// }
//
}
src/main/webapp/HP/SC/HPSC002.js
View file @
6d401a87
...
@@ -383,11 +383,30 @@ $(function () {
...
@@ -383,11 +383,30 @@ $(function () {
});
});
e
.
preventDefault
();
e
.
preventDefault
();
}
else
{
}
else
{
openFileWindow
.
open
();
//uploadFileWindow.open();
var
parentId
=
IPLATUI
.
EFTree
.
materialTree
.
selectTreeNode
.
nodeId
;
var
parentPrdtName
=
IPLATUI
.
EFTree
.
materialTree
.
selectTreeNode
.
prdtName
;
var
projCode
=
IPLATUI
.
EFTree
.
materialTree
.
selectTreeNode
.
projCode
;
var
projName
=
IPLATUI
.
EFTree
.
materialTree
.
selectTreeNode
.
projName
;
var
lv
=
IPLATUI
.
EFTree
.
materialTree
.
selectTreeNode
.
lv
;
JSColorbox
.
open
({
href
:
"HPSC097?methodName=initLoad&inqu_status-0-parentId="
+
parentId
+
"&inqu_status-0-projCode="
+
projCode
+
"&inqu_status-0-projName="
+
projName
+
"&inqu_status-0-parentPrdtName="
+
parentPrdtName
,
title
:
"<div style='text-align: center;'>导入</div>"
,
width
:
"70%"
,
height
:
"70%"
,
callbackName
:
function
()
{
// 刷新列表
resultGrid
.
dataSource
.
page
(
1
);
// 刷新树
updateTree
();
// 关闭弹窗
JSColorbox
.
close
();
}
});
}
}
}
}
});
});
IPLATUI
.
EFUpload
=
{
/*
IPLATUI.EFUpload = {
fileUpload: {
fileUpload: {
showFileList: false,
showFileList: false,
upload: function (e) {
upload: function (e) {
...
@@ -399,10 +418,12 @@ $(function () {
...
@@ -399,10 +418,12 @@ $(function () {
var src;
var src;
var className;
var className;
if ("run" == projectEnv) {
if ("run" == projectEnv) {
src
=
e
.
response
.
docUrl
+
e
.
response
.
docType
//src = e.response.docUrl + e.response.docType
src = downloadHref(e.response.docId) + e.response.docType
className = e.response.groupId;
className = e.response.groupId;
} else {
} else {
src = e.response.docUrl
src = e.response.docUrl
//src = downloadHref(e.response.docId) + '.' + e.response.docUrl.split(".")[1];
className = e.response.docTag;
className = e.response.docTag;
}
}
var parentId = IPLATUI.EFTree.materialTree.selectTreeNode.nodeId;
var parentId = IPLATUI.EFTree.materialTree.selectTreeNode.nodeId;
...
@@ -442,13 +463,14 @@ $(function () {
...
@@ -442,13 +463,14 @@ $(function () {
IPLAT.NotificationUtil('导入失败!', "error");// 失败提示信息
IPLAT.NotificationUtil('导入失败!', "error");// 失败提示信息
}
}
}
}
}
}
*/
$
(
"#DOWNLOAD"
).
on
(
"click"
,
function
(
e
)
{
$
(
"#DOWNLOAD"
).
on
(
"click"
,
function
(
e
)
{
var
href
=
ctx
+
"
\\
HP
\\
template
\\
SC
\\
HPSC002_物料清单.xls"
;
var
href
=
ctx
+
"
\\
HP
\\
template
\\
SC
\\
HPSC002_物料清单.xls"
;
window
.
location
.
href
=
href
;
window
.
location
.
href
=
href
;
});
});
/**
/**
* 生成模板
* 生成模板
*/
*/
...
...
src/main/webapp/HP/SC/HPSC002.jsp
View file @
6d401a87
...
@@ -88,7 +88,7 @@
...
@@ -88,7 +88,7 @@
</div>
</div>
</div>
</div>
<
%
--
EEDM8010
页面加载时,不会加载
EEDM6000
(
lazyload=
"true"
)
--
%
>
<
%
--
EEDM8010
页面加载时,不会加载
EEDM6000
(
lazyload=
"true"
)
--
%
>
<EF:EFWindow
id=
"uploadFile"
url=
"${ctx}/web/HPSC099"
lazyload=
"true"
refresh=
"true"
>
<
%
--
<
EF:EFWindow
id=
"uploadFile"
url=
"${ctx}/web/HPSC099"
lazyload=
"true"
refresh=
"true"
>
</EF:EFWindow>
</EF:EFWindow>
<EF:EFWindow
id=
"openFile"
>
<EF:EFWindow
id=
"openFile"
>
<EF:EFRegion
id=
"upload"
title=
"文件导入区"
>
<EF:EFRegion
id=
"upload"
title=
"文件导入区"
>
...
@@ -96,7 +96,15 @@
...
@@ -96,7 +96,15 @@
<EF:EFUpload
ename=
"fileUpload"
cname=
"导入"
docTag=
"HPSC002"
path=
"upload"
/>
<EF:EFUpload
ename=
"fileUpload"
cname=
"导入"
docTag=
"HPSC002"
path=
"upload"
/>
</EF:EFRegion>
</EF:EFRegion>
</EF:EFWindow>
</EF:EFWindow>
<EF:EFWindow
id=
"openFile"
>
<EF:EFRegion
id=
"upload"
title=
"文件导入区"
>
<div
id=
"button"
></div>
<EF:EFInput
cname=
"上传文件"
blockId=
"inqu_status"
ename=
"file"
row=
"0"
type=
"file"
colWidth=
"3"
/>
</EF:EFRegion>
</EF:EFWindow>
--%>
<EF:EFWindow
id=
"uploadFile"
url=
"${ctx}/web/HPSC097"
lazyload=
"true"
refresh=
"true"
/>
</EF:EFPage>
</EF:EFPage>
<script>
<script>
let
ctx
=
"${ctx}"
;
let
ctx
=
"${ctx}"
;
</script>
</script>
...
...
src/main/webapp/HP/SC/HPSC097.js
0 → 100644
View file @
6d401a87
$
(
function
()
{
/* IPLATUI.EFUpload = {
uploadFile: {
success: function(e) {
let docId = e.response.docId;
if (isBlank(docId)) {
return;
}
$("#fileDocId").val(docId);
NotificationUtil("附件上传成功");
console.log($("#fileDocId").val())
saveTemp(e);
try {
parent.JSColorbox.setValueCallback(docId);
} catch (e){
}
},
}
};*/
// 提交
$
(
"#upload"
).
on
(
"click"
,
upload
);
function
saveTemp
(
e
)
{
let
docId
=
e
.
response
.
docId
;
let
docName
=
e
.
response
.
docName
;
let
docSize
=
e
.
response
.
docSize
;
let
docTag
=
e
.
response
.
docTag
;
let
docUrl
=
e
.
response
.
docUrl
;
let
result
=
new
EiInfo
();
result
.
set
(
"result-0-docId"
,
docId
);
result
.
set
(
"result-0-docName"
,
docName
);
result
.
set
(
"result-0-docSize"
,
docSize
);
result
.
set
(
"result-0-docTag"
,
docTag
);
result
.
set
(
"result-0-realPath"
,
docUrl
);
result
.
set
(
"result-0-bizType"
,
$
(
"#inqu_status-0-bizType"
).
val
());
result
.
set
(
"result-0-matId"
,
$
(
"#inqu_status-0-matId"
).
val
());
EiCommunicator
.
send
(
"HPDS002"
,
"insert"
,
result
,
{
onSuccess
:
function
(
ei
)
{
if
(
ei
.
getStatus
()
>=
0
)
{
if
(
ei
.
getStatus
()
==
0
)
{
NotificationUtil
(
ei
,
'warning'
);
}
else
{
NotificationUtil
(
ei
);
}
}
else
{
NotificationUtil
(
ei
,
"error"
);
}
},
onFail
:
function
(
ei
)
{
// 发生异常
NotificationUtil
(
"操作失败,原因["
+
ei
+
"]"
,
"error"
);
}
});
}
});
/**
* 上传文件
*/
let
upload
=
function
()
{
let
file
=
$
(
"#inqu_status-0-file"
).
val
();
if
(
isBlank
(
file
)){
message
(
"请选择文件"
);
return
;
}
/* let orderTypeCode = $("#inqu_status-0-orderTypeCode").val();
if(isBlank(orderTypeCode)){
message("请选择类别");
return;
}*/
let
parentId
=
$
(
"#inqu_status-0-parentId"
).
val
();
let
projCode
=
$
(
"#inqu_status-0-projCode"
).
val
();
let
projName
=
$
(
"#inqu_status-0-projName"
).
val
();
let
parentPrdtName
=
$
(
"#inqu_status-0-parentPrdtName"
).
val
();
let
_IPLAT
=
IPLAT
;
_IPLAT
.
progress
(
$
(
"body"
),
true
);
let
formData
=
new
FormData
();
formData
.
append
(
"id"
,
"route_001"
);
formData
.
append
(
"startRow"
,
"1"
);
// 第几行开始读取
formData
.
append
(
"parentId"
,
parentId
);
formData
.
append
(
"projCode"
,
projCode
);
formData
.
append
(
"projName"
,
projName
);
formData
.
append
(
"parentPrdtName"
,
parentPrdtName
);
/* formData.append("orderTypeCode", orderTypeCode);*/
formData
.
append
(
"file"
,
$
(
"#inqu_status-0-file"
)[
0
].
files
[
0
]);
$
.
ajax
({
url
:
IPLATUI
.
CONTEXT_PATH
+
'/doc/import/api'
,
type
:
'POST'
,
// dataType: 'json',
data
:
formData
,
async
:
true
,
cache
:
false
,
contentType
:
false
,
processData
:
false
,
success
:
function
(
res
)
{
_IPLAT
.
progress
(
$
(
"body"
),
false
);
parent
.
JSColorbox
.
setValueCallback
();
},
error
:
function
(
res
)
{
message
(
res
.
msg
);
_IPLAT
.
progress
(
$
(
"body"
),
false
);
}
});
}
src/main/webapp/HP/SC/HPSC097.jsp
0 → 100644
View file @
6d401a87
<!DOCTYPE html>
<
%@
page
contentType=
"text/html; charset=UTF-8"
%
>
<
%@
taglib
uri=
"http://java.sun.com/jsp/jstl/core"
prefix=
"c"
%
>
<
%@
taglib
prefix=
"EF"
tagdir=
"/WEB-INF/tags/EF"
%
>
<c:set
var=
"ctx"
value=
"${pageContext.request.contextPath}"
/>
<EF:EFPage
title=
"附件上传"
>
<EF:EFInput
ename=
"inqu_status-0-parentId"
cname=
"父Id"
type=
"hidden"
/>
<EF:EFInput
ename=
"inqu_status-0-projCode"
cname=
"项目代码"
type=
"hidden"
/>
<EF:EFInput
ename=
"inqu_status-0-projName"
cname=
"项目名称"
type=
"hidden"
/>
<EF:EFInput
ename=
"inqu_status-0-parentPrdtName"
cname=
"项目部件名称"
type=
"hidden"
/>
<EF:EFInput
cname=
"上传文件"
blockId=
"inqu_status"
ename=
"file"
row=
"0"
type=
"file"
colWidth=
"4"
/>
<button
id=
"upload"
type=
"submit"
>
提交
</button>
</EF:EFPage>
<script
src=
"${ctx}/HP/SC/HPSC097.js"
></script>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment