Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
JSH ERP
Commits
8a4d0347
Commit
8a4d0347
authored
Jan 04, 2019
by
季圣华
Browse files
增加库存报表excel导出的功能
parent
7141a778
Changes
5
Hide whitespace changes
Inline
Side-by-side
erp_web/pages/reports/in_out_stock_report.html
View file @
8a4d0347
...
...
@@ -325,7 +325,7 @@
var
mIds
=
res
.
data
.
mIds
;
if
(
mIds
)
{
if
(
pageSize
===
3000
)
{
window
.
location
.
href
=
"
/depotItem/exportExcel
.action
?browserType=
"
+
getOs
()
+
"
&
p
age
No
=
"
+
pageNo
+
"
&pageSize=
"
+
pageSize
+
"
&
P
rojectId=
"
+
$
.
trim
(
$
(
"
#searchProjectId
"
).
val
())
+
"
&
M
onthTime=
"
+
$
(
"
#searchMonth
"
).
val
()
+
"
&
H
eadIds=
"
+
HeadIds
+
"
&
M
aterialIds=
"
+
M
Ids
;
window
.
location
.
href
=
"
/depotItem/exportExcel?browserType=
"
+
getOs
()
+
"
&
currentP
age=
"
+
pageNo
+
"
&pageSize=
"
+
pageSize
+
"
&
p
rojectId=
"
+
$
.
trim
(
$
(
"
#searchProjectId
"
).
val
())
+
"
&
m
onthTime=
"
+
$
(
"
#searchMonth
"
).
val
()
+
"
&
h
eadIds=
"
+
HeadIds
+
"
&
m
aterialIds=
"
+
m
Ids
;
}
else
{
$
.
ajax
({
...
...
pom.xml
View file @
8a4d0347
...
...
@@ -74,6 +74,11 @@
<artifactId>
commons-httpclient
</artifactId>
<version>
3.1
</version>
</dependency>
<dependency>
<groupId>
net.sourceforge.jexcelapi
</groupId>
<artifactId>
jxl
</artifactId>
<version>
2.6.3
</version>
</dependency>
</dependencies>
<repositories>
...
...
src/main/java/com/jsh/erp/controller/DepotItemController.java
View file @
8a4d0347
...
...
@@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.*;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -841,6 +843,70 @@ public class DepotItemController {
return
res
;
}
/**
* 导出excel表格
* @param request
* @return
*/
@GetMapping
(
value
=
"/exportExcel"
)
public
BaseResponseInfo
exportExcel
(
@RequestParam
(
"currentPage"
)
Integer
currentPage
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
,
@RequestParam
(
"projectId"
)
Integer
projectId
,
@RequestParam
(
"monthTime"
)
String
monthTime
,
@RequestParam
(
"headIds"
)
String
headIds
,
@RequestParam
(
"materialIds"
)
String
materialIds
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
BaseResponseInfo
res
=
new
BaseResponseInfo
();
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
String
message
=
"成功"
;
try
{
List
<
DepotItemVo4WithInfoEx
>
dataList
=
depotItemService
.
findByAll
(
headIds
,
materialIds
,
currentPage
,
pageSize
);
//存放数据json数组
Integer
pid
=
projectId
;
String
[]
names
=
{
"名称"
,
"型号"
,
"单位"
,
"单价"
,
"上月结存数量"
,
"入库数量"
,
"出库数量"
,
"本月结存数量"
,
"结存金额"
};
String
title
=
"库存报表"
;
List
<
String
[]>
objects
=
new
ArrayList
<
String
[]>();
if
(
null
!=
dataList
)
{
for
(
DepotItemVo4WithInfoEx
diEx
:
dataList
)
{
String
[]
objs
=
new
String
[
13
];
Double
prevSum
=
sumNumber
(
"入库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
true
)
-
sumNumber
(
"出库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
true
);
Double
InSum
=
sumNumber
(
"入库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
false
);
Double
OutSum
=
sumNumber
(
"出库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
false
);
Double
prevPrice
=
sumPrice
(
"入库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
true
)
-
sumPrice
(
"出库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
true
);
Double
InPrice
=
sumPrice
(
"入库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
false
);
Double
OutPrice
=
sumPrice
(
"出库"
,
pid
,
diEx
.
getMaterialid
(),
monthTime
,
false
);
Double
unitPrice
=
0.0
;
if
(
prevSum
+
InSum
-
OutSum
!=
0.0
)
{
unitPrice
=
(
prevPrice
+
InPrice
-
OutPrice
)
/
(
prevSum
+
InSum
-
OutSum
);
}
Double
thisSum
=
prevSum
+
InSum
-
OutSum
;
Double
thisAllPrice
=
prevPrice
+
InPrice
-
OutPrice
;
objs
[
0
]
=
diEx
.
getMName
().
toString
();
objs
[
1
]
=
diEx
.
getMModel
().
toString
();
objs
[
2
]
=
diEx
.
getMaterialUnit
().
toString
();
objs
[
3
]
=
unitPrice
.
toString
();
objs
[
4
]
=
prevSum
.
toString
();
objs
[
5
]
=
InSum
.
toString
();
objs
[
6
]
=
OutSum
.
toString
();
objs
[
7
]
=
thisSum
.
toString
();
objs
[
8
]
=
thisAllPrice
.
toString
();
objects
.
add
(
objs
);
}
}
File
file
=
ExcelUtils
.
exportObjectsWithoutTitle
(
title
,
names
,
title
,
objects
);
ExportExecUtil
.
showExec
(
file
,
file
.
getName
()
+
"-"
+
monthTime
,
response
);
res
.
code
=
200
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
message
=
"导出失败"
;
res
.
code
=
500
;
}
finally
{
map
.
put
(
"message"
,
message
);
res
.
data
=
map
;
}
return
res
;
}
/**
* 数量合计
*
...
...
src/main/java/com/jsh/erp/utils/ExcelUtils.java
0 → 100644
View file @
8a4d0347
package
com.jsh.erp.utils
;
import
java.io.File
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
com.alibaba.druid.util.StringUtils
;
import
jxl.Cell
;
import
jxl.Sheet
;
import
jxl.Workbook
;
import
jxl.format.*
;
import
jxl.write.Label
;
import
jxl.write.WritableCellFormat
;
import
jxl.write.WritableFont
;
import
jxl.write.WritableSheet
;
import
jxl.write.WritableWorkbook
;
public
class
ExcelUtils
{
public
static
WritableFont
arial14font
=
null
;
public
static
File
exportObjects
(
String
fileName
,
String
[]
names
,
String
title
,
List
<
String
[]>
objects
)
throws
Exception
{
File
excelFile
=
new
File
(
"fileName.xls"
);
WritableWorkbook
wtwb
=
Workbook
.
createWorkbook
(
excelFile
);
WritableSheet
sheet
=
wtwb
.
createSheet
(
title
,
0
);
sheet
.
getSettings
().
setDefaultColumnWidth
(
20
);
WritableFont
wfont
=
new
WritableFont
(
WritableFont
.
createFont
(
"楷书"
),
15
);
WritableCellFormat
format
=
new
WritableCellFormat
(
wfont
);
WritableFont
wfc
=
new
WritableFont
(
WritableFont
.
ARIAL
,
20
,
WritableFont
.
BOLD
,
false
,
UnderlineStyle
.
NO_UNDERLINE
,
jxl
.
format
.
Colour
.
BLACK
);
WritableCellFormat
wcfFC
=
new
WritableCellFormat
(
wfc
);
wcfFC
.
setAlignment
(
Alignment
.
CENTRE
);
wcfFC
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
// CellView cellView = new CellView();
// cellView.setAutosize(true); //设置自动大小
format
.
setAlignment
(
Alignment
.
LEFT
);
format
.
setVerticalAlignment
(
VerticalAlignment
.
TOP
);
sheet
.
mergeCells
(
0
,
0
,
names
.
length
-
1
,
0
);
sheet
.
addCell
(
new
Label
(
0
,
0
,
title
,
wcfFC
));
int
rowNum
=
2
;
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
sheet
.
addCell
(
new
Label
(
i
,
1
,
names
[
i
],
format
));
}
for
(
int
j
=
0
;
j
<
objects
.
size
();
j
++)
{
String
[]
obj
=
objects
.
get
(
j
);
for
(
int
h
=
0
;
h
<
obj
.
length
;
h
++)
{
sheet
.
addCell
(
new
Label
(
h
,
rowNum
,
obj
[
h
],
format
));
}
rowNum
=
rowNum
+
1
;
}
wtwb
.
write
();
wtwb
.
close
();
return
excelFile
;
}
/**
* 导出excel,不需要第一行的title
*
* @param fileName
* @param names
* @param title
* @param objects
* @return
* @throws Exception
*/
public
static
File
exportObjectsWithoutTitle
(
String
fileName
,
String
[]
names
,
String
title
,
List
<
String
[]>
objects
)
throws
Exception
{
File
excelFile
=
new
File
(
fileName
);
WritableWorkbook
wtwb
=
Workbook
.
createWorkbook
(
excelFile
);
WritableSheet
sheet
=
wtwb
.
createSheet
(
title
,
0
);
sheet
.
getSettings
().
setDefaultColumnWidth
(
20
);
// 第一行的格式
WritableFont
wfc
=
new
WritableFont
(
WritableFont
.
ARIAL
,
15
,
WritableFont
.
BOLD
,
false
,
UnderlineStyle
.
NO_UNDERLINE
,
jxl
.
format
.
Colour
.
BLACK
);
WritableCellFormat
wcfFC
=
new
WritableCellFormat
(
wfc
);
wcfFC
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
// 设置字体以及单元格格式
WritableFont
wfont
=
new
WritableFont
(
WritableFont
.
createFont
(
"楷书"
),
15
);
WritableCellFormat
format
=
new
WritableCellFormat
(
wfont
);
format
.
setAlignment
(
Alignment
.
LEFT
);
format
.
setVerticalAlignment
(
VerticalAlignment
.
TOP
);
// 第一行写入标题
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
sheet
.
addCell
(
new
Label
(
i
,
0
,
names
[
i
],
wcfFC
));
}
// 其余行依次写入数据
int
rowNum
=
1
;
for
(
int
j
=
0
;
j
<
objects
.
size
();
j
++)
{
String
[]
obj
=
objects
.
get
(
j
);
for
(
int
h
=
0
;
h
<
obj
.
length
;
h
++)
{
sheet
.
addCell
(
new
Label
(
h
,
rowNum
,
obj
[
h
],
format
));
}
rowNum
=
rowNum
+
1
;
}
wtwb
.
write
();
wtwb
.
close
();
return
excelFile
;
}
public
static
String
createTempFile
(
String
[]
names
,
String
title
,
List
<
String
[]>
objects
)
throws
Exception
{
File
excelFile
=
File
.
createTempFile
(
System
.
currentTimeMillis
()
+
""
,
".xls"
);
WritableWorkbook
wtwb
=
Workbook
.
createWorkbook
(
excelFile
);
WritableSheet
sheet
=
wtwb
.
createSheet
(
title
,
0
);
sheet
.
getSettings
().
setDefaultColumnWidth
(
20
);
WritableFont
wfont
=
new
WritableFont
(
WritableFont
.
createFont
(
"楷书"
),
15
);
WritableCellFormat
format
=
new
WritableCellFormat
(
wfont
);
WritableFont
wfc
=
new
WritableFont
(
WritableFont
.
ARIAL
,
20
,
WritableFont
.
BOLD
,
false
,
UnderlineStyle
.
NO_UNDERLINE
,
jxl
.
format
.
Colour
.
BLACK
);
WritableCellFormat
wcfFC
=
new
WritableCellFormat
(
wfc
);
wcfFC
.
setAlignment
(
Alignment
.
CENTRE
);
wcfFC
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
// CellView cellView = new CellView();
// cellView.setAutosize(true); //设置自动大小
format
.
setAlignment
(
Alignment
.
LEFT
);
format
.
setVerticalAlignment
(
VerticalAlignment
.
TOP
);
sheet
.
mergeCells
(
0
,
0
,
names
.
length
-
1
,
0
);
sheet
.
addCell
(
new
Label
(
0
,
0
,
title
,
wcfFC
));
int
rowNum
=
2
;
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
sheet
.
addCell
(
new
Label
(
i
,
1
,
names
[
i
],
format
));
}
for
(
int
j
=
0
;
j
<
objects
.
size
();
j
++)
{
String
[]
obj
=
objects
.
get
(
j
);
for
(
int
h
=
0
;
h
<
obj
.
length
;
h
++)
{
sheet
.
addCell
(
new
Label
(
h
,
rowNum
,
obj
[
h
],
format
));
}
rowNum
=
rowNum
+
1
;
}
wtwb
.
write
();
wtwb
.
close
();
return
excelFile
.
getName
();
}
public
static
String
createCheckRandomTempFile
(
String
[]
names
,
String
title
,
List
<
String
[]>
objects
,
Map
<
String
,
String
>
infoMap
)
throws
Exception
{
File
excelFile
=
File
.
createTempFile
(
System
.
currentTimeMillis
()
+
""
,
".xls"
);
WritableWorkbook
wtwb
=
Workbook
.
createWorkbook
(
excelFile
);
WritableSheet
sheet
=
wtwb
.
createSheet
(
title
,
0
);
sheet
.
getSettings
().
setDefaultColumnWidth
(
20
);
WritableFont
wfont
=
new
WritableFont
(
WritableFont
.
createFont
(
"楷书"
),
14
);
WritableCellFormat
format
=
new
WritableCellFormat
(
wfont
);
format
.
setBorder
(
Border
.
ALL
,
BorderLineStyle
.
THIN
);
format
.
setAlignment
(
Alignment
.
CENTRE
);
format
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
WritableFont
wfc
=
new
WritableFont
(
WritableFont
.
ARIAL
,
20
,
WritableFont
.
BOLD
,
false
,
UnderlineStyle
.
NO_UNDERLINE
,
jxl
.
format
.
Colour
.
BLACK
);
WritableCellFormat
wcfFC
=
new
WritableCellFormat
(
wfc
);
wcfFC
.
setAlignment
(
Alignment
.
LEFT
);
wcfFC
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
WritableFont
nameWfc
=
new
WritableFont
(
WritableFont
.
ARIAL
,
14
,
WritableFont
.
BOLD
,
false
,
UnderlineStyle
.
NO_UNDERLINE
,
jxl
.
format
.
Colour
.
BLACK
);
WritableCellFormat
nameFormat
=
new
WritableCellFormat
(
nameWfc
);
nameFormat
.
setBorder
(
Border
.
ALL
,
BorderLineStyle
.
THIN
);
nameFormat
.
setAlignment
(
Alignment
.
CENTRE
);
nameFormat
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
WritableCellFormat
infoFormat
=
new
WritableCellFormat
(
wfont
);
infoFormat
.
setAlignment
(
Alignment
.
LEFT
);
infoFormat
.
setVerticalAlignment
(
VerticalAlignment
.
CENTRE
);
sheet
.
mergeCells
(
0
,
0
,
names
.
length
-
1
,
0
);
sheet
.
addCell
(
new
Label
(
0
,
0
,
infoMap
.
get
(
"title"
),
wcfFC
));
sheet
.
addCell
(
new
Label
(
0
,
2
,
infoMap
.
get
(
"info"
),
infoFormat
));
sheet
.
addCell
(
new
Label
(
2
,
2
,
infoMap
.
get
(
"dvrnvr"
),
infoFormat
));
sheet
.
addCell
(
new
Label
(
4
,
2
,
infoMap
.
get
(
"char"
),
infoFormat
));
sheet
.
addCell
(
new
Label
(
0
,
3
,
infoMap
.
get
(
"infoPercent"
),
infoFormat
));
sheet
.
addCell
(
new
Label
(
2
,
3
,
infoMap
.
get
(
"dvrnvrPercent"
),
infoFormat
));
sheet
.
addCell
(
new
Label
(
4
,
3
,
infoMap
.
get
(
"charPercent"
),
infoFormat
));
int
rowNum
=
5
;
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
sheet
.
addCell
(
new
Label
(
i
,
4
,
names
[
i
],
nameFormat
));
}
for
(
int
j
=
0
;
j
<
objects
.
size
();
j
++)
{
String
[]
obj
=
objects
.
get
(
j
);
for
(
int
h
=
0
;
h
<
obj
.
length
;
h
++)
{
sheet
.
addCell
(
new
Label
(
h
,
rowNum
,
obj
[
h
],
format
));
}
rowNum
=
rowNum
+
1
;
}
wtwb
.
write
();
wtwb
.
close
();
return
excelFile
.
getName
();
}
public
static
String
getContent
(
Sheet
src
,
int
rowNum
,
int
colNum
)
{
return
src
.
getRow
(
rowNum
)[
colNum
].
getContents
().
trim
();
}
/**
* 从第i行开始到最后检测指定列的唯一性
*
* @param src
* @param colNum
* @param fromRow
* 起始行
* @return
*/
public
static
Boolean
checkUnique
(
Sheet
src
,
int
colNum
,
int
fromRow
)
{
Cell
[]
colCells
=
src
.
getColumn
(
colNum
);
Set
<
String
>
set
=
new
HashSet
<
String
>();
for
(
int
i
=
fromRow
;
i
<
colCells
.
length
;
i
++)
{
if
(!
StringUtils
.
isEmpty
(
colCells
[
i
].
getContents
())
&&
!
set
.
add
(
colCells
[
i
].
getContents
()))
{
return
false
;
}
}
return
true
;
}
public
static
File
getTempFile
(
String
fileName
)
{
String
dir
=
System
.
getProperty
(
"java.io.tmpdir"
);
// 获取系统临时目录
return
new
File
(
dir
+
File
.
separator
+
fileName
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
String
msg
=
"12345"
;
System
.
out
.
println
(
msg
.
indexOf
(
"@"
));
}
}
src/main/java/com/jsh/erp/utils/ExportExecUtil.java
0 → 100644
View file @
8a4d0347
package
com.jsh.erp.utils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.OutputStream
;
public
class
ExportExecUtil
{
public
static
void
showExec
(
File
excelFile
,
String
fileName
,
HttpServletResponse
response
)
throws
Exception
{
response
.
setContentType
(
"application/octet-stream"
);
fileName
=
new
String
(
fileName
.
getBytes
(
"gbk"
),
"ISO8859_1"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename=\""
+
fileName
+
".xls"
+
"\""
);
FileInputStream
fis
=
new
FileInputStream
(
excelFile
);
OutputStream
out
=
response
.
getOutputStream
();
int
SIZE
=
1024
*
1024
;
byte
[]
bytes
=
new
byte
[
SIZE
];
int
LENGTH
=
-
1
;
while
((
LENGTH
=
fis
.
read
(
bytes
))
!=
-
1
){
out
.
write
(
bytes
,
0
,
LENGTH
);
}
out
.
flush
();
fis
.
close
();
}
}
Write
Preview
Supports
Markdown
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