Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
T
traffic-front
Project
Project
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangxiaoming
traffic-front
Commits
1e9d27f2
Commit
1e9d27f2
authored
Mar 16, 2019
by
gary
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev_mysql' into dev_mysql
parents
a1399503
86a8faee
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
467 additions
and
113 deletions
+467
-113
POIUtil.java
atms-api/src/main/java/pwc/taxtech/atms/common/POIUtil.java
+85
-4
TaxesCalculateReportEnum.java
...taxtech/atms/constant/enums/TaxesCalculateReportEnum.java
+49
-0
OperationLogTaxDocController.java
...taxtech/atms/controller/OperationLogTaxDocController.java
+13
-9
TaxDocumentController.java
...va/pwc/taxtech/atms/controller/TaxDocumentController.java
+7
-0
TemplateController.java
.../java/pwc/taxtech/atms/controller/TemplateController.java
+0
-1
OperationLogTaxDocServiceImpl.java
...tech/atms/service/impl/OperationLogTaxDocServiceImpl.java
+3
-1
TaxDocumentServiceImpl.java
...pwc/taxtech/atms/service/impl/TaxDocumentServiceImpl.java
+131
-2
FormulaAgent.java
.../java/pwc/taxtech/atms/vat/service/impl/FormulaAgent.java
+1
-0
ReportGeneratorImpl.java
...wc/taxtech/atms/vat/service/impl/ReportGeneratorImpl.java
+14
-53
ReportServiceImpl.java
.../pwc/taxtech/atms/vat/service/impl/ReportServiceImpl.java
+0
-0
OperationLogTaxDocument.java
...java/pwc/taxtech/atms/entity/OperationLogTaxDocument.java
+11
-0
cit-report-view.ctrl.js
...pp/app/cit/report/cit-report-view/cit-report-view.ctrl.js
+1
-1
tax-report-cell-detail-modal.ctrl.js
...rt-cell-detail-modal/tax-report-cell-detail-modal.ctrl.js
+3
-3
vat-report-view.ctrl.js
...p/common/controls/vat-report-view/vat-report-view.ctrl.js
+1
-1
cellComment.svc.js
...src/main/webapp/app/common/webservices/cellComment.svc.js
+2
-1
app-multi-select.html
...bapp/app/framework/app-multi-select/app-multi-select.html
+15
-4
app-usr-operate-log.ctrl.js
...framework/app-usr-operate-log/app-usr-operate-log.ctrl.js
+3
-3
app-usr-operate-log.svc.js
.../framework/app-usr-operate-log/app-usr-operate-log.svc.js
+2
-1
tax-document-list.ctrl.js
...ocumentManage/tax-document-list/tax-document-list.ctrl.js
+0
-0
tax-document-list.html
...axDocumentManage/tax-document-list/tax-document-list.html
+20
-11
tax-document-list.svc.js
...DocumentManage/tax-document-list/tax-document-list.svc.js
+106
-18
No files found.
atms-api/src/main/java/pwc/taxtech/atms/common/POIUtil.java
View file @
1e9d27f2
...
...
@@ -2,14 +2,12 @@ package pwc.taxtech.atms.common;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.Iterator
;
import
java.util.Optional
;
public
class
POIUtil
{
...
...
@@ -119,6 +117,89 @@ public class POIUtil {
return
row
;
}
public
static
Row
createAndCloneRow
(
Workbook
wb
,
Sheet
sheet
,
Integer
destRowIndex
,
Row
fromRow
)
{
Row
toRow
=
null
;
if
(
sheet
.
getRow
(
destRowIndex
)
!=
null
)
{
int
lastRowNo
=
sheet
.
getLastRowNum
();
sheet
.
shiftRows
(
destRowIndex
,
lastRowNo
,
1
);
}
toRow
=
sheet
.
createRow
(
destRowIndex
);
for
(
Iterator
cellIt
=
fromRow
.
cellIterator
();
cellIt
.
hasNext
();)
{
Cell
tmpCell
=
(
Cell
)
cellIt
.
next
();
Cell
newCell
=
toRow
.
createCell
(
tmpCell
.
getColumnIndex
());
copyCell
(
wb
,
tmpCell
,
newCell
,
false
);
}
return
toRow
;
}
public
static
void
copyCell
(
Workbook
wb
,
Cell
srcCell
,
Cell
distCell
,
boolean
copyValueFlag
)
{
CellStyle
newstyle
=
wb
.
createCellStyle
();
copyCellStyle
(
wb
,
srcCell
.
getCellStyle
(),
newstyle
);
if
(
srcCell
.
getColumnIndex
()==
7
){
newstyle
.
setLocked
(
false
);
}
// distCell.setEncoding(srcCell.getEncoding());
//样式
distCell
.
setCellStyle
(
newstyle
);
//评论
if
(
srcCell
.
getCellComment
()
!=
null
)
{
distCell
.
setCellComment
(
srcCell
.
getCellComment
());
}
// 不同数据类型处理
int
srcCellType
=
srcCell
.
getCellType
();
distCell
.
setCellType
(
srcCellType
);
if
(
copyValueFlag
)
{
if
(
srcCellType
==
Cell
.
CELL_TYPE_NUMERIC
)
{
if
(
DateUtil
.
isCellDateFormatted
(
srcCell
))
{
distCell
.
setCellValue
(
srcCell
.
getDateCellValue
());
}
else
{
distCell
.
setCellValue
(
srcCell
.
getNumericCellValue
());
}
}
else
if
(
srcCellType
==
Cell
.
CELL_TYPE_STRING
)
{
distCell
.
setCellValue
(
srcCell
.
getRichStringCellValue
());
}
else
if
(
srcCellType
==
Cell
.
CELL_TYPE_BLANK
)
{
// nothing21
}
else
if
(
srcCellType
==
Cell
.
CELL_TYPE_BOOLEAN
)
{
distCell
.
setCellValue
(
srcCell
.
getBooleanCellValue
());
}
else
if
(
srcCellType
==
Cell
.
CELL_TYPE_ERROR
)
{
distCell
.
setCellErrorValue
(
srcCell
.
getErrorCellValue
());
}
else
if
(
srcCellType
==
Cell
.
CELL_TYPE_FORMULA
)
{
distCell
.
setCellFormula
(
srcCell
.
getCellFormula
());
}
else
{
// nothing29
}
}
}
public
static
void
copyCellStyle
(
Workbook
wb
,
CellStyle
fromStyle
,
CellStyle
toStyle
)
{
toStyle
.
setAlignment
(
HorizontalAlignment
.
forInt
(
fromStyle
.
getAlignment
()));
//边框和边框颜色
toStyle
.
setBorderBottom
(
BorderStyle
.
valueOf
(
fromStyle
.
getBorderBottom
()));
toStyle
.
setBorderLeft
(
BorderStyle
.
valueOf
(
fromStyle
.
getBorderLeft
()));
toStyle
.
setBorderRight
(
BorderStyle
.
valueOf
(
fromStyle
.
getBorderRight
()));
toStyle
.
setBorderTop
(
BorderStyle
.
valueOf
(
fromStyle
.
getBorderTop
()));
toStyle
.
setTopBorderColor
(
fromStyle
.
getTopBorderColor
());
toStyle
.
setBottomBorderColor
(
fromStyle
.
getBottomBorderColor
());
toStyle
.
setRightBorderColor
(
fromStyle
.
getRightBorderColor
());
toStyle
.
setLeftBorderColor
(
fromStyle
.
getLeftBorderColor
());
//背景和前景
toStyle
.
setFillBackgroundColor
(
fromStyle
.
getFillBackgroundColor
());
toStyle
.
setFillForegroundColor
(
fromStyle
.
getFillForegroundColor
());
//
toStyle
.
setDataFormat
(
fromStyle
.
getDataFormat
());
toStyle
.
setFillPattern
(
FillPatternType
.
forInt
(
fromStyle
.
getFillPattern
()));
toStyle
.
setFont
(
wb
.
getFontAt
(
fromStyle
.
getFontIndex
()));
toStyle
.
setHidden
(
fromStyle
.
getHidden
());
toStyle
.
setIndention
(
fromStyle
.
getIndention
());
//首行缩进
toStyle
.
setLocked
(
fromStyle
.
getLocked
());
toStyle
.
setRotation
(
fromStyle
.
getRotation
());
//旋转
toStyle
.
setVerticalAlignment
(
VerticalAlignment
.
forInt
(
fromStyle
.
getVerticalAlignment
()));
toStyle
.
setWrapText
(
fromStyle
.
getWrapText
());
}
}
atms-api/src/main/java/pwc/taxtech/atms/constant/enums/TaxesCalculateReportEnum.java
0 → 100644
View file @
1e9d27f2
package
pwc
.
taxtech
.
atms
.
constant
.
enums
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
TaxesCalculateReportEnum
{
public
enum
Column
{
Column_1
(
0
,
"序号"
),
Column_2
(
1
,
"收入类型名称"
),
Column_3
(
2
,
"税金项目"
),
Column_4
(
3
,
"账载收入-明细"
),
Column_5
(
4
,
"销项开票收入数-专票"
),
Column_6
(
5
,
"销项开票收入数-普票"
),
Column_7
(
6
,
"计税基数(应税收入)"
),
Column_8
(
7
,
"税率"
),
Column_9
(
8
,
"税额(元)"
),
Column_10
(
9
,
"收入类别"
),
Column_11
(
10
,
"计税方式"
),
Column_12
(
11
,
"备注"
)
;
private
Integer
index
;
private
String
name
;
public
static
final
Map
<
Integer
,
String
>
MAPPING
=
new
HashMap
<>();
Column
(
Integer
index
,
String
name
)
{
this
.
index
=
index
;
this
.
name
=
name
;
}
public
Integer
getIndex
()
{
return
index
;
}
public
String
getName
()
{
return
name
;
}
static
{
for
(
TaxesCalculateReportEnum
.
Column
accountType
:
TaxesCalculateReportEnum
.
Column
.
values
())
{
MAPPING
.
put
(
accountType
.
getIndex
(),
accountType
.
getName
());
}
}
}
}
atms-api/src/main/java/pwc/taxtech/atms/controller/OperationLogTaxDocController.java
View file @
1e9d27f2
package
pwc
.
taxtech
.
atms
.
controller
;
import
com.google.common.collect.Lists
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
pwc.taxtech.atms.dto.ReturnData
;
...
...
@@ -24,7 +26,7 @@ public class OperationLogTaxDocController {
@RequestMapping
(
"selectList"
)
@ResponseBody
public
ReturnData
selectTaxDocumentList
(){
public
ReturnData
selectTaxDocumentList
()
{
List
<
OperationLogTaxDocument
>
operationLogTaxDocuments
=
operationLogTaxDocService
.
selectTaxDocumentList
();
ReturnData
returnData
=
new
ReturnData
();
returnData
.
setItems
(
operationLogTaxDocuments
);
...
...
@@ -34,13 +36,15 @@ public class OperationLogTaxDocController {
/**
* 根据 id 数组来查询相关日志
* @param taxDocumentIds
*
* @param operationLogTaxDocument
* @return
*/
@RequestMapping
(
"/selectListForLog"
)
@ResponseBody
public
ReturnData
selectListForLog
(
List
<
String
>
taxDocumentIds
){
List
<
OperationLogTaxDocument
>
operationLogTaxDocuments
=
operationLogTaxDocService
.
selectListForLog
(
taxDocumentIds
);
public
ReturnData
selectListForLog
(
@RequestBody
OperationLogTaxDocument
operationLogTaxDocument
)
{
List
<
String
>
ids
=
operationLogTaxDocument
.
getIds
()
==
null
?
Lists
.
newArrayList
()
:
operationLogTaxDocument
.
getIds
();
List
<
OperationLogTaxDocument
>
operationLogTaxDocuments
=
operationLogTaxDocService
.
selectListForLog
(
ids
);
ReturnData
returnData
=
new
ReturnData
();
returnData
.
setItems
(
operationLogTaxDocuments
);
returnData
.
setTotalCount
(
operationLogTaxDocuments
.
size
());
...
...
@@ -49,25 +53,25 @@ public class OperationLogTaxDocController {
@RequestMapping
(
"add"
)
@ResponseBody
public
boolean
addTaxDocuments
(
OperationLogTaxDocument
operationLogTaxDocument
){
public
boolean
addTaxDocuments
(
OperationLogTaxDocument
operationLogTaxDocument
)
{
return
operationLogTaxDocService
.
addTaxDocumentList
(
operationLogTaxDocument
);
}
@RequestMapping
(
"delete"
)
@ResponseBody
public
boolean
deleteTaxDocuments
(
String
id
){
public
boolean
deleteTaxDocuments
(
String
id
)
{
return
operationLogTaxDocService
.
deleteTaxDocument
(
id
);
}
@RequestMapping
(
"edit"
)
@ResponseBody
public
boolean
editTaxDocuments
(
OperationLogTaxDocument
operationLogTaxDocument
){
public
boolean
editTaxDocuments
(
OperationLogTaxDocument
operationLogTaxDocument
)
{
return
operationLogTaxDocService
.
editFilesType
(
operationLogTaxDocument
);
}
@RequestMapping
(
"exportExcel"
)
@ResponseBody
public
void
exportExcelFile
(
HttpServletResponse
response
)
{
public
void
exportExcelFile
(
HttpServletResponse
response
)
{
try
{
Map
<
String
,
String
>
headers
=
new
HashMap
<
String
,
String
>();
headers
.
put
(
"id"
,
"id"
);
...
...
@@ -86,7 +90,7 @@ public class OperationLogTaxDocController {
response
.
setHeader
(
"Content-Disposition"
,
"attachment;fileName="
+
new
String
(
""
.
getBytes
(
"GB2312"
),
"ISO-8859-1"
));
OutputStream
ouputStream
=
response
.
getOutputStream
();
ExcelUtil
.
exportExcel
(
headers
,
TaxDocuments
,
ouputStream
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
...
...
atms-api/src/main/java/pwc/taxtech/atms/controller/TaxDocumentController.java
View file @
1e9d27f2
...
...
@@ -246,6 +246,13 @@ public class TaxDocumentController {
}
}
/**
* 下载全部附件
*/
@PostMapping
(
value
=
"/downloadAllFile"
)
public
void
downloadAllFile
(
HttpServletResponse
response
,
@RequestBody
TaxDocumentDto
taxDocumentDto
)
{
taxDocumentService
.
downloadAllFile
(
response
,
taxDocumentDto
.
getIds
());
}
/**
* 解析json
...
...
atms-api/src/main/java/pwc/taxtech/atms/controller/TemplateController.java
View file @
1e9d27f2
...
...
@@ -185,7 +185,6 @@ public class TemplateController extends BaseController {
@RequestParam
(
name
=
"projectId"
)
String
projectId
,
HttpServletResponse
response
)
throws
URISyntaxException
{
period
=
0
;
String
filePath
;
File
templateFile
;
InputStream
inputStream
=
null
;
...
...
atms-api/src/main/java/pwc/taxtech/atms/service/impl/OperationLogTaxDocServiceImpl.java
View file @
1e9d27f2
...
...
@@ -51,7 +51,9 @@ public class OperationLogTaxDocServiceImpl {
public
List
<
OperationLogTaxDocument
>
selectListForLog
(
List
<
String
>
taxDocumentIds
)
{
OperationLogTaxDocumentExample
example
=
new
OperationLogTaxDocumentExample
();
OperationLogTaxDocumentExample
.
Criteria
criteria
=
example
.
createCriteria
();
criteria
.
andIdIn
(
taxDocumentIds
);
if
(
taxDocumentIds
.
size
()>
0
){
criteria
.
andIdIn
(
taxDocumentIds
);
}
return
operationLogTaxDocumentMapper
.
selectByExample
(
example
);
}
}
atms-api/src/main/java/pwc/taxtech/atms/service/impl/TaxDocumentServiceImpl.java
View file @
1e9d27f2
...
...
@@ -22,8 +22,16 @@ import pwc.taxtech.atms.vat.entity.FileUpload;
import
pwc.taxtech.atms.vat.entity.ReportFileUpload
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.*
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.net.URLDecoder
;
import
java.net.URLEncoder
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipOutputStream
;
/**
* 查询
...
...
@@ -47,8 +55,6 @@ public class TaxDocumentServiceImpl {
@Autowired
DidiFileUploadService
didiFileUploadService
;
@Autowired
private
BusinessUnitServiceImpl
businessUnitService
;
@Autowired
private
OrganizationServiceImpl
organizationService
;
...
...
@@ -340,4 +346,127 @@ public class TaxDocumentServiceImpl {
return
false
;
}
}
public
void
downloadAllFile
(
HttpServletResponse
response
,
List
<
Long
>
ids
)
{
String
downloadName
=
"多选附件.zip"
;
try
{
response
.
setContentType
(
"multipart/form-data"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;fileName="
+
URLEncoder
.
encode
(
downloadName
,
"UTF-8"
));
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
RuntimeException
(
"下载文件名编码时出现错误."
,
e
);
}
OutputStream
outputStream
=
null
;
ZipOutputStream
zos
=
null
;
try
{
outputStream
=
response
.
getOutputStream
();
zos
=
new
ZipOutputStream
(
outputStream
);
// 将文件流写入zip中
downloadTolocal
(
zos
,
ids
);
}
catch
(
IOException
e
)
{
log
.
error
(
"downloadAllFile-xxx下载全部附件失败,ids=[{}],错误信息=[{}]"
,
ids
,
e
);
}
finally
{
if
(
zos
!=
null
)
{
try
{
zos
.
close
();
}
catch
(
Exception
e2
)
{
log
.
info
(
"关闭输入流时出现错误"
,
e2
);
}
}
if
(
outputStream
!=
null
)
{
try
{
outputStream
.
close
();
}
catch
(
Exception
e2
)
{
log
.
info
(
"关闭输入流时出现错误"
,
e2
);
}
}
}
}
/**
* // 将文件流写入zip中
*
* @param zos
* @param ids
*/
private
void
downloadTolocal
(
ZipOutputStream
zos
,
List
<
Long
>
ids
)
{
TaxDocumentExample
example
=
new
TaxDocumentExample
();
TaxDocumentExample
.
Criteria
criteria
=
example
.
createCriteria
();
if
(
null
==
ids
||
ids
.
size
()
<
1
)
{
throw
new
RuntimeException
(
"传入参数错误:空参数数组"
);
}
criteria
.
andIdIn
(
ids
);
List
<
TaxDocument
>
taxDocuments
=
taxDocumentMapper
.
selectByExample
(
example
);
for
(
TaxDocument
item
:
taxDocuments
)
{
//文件url
String
urlPath
=
item
.
getFilePositionUrl
();
//如果url为null或空字符串而抛出异常
if
(
StringUtils
.
isBlank
(
urlPath
))
{
throw
new
RuntimeException
(
"文件url为空,id为:"
+
item
.
getId
());
}
//文件名称(带后缀)
String
fileName
=
StringUtils
.
isBlank
(
item
.
getFileOriginalName
())
?
"未知文件(请修改后缀名).xlsx"
:
item
.
getFileOriginalName
();
InputStream
is
=
null
;
BufferedInputStream
in
=
null
;
byte
[]
buffer
=
new
byte
[
1024
];
int
len
;
//创建zip实体(一个文件对应一个ZipEntry)
ZipEntry
entry
=
new
ZipEntry
(
fileName
);
try
{
//获取需要下载的文件流
URL
httpurl
=
new
URL
(
URLDecoder
.
decode
(
urlPath
,
"UTF-8"
));
HttpURLConnection
httpConn
=
(
HttpURLConnection
)
httpurl
.
openConnection
();
httpConn
.
setDoOutput
(
true
);
// 使用 URL 连接进行输出
httpConn
.
setDoInput
(
true
);
// 使用 URL 连接进行输入
httpConn
.
setUseCaches
(
false
);
// 忽略缓存
httpConn
.
setRequestMethod
(
"GET"
);
// 设置URL请求方法
//可设置请求头
httpConn
.
setRequestProperty
(
"Content-Type"
,
"application/octet-stream"
);
httpConn
.
setRequestProperty
(
"Connection"
,
"Keep-Alive"
);
// 维持长连接
httpConn
.
setRequestProperty
(
"Charset"
,
"UTF-8"
);
httpConn
.
connect
();
if
(
httpConn
.
getResponseCode
()
>=
400
)
{
is
=
httpConn
.
getErrorStream
();
}
else
{
is
=
httpConn
.
getInputStream
();
}
in
=
new
BufferedInputStream
(
is
);
zos
.
putNextEntry
(
entry
);
//文件流循环写入ZipOutputStream
while
((
len
=
in
.
read
(
buffer
))
!=
-
1
)
{
zos
.
write
(
buffer
,
0
,
len
);
}
}
catch
(
Exception
e
)
{
log
.
info
(
"xxx--下载全部附件--压缩文件出错"
,
e
);
}
finally
{
if
(
entry
!=
null
)
{
try
{
zos
.
closeEntry
();
}
catch
(
Exception
e2
)
{
log
.
info
(
"xxx下载全部附件--zip实体关闭失败"
,
e2
);
}
}
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
Exception
e2
)
{
log
.
info
(
"xxx下载全部附件--文件输入流关闭失败"
,
e2
);
}
}
if
(
is
!=
null
)
{
try
{
is
.
close
();
}
catch
(
Exception
e
)
{
log
.
info
(
"xxx下载全部附件--输入缓冲流关闭失败"
,
e
);
}
}
}
}
}
}
atms-api/src/main/java/pwc/taxtech/atms/vat/service/impl/FormulaAgent.java
View file @
1e9d27f2
...
...
@@ -177,6 +177,7 @@ public class FormulaAgent {
public
static
String
_buildSql
(
String
getField
,
String
tableName
,
String
filter
,
String
filterValue
,
Integer
period
,
FormulaContext
formulaContext
,
String
year
,
boolean
bool
,
boolean
getSql
)
throws
Exception
{
String
sql
=
""
;
if
(
getSql
){
tableName
=
tableName
.
toLowerCase
();
sql
=
"select * from "
+
tableName
+
" where 1=1 and "
+
filter
+
filterValue
;
return
sql
;
}
else
{
...
...
atms-api/src/main/java/pwc/taxtech/atms/vat/service/impl/ReportGeneratorImpl.java
View file @
1e9d27f2
...
...
@@ -19,7 +19,6 @@ import org.springframework.stereotype.Component;
import
pwc.taxtech.atms.common.POIUtil
;
import
pwc.taxtech.atms.common.util.SpringContextUtil
;
import
pwc.taxtech.atms.constant.enums.CellDataSourceType
;
import
pwc.taxtech.atms.constant.enums.FileUploadEnum
;
import
pwc.taxtech.atms.dao.ProjectMapper
;
import
pwc.taxtech.atms.dto.didiFileUpload.DidiFileIUploadParam
;
import
pwc.taxtech.atms.dto.didiFileUpload.DidiFileUploadDetailResult
;
...
...
@@ -34,7 +33,10 @@ import pwc.taxtech.atms.vat.dpo.PeriodCellTemplateConfigExtendDto;
import
pwc.taxtech.atms.vat.entity.*
;
import
pwc.taxtech.atms.vat.service.impl.report.functions.*
;
import
java.io.*
;
import
javax.annotation.Resource
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
java.util.regex.Matcher
;
...
...
@@ -47,31 +49,32 @@ import static pwc.taxtech.atms.dto.vatdto.WrapPeriodJobDto.*;
@Component
public
class
ReportGeneratorImpl
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReportGeneratorImpl
.
class
);
@
Autowired
@
Resource
private
ProjectMapper
projectMapper
;
@Autowired
private
HttpFileService
httpFileService
;
@Autowired
private
FormulaAgent
formulaAgent
;
@
Autowired
@
Resource
private
PeriodCellDataMapper
periodCellDataMapper
;
@
Autowired
@
Resource
private
PeriodFormulaBlockMapper
periodFormulaBlockMapper
;
@
Autowired
private
PeriodDataSourceMapper
periodDataSource
Mapper
;
@
Autowired
@
Resource
private
RevenueConfigMapper
revenueConfig
Mapper
;
@
Resource
private
PeriodCellTemplateConfigMapper
periodCellTemplateConfigMapper
;
@
Autowired
@
Resource
private
PeriodCellTemplateMapper
periodCellTemplateMapper
;
@
Autowired
@
Resource
private
PeriodTemplateMapper
periodTemplateMapper
;
@Autowired
private
DistributedIdService
distributedIdService
;
@
Autowired
@
Resource
private
PeriodJobMapper
periodJobMapper
;
@Autowired
private
DidiFileUploadService
didiFileUploadService
;
public
FormulaContext
initContext
(
PeriodResources
resources
,
Integer
period
)
{
return
FormulaContext
.
extractContextFromProject
(
resources
.
getProject
()).
fixedFormula
(
period
,
resources
.
getTemplateGroupId
(),
formulaAgent
);
...
...
@@ -503,26 +506,7 @@ public class ReportGeneratorImpl {
}
}
}
//TODO 当是税金计算表时动态添加行
if
(
"VAT8002"
.
equals
(
a
.
getCode
()))
{
tWorkbook
=
assembleTaxWorkBook
(
tWorkbook
);
//覆盖template地址
ByteArrayOutputStream
bout
=
new
ByteArrayOutputStream
();
try
{
tWorkbook
.
write
(
bout
);
FileUpload
fileUpload
=
didiFileUploadService
.
uploadFile
(
bout
.
toByteArray
(),
a
.
getCode
()
+
"_"
+
a
.
getName
()
+
".xlsx"
,
FileUploadEnum
.
BizSource
.
PERIOD_REPORT_TEMPLATE_UPLOAD
.
name
());
a
.
setPath
(
fileUpload
.
getUid
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
bout
.
close
();
}
catch
(
Exception
e
)
{
}
}
periodTemplateMapper
.
updateByPrimaryKey
(
a
);
}
POIUtil
.
cloneSheet
(
tWorkbook
.
getSheetAt
(
0
),
workbook
.
createSheet
(
a
.
getCode
()));
});
...
...
@@ -536,29 +520,6 @@ public class ReportGeneratorImpl {
}
}
public
Workbook
assembleTaxWorkBook
(
Workbook
tWorkbook
)
{
Sheet
sheet
=
tWorkbook
.
getSheetAt
(
0
);
Row
row
=
POIUtil
.
createRow
(
sheet
,
3
);
Cell
cell
=
row
.
createCell
(
0
);
cell
.
setCellValue
(
"test"
);
return
tWorkbook
;
}
private
void
saveExcel
(
Workbook
wb
)
{
FileOutputStream
fileOut
;
try
{
fileOut
=
new
FileOutputStream
(
""
);
wb
.
write
(
fileOut
);
fileOut
.
close
();
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
/**
* 注册所有的自定义方法到工作簿
...
...
atms-api/src/main/java/pwc/taxtech/atms/vat/service/impl/ReportServiceImpl.java
View file @
1e9d27f2
This diff is collapsed.
Click to expand it.
atms-dao/src/main/java/pwc/taxtech/atms/entity/OperationLogTaxDocument.java
View file @
1e9d27f2
...
...
@@ -2,6 +2,7 @@ package pwc.taxtech.atms.entity;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
/**
*
...
...
@@ -110,6 +111,8 @@ public class OperationLogTaxDocument implements Serializable {
*/
private
Date
createTime
;
List
<
String
>
ids
;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table operation_log_tax_document
...
...
@@ -118,6 +121,14 @@ public class OperationLogTaxDocument implements Serializable {
*/
private
static
final
long
serialVersionUID
=
1L
;
public
List
<
String
>
getIds
()
{
return
ids
;
}
public
void
setIds
(
List
<
String
>
ids
)
{
this
.
ids
=
ids
;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column operation_log_tax_document.id
...
...
atms-web/src/main/webapp/app/cit/report/cit-report-view/cit-report-view.ctrl.js
View file @
1e9d27f2
...
...
@@ -274,7 +274,7 @@
case
enums
.
formulaDataSourceType
.
InvoiceFilter
:
break
;
case
enums
.
formulaDataSourceType
.
CIT_TBAM
:
obj
.
relSql
=
sourceData
.
rel
S
ql
;
obj
.
relSql
=
sourceData
.
rel
_s
ql
;
}
if
(
sourceData
.
type
===
0
&&
sourceData
.
dataSourceType
===
enums
.
cellDataSourceType
.
RelatedModel
)
{
...
...
atms-web/src/main/webapp/app/common/controls/tax-report-cell-detail-modal/tax-report-cell-detail-modal.ctrl.js
View file @
1e9d27f2
...
...
@@ -1536,7 +1536,7 @@
}
,
{
dataField
:
'
A
ttribute'
,
dataField
:
'
a
ttribute'
,
caption
:
$translate
.
instant
(
'Attribute'
),
alignment
:
'left'
}
...
...
@@ -2212,7 +2212,7 @@
$scope
.
detail
.
dataGridSourceBind
=
[
$scope
.
detail
.
dataGridSource
[
0
]];
break
;
case
enums
.
formulaDataSourceType
.
CIT_TBAM
:
$scope
.
detail
.
dataGridSourceBind
=
getBlowGridData
(
$scope
.
detail
.
dataGridSource
[
0
]);
getBlowGridData
(
$scope
.
detail
.
dataGridSource
[
0
]);
break
;
default
:
$scope
.
detail
.
dataGridSourceBind
=
$scope
.
detail
.
dataGridSource
;
...
...
@@ -2236,7 +2236,7 @@
var
getBlowGridData
=
function
(
data
){
cellCommentService
.
getCellInformation
(
data
).
success
(
function
(
res
)
{
if
(
res
.
resultMsg
){
return
res
.
data
;
$scope
.
detail
.
dataGridSourceBind
=
[
res
.
data
[
0
]]
;
}
}).
error
(
function
(
error
)
{
...
...
atms-web/src/main/webapp/app/common/controls/vat-report-view/vat-report-view.ctrl.js
View file @
1e9d27f2
...
...
@@ -274,7 +274,7 @@
case
enums
.
formulaDataSourceType
.
InvoiceFilter
:
break
;
case
enums
.
formulaDataSourceType
.
CIT_TBAM
:
obj
.
relSql
=
sourceData
.
rel
S
ql
;
obj
.
relSql
=
sourceData
.
rel
_s
ql
;
}
...
...
atms-web/src/main/webapp/app/common/webservices/cellComment.svc.js
View file @
1e9d27f2
...
...
@@ -12,7 +12,7 @@ webservices.factory('cellCommentService', ['$http', 'apiConfig', function ($http
return
$http
.
post
(
'/CellComment/Delete/'
+
commentId
,
{},
apiConfig
.
createVat
());
},
getCellInformation
:
function
(
data
){
return
$http
.
get
(
'/CellComment/getCellInformation?sql='
+
data
.
relSql
,
apiConfig
.
v
at
());
return
$http
.
get
(
'/CellComment/getCellInformation?sql='
+
data
.
relSql
,
apiConfig
.
createV
at
());
}
};
}]);
\ No newline at end of file
atms-web/src/main/webapp/app/framework/app-multi-select/app-multi-select.html
View file @
1e9d27f2
...
...
@@ -45,16 +45,19 @@
.select-simulator-option-menu
ul
li
{
padding
:
0
8px
;
list-style
:
none
;
color
:
#000
;
font-size
:
13px
;
line-height
:
1
;
}
.select-simulator-option-menu
ul
li
:hover
{
background-color
:
#e7e8e0
;
}
.select-simulator-option-menu
ul
li
:nth-child
(
odd
)
{
background-color
:
#
efefef
;
background-color
:
#
F2F2F2
;
;
}
.select-simulator-option-menu
ul
li
>
label
{
padding-bottom
:
5px
;
margin
:
0
;
padding
:
8px
0
;
}
.input-reset-button
{
...
...
@@ -93,6 +96,13 @@
position
:
relative
;
background
:
inherit
;
}
.select-simulator-option-name
{
float
:
left
;
}
.select-simulator-option-check-icon
{
float
:
right
;
color
:
#0db4ff
;
}
</style>
<div
class=
"select-simulator"
>
<input
class=
"for-fake-input"
...
...
@@ -120,10 +130,11 @@
<label
style=
"width: 100%;"
ng-click=
"checksOption()"
>
<input
type=
"{{optionType}}"
name=
"simulatorOptionMenu"
value=
"{{value}}"
value=
"{{value}}"
ng-hide=
"true"
ng-checked=
"selected.indexOf(optionValues[$index]) > -1"
data-key=
"{{optionKeys[$index]}}"
/>
<span>
{{value}}
</span>
<span
class=
"select-simulator-option-name"
>
{{value}}
</span>
<i
ng-if=
"selected.indexOf(optionValues[$index]) > -1"
class=
"fa fa-check select-simulator-option-check-icon"
></i>
</label>
</li>
</ul>
...
...
atms-web/src/main/webapp/app/framework/app-usr-operate-log/app-usr-operate-log.ctrl.js
View file @
1e9d27f2
...
...
@@ -11,9 +11,9 @@ frameworkModule.controller('appUsrOperateLogController',
$scope
.
loadMainData
=
function
()
{
$scope
.
thisModuleId
=
$scope
.
thisModuleId
?
$scope
.
thisModuleId
:
[];
var
config
=
{
params
:
{
taxDocumentIds
:
JSON
.
stringify
(
$scope
.
thisModuleId
)
}
//
params: {
"ids"
:
$scope
.
thisModuleId
//
}
};
usrOperateLogService
[
$scope
.
thisModuleName
](
config
).
then
(
function
(
data
)
{
if
(
status
===
204
)
{
...
...
atms-web/src/main/webapp/app/framework/app-usr-operate-log/app-usr-operate-log.svc.js
View file @
1e9d27f2
...
...
@@ -10,7 +10,7 @@ function ($q, apiConfig, jqFetch,apiInterceptor) {
return
jqFetch
.
get
(
apiInterceptor
.
webApiHostUrl
+
'/operLogFileTypes/selectList'
,
params
);
},
docManageListLog
:
function
(
params
)
{
return
jqFetch
.
ge
t
(
apiInterceptor
.
webApiHostUrl
+
'/operLogTaxDoc/selectListForLog'
,
params
);
return
jqFetch
.
pos
t
(
apiInterceptor
.
webApiHostUrl
+
'/operLogTaxDoc/selectListForLog'
,
params
);
}
};
}]);
\ No newline at end of file
atms-web/src/main/webapp/app/taxDocumentManage/tax-document-list/tax-document-list.ctrl.js
View file @
1e9d27f2
This diff is collapsed.
Click to expand it.
atms-web/src/main/webapp/app/taxDocumentManage/tax-document-list/tax-document-list.html
View file @
1e9d27f2
<div
class=
"land-manage-page"
watch-group
temp-module
>
<div
class=
"land-manage-page"
watch-group
temp-module
down-load-module
>
<style>
ul
{
margin
:
0
;
...
...
@@ -344,7 +344,7 @@
<div
class=
"TDL-query-val"
>
<select
ng-model=
"queryFieldModel.fileAttr"
class=
"form-control radius3"
required
placeholder=
"{{'PleaseSelected' | translate}}"
>
placeholder=
"{{'PleaseSelected' | translate}}"
>
<option
ng-repeat=
"fileAttr in fileAttrOptions track by $index"
value=
"{{fileAttr}}"
>
{{fileAttr}}
</option>
...
...
@@ -360,8 +360,7 @@
<div
class=
"TDL-query-val"
>
<select
ng-model=
"queryFieldModel.fileType"
class=
"form-control radius3"
required
placeholder=
"{{'PleaseSelected' | translate}}"
>
<option
selected
></option>
placeholder=
"{{'PleaseSelected' | translate}}"
>
<option
ng-repeat=
"fileType in fileTypeOptions track by $index"
value=
"{{fileType}}"
>
{{fileType}}
</option>
...
...
@@ -424,8 +423,15 @@
<span
translate=
"BusinessLine"
></span>
</div>
<div
class=
"TDL-query-val"
>
<input
type=
"text"
class=
"form-control radius3"
ng-model=
"queryFieldModel.businessLine"
/>
<select
ng-model=
"queryFieldModel.businessLine"
class=
"form-control radius3"
placeholder=
"{{'PleaseSelected' | translate}}"
>
<option
ng-repeat=
"businessLine in businessLineOptions track by $index"
value=
"{{businessLine.name}}"
>
{{businessLine.name}}
</option>
</select>
<!--<input type="text" class="form-control radius3"-->
<!--ng-model="queryFieldModel.businessLine"/>-->
</div>
</div>
<div
class=
"TDL-query-block"
>
...
...
@@ -779,13 +785,16 @@
</label>
<div
class=
"col-sm-11"
style=
"width:61.67%"
>
<input
class=
"form-control"
placeholder=
"{{'PleaseType'
|
translate}}"
placeholder=
"{{'PleaseType'
|
translate}}"
ng-required=
"isRequired('EntityStorageLocation')"
ng-model=
"editFieldModel.storageArea"
/>
</div>
<div
class=
"DTL-special-external-btn"
title=
"{{'EntityStorageDescription' | translate}}"
>
<i
class=
"fa fake-exclamatory-circle"
></i>
<a
href=
"javascript:void(0)"
ng-click=
"openHelpPopForEntityStorage()"
>
<i
class=
"fa fake-exclamatory-circle"
aria-hidden=
"true"
></i>
</a>
</div>
</div>
<div
class=
"col-sm-6 form-group"
>
...
...
@@ -807,7 +816,7 @@
{{'EntityIndex' | translate}}
</label>
<div
class=
"col-sm-11"
style=
"width:61.67%"
>
<input
class=
"form-control"
title=
"{{editFieldModel.storageArea}}"
<input
class=
"form-control"
placeholder=
"{{'PleaseType' | translate}}"
ng-required=
"isRequired('EntityIndex')"
ng-model=
"editFieldModel.physicalIndexNumber"
...
...
@@ -822,7 +831,7 @@
<textarea
class=
"form-control"
placeholder=
"{{'PleaseType' | translate}}"
ng-required=
"isRequired('Remarks')"
ng-model=
"editFieldModel.remark
s
"
>
ng-model=
"editFieldModel.remark"
>
</textarea>
</div>
</div>
...
...
@@ -1014,7 +1023,7 @@
</label>
<div
class=
"col-sm-11"
style=
"width:61.67%"
>
<input
class=
"form-control"
placeholder=
"{{'
PleaseType' |
translate}}"
placeholder=
"{{'
EntityStorageDescription'|
translate}}"
ng-model=
"editFieldItem.storageArea"
ng-required=
"isRequired('EntityStorageLocation')"
/>
...
...
atms-web/src/main/webapp/app/taxDocumentManage/tax-document-list/tax-document-list.svc.js
View file @
1e9d27f2
...
...
@@ -2,54 +2,143 @@
* Created by Administrator on 2019/3/1 0001.
*/
taxDocumentManageModule
.
factory
(
'taxDocumentListService'
,
[
'$q'
,
'apiConfig'
,
'jqFetch'
,
'apiInterceptor'
,
function
(
$q
,
apiConfig
,
jqFetch
,
apiInterceptor
)
{
[
'$q'
,
'apiConfig'
,
'jqFetch'
,
'apiInterceptor'
,
function
(
$q
,
apiConfig
,
jqFetch
,
apiInterceptor
)
{
'use strict'
;
return
{
fetchMainList
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/taxDoc/selectList'
,
params
);
},
addNewRecord
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/taxDoc/add'
,
params
);
var
defer
=
$q
.
defer
();
window
.
$
.
ajax
({
type
:
'POST'
,
url
:
apiInterceptor
.
webApiHostUrl
+
'/v1/taxDoc/add'
,
data
:
params
,
dataType
:
"json"
,
beforeSend
:
function
(
request
)
{
request
.
setRequestHeader
(
"Authorization"
,
apiInterceptor
.
tokenType
+
' '
+
apiInterceptor
.
apiToken
());
request
.
setRequestHeader
(
"Content-Type"
,
'application/x-www-form-urlencoded'
);
request
.
setRequestHeader
(
"Accept"
,
"*/*"
);
},
success
:
function
(
result
)
{
$
(
'#busy-indicator-container'
).
hide
();
defer
.
resolve
(
result
);
},
error
:
function
(
result
){
$
(
'#busy-indicator-container'
).
hide
();
defer
.
reject
(
result
);
}
});
return
defer
.
promise
;
},
editRecord
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/taxDoc/edit'
,
params
);
$
(
'#busy-indicator-container'
).
show
();
var
defer
=
$q
.
defer
();
window
.
$
.
ajax
({
type
:
'POST'
,
url
:
apiInterceptor
.
webApiHostUrl
+
'/v1/taxDoc/edit'
,
data
:
params
,
dataType
:
"json"
,
beforeSend
:
function
(
request
)
{
request
.
setRequestHeader
(
"Authorization"
,
apiInterceptor
.
tokenType
+
' '
+
apiInterceptor
.
apiToken
());
// request.setRequestHeader("Content-Type", 'multipart/form-data; boundary=----WebKitFormBoundaryNBBkL3vAiuTDbAZP');
request
.
setRequestHeader
(
"Content-Type"
,
'application/x-www-form-urlencoded'
);
request
.
setRequestHeader
(
"Accept"
,
"*/*"
);
},
success
:
function
(
result
)
{
$
(
'#busy-indicator-container'
).
hide
();
defer
.
resolve
(
result
);
},
error
:
function
(
result
){
$
(
'#busy-indicator-container'
).
hide
();
defer
.
reject
(
result
);
}
});
return
defer
.
promise
;
},
verifyDuplicate
:
function
(
params
)
{
verifyDuplicate
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/taxDoc/queryWhetherData'
,
params
);
},
getFileInfoOptions
:
function
(
params
)
{
getFileInfoOptions
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/fileTypes/query4SelectionBox'
,
params
);
},
getCompanyNameOptions
:
function
(
params
)
{
return
jqFetch
.
get
(
apiInterceptor
.
webApiHostUrl
+
'/org/getMyOrgList
'
,
params
);
getCompanyNameOptions
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/org/query4SelectionBox
'
,
params
);
},
delFileRecordItems
:
function
(
params
)
{
delFileRecordItems
:
function
(
params
)
{
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/taxDoc/batchDelete'
,
params
);
},
getDocumentsAttrAndType
:
function
(
params
){
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/fileTypes/selectList'
,
params
);
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/v1/fileTypes/selectList'
,
params
);
},
getBusinessList
:
function
(
params
){
return
jqFetch
.
get
(
apiInterceptor
.
webApiHostUrl
+
'/v1/businessunit/getlist'
,
params
);
},
downloadAllFile
:
function
(
params
){
var
xhr
=
new
XMLHttpRequest
();
var
fileName
=
'files.zip'
;
// 文件名称
xhr
.
open
(
'POST'
,
apiInterceptor
.
webApiHostUrl
+
"/taxDoc/downloadAllFile"
,
true
);
xhr
.
responseType
=
'arraybuffer'
;
// xhr.setRequestHeader(token, 'xxxxx') ;// 请求头中的验证信息等(如果有)
xhr
.
setRequestHeader
(
"Authorization"
,
apiInterceptor
.
tokenType
+
' '
+
apiInterceptor
.
apiToken
());
xhr
.
setRequestHeader
(
"Content-Type"
,
'application/json;charset=UTF-8'
);
xhr
.
onload
=
function
()
{
if
(
this
.
status
===
200
)
{
// let type = xhr.getResponseHeader('Content-Type');
var
blob
=
new
Blob
([
this
.
response
],
{
type
:
"arraybuffer"
});
if
(
typeof
window
.
navigator
.
msSaveBlob
!==
'undefined'
)
{
/*
* IE workaround for "HTML7007: One or more blob URLs were revoked by closing
* the blob for which they were created. These URLs will no longer resolve as
* the data backing the URL has been freed."
*/
window
.
navigator
.
msSaveBlob
(
blob
,
fileName
)
}
else
{
var
URL
=
window
.
URL
||
window
.
webkitURL
;
var
objectUrl
=
URL
.
createObjectURL
(
blob
);
if
(
fileName
)
{
var
a
=
document
.
createElement
(
'a'
);
// safari doesn't support this yet
if
(
typeof
a
.
download
===
'undefined'
)
{
window
.
location
=
objectUrl
}
else
{
a
.
href
=
objectUrl
;
a
.
download
=
fileName
;
document
.
body
.
appendChild
(
a
);
a
.
click
();
a
.
remove
();
}
}
else
{
window
.
location
=
objectUrl
;
}
}
}
};
xhr
.
send
(
JSON
.
stringify
(
params
));
},
readXLSX
:
function
(
params
){
return
jqFetch
.
post
(
apiInterceptor
.
webApiHostUrl
+
'/taxDoc/previewExcelToJson'
,
params
);
},
getBinaryData
:
function
(
url
)
{
getBinaryData
:
function
(
url
)
{
var
defer
=
$q
.
defer
();
var
oReq
=
new
XMLHttpRequest
();
oReq
.
onload
=
function
(
e
)
{
oReq
.
onload
=
function
(
e
)
{
var
arraybuffer
=
oReq
.
response
;
console
.
info
(
"arraybuffer:"
,
arraybuffer
);
console
.
info
(
"arraybuffer:"
,
arraybuffer
);
defer
.
resolve
(
arraybuffer
);
};
// oReq.open("GET", 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=', true);
oReq
.
open
(
"GET"
,
url
,
true
);
oReq
.
responseType
=
"arraybuffer"
;
oReq
.
send
();
// return jqFetch.get(url,{},'arraybuffer');
return
defer
.
promise
;
}
};
}]);
\ No newline at end of file
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