Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dataC_api
Project
Project
Details
Activity
Releases
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
高宇
dataC_api
Commits
62c9cc05
Commit
62c9cc05
authored
May 22, 2024
by
高宇
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.导入
parent
6ad18ff3
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
549 additions
and
2 deletions
+549
-2
Jnsp7xtmDqsjController.java
...t/bus/jnsp7xtmdqsj/controller/Jnsp7xtmDqsjController.java
+22
-0
Jnsp7xtmDqsjRepository.java
.../rcisoft/bus/jnsp7xtmdqsj/dao/Jnsp7xtmDqsjRepository.java
+11
-0
Jnsp7xtmDqsjExportTemplateDto.java
...t/bus/jnsp7xtmdqsj/dto/Jnsp7xtmDqsjExportTemplateDto.java
+70
-0
Jnsp7xtmDqsjImportDto.java
...g/rcisoft/bus/jnsp7xtmdqsj/dto/Jnsp7xtmDqsjImportDto.java
+31
-0
Jnsp7xtmDqsj.java
...ava/org/rcisoft/bus/jnsp7xtmdqsj/entity/Jnsp7xtmDqsj.java
+63
-1
Jnsp7xtmDqsjService.java
...rcisoft/bus/jnsp7xtmdqsj/service/Jnsp7xtmDqsjService.java
+12
-0
Jnsp7xtmDqsjServiceImpl.java
...us/jnsp7xtmdqsj/service/impl/Jnsp7xtmDqsjServiceImpl.java
+169
-0
CyImportErrCodeEnum.java
src/main/java/org/rcisoft/enums/CyImportErrCodeEnum.java
+19
-0
ExportToExcelUtil.java
src/main/java/org/rcisoft/util/ExportToExcelUtil.java
+111
-1
application-dev-conf.yml
src/main/resources/application-dev-conf.yml
+2
-0
Jnsp7xtmDqsjMapper.xml
...ces/mapper/bus/jnsp7xtmdqsj/mapper/Jnsp7xtmDqsjMapper.xml
+39
-0
No files found.
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/controller/Jnsp7xtmDqsjController.java
View file @
62c9cc05
...
...
@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiImplicitParams;
import
io.swagger.annotations.ApiOperation
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto
;
import
org.rcisoft.bus.taskinfo.entity.TaskInfo
;
import
org.rcisoft.core.anno.CyEncryptSm4Anno
;
import
org.rcisoft.core.anno.CyOpeLogAnno
;
import
org.rcisoft.core.operlog.enums.CyLogTypeEnum
;
import
org.rcisoft.core.util.CyEpExcelUtil
;
...
...
@@ -30,6 +31,7 @@ import javax.validation.Valid;
import
org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj
;
import
org.rcisoft.bus.jnsp7xtmdqsj.service.Jnsp7xtmDqsjService
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.util.List
;
import
java.util.concurrent.locks.Lock
;
...
...
@@ -186,5 +188,25 @@ public class Jnsp7xtmDqsjController extends CyPaginationController<Jnsp7xtmDqsj>
CyMessCons
.
MESSAGE_ALERT_ERROR
,
null
);
}
@CyOpeLogAnno
(
title
=
"system-Jnsp7xtmDqsj管理-下载空模板"
,
businessType
=
CyLogTypeEnum
.
QUERY
)
@ApiOperation
(
value
=
"下载空模板"
,
notes
=
"下载空模板"
)
@GetMapping
(
value
=
"/jnsp7xtmDqsjDownEmptyTemplate"
)
public
void
jnsp7xtmDqsjDownEmptyTemplate
(
Jnsp7xtmDqsjPageHandleDto
jnsp7xtmDqsjPageHandleDto
,
HttpServletResponse
response
)
{
jnsp7xtmDqsjServiceImpl
.
jnsp7xtmDqsjDownEmptyTemplate
(
jnsp7xtmDqsjPageHandleDto
,
response
);
}
/**
* 导入模板
* **/
@CyOpeLogAnno
(
title
=
"system-检查申请管理-jnsp7xtmdqsj导入"
,
businessType
=
CyLogTypeEnum
.
IMPORT
)
@ApiOperation
(
value
=
"jnsp7xtmdqsj导入"
,
notes
=
"jnsp7xtmdqsj导入"
)
@PostMapping
(
value
=
"/Jnsp7xtmDqsjImportDtoExcel"
)
@CyEncryptSm4Anno
public
CyResult
Jnsp7xtmDqsjImportDtoExcel
(
MultipartFile
file
)
{
return
CyResultGenUtil
.
builder
(
new
CyPersistModel
(
1
),
CyMessCons
.
MESSAGE_ALERT_SUCCESS
,
CyMessCons
.
MESSAGE_ALERT_ERROR
,
jnsp7xtmDqsjServiceImpl
.
jnsp7xtmDqsjImportDtoExcel
(
file
));
}
}
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/dao/Jnsp7xtmDqsjRepository.java
View file @
62c9cc05
...
...
@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.*;
import
org.apache.ibatis.mapping.ResultSetType
;
import
org.apache.ibatis.session.ResultHandler
;
import
org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjExportTemplateDto
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto
;
import
org.rcisoft.core.mapper.CyBaseMapper
;
import
org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj
;
...
...
@@ -60,5 +61,15 @@ public interface Jnsp7xtmDqsjRepository extends CyBaseMapper<Jnsp7xtmDqsj> {
* **/
int
deleteJnsp7xtmDqs
(
@Param
(
"entity"
)
Jnsp7xtmDqsjPageHandleDto
jnsp7xtmDqsjPageHandleDto
);
/**
* 根据cc 查询客户有关的信息
* **/
List
<
Jnsp7xtmDqsj
>
queryCustomer
(
@Param
(
"cc"
)
String
cc
);
/**
* 根据pn 查询sypn的值
* **/
List
<
String
>
querySypnByPn
(
@Param
(
"pn"
)
String
pn
);
}
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/dto/Jnsp7xtmDqsjExportTemplateDto.java
0 → 100644
View file @
62c9cc05
package
org
.
rcisoft
.
bus
.
jnsp7xtmdqsj
.
dto
;
import
cn.afterturn.easypoi.excel.annotation.Excel
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* @Author: gy
* @Date: 2024/5/20 13:15
* @Description:
*/
@Data
public
class
Jnsp7xtmDqsjExportTemplateDto
{
/**
* term
* **/
@Excel
(
name
=
"term"
,
orderNum
=
"0"
,
width
=
20
)
private
String
term
;
/**
* month
* **/
@Excel
(
name
=
"month"
,
orderNum
=
"1"
,
width
=
20
)
private
String
month
;
/**
* cc
* **/
@Excel
(
name
=
"cc"
,
orderNum
=
"2"
,
width
=
20
)
private
String
cc
;
@Excel
(
name
=
"route"
,
orderNum
=
"4"
,
width
=
20
)
private
String
route
;
@Excel
(
name
=
"pc"
,
orderNum
=
"5"
,
width
=
20
)
private
String
pc
;
@Excel
(
name
=
"factory"
,
orderNum
=
"6"
,
width
=
20
)
private
String
factory
;
@Excel
(
name
=
"size"
,
orderNum
=
"7"
,
width
=
20
)
private
String
size
;
@Excel
(
name
=
"pn"
,
orderNum
=
"8"
,
width
=
20
)
private
String
pn
;
@Excel
(
name
=
"po"
,
orderNum
=
"9"
,
width
=
20
)
private
String
po
;
@Excel
(
name
=
"fc"
,
orderNum
=
"10"
,
width
=
20
)
private
String
fc
;
@Excel
(
name
=
"qty"
,
orderNum
=
"11"
,
width
=
20
)
private
String
qty
;
@Excel
(
name
=
"currency"
,
orderNum
=
"12"
,
width
=
20
)
private
String
currency
;
@Excel
(
name
=
"rate"
,
orderNum
=
"13"
,
width
=
20
)
private
String
rate
;
@Excel
(
name
=
"amt"
,
orderNum
=
"14"
,
width
=
20
)
private
String
amt
;
@Excel
(
name
=
"up"
,
orderNum
=
"15"
,
width
=
20
)
private
String
up
;
}
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/dto/Jnsp7xtmDqsjImportDto.java
0 → 100644
View file @
62c9cc05
package
org
.
rcisoft
.
bus
.
jnsp7xtmdqsj
.
dto
;
import
lombok.Data
;
import
java.util.List
;
/**
* @Author: gy
* @Date: 2024/5/21 13:23
* @Description: jnsp7xtmDqsj 导入类
*/
@Data
public
class
Jnsp7xtmDqsjImportDto
{
private
String
filename
;
/**
* 文件导入之后插入文件的数据
*/
private
List
<
Jnsp7xtmDqsjExportTemplateDto
>
insert
;
/**
* 成功之后返回的条数
* **/
private
Integer
rows
;
/**
* 总共多少条数据
* **/
private
Integer
total
;
}
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/entity/Jnsp7xtmDqsj.java
View file @
62c9cc05
...
...
@@ -9,6 +9,7 @@ import lombok.*;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.ibatis.type.JdbcType
;
import
org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjExportTemplateDto
;
import
org.rcisoft.core.entity.CyIdEntity
;
import
org.rcisoft.core.entity.CyIdIncreEntity
;
import
org.rcisoft.core.entity.CyIdNotDataEntity
;
...
...
@@ -394,7 +395,7 @@ public class Jnsp7xtmDqsj extends CyIdIncreEntity {
if
(
jnsp7xtmVo
.
getXslj
().
equals
(
"W0"
))
jnsp7xtmDqsj
.
setIo
(
"I"
);
else
jnsp7xtmDqsj
.
setIo
(
"
O
"
);
jnsp7xtmDqsj
.
setIo
(
"
o
"
);
}
jnsp7xtmDqsj
.
setRoute
(
jnsp7xtmVo
.
getXslj
());
jnsp7xtmDqsj
.
setPc
(
jnsp7xtmVo
.
getZd
());
...
...
@@ -420,5 +421,66 @@ public class Jnsp7xtmDqsj extends CyIdIncreEntity {
return
jnsp7xtmDqsj
;
}
public
static
Jnsp7xtmDqsj
generateJnsp7xtmDqsj
(
Jnsp7xtmDqsjExportTemplateDto
jnsp7xtmDqsjExportTemplateDto
,
Jnsp7xtmDqsj
jnsp7xtmDqsj
)
{
BeanUtil
.
copyProperties
(
jnsp7xtmDqsjExportTemplateDto
,
jnsp7xtmDqsj
);
if
(
StringUtils
.
isEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getTerm
()))
jnsp7xtmDqsj
.
setTerm
(
TERM_L
);
String
lastTwoNqy
=
""
;
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getMonth
())
&&
jnsp7xtmDqsjExportTemplateDto
.
getMonth
().
length
()
>
2
)
{
lastTwoNqy
=
jnsp7xtmDqsjExportTemplateDto
.
getMonth
().
substring
(
jnsp7xtmDqsjExportTemplateDto
.
getMonth
().
length
()
-
2
);
if
(
lastTwoNqy
.
equals
(
"04"
)
||
lastTwoNqy
.
equals
(
"05"
)
||
lastTwoNqy
.
equals
(
"06"
)
||
lastTwoNqy
.
equals
(
"07"
)
||
lastTwoNqy
.
equals
(
"08"
)
||
lastTwoNqy
.
equals
(
"09"
))
{
jnsp7xtmDqsj
.
setHalf
(
"1H"
);
}
else
{
jnsp7xtmDqsj
.
setHalf
(
"2H"
);
}
if
(
lastTwoNqy
.
equals
(
"01"
)
||
lastTwoNqy
.
equals
(
"02"
)
||
lastTwoNqy
.
equals
(
"03"
))
{
jnsp7xtmDqsj
.
setQuarter
(
"Q4"
);
}
else
if
(
lastTwoNqy
.
equals
(
"04"
)
||
lastTwoNqy
.
equals
(
"05"
)
||
lastTwoNqy
.
equals
(
"06"
))
{
jnsp7xtmDqsj
.
setQuarter
(
"Q1"
);
}
else
if
(
lastTwoNqy
.
equals
(
"07"
)
||
lastTwoNqy
.
equals
(
"08"
)
||
lastTwoNqy
.
equals
(
"09"
))
{
jnsp7xtmDqsj
.
setQuarter
(
"Q2"
);
}
else
if
(
lastTwoNqy
.
equals
(
"10"
)
||
lastTwoNqy
.
equals
(
"11"
)
||
lastTwoNqy
.
equals
(
"12"
))
{
jnsp7xtmDqsj
.
setQuarter
(
"Q3"
);
}
if
(
StringUtils
.
isNotBlank
(
jnsp7xtmDqsjExportTemplateDto
.
getRoute
()))
{
if
(
jnsp7xtmDqsjExportTemplateDto
.
getRoute
().
equals
(
"W0"
))
jnsp7xtmDqsj
.
setIo
(
"I"
);
else
jnsp7xtmDqsj
.
setIo
(
"o"
);
}
if
(
StringUtils
.
isNotBlank
(
jnsp7xtmDqsjExportTemplateDto
.
getPc
()))
{
if
(
jnsp7xtmDqsjExportTemplateDto
.
getPc
().
equals
(
"CR"
)
||
jnsp7xtmDqsjExportTemplateDto
.
getPc
().
equals
(
"WR"
)
||
jnsp7xtmDqsjExportTemplateDto
.
getPc
().
equals
(
"MP"
))
jnsp7xtmDqsj
.
setFactory
(
"CC1"
);
else
jnsp7xtmDqsj
.
setFactory
(
"CC2"
);
}
/**
* 将string 转换成 BigDecimal类型
* **/
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getAmt
()))
{
jnsp7xtmDqsj
.
setAmt
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getAmt
()));
}
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getRate
()))
{
jnsp7xtmDqsj
.
setRate
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getRate
()));
}
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getUp
()))
{
jnsp7xtmDqsj
.
setUp
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getUp
()));
}
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getFc
()))
{
jnsp7xtmDqsj
.
setFc
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getFc
()));
jnsp7xtmDqsj
.
setQty
(
jnsp7xtmDqsj
.
getFc
());
}
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getPo
()))
{
jnsp7xtmDqsj
.
setPo
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getPo
()));
jnsp7xtmDqsj
.
setQty
(
jnsp7xtmDqsj
.
getPo
());
}
// y.qty = y.po + y.fc (BigDecimal)
if
(
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getPo
())
&&
StringUtils
.
isNotEmpty
(
jnsp7xtmDqsjExportTemplateDto
.
getFc
()))
{
jnsp7xtmDqsj
.
setQty
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getPo
()).
add
(
new
BigDecimal
(
jnsp7xtmDqsjExportTemplateDto
.
getFc
())));
}
}
return
jnsp7xtmDqsj
;
}
}
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/service/Jnsp7xtmDqsjService.java
View file @
62c9cc05
...
...
@@ -3,6 +3,7 @@ package org.rcisoft.bus.jnsp7xtmdqsj.service;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.rcisoft.bus.jnsp7xtm.dto.Jnsp7xtmOptionDto
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjImportDto
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto
;
import
org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj
;
import
org.rcisoft.bus.taskinfo.entity.TaskInfo
;
...
...
@@ -10,7 +11,9 @@ import org.rcisoft.core.model.CyPersistModel;
import
org.rcisoft.core.aop.CyPageUtilAsp
;
import
org.rcisoft.core.model.CyPageInfo
;
import
org.rcisoft.core.result.enums.CyResSvcExcEnum
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.List
;
/**
...
...
@@ -96,4 +99,13 @@ public interface Jnsp7xtmDqsjService {
* 客户表重置
* **/
CyPersistModel
clientReset
(
Jnsp7xtmDqsjPageHandleDto
jnsp7xtmDqsjPageHandleDto
);
/**下载空模板**/
void
jnsp7xtmDqsjDownEmptyTemplate
(
Jnsp7xtmDqsjPageHandleDto
jnsp7xtmDqsjPageHandleDto
,
HttpServletResponse
response
);
/**
* 导入月度度表数据
* **/
Jnsp7xtmDqsjImportDto
jnsp7xtmDqsjImportDtoExcel
(
MultipartFile
file
);
}
src/main/java/org/rcisoft/bus/jnsp7xtmdqsj/service/impl/Jnsp7xtmDqsjServiceImpl.java
View file @
62c9cc05
...
...
@@ -16,6 +16,7 @@ import com.mongodb.client.model.Collation;
import
org.apache.commons.beanutils.BeanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.ibatis.session.SqlSession
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.tools.ant.taskdefs.Sleep
;
import
org.rcisoft.bus.jnsp7xtm.dto.Jnsp7xtmDto
;
...
...
@@ -24,6 +25,8 @@ import org.rcisoft.bus.jnsp7xtm.entity.Jnsp7xtm;
import
org.rcisoft.bus.jnsp7xtm.enums.ColTransitionEnum
;
import
org.rcisoft.bus.jnsp7xtm.enums.Jnsp7xtmDqsjType
;
import
org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjExportTemplateDto
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjImportDto
;
import
org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto
;
import
org.rcisoft.bus.taskinfo.dao.TaskInfoRepository
;
import
org.rcisoft.bus.taskinfo.entity.TaskInfo
;
...
...
@@ -38,6 +41,7 @@ import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj;
import
org.rcisoft.bus.jnsp7xtmdqsj.service.Jnsp7xtmDqsjService
;
import
org.rcisoft.core.service.CyBaseService
;
import
org.rcisoft.enums.CyImportErrCodeEnum
;
import
org.rcisoft.util.ExcelExportStatisticStyler
;
import
org.rcisoft.util.ExportToExcelUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -49,14 +53,23 @@ import org.springframework.transaction.annotation.Propagation;
import
org.springframework.transaction.annotation.Transactional
;
import
org.rcisoft.core.model.CyPageInfo
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.math.BigDecimal
;
import
java.net.URLEncoder
;
import
java.util.*
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.locks.Lock
;
import
java.util.concurrent.locks.ReentrantLock
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
/**
* Created by cy on 2024年5月14日 上午10:20:48.
...
...
@@ -84,6 +97,9 @@ public class Jnsp7xtmDqsjServiceImpl extends ServiceImpl<Jnsp7xtmDqsjRepository,
@Value
(
"${jnsp7xtmDqsj.shema}"
)
private
String
shema
;
@Value
(
"${jnsp7xtmDqsj.importBatchAddSize}"
)
private
Integer
importBatchAddSize
;
/**
* 保存
* @param jnsp7xtmDqsj
...
...
@@ -342,10 +358,163 @@ public class Jnsp7xtmDqsjServiceImpl extends ServiceImpl<Jnsp7xtmDqsjRepository,
return
new
CyPersistModel
(
1
);
}
/**
* 下载空模板
* **/
@Override
public
void
jnsp7xtmDqsjDownEmptyTemplate
(
Jnsp7xtmDqsjPageHandleDto
jnsp7xtmDqsjPageHandleDto
,
HttpServletResponse
response
)
{
// 导出空模板
OutputStream
outputStream
=
null
;
Workbook
workbook
=
null
;
try
{
response
.
setCharacterEncoding
(
"UTF-8"
);
response
.
setHeader
(
"content-Type"
,
"application/vnd.ms-excel"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
URLEncoder
.
encode
(
"试题数据信息.xlsx"
,
"UTF-8"
));
ExportParams
exportParams
=
new
ExportParams
();
exportParams
.
setType
(
ExcelType
.
XSSF
);
List
<
Jnsp7xtmDqsjExportTemplateDto
>
exportList
=
new
ArrayList
<>();
workbook
=
ExcelExportUtil
.
exportExcel
(
exportParams
,
Jnsp7xtmDqsjExportTemplateDto
.
class
,
exportList
);
Sheet
sheet
=
workbook
.
getSheetAt
(
0
);
String
[]
termList
=
new
String
[]{
"L"
};
ExportToExcelUtil
.
XSSFSetDropDownAndHidden
(
termList
,
workbook
,
sheet
,
1
,
100000
,
0
,
0
);
outputStream
=
response
.
getOutputStream
();
workbook
.
write
(
outputStream
);
}
catch
(
IOException
e
)
{
throw
new
CyServiceException
(
e
.
getMessage
());
}
finally
{
try
{
if
(
outputStream
!=
null
)
{
outputStream
.
close
();
}
}
catch
(
IOException
var11
)
{
log
.
info
(
"context:"
+
var11
);
}
}
}
@Override
@Transactional
(
propagation
=
Propagation
.
REQUIRED
,
isolation
=
Isolation
.
DEFAULT
)
public
Jnsp7xtmDqsjImportDto
jnsp7xtmDqsjImportDtoExcel
(
MultipartFile
file
)
{
Jnsp7xtmDqsjImportDto
jnsp7xtmDqsjImportDto
=
new
Jnsp7xtmDqsjImportDto
();
try
{
if
(
finallyButtonLockLock
.
tryLock
(
1000
,
TimeUnit
.
MILLISECONDS
))
{
try
{
// 要添加的数据行数据
int
rows
=
0
;
// 要添加的list
List
<
Jnsp7xtmDqsj
>
jnsp7xtmDqsjList
=
new
ArrayList
<>();
List
<
Jnsp7xtmDqsjExportTemplateDto
>
dataList
=
ExportToExcelUtil
.
importExcelNotTitle
(
file
,
1
,
1
,
Jnsp7xtmDqsjExportTemplateDto
.
class
);
for
(
int
i
=
0
;
i
<
dataList
.
size
();
i
++)
{
/**
* 1.校验 month和cc和pn 必填
* **/
if
(
StringUtils
.
isNotBlank
(
dataList
.
get
(
i
).
getMonth
())
&&
StringUtils
.
isNotBlank
(
dataList
.
get
(
i
).
getCc
())
&&
StringUtils
.
isNotBlank
(
dataList
.
get
(
i
).
getPn
()))
{
/**
* 2.校验 amt,rate,up,qty,fc,po 格式是数据
* **/
if
((
dataList
.
get
(
i
).
getMonth
().
length
()
!=
6
&&
this
.
isValidDate
(
dataList
.
get
(
i
).
getMonth
())))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行month格式不对"
);
if
(!
StringUtils
.
isEmpty
(
dataList
.
get
(
i
).
getAmt
()))
{
if
(!
isValidIntegerOrLessThanNDecimal
(
dataList
.
get
(
i
).
getAmt
(),
7
))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行amt格式不对"
);
}
if
(!
StringUtils
.
isEmpty
(
dataList
.
get
(
i
).
getRate
()))
{
if
(!
isValidIntegerOrLessThanNDecimal
(
dataList
.
get
(
i
).
getRate
(),
6
))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行rate格式不对"
);
}
if
(!
StringUtils
.
isEmpty
(
dataList
.
get
(
i
).
getUp
()))
{
if
(!
isValidIntegerOrLessThanNDecimal
(
dataList
.
get
(
i
).
getUp
(),
5
))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行rate格式不对"
);
}
if
(!
StringUtils
.
isEmpty
(
dataList
.
get
(
i
).
getQty
()))
{
if
(!
isValidIntegerOrLessThanNDecimal
(
dataList
.
get
(
i
).
getQty
(),
2
))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行qty格式不对"
);
}
if
(!
StringUtils
.
isEmpty
(
dataList
.
get
(
i
).
getFc
()))
{
if
(!
isValidIntegerOrLessThanNDecimal
(
dataList
.
get
(
i
).
getFc
(),
2
))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行fc格式不对"
);
}
if
(!
StringUtils
.
isEmpty
(
dataList
.
get
(
i
).
getPo
()))
{
if
(!
isValidIntegerOrLessThanNDecimal
(
dataList
.
get
(
i
).
getPo
(),
2
))
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
"第"
+
i
+
1
+
"行po格式不对"
);
}
/**
* 3.转换jnsp7xtmDqsj
* **/
Jnsp7xtmDqsj
jnsp7xtmDqsj
=
new
Jnsp7xtmDqsj
();
if
(
StringUtils
.
isNotEmpty
(
dataList
.
get
(
i
).
getCc
()))
{
List
<
Jnsp7xtmDqsj
>
dqsjList
=
baseMapper
.
queryCustomer
(
dataList
.
get
(
i
).
getCc
());
if
(
CollectionUtil
.
isNotEmpty
(
dqsjList
))
{
jnsp7xtmDqsj
=
dqsjList
.
get
(
0
);
}
}
Jnsp7xtmDqsj
finallyJnsp7xtmDqsj
=
Jnsp7xtmDqsj
.
generateJnsp7xtmDqsj
(
dataList
.
get
(
i
),
jnsp7xtmDqsj
);
if
(
StringUtils
.
isNotEmpty
(
dataList
.
get
(
i
).
getPn
()))
{
List
<
String
>
list
=
baseMapper
.
querySypnByPn
(
dataList
.
get
(
i
).
getPn
());
if
(
CollectionUtil
.
isNotEmpty
(
list
))
{
finallyJnsp7xtmDqsj
.
setSypn
(
list
.
get
(
0
));
}
}
jnsp7xtmDqsjList
.
add
(
finallyJnsp7xtmDqsj
);
rows
=
rows
+
1
;
if
(
jnsp7xtmDqsjList
.
size
()
==
importBatchAddSize
)
{
this
.
importBatchAddList
(
jnsp7xtmDqsjList
);
jnsp7xtmDqsjList
.
clear
();
}
}
}
if
(
CollectionUtil
.
isNotEmpty
(
jnsp7xtmDqsjList
))
{
baseMapper
.
batchAddJnsp7xtmDqsj
(
jnsp7xtmDqsjList
);
}
jnsp7xtmDqsjImportDto
.
setTotal
(
dataList
.
size
());
jnsp7xtmDqsjImportDto
.
setRows
(
rows
);
return
jnsp7xtmDqsjImportDto
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
CyServiceException
(
CyImportErrCodeEnum
.
IMPORT_ERR
.
getCode
(),
e
.
getMessage
());
}
finally
{
finallyButtonLockLock
.
unlock
();
}
}
else
{
throw
new
CyServiceException
(
501
,
"该功能使用频繁,请稍后重试"
);
}
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
jnsp7xtmDqsjImportDto
;
}
private
Jnsp7xtmDqsjPageHandleDto
acquireRequestCondition
(
Jnsp7xtmDqsjPageHandleDto
jnsp7xtmDqsjPageHandleDto
)
{
Jnsp7xtmDqsjPageHandleDto
requestJnsp7xtmDqs
=
new
Jnsp7xtmDqsjPageHandleDto
();
BeanUtil
.
copyProperties
(
jnsp7xtmDqsjPageHandleDto
,
requestJnsp7xtmDqs
);
return
requestJnsp7xtmDqs
;
}
private
void
importBatchAddList
(
List
<
Jnsp7xtmDqsj
>
list
)
{
baseMapper
.
batchAddJnsp7xtmDqsj
(
list
);
}
/**校验月份的格式是否正确**/
public
boolean
isValidDate
(
String
str
)
{
String
pattern
=
"^\\d{4}\\d{2}$"
;
// 前四位是年,后两位是月份
Pattern
r
=
Pattern
.
compile
(
pattern
);
Matcher
m
=
r
.
matcher
(
str
);
return
m
.
matches
();
}
public
static
boolean
isValidIntegerOrLessThanNDecimal
(
String
str
,
int
n
)
{
try
{
BigDecimal
bd
=
new
BigDecimal
(
str
);
if
(
bd
.
scale
()
<=
n
)
{
return
true
;
}
}
catch
(
NumberFormatException
e
)
{
}
return
false
;
}
}
src/main/java/org/rcisoft/enums/CyImportErrCodeEnum.java
0 → 100644
View file @
62c9cc05
package
org
.
rcisoft
.
enums
;
public
enum
CyImportErrCodeEnum
{
IMPORT_ERR
(
7000
);
private
Integer
code
;
public
Integer
getCode
()
{
return
code
;
}
CyImportErrCodeEnum
(
Integer
code
)
{
this
.
code
=
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
}
src/main/java/org/rcisoft/util/ExportToExcelUtil.java
View file @
62c9cc05
package
org
.
rcisoft
.
util
;
import
cn.afterturn.easypoi.excel.ExcelExportUtil
;
import
cn.afterturn.easypoi.excel.ExcelImportUtil
;
import
cn.afterturn.easypoi.excel.entity.ExportParams
;
import
cn.afterturn.easypoi.excel.entity.ImportParams
;
import
cn.afterturn.easypoi.excel.entity.enmus.ExcelType
;
import
cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity
;
import
cn.afterturn.easypoi.excel.export.ExcelExportService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.xssf.usermodel.XSSFDataValidation
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.rcisoft.core.exception.CyServiceException
;
import
org.rcisoft.core.util.CyEpExcelUtil
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.net.URLEncoder
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -25,6 +32,109 @@ import java.util.Map;
*/
@Slf4j
public
class
ExportToExcelUtil
extends
CyEpExcelUtil
{
public
static
<
T
>
List
<
T
>
importExcelNotTitle
(
MultipartFile
file
,
Integer
titleRows
,
Integer
headerRows
,
Class
<
T
>
pojoClass
)
{
if
(
file
==
null
)
{
return
null
;
}
else
{
ImportParams
params
=
new
ImportParams
();
List
list
=
null
;
try
{
list
=
ExcelImportUtil
.
importExcel
(
file
.
getInputStream
(),
pojoClass
,
params
);
return
list
;
}
catch
(
Exception
var7
)
{
throw
new
CyServiceException
(
502
,
"模板格式错误"
);
}
}
}
/**
* 为Excel表格添加下拉选项
* 解决单元格在某个时间点只能访问有限数据量而导致无法显示下拉选项的问题
* 适用于下拉选项总字节数大于 255 个字节的情况
* 缺点:会创建一个隐藏的sheet用于存放下拉选项
*
* @param formulaString 下拉选项数据
* @param workbook Excel工作簿
* @param sheet 设置下拉选项的工作表
* @param firstRow 起始行
* @param lastRow 终止行
* @param firstCol 起始列
* @param lastCol 终止列
*/
public
static
void
XSSFSetDropDownAndHidden
(
String
[]
formulaString
,
Workbook
workbook
,
Sheet
sheet
,
int
firstRow
,
int
lastRow
,
int
firstCol
,
int
lastCol
)
{
// 计算下拉选项全部字节数
int
totalBytes
=
Arrays
.
stream
(
formulaString
)
.
mapToInt
(
str
->
str
.
getBytes
(
StandardCharsets
.
UTF_8
).
length
)
.
sum
();
// 创建一个数据验证助手
DataValidationHelper
dvHelper
=
sheet
.
getDataValidationHelper
();
if
(
totalBytes
>
255
)
{
// 当总选项字节数大于 255 时创建隐藏工作表用于存放下拉选项
// 创建sheet,写入枚举项
//判断当前sheet不存在则创建
Sheet
hideSheet
=
workbook
.
getSheet
(
"hiddenSheet"
);
if
(
workbook
.
getSheet
(
"hiddenSheet"
)
==
null
)
{
hideSheet
=
workbook
.
createSheet
(
"hiddenSheet"
);
}
for
(
int
i
=
0
;
i
<
formulaString
.
length
;
i
++)
{
// 将下拉选项值存放在目标工作表下拉项目相同列
hideSheet
.
createRow
(
i
).
createCell
(
firstCol
).
setCellValue
(
formulaString
[
i
]);
}
// 创建名称,可被其他单元格引用
//判断当前名称不存在则创建
Name
hiddenSheetName
=
workbook
.
getName
(
"hidden"
);
if
(
workbook
.
getName
(
"hidden"
)
==
null
)
{
hiddenSheetName
=
workbook
.
createName
();
hiddenSheetName
.
setNameName
(
"hidden"
);
}
// 设置名称引用的公式
// 使用像'A1:B1'这样的相对值会导致在Microsoft Excel中使用工作簿时名称所指向的单元格的意外移动,
// 通常使用绝对引用,例如'$A$1:$B$1'可以避免这种情况。
// 根据 firstCol 计算引用索引字母
StringBuilder
columnLetter
=
new
StringBuilder
();
int
columnIndex
=
firstCol
;
while
(
columnIndex
>=
0
)
{
int
rem
=
columnIndex
%
26
;
columnLetter
.
append
((
char
)
(
'A'
+
rem
));
columnIndex
=
(
columnIndex
/
26
)
-
1
;
}
columnLetter
.
reverse
();
hiddenSheetName
.
setRefersToFormula
(
"hiddenSheet!$"
+
columnLetter
+
"$1:$"
+
columnLetter
+
"$"
+
formulaString
.
length
);
// 获取上文名称内数据
DataValidationConstraint
constraint
=
dvHelper
.
createFormulaListConstraint
(
"hidden"
);
// 设置下拉框位置
CellRangeAddressList
addressList
=
new
CellRangeAddressList
(
firstRow
,
lastRow
,
firstCol
,
lastCol
);
DataValidation
dataValidation
=
dvHelper
.
createValidation
(
constraint
,
addressList
);
// 处理Excel兼容性问题
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
// 数据校验
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
}
else
{
dataValidation
.
setSuppressDropDownArrow
(
false
);
}
// 作用在目标sheet上
sheet
.
addValidationData
(
dataValidation
);
// 设置hiddenSheet隐藏
int
hideSheetIndex
=
workbook
.
getSheetIndex
(
hideSheet
);
workbook
.
setSheetHidden
(
hideSheetIndex
,
true
);
}
else
{
// 当总选项字节数不大于 255 时使用传统方式创建下拉选项
// 创建下拉列表约束
DataValidationConstraint
dvConstraint
=
dvHelper
.
createExplicitListConstraint
(
formulaString
);
// 设置数据验证的单元格区域(从firstRow行firstCol列到lastRow行lastCol列)
CellRangeAddressList
addressList
=
new
CellRangeAddressList
(
firstRow
,
lastRow
,
firstCol
,
lastCol
);
// 创建数据验证对象并添加到工作表
DataValidation
validation
=
dvHelper
.
createValidation
(
dvConstraint
,
addressList
);
sheet
.
addValidationData
(
validation
);
}
}
// 导出动态列
/**
* entityList 表头
...
...
src/main/resources/application-dev-conf.yml
View file @
62c9cc05
...
...
@@ -134,5 +134,7 @@ jnsp7xtmDqsj:
pageQuestSize
:
5000
# 每次添加到数据库的长度
batchAddPagesize
:
30
# 导出时添加带数据库的数据长度
importBatchAddSize
:
30
# service 要重置的数据库
shema
:
'
demo.dbo'
src/main/resources/mapper/bus/jnsp7xtmdqsj/mapper/Jnsp7xtmDqsjMapper.xml
View file @
62c9cc05
...
...
@@ -447,5 +447,44 @@
jnsp.khdm is not null
and jnsp.pn is not null
</select>
<select
id=
"queryCustomer"
resultMap=
"BaseResultMap"
>
SELECT
cust_code AS cc,
cust_name AS cn,
cust_group,
cust_group2,
cust_rt1,
cust_io,
cust_newpic,
cust_group1,
cust_rout,
cust_rt2,
cust_addr,
cust_g0,
cust_g20,
cust_g30,
cust_g201,
cust_save,
cust_stype,
cust_g1,
cust_yj,
cust_yj2,
cust_yj3,
cust_gc
FROM
b_customer
WHERE
del_flag = '0'
AND cust_code = #{cc}
</select>
<select
id=
"querySypnByPn"
resultType=
"java.lang.String"
>
SELECT
sypn
FROM
b_pn_sypn
WHERE
del_flag = '0'
and pn = #{pn}
</select>
</mapper>
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