Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
polysoft-nafmii
/
polysoft-parent
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 8a2860f6
authored
Apr 29, 2021
by
ypenglv
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'dev' of
http://gitlab.polyhome.net/polysoft-nafmii/polysoft-parent
into dev
2 parents
b04eadb0
65fe01cd
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1446 additions
and
10 deletions
nafmii-admin/src/main/java/org/nafmii/admin/user/controller/CenterMenuController.java
nafmii-admin/src/main/java/org/nafmii/admin/user/dao/CenterMenuMapper.java
nafmii-admin/src/main/java/org/nafmii/admin/user/dto/CenterMenuDTO.java
nafmii-admin/src/main/java/org/nafmii/admin/user/dto/QueryMenusDto.java
nafmii-admin/src/main/java/org/nafmii/admin/user/entity/CenterMenuPO.java
nafmii-admin/src/main/java/org/nafmii/admin/user/param/EditMenuParam.java
nafmii-admin/src/main/java/org/nafmii/admin/user/param/QueryMenusParam.java
nafmii-admin/src/main/java/org/nafmii/admin/user/service/ICenterMenuService.java
nafmii-admin/src/main/java/org/nafmii/admin/user/service/impl/CenterMenuServiceImpl.java
nafmii-admin/src/main/java/org/nafmii/admin/user/vo/CenterMenuVO.java
nafmii-admin/src/main/resources/mapper/CenterMenuMapper.xml
nafmii-app/src/main/java/org/nafmii/app/user/service/impl/UserServiceImpl.java
nafmii-common/pom.xml
nafmii-common/src/main/java/org/nafmii/common/excle/Reflections.java
nafmii-common/src/main/java/org/nafmii/common/excle/annotation/ExcelField.java
nafmii-common/src/main/java/org/nafmii/common/excle/test.java
nafmii-common/src/main/java/org/nafmii/common/utils/ImportExcelUtils.java
nafmii-admin/src/main/java/org/nafmii/admin/user/controller/CenterMenuController.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
controller
;
import
com.github.pagehelper.PageHelper
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.nafmii.admin.user.param.EditMenuParam
;
import
org.nafmii.admin.user.param.QueryMenusParam
;
import
org.nafmii.admin.user.service.ICenterMenuService
;
import
org.nafmii.admin.user.vo.CenterMenuVO
;
import
org.nafmii.common.param.BeanTransferUtils
;
import
org.nafmii.common.param.PageResult
;
import
org.nafmii.common.response.ApiResponse
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* <p>
* 中心端菜单表 前端控制器
* </p>
*
* @author suncq
* @since 2021-04-28
*/
@RestController
@RequestMapping
(
"/nafmii/admin/menu"
)
@Api
(
tags
=
"3.0.0"
,
description
=
"中心端菜单接口"
)
public
class
CenterMenuController
{
@Resource
private
ICenterMenuService
centerMenuService
;
@ApiOperation
(
value
=
"中心端新增修改菜单"
,
notes
=
"中心端新增修改菜单"
)
@PostMapping
(
"/edit"
)
@ResponseBody
public
ApiResponse
editMenus
(
@RequestBody
@Validated
EditMenuParam
param
){
ApiResponse
result
=
centerMenuService
.
editMenu
(
param
);
return
result
;
}
@ApiOperation
(
value
=
"中心端菜单列表查询"
,
notes
=
"中心端菜单列表查询"
)
@PostMapping
(
"/queryMenuList"
)
@ResponseBody
public
ApiResponse
<
List
<
CenterMenuVO
>>
queryMenuList
(
@RequestBody
@Validated
QueryMenusParam
param
){
PageHelper
.
startPage
(
param
.
getPageNum
(),
param
.
getPageSize
());
PageResult
<
CenterMenuVO
>
result
=
BeanTransferUtils
.
toPagedResult
(
centerMenuService
.
queryMenuList
(
param
),
CenterMenuVO
.
class
);
return
new
ApiResponse
(
result
);
}
@ApiOperation
(
value
=
"中心端菜单删除"
,
notes
=
"中心端菜单删除"
)
@PostMapping
(
"/delete"
)
@ResponseBody
public
ApiResponse
deleteMenus
(
@RequestParam
Long
[]
ids
){
ApiResponse
result
=
centerMenuService
.
deleteMenus
(
ids
);
return
result
;
}
@ApiOperation
(
value
=
"中心端用户对应菜单查询"
,
notes
=
"中心端用户对应菜单查询"
)
@PostMapping
(
"/queryUserMenus"
)
@ResponseBody
public
ApiResponse
queryUserMenus
(){
ApiResponse
result
=
centerMenuService
.
queryUserMenus
();
return
result
;
}
}
nafmii-admin/src/main/java/org/nafmii/admin/user/dao/CenterMenuMapper.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
dao
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.nafmii.admin.user.dto.QueryMenusDto
;
import
org.nafmii.admin.user.entity.CenterMenuPO
;
import
org.nafmii.admin.user.vo.CenterMenuVO
;
import
java.util.List
;
/**
* <p>
* 中心端菜单表 Mapper 接口
* </p>
*
* @author suncq
* @since 2021-04-28
*/
public
interface
CenterMenuMapper
extends
BaseMapper
<
CenterMenuPO
>
{
/**
* @author:suncq
* @Function:中心端菜单新增修改
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
int
updateMenuById
(
CenterMenuPO
centerMenuPO
);
/**
* @author:suncq
* @Function:中心端菜单列表查询
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
List
<
CenterMenuVO
>
queryMenuList
(
QueryMenusDto
dto
);
/**
* @author:suncq
* @Function:中心端菜单删除
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
int
deleteMenus
(
Long
[]
ids
);
/**
* @author:suncq
* @Function:中心端用户对应菜单查询
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
List
<
CenterMenuVO
>
queryUserMenus
(
Long
userid
);
}
nafmii-admin/src/main/java/org/nafmii/admin/user/dto/CenterMenuDTO.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
dto
;
import
com.baomidou.mybatisplus.extension.activerecord.Model
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* <p>
* 中心端菜单表
* </p>
*
* @author suncq
* @since 2021-04-28
*/
@Data
@ApiModel
(
"中心端菜单参数对象"
)
public
class
CenterMenuDTO
extends
Model
{
@ApiModelProperty
(
value
=
"主键"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"菜单名称"
)
private
String
menuName
;
@ApiModelProperty
(
value
=
"菜单级别"
)
private
Integer
menuLevle
;
@ApiModelProperty
(
value
=
"父级主键"
)
private
Long
parentId
;
@ApiModelProperty
(
value
=
"排序字段"
)
private
Integer
orderSeq
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createTime
;
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updateTime
;
@ApiModelProperty
(
value
=
"启用禁用 0 启用 1 禁用"
)
private
String
isEnable
;
@ApiModelProperty
(
value
=
"创建人"
)
private
Long
createUserId
;
@ApiModelProperty
(
value
=
"修改人"
)
private
Long
updateUserId
;
}
nafmii-admin/src/main/java/org/nafmii/admin/user/dto/QueryMenusDto.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.nafmii.common.param.PageQuery
;
import
java.time.LocalDate
;
/**
* @author lvyp
* @date 2021/4/28
*/
@Data
@ApiModel
(
value
=
"菜单列表查询数据交互类型"
)
public
class
QueryMenusDto
extends
PageQuery
{
@ApiModelProperty
(
value
=
"创建开始时间"
)
private
LocalDate
startCreateTime
;
@ApiModelProperty
(
value
=
"创建结束时间"
)
private
LocalDate
endCreateTime
;
}
nafmii-admin/src/main/java/org/nafmii/admin/user/entity/CenterMenuPO.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.extension.activerecord.Model
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* <p>
* 中心端菜单表
* </p>
*
* @author suncq
* @since 2021-04-28
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
@TableName
(
"CENTER_MENU"
)
@ApiModel
(
value
=
"CenterMenuPO对象"
,
description
=
"中心端菜单表"
)
public
class
CenterMenuPO
extends
Model
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
)
@TableId
(
"ID"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"菜单名称"
)
@TableField
(
"MENU_NAME"
)
private
String
menuName
;
@ApiModelProperty
(
value
=
"菜单级别"
)
@TableField
(
"MENU_LEVLE"
)
private
Integer
menuLevle
;
@ApiModelProperty
(
value
=
"父级主键"
)
@TableField
(
"PARENT_ID"
)
private
Long
parentId
;
@ApiModelProperty
(
value
=
"排序字段"
)
@TableField
(
"ORDER_SEQ"
)
private
Integer
orderSeq
;
@ApiModelProperty
(
value
=
"创建时间"
)
@TableField
(
"CREATE_TIME"
)
private
LocalDateTime
createTime
;
@ApiModelProperty
(
value
=
"更新时间"
)
@TableField
(
"UPDATE_TIME"
)
private
LocalDateTime
updateTime
;
@ApiModelProperty
(
value
=
"启用禁用 0 启用 1 禁用"
)
@TableField
(
"IS_ENABLE"
)
private
String
isEnable
;
@ApiModelProperty
(
value
=
"创建人"
)
@TableField
(
"CREATE_USER_ID"
)
private
Long
createUserId
;
@ApiModelProperty
(
value
=
"修改人"
)
@TableField
(
"UPDATE_USER_ID"
)
private
Long
updateUserId
;
}
nafmii-admin/src/main/java/org/nafmii/admin/user/param/EditMenuParam.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
param
;
import
com.baomidou.mybatisplus.extension.activerecord.Model
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.time.LocalDateTime
;
/**
* <p>
* 中心端菜单表
* </p>
*
* @author suncq
* @since 2021-04-28
*/
@Data
@ApiModel
(
value
=
"菜单列表新增修改入参对象"
)
public
class
EditMenuParam
extends
Model
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"菜单名称"
)
@NotNull
(
message
=
"菜单名称不能为空"
)
private
String
menuName
;
@ApiModelProperty
(
value
=
"菜单级别"
)
@NotNull
(
message
=
"菜单级别不能为空"
)
private
Integer
menuLevle
;
@ApiModelProperty
(
value
=
"父级主键"
)
@NotNull
(
message
=
"父级主键不能为空"
)
private
Long
parentId
;
@ApiModelProperty
(
value
=
"排序字段"
)
@NotNull
(
message
=
"排序字段不能为空"
)
private
Integer
orderSeq
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createTime
;
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updateTime
;
@ApiModelProperty
(
value
=
"启用禁用 0 启用 1 禁用"
)
@NotNull
(
message
=
"启用禁用不能为空"
)
private
String
isEnable
;
@ApiModelProperty
(
value
=
"创建人"
)
private
Long
createUserId
;
@ApiModelProperty
(
value
=
"修改人"
)
private
Long
updateUserId
;
}
nafmii-admin/src/main/java/org/nafmii/admin/user/param/QueryMenusParam.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.nafmii.common.param.PageQuery
;
import
java.time.LocalDate
;
/**
* @author suncq
* @date 2021/4/28
*/
@Data
@ApiModel
(
value
=
"菜单列表查询入参对象"
)
public
class
QueryMenusParam
extends
PageQuery
{
@ApiModelProperty
(
value
=
"创建开始时间 yyyy-MM-dd"
)
private
LocalDate
startCreateTime
;
@ApiModelProperty
(
value
=
"创建结束时间 yyyy-MM-dd"
)
private
LocalDate
endCreateTime
;
}
nafmii-admin/src/main/java/org/nafmii/admin/user/service/ICenterMenuService.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
service
;
import
org.nafmii.admin.user.param.EditMenuParam
;
import
org.nafmii.admin.user.param.QueryMenusParam
;
import
org.nafmii.admin.user.vo.CenterMenuVO
;
import
org.nafmii.common.response.ApiResponse
;
import
java.util.List
;
/**
* <p>
* 中心端菜单表 服务类
* </p>
*
* @author suncq
* @since 2021-04-28
*/
public
interface
ICenterMenuService
{
/**
* @author:suncq
* @Function:中心端菜单新增修改
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
ApiResponse
editMenu
(
EditMenuParam
param
);
/**
* @author:suncq
* @Function:中心端菜单查询
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
List
<
CenterMenuVO
>
queryMenuList
(
QueryMenusParam
param
);
/**
* @author:suncq
* @Function:中心端菜单删除
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
ApiResponse
deleteMenus
(
Long
[]
ids
);
/**
* @author:suncq
* @Function:中心端用户对应菜单查询
* @date 2021/4/27
* @ClassName:
* @version:
* @remark:
*/
ApiResponse
queryUserMenus
();
}
nafmii-admin/src/main/java/org/nafmii/admin/user/service/impl/CenterMenuServiceImpl.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
service
.
impl
;
import
org.nafmii.admin.user.dao.CenterMenuMapper
;
import
org.nafmii.admin.user.dto.QueryMenusDto
;
import
org.nafmii.admin.user.entity.CenterMenuPO
;
import
org.nafmii.admin.user.param.EditMenuParam
;
import
org.nafmii.admin.user.param.QueryMenusParam
;
import
org.nafmii.admin.user.service.ICenterMenuService
;
import
org.nafmii.admin.user.vo.CenterMenuVO
;
import
org.nafmii.common.constant.MessageEnum
;
import
org.nafmii.common.param.BeanTransferUtils
;
import
org.nafmii.common.response.ApiResponse
;
import
org.nafmii.common.utils.RequestUtils
;
import
org.nafmii.common.utils.SnowFlakeUtil
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
* <p>
* 中心端菜单表 服务实现类
* </p>
*
* @author suncq
* @since 2021-04-28
*/
@Service
public
class
CenterMenuServiceImpl
implements
ICenterMenuService
{
@Resource
private
CenterMenuMapper
centerMenuMapper
;
/**
* 中心端菜单新增修改
* @param param
* @return
*/
@Override
public
ApiResponse
editMenu
(
EditMenuParam
param
)
{
Long
menuId
=
param
.
getId
();
if
(
null
==
menuId
){
//新增
CenterMenuPO
cmp
=
new
CenterMenuPO
();
cmp
.
setId
(
SnowFlakeUtil
.
nextId
());
cmp
.
setMenuName
(
param
.
getMenuName
());
cmp
.
setMenuLevle
(
param
.
getMenuLevle
());
cmp
.
setOrderSeq
(
param
.
getOrderSeq
());
cmp
.
setParentId
(
param
.
getParentId
());
cmp
.
setIsEnable
(
param
.
getIsEnable
());
cmp
.
setCreateUserId
(
RequestUtils
.
getUserId
());
cmp
.
setUpdateUserId
(
RequestUtils
.
getUserId
());
cmp
.
setCreateTime
(
LocalDateTime
.
now
());
cmp
.
setUpdateTime
(
LocalDateTime
.
now
());
int
i
=
centerMenuMapper
.
insert
(
cmp
);
if
(
i
<
0
){
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
ApiResponse
.
FAIL_TEXT
);
}
else
{
return
new
ApiResponse
(
ApiResponse
.
SUCCESS
,
ApiResponse
.
SUCCESS_TEXT
);
}
}
else
{
//修改
CenterMenuPO
cmp
=
new
CenterMenuPO
();
cmp
.
setId
(
param
.
getId
());
cmp
.
setMenuName
(
param
.
getMenuName
());
cmp
.
setMenuLevle
(
param
.
getMenuLevle
());
cmp
.
setOrderSeq
(
param
.
getOrderSeq
());
cmp
.
setParentId
(
param
.
getParentId
());
cmp
.
setIsEnable
(
param
.
getIsEnable
());
cmp
.
setUpdateUserId
(
param
.
getCreateUserId
());
cmp
.
setUpdateTime
(
LocalDateTime
.
now
());
int
i
=
centerMenuMapper
.
updateMenuById
(
cmp
);
if
(
i
<
0
){
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
ApiResponse
.
FAIL_TEXT
);
}
else
{
return
new
ApiResponse
(
ApiResponse
.
SUCCESS
,
ApiResponse
.
SUCCESS_TEXT
);
}
}
}
/**
* 中心端菜单查询
* @param
* @return
*/
@Override
public
List
<
CenterMenuVO
>
queryMenuList
(
QueryMenusParam
param
)
{
QueryMenusDto
dto
=
BeanTransferUtils
.
transfer
(
param
,
QueryMenusDto
.
class
);
return
centerMenuMapper
.
queryMenuList
(
dto
);
}
/**
* 中心端菜单删除
* @param
* @return
*/
@Override
public
ApiResponse
deleteMenus
(
Long
[]
ids
)
{
int
result
=
centerMenuMapper
.
deleteMenus
(
ids
);
if
(
result
<
0
){
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
ApiResponse
.
FAIL_TEXT
);
}
else
{
return
new
ApiResponse
(
ApiResponse
.
SUCCESS
,
ApiResponse
.
SUCCESS_TEXT
);
}
}
/**
* 中心端用户对应菜单查询
* @param
* @return
*/
@Override
public
ApiResponse
queryUserMenus
()
{
Long
userid
=
RequestUtils
.
getUserId
();
List
<
CenterMenuVO
>
result
=
centerMenuMapper
.
queryUserMenus
(
userid
);
return
new
ApiResponse
(
ApiResponse
.
SUCCESS
,
ApiResponse
.
SUCCESS_TEXT
,
result
);
}
}
nafmii-admin/src/main/java/org/nafmii/admin/user/vo/CenterMenuVO.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
admin
.
user
.
vo
;
import
com.baomidou.mybatisplus.extension.activerecord.Model
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* <p>
* 中心端菜单表
* </p>
*
* @author suncq
* @since 2021-04-28
*/
@Data
@ApiModel
(
"菜单返回报文"
)
public
class
CenterMenuVO
extends
Model
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"菜单名称"
)
private
String
menuName
;
@ApiModelProperty
(
value
=
"菜单级别"
)
private
Integer
menuLevle
;
@ApiModelProperty
(
value
=
"父级主键"
)
private
Long
parentId
;
@ApiModelProperty
(
value
=
"排序字段"
)
private
Integer
orderSeq
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createTime
;
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updateTime
;
@ApiModelProperty
(
value
=
"启用禁用 0 启用 1 禁用"
)
private
String
isEnable
;
@ApiModelProperty
(
value
=
"创建人"
)
private
Long
createUserId
;
@ApiModelProperty
(
value
=
"修改人"
)
private
Long
updateUserId
;
}
nafmii-admin/src/main/resources/mapper/CenterMenuMapper.xml
0 → 100644
View file @
8a2860f
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"org.nafmii.admin.user.dao.CenterMenuMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"org.nafmii.admin.user.entity.CenterMenuPO"
>
<id
column=
"ID"
property=
"id"
/>
<result
column=
"MENU_NAME"
property=
"menuName"
/>
<result
column=
"MENU_LEVLE"
property=
"menuLevle"
/>
<result
column=
"PARENT_ID"
property=
"parentId"
/>
<result
column=
"ORDER_SEQ"
property=
"orderSeq"
/>
<result
column=
"CREATE_TIME"
property=
"createTime"
/>
<result
column=
"UPDATE_TIME"
property=
"updateTime"
/>
<result
column=
"IS_ENABLE"
property=
"isEnable"
/>
<result
column=
"CREATE_USER_ID"
property=
"createUserId"
/>
<result
column=
"UPDATE_USER_ID"
property=
"updateUserId"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
ID, MENU_NAME, MENU_LEVLE, PARENT_ID, ORDER_SEQ, CREATE_TIME, UPDATE_TIME, IS_ENABLE, CREATE_USER_ID, UPDATE_USER_ID
</sql>
<!-- 新增修改中心端角色 -->
<update
id=
"updateMenuById"
parameterType=
"map"
>
update CENTER_MENU
<set
>
<if
test=
"menuName != null"
>
MENU_NAME = #{menuName,jdbcType=VARCHAR},
</if>
<if
test=
"menuLevle != null"
>
MENU_LEVLE = #{menuLevle,jdbcType=INTEGER},
</if>
<if
test=
"parentId != null"
>
PARENT_ID = #{parentId,jdbcType=BIGINT},
</if>
<if
test=
"orderSeq != null"
>
ORDER_SEQ = #{orderSeq,jdbcType=INTEGER},
</if>
<if
test=
"createTime != null"
>
CREATE_TIME = #{createTime,jdbcType=BIGINT},
</if>
<if
test=
"updateTime != null"
>
UPDATE_TIME = #{updateTime,jdbcType=BIGINT},
</if>
<if
test=
"isEnable != null"
>
IS_ENABLE = #{isEnable,jdbcType=VARCHAR},
</if>
<if
test=
"createUserId != null"
>
CREATE_USER_ID = #{createUserId,jdbcType=BIGINT},
</if>
<if
test=
"updateUserId != null"
>
UPDATE_USER_ID = #{updateUserId,jdbcType=BIGINT},
</if>
</set>
where ID = #{id,jdbcType=BIGINT}
</update>
<!-- 查询中心端菜单 -->
<select
id=
"queryMenuList"
parameterType=
"org.nafmii.admin.user.dto.CenterMenuDTO"
resultType=
"org.nafmii.admin.user.vo.CenterMenuVO"
>
select
ID as id, MENU_NAME as menuName, MENU_LEVLE as menuLevle, PARENT_ID as parentId, ORDER_SEQ as orderSeq,
CREATE_TIME as createTime, UPDATE_TIME as updateTime, IS_ENABLE as isEnable, CREATE_USER_ID as createUserId,
UPDATE_USER_ID as updateUserId
from CENTER_MENU
<where>
<if
test=
"startCreateTime != null and endCreateTime != null"
>
DATE_FORMAT(CREATE_TIME,'%Y-%m-%d') BETWEEN #{startCreateTime} and #{endCreateTime}
</if>
</where>
</select>
<!-- 删除中心端菜单 -->
<update
id=
"deleteMenus"
>
update
CENTER_MENU
set IS_ENABLE = "1"
where
ID IN
<foreach
collection=
"array"
item=
"id"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
</update>
<!-- 中心端用户对应菜单查询 -->
<select
id=
"queryUserMenus"
parameterType=
"map"
resultType=
"org.nafmii.admin.user.vo.CenterMenuVO"
>
SELECT
cm.ID as id, cm.MENU_NAME as menuName, cm.MENU_LEVLE as menuLevle, cm.PARENT_ID as parentId, cm.ORDER_SEQ as orderSeq,
cm.CREATE_TIME as createTime,cm.UPDATE_TIME as updateTime, cm.IS_ENABLE as isEnable, cm.CREATE_USER_ID as createUserId,
cm.UPDATE_USER_ID as updateUserId
FROM
CENTER_MENU cm
INNER JOIN CENTER_ROLE_MENU crm ON cm.id = crm.menu_id
INNER JOIN CENTER_USER_ROLE cur ON cur.role_id = crm.role_id
INNER JOIN CENTER_USER cu ON cur.user_id = cu.id
WHERE
cu.id = #{userid,jdbcType=BIGINT}
</select>
</mapper>
nafmii-app/src/main/java/org/nafmii/app/user/service/impl/UserServiceImpl.java
View file @
8a2860f
...
...
@@ -100,7 +100,7 @@ public class UserServiceImpl implements UserService {
//查询用户信息通过手机号
UserVO
userVO
=
appUserMapper
.
selectByPhone
(
registerDto
.
getPhone
());
if
(
null
!=
userVO
){
throw
new
BusinessException
(
"该用户已注册"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"该用户已注册"
);
}
//用户实体类
AppUserPO
appUser
=
new
AppUserPO
();
...
...
@@ -112,7 +112,7 @@ public class UserServiceImpl implements UserService {
appUser
.
setPhone
(
registerDto
.
getPhone
());
//判断注册密码和再次输入密码
if
(!
registerDto
.
getLoginPwd
().
equals
(
registerDto
.
getConfirmPwd
())){
throw
new
BusinessException
(
"两次密码输入不相同,请再次输入"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"两次密码输入不相同,请再次输入"
);
}
appUser
.
setLoginPwd
(
registerDto
.
getLoginPwd
());
appUser
.
setCreateTime
(
LocalDateTime
.
now
());
...
...
@@ -125,16 +125,16 @@ public class UserServiceImpl implements UserService {
String
code
=
stringRedisTemplate
.
opsForValue
().
get
(
USER_CODE_KEY
+
registerDto
.
getPhone
());
log
.
info
(
"冲缓存中获取的验证码===============》{}"
,
code
);
if
(
null
==
code
){
throw
new
BusinessException
(
"验证码已过期"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"验证码已过期"
);
}
if
(!
code
.
equals
(
registerDto
.
getCode
())){
throw
new
BusinessException
(
"验证码错误请重新输入"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"验证码错误请重新输入"
);
}
int
i
=
appUserMapper
.
insert
(
appUser
);
if
(
i
<
0
){
return
new
ApiResponse
(
).
fail
(
"新增失败"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"新增失败"
);
}
return
new
ApiResponse
();
return
new
ApiResponse
(
ApiResponse
.
SUCCESS
,
"新增成功"
);
}
/**
...
...
@@ -152,21 +152,21 @@ public class UserServiceImpl implements UserService {
//密码登陆
userVo
=
appUserMapper
.
selectByPassword
(
loginDto
);
if
(
null
==
userVo
){
throw
new
BusinessException
(
"请先注册"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"请先注册"
);
}
}
else
{
//验证码登陆
String
code
=
stringRedisTemplate
.
opsForValue
().
get
(
USER_CODE_KEY
+
loginDto
.
getPhone
());
log
.
info
(
"冲redis中获取的验证码===============》{}"
,
code
);
if
(
null
==
code
){
throw
new
BusinessException
(
"验证码已过期"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"验证码已过期"
);
}
if
(!
code
.
equals
(
loginDto
.
getCode
())){
throw
new
BusinessException
(
"验证码错误请重新输入"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"验证码错误请重新输入"
);
}
userVo
=
appUserMapper
.
selectByPhone
(
loginDto
.
getPhone
());
if
(
null
!=
userVo
){
throw
new
BusinessException
(
"请先注册"
);
return
new
ApiResponse
(
ApiResponse
.
FAIL
,
"请先注册"
);
}
}
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
...
...
nafmii-common/pom.xml
View file @
8a2860f
...
...
@@ -162,6 +162,11 @@
<version>
3.9
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
2.1.6
</version>
</dependency>
<dependency>
<groupId>
javax.cache
</groupId>
<artifactId>
cache-api
</artifactId>
<version>
1.1.0
</version>
...
...
nafmii-common/src/main/java/org/nafmii/common/excle/Reflections.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
common
.
excle
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.Validate
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.util.Assert
;
import
java.lang.reflect.*
;
/**
* 反射工具类.
* 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.
*
* @author calvin
* @version 2013-01-15
*/
@SuppressWarnings
(
"rawtypes"
)
public
class
Reflections
{
private
static
final
String
SETTER_PREFIX
=
"set"
;
private
static
final
String
GETTER_PREFIX
=
"get"
;
private
static
final
String
CGLIB_CLASS_SEPARATOR
=
"$$"
;
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
Reflections
.
class
);
/**
* 调用Getter方法.
* 支持多级,如:对象名.对象名.方法
*/
public
static
Object
invokeGetter
(
Object
obj
,
String
propertyName
)
{
Object
object
=
obj
;
for
(
String
name
:
StringUtils
.
split
(
propertyName
,
"."
))
{
String
getterMethodName
=
GETTER_PREFIX
+
StringUtils
.
capitalize
(
name
);
object
=
invokeMethod
(
object
,
getterMethodName
,
new
Class
[]{},
new
Object
[]{});
}
return
object
;
}
/**
* 调用Setter方法, 仅匹配方法名。
* 支持多级,如:对象名.对象名.方法
*/
public
static
void
invokeSetter
(
Object
obj
,
String
propertyName
,
Object
value
)
{
Object
object
=
obj
;
String
[]
names
=
StringUtils
.
split
(
propertyName
,
"."
);
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
if
(
i
<
names
.
length
-
1
)
{
String
getterMethodName
=
GETTER_PREFIX
+
StringUtils
.
capitalize
(
names
[
i
]);
object
=
invokeMethod
(
object
,
getterMethodName
,
new
Class
[]{},
new
Object
[]{});
}
else
{
String
setterMethodName
=
SETTER_PREFIX
+
StringUtils
.
capitalize
(
names
[
i
]);
invokeMethodByName
(
object
,
setterMethodName
,
new
Object
[]{
value
});
}
}
}
/**
* 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数.
*/
public
static
Object
getFieldValue
(
final
Object
obj
,
final
String
fieldName
)
{
Field
field
=
getAccessibleField
(
obj
,
fieldName
);
if
(
field
==
null
)
{
throw
new
IllegalArgumentException
(
"Could not find field ["
+
fieldName
+
"] on target ["
+
obj
+
"]"
);
}
Object
result
=
null
;
try
{
result
=
field
.
get
(
obj
);
}
catch
(
IllegalAccessException
e
)
{
logger
.
error
(
"不可能抛出的异常{}"
,
e
.
getMessage
());
}
return
result
;
}
/**
* 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数.
*/
public
static
void
setFieldValue
(
final
Object
obj
,
final
String
fieldName
,
final
Object
value
)
{
Field
field
=
getAccessibleField
(
obj
,
fieldName
);
if
(
field
==
null
)
{
throw
new
IllegalArgumentException
(
"Could not find field ["
+
fieldName
+
"] on target ["
+
obj
+
"]"
);
}
try
{
field
.
set
(
obj
,
value
);
}
catch
(
IllegalAccessException
e
)
{
logger
.
error
(
"不可能抛出的异常:{}"
,
e
.
getMessage
());
}
}
/**
* 直接调用对象方法, 无视private/protected修饰符.
* 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用.
* 同时匹配方法名+参数类型,
*/
public
static
Object
invokeMethod
(
final
Object
obj
,
final
String
methodName
,
final
Class
<?>[]
parameterTypes
,
final
Object
[]
args
)
{
Method
method
=
getAccessibleMethod
(
obj
,
methodName
,
parameterTypes
);
if
(
method
==
null
)
{
throw
new
IllegalArgumentException
(
"Could not find method ["
+
methodName
+
"] on target ["
+
obj
+
"]"
);
}
try
{
return
method
.
invoke
(
obj
,
args
);
}
catch
(
Exception
e
)
{
throw
convertReflectionExceptionToUnchecked
(
e
);
}
}
/**
* 直接调用对象方法, 无视private/protected修饰符,
* 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用.
* 只匹配函数名,如果有多个同名函数调用第一个。
*/
public
static
Object
invokeMethodByName
(
final
Object
obj
,
final
String
methodName
,
final
Object
[]
args
)
{
Method
method
=
getAccessibleMethodByName
(
obj
,
methodName
);
if
(
method
==
null
)
{
throw
new
IllegalArgumentException
(
"Could not find method ["
+
methodName
+
"] on target ["
+
obj
+
"]"
);
}
try
{
return
method
.
invoke
(
obj
,
args
);
}
catch
(
Exception
e
)
{
throw
convertReflectionExceptionToUnchecked
(
e
);
}
}
/**
* 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.
* <p>
* 如向上转型到Object仍无法找到, 返回null.
*/
public
static
Field
getAccessibleField
(
final
Object
obj
,
final
String
fieldName
)
{
Validate
.
notNull
(
obj
,
"object can't be null"
);
Validate
.
notBlank
(
fieldName
,
"fieldName can't be blank"
);
for
(
Class
<?>
superClass
=
obj
.
getClass
();
superClass
!=
Object
.
class
;
superClass
=
superClass
.
getSuperclass
())
{
try
{
Field
field
=
superClass
.
getDeclaredField
(
fieldName
);
makeAccessible
(
field
);
return
field
;
}
catch
(
NoSuchFieldException
e
)
{
//NOSONAR
// Field不在当前类定义,继续向上转型
continue
;
// new add
}
}
return
null
;
}
/**
* 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问.
* 如向上转型到Object仍无法找到, 返回null.
* 匹配函数名+参数类型。
* <p>
* 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
*/
public
static
Method
getAccessibleMethod
(
final
Object
obj
,
final
String
methodName
,
final
Class
<?>...
parameterTypes
)
{
Validate
.
notNull
(
obj
,
"object can't be null"
);
Validate
.
notBlank
(
methodName
,
"methodName can't be blank"
);
for
(
Class
<?>
searchType
=
obj
.
getClass
();
searchType
!=
Object
.
class
;
searchType
=
searchType
.
getSuperclass
())
{
try
{
Method
method
=
searchType
.
getDeclaredMethod
(
methodName
,
parameterTypes
);
makeAccessible
(
method
);
return
method
;
}
catch
(
NoSuchMethodException
e
)
{
// Method不在当前类定义,继续向上转型
continue
;
// new add
}
}
return
null
;
}
/**
* 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问.
* 如向上转型到Object仍无法找到, 返回null.
* 只匹配函数名。
* <p>
* 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
*/
public
static
Method
getAccessibleMethodByName
(
final
Object
obj
,
final
String
methodName
)
{
Validate
.
notNull
(
obj
,
"object can't be null"
);
Validate
.
notBlank
(
methodName
,
"methodName can't be blank"
);
for
(
Class
<?>
searchType
=
obj
.
getClass
();
searchType
!=
Object
.
class
;
searchType
=
searchType
.
getSuperclass
())
{
Method
[]
methods
=
searchType
.
getDeclaredMethods
();
for
(
Method
method
:
methods
)
{
if
(
method
.
getName
().
equals
(
methodName
))
{
makeAccessible
(
method
);
return
method
;
}
}
}
return
null
;
}
/**
* 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。
*/
public
static
void
makeAccessible
(
Method
method
)
{
if
((!
Modifier
.
isPublic
(
method
.
getModifiers
())
||
!
Modifier
.
isPublic
(
method
.
getDeclaringClass
().
getModifiers
()))
&&
!
method
.
isAccessible
())
{
method
.
setAccessible
(
true
);
}
}
/**
* 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。
*/
public
static
void
makeAccessible
(
Field
field
)
{
if
((!
Modifier
.
isPublic
(
field
.
getModifiers
())
||
!
Modifier
.
isPublic
(
field
.
getDeclaringClass
().
getModifiers
())
||
Modifier
.
isFinal
(
field
.
getModifiers
()))
&&
!
field
.
isAccessible
())
{
field
.
setAccessible
(
true
);
}
}
/**
* 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处
* 如无法找到, 返回Object.class.
* eg.
* public UserDao extends HibernateDao<User>
*
* @param clazz The class to introspect
* @return the first generic declaration, or Object.class if cannot be determined
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
Class
<
T
>
getClassGenricType
(
final
Class
clazz
)
{
return
getClassGenricType
(
clazz
,
0
);
}
/**
* 通过反射, 获得Class定义中声明的父类的泛型参数的类型.
* 如无法找到, 返回Object.class.
* <p>
* 如public UserDao extends HibernateDao<User,Long>
*
* @param clazz clazz The class to introspect
* @param index the Index of the generic ddeclaration,start from 0.
* @return the index generic declaration, or Object.class if cannot be determined
*/
public
static
Class
getClassGenricType
(
final
Class
clazz
,
final
int
index
)
{
Type
genType
=
clazz
.
getGenericSuperclass
();
if
(!(
genType
instanceof
ParameterizedType
))
{
logger
.
warn
(
clazz
.
getSimpleName
()
+
"'s superclass not ParameterizedType"
);
return
Object
.
class
;
}
Type
[]
params
=
((
ParameterizedType
)
genType
).
getActualTypeArguments
();
if
(
index
>=
params
.
length
||
index
<
0
)
{
logger
.
warn
(
"Index: "
+
index
+
", Size of "
+
clazz
.
getSimpleName
()
+
"'s Parameterized Type: "
+
params
.
length
);
return
Object
.
class
;
}
if
(!(
params
[
index
]
instanceof
Class
))
{
logger
.
warn
(
clazz
.
getSimpleName
()
+
" not set the actual class on superclass generic parameter"
);
return
Object
.
class
;
}
return
(
Class
)
params
[
index
];
}
public
static
Class
<?>
getUserClass
(
Object
instance
)
{
Assert
.
notNull
(
instance
,
"Instance must not be null"
);
Class
clazz
=
instance
.
getClass
();
if
(
clazz
!=
null
&&
clazz
.
getName
().
contains
(
CGLIB_CLASS_SEPARATOR
))
{
Class
<?>
superClass
=
clazz
.
getSuperclass
();
if
(
superClass
!=
null
&&
!
Object
.
class
.
equals
(
superClass
))
{
return
superClass
;
}
}
return
clazz
;
}
/**
* 将反射时的checked exception转换为unchecked exception.
*/
public
static
RuntimeException
convertReflectionExceptionToUnchecked
(
Exception
e
)
{
if
(
e
instanceof
IllegalAccessException
||
e
instanceof
IllegalArgumentException
||
e
instanceof
NoSuchMethodException
)
{
return
new
IllegalArgumentException
(
e
);
}
else
if
(
e
instanceof
InvocationTargetException
)
{
return
new
RuntimeException
(((
InvocationTargetException
)
e
).
getTargetException
());
}
else
if
(
e
instanceof
RuntimeException
)
{
return
(
RuntimeException
)
e
;
}
return
new
RuntimeException
(
"Unexpected Checked Exception."
,
e
);
}
}
nafmii-common/src/main/java/org/nafmii/common/excle/annotation/ExcelField.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
common
.
excle
.
annotation
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* Excel注解定义
* Created by tianc on 17/8/25.
*/
@Target
({
ElementType
.
METHOD
,
ElementType
.
FIELD
,
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
ExcelField
{
/**
* 导出字段名(默认调用当前字段的“get”方法,如指定导出字段为对象,请填写“对象名.对象属性”,例:“area.name”、“office.name”)
*/
String
value
()
default
""
;
/**
* 导出字段标题(需要添加批注请用“**”分隔,标题**批注,仅对导出模板有效)
*/
String
title
();
/**
* 字段类型(0:导出导入;1:仅导出;2:仅导入)
*/
int
type
()
default
0
;
/**
* 导出字段对齐方式(0:自动;1:靠左;2:居中;3:靠右)
*/
int
align
()
default
0
;
/**
* 导出字段字段排序(升序)
*/
int
sort
()
default
0
;
/**
* 如果是字典类型,请设置字典的type值
*/
String
dictType
()
default
""
;
/**
* 反射类型
*/
Class
<?>
fieldType
()
default
Class
.
class
;
/**
* 字段归属组(根据分组导出导入)
*/
int
[]
groups
()
default
{};
}
nafmii-common/src/main/java/org/nafmii/common/excle/test.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
common
.
excle
;
/**
* @author:zhoujh
* @Function:TODO
* @date 2021/4/29 15:35
* @ClassName:
* @version:
* @remark:
*/
public
class
test
{
}
nafmii-common/src/main/java/org/nafmii/common/utils/ImportExcelUtils.java
0 → 100644
View file @
8a2860f
package
org
.
nafmii
.
common
.
utils
;
import
com.google.common.collect.Lists
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.openxml4j.exceptions.InvalidFormatException
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.nafmii.common.excle.Reflections
;
import
org.nafmii.common.excle.annotation.ExcelField
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.List
;
/**
* 导入Excel文件(支持“XLS”和“XLS”格式)
* Created by tianc on 17/8/25.
*/
public
class
ImportExcelUtils
{
private
static
Logger
log
=
LoggerFactory
.
getLogger
(
ImportExcelUtils
.
class
);
/**
* 工作薄对象
*/
private
Workbook
wb
;
/**
* 工作表对象
*/
private
Sheet
sheet
;
/**
* 标题行号
*/
private
int
headerNum
;
/**
* 构造函数
*
* @param fileName 导入文件,读取第一个工作表
* @param headerNum 标题行号,数据行号=标题行号+1
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
String
fileName
,
int
headerNum
)
throws
InvalidFormatException
,
IOException
{
this
(
new
File
(
fileName
),
headerNum
);
}
/**
* 构造函数
*
* @param file 导入文件对象,读取第一个工作表
* @param headerNum 标题行号,数据行号=标题行号+1
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
File
file
,
int
headerNum
)
throws
InvalidFormatException
,
IOException
{
this
(
file
,
headerNum
,
0
);
}
/**
* 构造函数
*
* @param fileName 导入文件
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
String
fileName
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
this
(
new
File
(
fileName
),
headerNum
,
sheetIndex
);
}
/**
* 构造函数
*
* @param file 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
File
file
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
this
(
file
.
getName
(),
new
FileInputStream
(
file
),
headerNum
,
sheetIndex
);
}
/**
* 构造函数
*
* @param multipartFile 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
MultipartFile
multipartFile
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
this
(
multipartFile
.
getOriginalFilename
(),
multipartFile
.
getInputStream
(),
headerNum
,
sheetIndex
);
}
/**
* 构造函数
*
* @param fileName 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
String
fileName
,
InputStream
is
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
try
{
if
(
fileName
==
null
||
fileName
==
""
)
{
throw
new
RuntimeException
(
"导入文档为空!"
);
}
else
if
(
fileName
.
toLowerCase
().
endsWith
(
"xls"
))
{
this
.
wb
=
new
HSSFWorkbook
(
is
);
}
else
if
(
fileName
.
toLowerCase
().
endsWith
(
"xlsx"
))
{
this
.
wb
=
new
XSSFWorkbook
(
is
);
}
else
{
throw
new
RuntimeException
(
"文档格式不正确!"
);
}
if
(
this
.
wb
.
getNumberOfSheets
()
<
sheetIndex
)
{
throw
new
RuntimeException
(
"文档中没有工作表!"
);
}
this
.
sheet
=
this
.
wb
.
getSheetAt
(
sheetIndex
);
this
.
headerNum
=
headerNum
;
log
.
debug
(
"Initialize success."
);
}
finally
{
is
.
close
();
}
}
/**
* 获取行对象
*
* @param rownum
* @return
*/
public
Row
getRow
(
int
rownum
)
{
return
this
.
sheet
.
getRow
(
rownum
);
}
/**
* 获取数据行号
*
* @return
*/
public
int
getDataRowNum
()
{
return
headerNum
+
1
;
}
/**
* 获取最后一个数据行号
*
* @return
*/
public
int
getLastDataRowNum
()
{
return
this
.
sheet
.
getLastRowNum
()
+
headerNum
;
}
/**
* 获取最后一个列号
*
* @return
*/
public
int
getLastCellNum
()
{
return
this
.
getRow
(
headerNum
).
getLastCellNum
();
}
/**
* 获取单元格值
*
* @param row 获取的行
* @param column 获取单元格列号
* @return 单元格值
*/
public
Object
getCellValue
(
Row
row
,
int
column
)
{
Object
val
=
""
;
try
{
Cell
cell
=
row
.
getCell
(
column
);
if
(
cell
!=
null
)
{
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_NUMERIC
)
{
val
=
cell
.
getNumericCellValue
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_STRING
)
{
val
=
cell
.
getStringCellValue
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_FORMULA
)
{
val
=
cell
.
getCellFormula
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_BOOLEAN
)
{
val
=
cell
.
getBooleanCellValue
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_ERROR
)
{
val
=
cell
.
getErrorCellValue
();
}
}
}
catch
(
Exception
e
)
{
return
val
;
}
return
val
;
}
/**
* 获取导入数据列表
*
* @param cls 导入对象类型
* @param groups 导入分组
*/
public
<
E
>
List
<
E
>
getDataList
(
Class
<
E
>
cls
,
int
...
groups
)
throws
InstantiationException
,
IllegalAccessException
{
List
<
Object
[]>
annotationList
=
Lists
.
newArrayList
();
// Get annotation field
Field
[]
fs
=
cls
.
getDeclaredFields
();
for
(
Field
f
:
fs
)
{
ExcelField
ef
=
f
.
getAnnotation
(
ExcelField
.
class
);
if
(
ef
!=
null
&&
(
ef
.
type
()
==
0
||
ef
.
type
()
==
2
))
{
if
(
groups
!=
null
&&
groups
.
length
>
0
)
{
boolean
inGroup
=
false
;
for
(
int
g
:
groups
)
{
if
(
inGroup
)
{
break
;
}
for
(
int
efg
:
ef
.
groups
())
{
if
(
g
==
efg
)
{
inGroup
=
true
;
annotationList
.
add
(
new
Object
[]{
ef
,
f
});
break
;
}
}
}
}
else
{
annotationList
.
add
(
new
Object
[]{
ef
,
f
});
}
}
}
// Get annotation method
Method
[]
ms
=
cls
.
getDeclaredMethods
();
for
(
Method
m
:
ms
)
{
ExcelField
ef
=
m
.
getAnnotation
(
ExcelField
.
class
);
if
(
ef
!=
null
&&
(
ef
.
type
()
==
0
||
ef
.
type
()
==
2
))
{
if
(
groups
!=
null
&&
groups
.
length
>
0
)
{
boolean
inGroup
=
false
;
for
(
int
g
:
groups
)
{
if
(
inGroup
)
{
break
;
}
for
(
int
efg
:
ef
.
groups
())
{
if
(
g
==
efg
)
{
inGroup
=
true
;
annotationList
.
add
(
new
Object
[]{
ef
,
m
});
break
;
}
}
}
}
else
{
annotationList
.
add
(
new
Object
[]{
ef
,
m
});
}
}
}
// Field sorting
Collections
.
sort
(
annotationList
,
new
Comparator
<
Object
[]>()
{
public
int
compare
(
Object
[]
o1
,
Object
[]
o2
)
{
return
new
Integer
(((
ExcelField
)
o1
[
0
]).
sort
()).
compareTo
(
new
Integer
(((
ExcelField
)
o2
[
0
]).
sort
()));
}
});
//log.debug("Import column count:"+annotationList.size());
// Get excel data
List
<
E
>
dataList
=
Lists
.
newArrayList
();
for
(
int
i
=
this
.
getDataRowNum
();
i
<
this
.
getLastDataRowNum
();
i
++)
{
E
e
=
cls
.
newInstance
();
int
column
=
0
;
Row
row
=
this
.
getRow
(
i
);
StringBuilder
sb
=
new
StringBuilder
();
for
(
Object
[]
os
:
annotationList
)
{
Object
val
=
this
.
getCellValue
(
row
,
column
++);
if
(
val
!=
null
)
{
ExcelField
ef
=
(
ExcelField
)
os
[
0
];
// If is dict type, get dict value
// if (StringUtils.isNotBlank(ef.dictType())) {
// val = DictUtils.getDictValue(val.toString(), ef.dictType(), "");
// }
// Get param type and type cast
Class
<?>
valType
=
Class
.
class
;
if
(
os
[
1
]
instanceof
Field
)
{
valType
=
((
Field
)
os
[
1
]).
getType
();
}
else
if
(
os
[
1
]
instanceof
Method
)
{
Method
method
=
((
Method
)
os
[
1
]);
if
(
"get"
.
equals
(
method
.
getName
().
substring
(
0
,
3
)))
{
valType
=
method
.
getReturnType
();
}
else
if
(
"set"
.
equals
(
method
.
getName
().
substring
(
0
,
3
)))
{
valType
=
((
Method
)
os
[
1
]).
getParameterTypes
()[
0
];
}
}
//log.debug("Import value type: ["+i+","+column+"] " + valType);
try
{
if
(
valType
==
String
.
class
)
{
String
s
=
String
.
valueOf
(
val
.
toString
());
if
(
s
.
endsWith
(
".0"
))
{
val
=
StringUtils
.
substringBefore
(
s
,
".0"
);
}
else
{
val
=
String
.
valueOf
(
val
.
toString
());
}
}
else
if
(
valType
==
Integer
.
class
)
{
val
=
Double
.
valueOf
(
val
.
toString
()).
intValue
();
}
else
if
(
valType
==
Long
.
class
)
{
val
=
Double
.
valueOf
(
val
.
toString
()).
longValue
();
}
else
if
(
valType
==
Double
.
class
)
{
val
=
Double
.
valueOf
(
val
.
toString
());
}
else
if
(
valType
==
Float
.
class
)
{
val
=
Float
.
valueOf
(
val
.
toString
());
}
else
if
(
valType
==
Date
.
class
)
{
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
}
else
{
if
(
ef
.
fieldType
()
!=
Class
.
class
)
{
val
=
ef
.
fieldType
().
getMethod
(
"getValue"
,
String
.
class
).
invoke
(
null
,
val
.
toString
());
}
else
{
val
=
Class
.
forName
(
this
.
getClass
().
getName
().
replaceAll
(
this
.
getClass
().
getSimpleName
(),
"fieldtype."
+
valType
.
getSimpleName
()
+
"Type"
)).
getMethod
(
"getValue"
,
String
.
class
).
invoke
(
null
,
val
.
toString
());
}
}
}
catch
(
Exception
ex
)
{
log
.
info
(
"Get cell value ["
+
i
+
","
+
column
+
"] error: "
+
ex
.
toString
());
val
=
null
;
}
// set entity value
if
(
os
[
1
]
instanceof
Field
)
{
Reflections
.
invokeSetter
(
e
,
((
Field
)
os
[
1
]).
getName
(),
val
);
}
else
if
(
os
[
1
]
instanceof
Method
)
{
String
mthodName
=
((
Method
)
os
[
1
]).
getName
();
if
(
"get"
.
equals
(
mthodName
.
substring
(
0
,
3
)))
{
mthodName
=
"set"
+
StringUtils
.
substringAfter
(
mthodName
,
"get"
);
}
Reflections
.
invokeMethod
(
e
,
mthodName
,
new
Class
[]{
valType
},
new
Object
[]{
val
});
}
}
sb
.
append
(
val
+
", "
);
}
dataList
.
add
(
e
);
log
.
debug
(
"Read success: ["
+
i
+
"] "
+
sb
.
toString
());
}
return
dataList
;
}
/**
* 导入测试
*/
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
// File file = new File("D:\\excle");
// if (!file.exists()){
// file.getParentFile().mkdir();
// }
ImportExcelUtils
ei
=
new
ImportExcelUtils
(
"D:\\excle/test1.xlsx"
,
1
);
for
(
int
i
=
ei
.
getDataRowNum
();
i
<
ei
.
getLastDataRowNum
();
i
++)
{
Row
row
=
ei
.
getRow
(
i
);
for
(
int
j
=
0
;
j
<
ei
.
getLastCellNum
();
j
++)
{
Object
val
=
ei
.
getCellValue
(
row
,
j
);
System
.
out
.
print
(
val
+
", "
);
}
System
.
out
.
print
(
"\n"
);
}
}
}
Write
Preview
Markdown
is supported
Attach a file
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 post a comment