Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
yangxiujun
/
paidan_demo
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit b9ee0b92
authored
Oct 26, 2023
by
huangjinxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:工程师工作地址和首选工作地址相关处理
1 parent
43c2dae6
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
460 additions
and
446 deletions
project-order/src/main/java/com/dituhui/pea/order/dto/EngineerInfoListResp.java
project-order/src/main/java/com/dituhui/pea/order/entity/EngineerBusinessEntity.java
project-order/src/main/java/com/dituhui/pea/order/entity/EngineerInfoEntity.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/EngineerServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/dto/EngineerInfoListResp.java
View file @
b9ee0b9
...
...
@@ -26,5 +26,10 @@ public class EngineerInfoListResp {
private
List
<
String
>
tags
;
private
List
<
String
>
credentials
;
private
String
grade
;
/**
* 工作地址
*/
private
String
workAddress
;
}
}
project-order/src/main/java/com/dituhui/pea/order/entity/EngineerBusinessEntity.java
View file @
b9ee0b9
...
...
@@ -58,8 +58,11 @@ public class EngineerBusinessEntity implements Serializable {
@Column
(
name
=
"priority"
,
nullable
=
false
,
columnDefinition
=
"tinyint(4) default '1'"
)
private
int
priority
;
@Column
(
name
=
"departure"
,
nullable
=
false
,
columnDefinition
=
"tinyint(4) default '0'"
)
private
int
departure
;
/**
* 常规出发地,1配件仓,2家庭住址,3工作地址 默认工作地址
*/
@Column
(
name
=
"departure"
,
nullable
=
false
,
columnDefinition
=
"tinyint(4) default '3'"
)
private
int
departure
=
3
;
@Column
(
name
=
"dispatch_strategy"
,
nullable
=
false
,
length
=
32
,
columnDefinition
=
"varchar(32) default 'CENTER'"
)
private
String
dispatchStrategy
;
...
...
project-order/src/main/java/com/dituhui/pea/order/entity/EngineerInfoEntity.java
View file @
b9ee0b9
...
...
@@ -58,6 +58,11 @@ public class EngineerInfoEntity {
private
String
address
;
/**
* 工作地址
*/
private
String
workAddress
;
/**
* 类型(1全职 2兼职)
*/
private
Integer
kind
;
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/EngineerServiceImpl.java
View file @
b9ee0b9
...
...
@@ -42,334 +42,335 @@ import java.util.stream.Collectors;
@Service
public
class
EngineerServiceImpl
implements
EngineerService
{
@Autowired
private
EngineerInfoDao
engineerInfoDao
;
@Autowired
private
EngineerSkillGroupDao
engineerSkillGroupDao
;
@Autowired
private
OrgGroupDao
orgGroupDao
;
@Autowired
private
EngineerBusinessDao
engineerBusinessDao
;
@Autowired
private
EntityManager
entityManager
;
@Transactional
@Override
public
Result
<?>
getEngineerInfoList
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 查询工程师信息
Page
<
EngineerInfoEntity
>
pg
=
this
.
queryEngineerInfoIPage
(
levelType
,
levelValue
,
page
,
size
,
kind
,
key
);
List
<
EngineerInfoEntity
>
records
=
pg
.
getContent
();
// 获取groupIds
List
<
String
>
groupIds
=
records
.
stream
().
map
(
EngineerInfoEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
// 获取Map<groupId, groupName>
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
groupIds
);
// 设置返回值
EngineerInfoListResp
res
=
new
EngineerInfoListResp
();
res
.
setContent
(
this
.
packEngineerInfos
(
records
,
groupNames
));
res
.
setTotal
(
pg
.
getTotalElements
());
res
.
setPages
(
pg
.
getTotalPages
());
res
.
setPageCurrent
(
pg
.
getNumber
()
+
1
);
res
.
setPageSize
(
pg
.
getSize
());
return
Result
.
success
(
res
);
}
@Override
public
Result
<?>
getEngineerInfoDetail
(
String
engineerCode
)
throws
BusinessException
{
// 获取技术员基础信息详情
// 获取技术员列表
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
String
groupId
=
engineer
.
getGroupId
();
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
List
.
of
(
groupId
));
List
<
EngineerInfoListResp
.
EngineerInfo
>
items
=
this
.
packEngineerInfos
(
List
.
of
(
engineer
),
groupNames
);
if
(
items
.
isEmpty
())
{
throw
new
BusinessException
(
"技术员不存在"
);
}
return
Result
.
success
(
items
.
get
(
0
));
}
@Transactional
@Override
public
Result
<?>
getEngineerSkillList
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 获取技术员技能列表
Page
<
EngineerInfoEntity
>
pg
=
this
.
queryEngineerInfoIPage
(
levelType
,
levelValue
,
page
,
size
,
kind
,
key
);
List
<
EngineerInfoEntity
>
engineers
=
pg
.
getContent
();
EngineerSkillListResp
res
=
new
EngineerSkillListResp
();
res
.
setTotal
(
pg
.
getTotalElements
());
res
.
setPages
(
pg
.
getTotalPages
());
res
.
setPageCurrent
(
pg
.
getNumber
()
+
1
);
res
.
setPageSize
(
pg
.
getSize
());
res
.
setContent
(
this
.
packEngineerSkills
(
engineers
));
return
Result
.
success
(
res
);
}
@Override
public
Result
<?>
getEngineerSkillDetail
(
String
engineerCode
)
throws
BusinessException
{
// 获取工程师技能详情
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
List
<
EngineerSkillListResp
.
EngineerSkill
>
items
=
this
.
packEngineerSkills
(
List
.
of
(
engineer
));
if
(
items
.
isEmpty
())
{
throw
new
BusinessException
(
"技术员不存在"
);
}
return
Result
.
success
(
items
.
get
(
0
));
}
@Transactional
@Override
public
Result
<?>
engineerSkillUpdate
(
String
engineerCode
,
List
<
String
>
skillGroupIds
)
{
// 更新技术员技能
// 先将所有技能更新为0-不可用状态
CriteriaBuilder
cb
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
EngineerSkillGroupEntity
>
update
=
cb
.
createCriteriaUpdate
(
EngineerSkillGroupEntity
.
class
);
Root
<
EngineerSkillGroupEntity
>
root
=
update
.
from
(
EngineerSkillGroupEntity
.
class
);
update
.
set
(
root
.
get
(
"status"
),
0
);
update
.
where
(
cb
.
equal
(
root
.
get
(
"engineerCode"
),
engineerCode
));
entityManager
.
createQuery
(
update
).
executeUpdate
();
if
(
skillGroupIds
.
isEmpty
())
{
return
null
;
}
// 更新categoryIds状态为1
CriteriaBuilder
cb1
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
EngineerSkillGroupEntity
>
update1
=
cb
.
createCriteriaUpdate
(
EngineerSkillGroupEntity
.
class
);
Root
<
EngineerSkillGroupEntity
>
root1
=
update1
.
from
(
EngineerSkillGroupEntity
.
class
);
update1
.
set
(
root1
.
get
(
"status"
),
1
);
update1
.
where
(
cb1
.
equal
(
root1
.
get
(
"engineerCode"
),
engineerCode
),
root1
.
get
(
"skillGroupCode"
).
in
(
skillGroupIds
)
);
int
n
=
entityManager
.
createQuery
(
update1
).
executeUpdate
();
if
(
skillGroupIds
.
size
()
==
n
)
{
// 更新记录条数等于提交记录条数
return
null
;
}
// 可能存在engineerSkill表不存在的记录,需要补充录入
List
<
Boolean
>
statuses
=
new
ArrayList
<
Boolean
>(
Arrays
.
asList
(
true
,
false
));
List
<
String
>
engineerCodes
=
new
ArrayList
<>(
Collections
.
singletonList
(
engineerCode
));
HashMap
<
String
,
List
<
String
>>
engineerSkills
=
this
.
queryEngineerSkills
(
engineerCodes
,
statuses
);
Set
<
String
>
sInput
=
new
HashSet
<>(
skillGroupIds
);
Set
<
String
>
sDB
=
new
HashSet
<>(
engineerSkills
.
getOrDefault
(
engineerCode
,
new
ArrayList
<>()));
sInput
.
removeAll
(
sDB
);
for
(
String
skillGroupId
:
sInput
)
{
EngineerSkillGroupEntity
e
=
new
EngineerSkillGroupEntity
();
e
.
setEngineerCode
(
engineerCode
);
e
.
setSkillGroupCode
(
skillGroupId
);
e
.
setBeanStatus
(
Boolean
.
TRUE
);
e
.
setDescription
(
""
);
e
.
setStatus
(
true
);
e
.
setMemo
(
""
);
e
.
setCreateTime
(
LocalDateTime
.
now
());
e
.
setUpdateTime
(
LocalDateTime
.
now
());
entityManager
.
persist
(
e
);
}
return
null
;
}
@Transactional
@Override
public
Result
<?>
getEngineerBusinessList
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 技术员业务属性配置列表
// 查询技术员列表
Page
<
EngineerInfoEntity
>
pg
=
this
.
queryEngineerInfoIPage
(
levelType
,
levelValue
,
page
,
size
,
kind
,
key
);
List
<
EngineerInfoEntity
>
engineers
=
pg
.
getContent
();
// 查询技术员业务属性
EngineerBusinessListResp
res
=
new
EngineerBusinessListResp
();
res
.
setTotal
(
pg
.
getTotalElements
());
res
.
setPages
(
pg
.
getTotalPages
());
res
.
setPageCurrent
(
pg
.
getNumber
()
+
1
);
res
.
setPageSize
(
pg
.
getSize
());
res
.
setContent
(
this
.
packEngineerBusinesses
(
engineers
));
return
Result
.
success
(
res
);
}
@Override
public
Result
<?>
getEngineerBusinessDetail
(
String
engineerCode
)
{
// 获取技术员业务熟悉详情
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
List
<?>
items
=
this
.
packEngineerBusinesses
(
List
.
of
(
engineer
));
if
(
items
.
isEmpty
())
{
throw
new
BusinessException
(
"技术员不存在"
);
}
return
Result
.
success
(
items
.
get
(
0
));
}
@Transactional
@Override
public
Result
<?>
engineerBusinessUpdate
(
String
engineerCode
,
Integer
maxNum
,
Integer
departure
,
Integer
priority
,
String
workOn
,
String
workOff
,
String
transportMode
)
{
// 计算时间差
int
minute
=
this
.
getMinuteDiff
(
TimeUtils
.
time2LocalTime
(
workOn
),
TimeUtils
.
time2LocalTime
(
workOff
));
// 技术员业务属性配置修改
CriteriaBuilder
cb
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
EngineerBusinessEntity
>
update
=
cb
.
createCriteriaUpdate
(
EngineerBusinessEntity
.
class
);
Root
<
EngineerBusinessEntity
>
root
=
update
.
from
(
EngineerBusinessEntity
.
class
);
update
.
set
(
root
.
get
(
"maxNum"
),
maxNum
);
update
.
set
(
root
.
get
(
"departure"
),
departure
);
update
.
set
(
root
.
get
(
"priority"
),
priority
);
update
.
set
(
root
.
get
(
"workOn"
),
workOn
);
update
.
set
(
root
.
get
(
"workOff"
),
workOff
);
update
.
set
(
root
.
get
(
"maxMinute"
),
minute
);
update
.
set
(
root
.
get
(
"vehicle"
),
transportMode
);
update
.
where
(
cb
.
equal
(
root
.
get
(
"engineerCode"
),
engineerCode
));
entityManager
.
createQuery
(
update
).
executeUpdate
();
return
Result
.
success
(
null
);
}
private
Page
<
EngineerInfoEntity
>
queryEngineerInfoIPage
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 分页查询工程师基础信息
// 查询技术员所在的groupIds
List
<
OrgGroupEntity
>
groups
=
new
ArrayList
<>();
if
(
levelType
.
equals
(
"cluster"
))
{
groups
=
orgGroupDao
.
findAllByClusterId
(
levelValue
);
}
else
if
(
levelType
.
equals
(
"branch"
))
{
groups
=
orgGroupDao
.
findAllByBranchId
(
levelValue
);
}
else
if
(
levelType
.
equals
(
"group"
))
{
groups
=
orgGroupDao
.
findAllByGroupId
(
levelValue
);
}
List
<
String
>
groupIds
=
groups
.
stream
().
map
(
OrgGroupEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
Pageable
pageable
=
PageRequest
.
of
(
page
,
size
);
Specification
<
EngineerInfoEntity
>
spec
=
(
root
,
query
,
cb
)
->
{
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
if
(
groupIds
!=
null
&&
!
groupIds
.
isEmpty
())
{
predicates
.
add
(
root
.
get
(
"groupId"
).
in
(
groupIds
));
}
if
(
StringUtils
.
hasText
(
kind
))
{
int
kindValue
=
kind
.
equals
(
"fullJob"
)
?
1
:
2
;
predicates
.
add
(
cb
.
equal
(
root
.
get
(
"kind"
),
kindValue
));
}
if
(
StringUtils
.
hasText
(
key
))
{
String
likeKey
=
"%"
+
key
+
"%"
;
predicates
.
add
(
cb
.
or
(
cb
.
like
(
root
.
get
(
"phone"
),
likeKey
),
cb
.
like
(
root
.
get
(
"name"
),
likeKey
),
cb
.
like
(
root
.
get
(
"engineerCode"
),
likeKey
)
));
}
return
cb
.
and
(
predicates
.
toArray
(
new
Predicate
[
0
]));
};
return
engineerInfoDao
.
findAll
(
spec
,
pageable
);
}
private
HashMap
<
String
,
String
>
queryGroupNames
(
List
<
String
>
groupIds
)
{
//查询小组名称映射关系
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
if
(
groupIds
.
isEmpty
())
{
return
map
;
}
List
<
OrgGroupEntity
>
groups
=
orgGroupDao
.
findByGroupIdIn
(
groupIds
);
for
(
OrgGroupEntity
g
:
groups
)
{
map
.
put
(
g
.
getGroupId
(),
g
.
getGroupName
());
}
return
map
;
}
private
HashMap
<
String
,
List
<
String
>>
queryEngineerSkills
(
List
<
String
>
engineerCodes
,
List
<
Boolean
>
statuses
)
{
// 获取engineerCode对应的技能表, HashMap<engineerCode, List<skillId>>
HashMap
<
String
,
List
<
String
>>
map
=
new
HashMap
<>();
if
(
engineerCodes
.
isEmpty
())
{
return
map
;
}
List
<
EngineerSkillGroupEntity
>
records
=
engineerSkillGroupDao
.
findByEngineerCodeInAndStatusIn
(
engineerCodes
,
statuses
);
if
(
ListUtils
.
isEmpty
(
records
))
{
return
map
;
}
Comparator
<
EngineerSkillGroupEntity
>
ec
=
Comparator
.
comparing
(
EngineerSkillGroupEntity:
:
getEngineerCode
,
String
.
CASE_INSENSITIVE_ORDER
);
List
<
EngineerSkillGroupEntity
>
results
=
records
.
stream
().
sorted
(
ec
).
collect
(
Collectors
.
toList
());
// 根据engineerCode分组
Map
<
String
,
List
<
EngineerSkillGroupEntity
>>
g
=
results
.
stream
().
collect
(
Collectors
.
groupingBy
(
EngineerSkillGroupEntity:
:
getEngineerCode
));
for
(
String
engineerCode
:
g
.
keySet
())
{
// 技术员技能ID列表
List
<
String
>
skillGroupIds
=
g
.
get
(
engineerCode
).
stream
().
map
(
EngineerSkillGroupEntity:
:
getSkillGroupCode
).
collect
(
Collectors
.
toList
());
map
.
put
(
engineerCode
,
skillGroupIds
);
}
return
map
;
}
private
HashMap
<
String
,
EngineerBusinessEntity
>
queryEngineerBusiness
(
List
<
String
>
engineerCodes
)
{
HashMap
<
String
,
EngineerBusinessEntity
>
map
=
new
HashMap
<>();
if
(
engineerCodes
.
isEmpty
())
{
return
map
;
}
List
<
EngineerBusinessEntity
>
records
=
engineerBusinessDao
.
findByEngineerCodeIn
(
engineerCodes
);
for
(
EngineerBusinessEntity
r
:
records
)
{
map
.
put
(
r
.
getEngineerCode
(),
r
);
}
return
map
;
}
private
List
<
EngineerInfoListResp
.
EngineerInfo
>
packEngineerInfos
(
List
<
EngineerInfoEntity
>
engineers
,
HashMap
<
String
,
String
>
groups
)
{
String
groupName
,
age
,
kind
;
List
<
EngineerInfoListResp
.
EngineerInfo
>
items
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
EngineerInfoListResp
.
EngineerInfo
item
=
new
EngineerInfoListResp
.
EngineerInfo
();
item
.
setEngineerCode
(
e
.
getEngineerCode
());
item
.
setNumber
(
e
.
getEngineerCode
());
item
.
setName
(
e
.
getName
());
item
.
setSex
(
e
.
getGender
());
item
.
setPhone
(
e
.
getPhone
());
item
.
setAddress
(
e
.
getAddress
());
item
.
setGrade
(
e
.
getGrade
());
// group name
groupName
=
groups
.
getOrDefault
(
e
.
getGroupId
(),
""
);
item
.
setGroupName
(
groupName
);
// 年龄
age
=
this
.
getEngineerAge
(
e
.
getBirth
());
item
.
setAge
(
age
);
// 工作类型:全职/兼职
kind
=
(
e
.
getKind
()
==
1
)
?
"fullJob"
:
"partJob"
;
item
.
setKind
(
kind
);
if
(
e
.
getCredentials
()
!=
null
)
{
item
.
setCredentials
(
Arrays
.
asList
(
e
.
getCredentials
().
split
(
"、"
)));
}
else
{
item
.
setCredentials
(
new
ArrayList
<
String
>());
}
// 标签
@Autowired
private
EngineerInfoDao
engineerInfoDao
;
@Autowired
private
EngineerSkillGroupDao
engineerSkillGroupDao
;
@Autowired
private
OrgGroupDao
orgGroupDao
;
@Autowired
private
EngineerBusinessDao
engineerBusinessDao
;
@Autowired
private
EntityManager
entityManager
;
@Transactional
@Override
public
Result
<?>
getEngineerInfoList
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 查询工程师信息
Page
<
EngineerInfoEntity
>
pg
=
this
.
queryEngineerInfoIPage
(
levelType
,
levelValue
,
page
,
size
,
kind
,
key
);
List
<
EngineerInfoEntity
>
records
=
pg
.
getContent
();
// 获取groupIds
List
<
String
>
groupIds
=
records
.
stream
().
map
(
EngineerInfoEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
// 获取Map<groupId, groupName>
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
groupIds
);
// 设置返回值
EngineerInfoListResp
res
=
new
EngineerInfoListResp
();
res
.
setContent
(
this
.
packEngineerInfos
(
records
,
groupNames
));
res
.
setTotal
(
pg
.
getTotalElements
());
res
.
setPages
(
pg
.
getTotalPages
());
res
.
setPageCurrent
(
pg
.
getNumber
()
+
1
);
res
.
setPageSize
(
pg
.
getSize
());
return
Result
.
success
(
res
);
}
@Override
public
Result
<?>
getEngineerInfoDetail
(
String
engineerCode
)
throws
BusinessException
{
// 获取技术员基础信息详情
// 获取技术员列表
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
String
groupId
=
engineer
.
getGroupId
();
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
List
.
of
(
groupId
));
List
<
EngineerInfoListResp
.
EngineerInfo
>
items
=
this
.
packEngineerInfos
(
List
.
of
(
engineer
),
groupNames
);
if
(
items
.
isEmpty
())
{
throw
new
BusinessException
(
"技术员不存在"
);
}
return
Result
.
success
(
items
.
get
(
0
));
}
@Transactional
@Override
public
Result
<?>
getEngineerSkillList
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 获取技术员技能列表
Page
<
EngineerInfoEntity
>
pg
=
this
.
queryEngineerInfoIPage
(
levelType
,
levelValue
,
page
,
size
,
kind
,
key
);
List
<
EngineerInfoEntity
>
engineers
=
pg
.
getContent
();
EngineerSkillListResp
res
=
new
EngineerSkillListResp
();
res
.
setTotal
(
pg
.
getTotalElements
());
res
.
setPages
(
pg
.
getTotalPages
());
res
.
setPageCurrent
(
pg
.
getNumber
()
+
1
);
res
.
setPageSize
(
pg
.
getSize
());
res
.
setContent
(
this
.
packEngineerSkills
(
engineers
));
return
Result
.
success
(
res
);
}
@Override
public
Result
<?>
getEngineerSkillDetail
(
String
engineerCode
)
throws
BusinessException
{
// 获取工程师技能详情
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
List
<
EngineerSkillListResp
.
EngineerSkill
>
items
=
this
.
packEngineerSkills
(
List
.
of
(
engineer
));
if
(
items
.
isEmpty
())
{
throw
new
BusinessException
(
"技术员不存在"
);
}
return
Result
.
success
(
items
.
get
(
0
));
}
@Transactional
@Override
public
Result
<?>
engineerSkillUpdate
(
String
engineerCode
,
List
<
String
>
skillGroupIds
)
{
// 更新技术员技能
// 先将所有技能更新为0-不可用状态
CriteriaBuilder
cb
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
EngineerSkillGroupEntity
>
update
=
cb
.
createCriteriaUpdate
(
EngineerSkillGroupEntity
.
class
);
Root
<
EngineerSkillGroupEntity
>
root
=
update
.
from
(
EngineerSkillGroupEntity
.
class
);
update
.
set
(
root
.
get
(
"status"
),
0
);
update
.
where
(
cb
.
equal
(
root
.
get
(
"engineerCode"
),
engineerCode
));
entityManager
.
createQuery
(
update
).
executeUpdate
();
if
(
skillGroupIds
.
isEmpty
())
{
return
null
;
}
// 更新categoryIds状态为1
CriteriaBuilder
cb1
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
EngineerSkillGroupEntity
>
update1
=
cb
.
createCriteriaUpdate
(
EngineerSkillGroupEntity
.
class
);
Root
<
EngineerSkillGroupEntity
>
root1
=
update1
.
from
(
EngineerSkillGroupEntity
.
class
);
update1
.
set
(
root1
.
get
(
"status"
),
1
);
update1
.
where
(
cb1
.
equal
(
root1
.
get
(
"engineerCode"
),
engineerCode
),
root1
.
get
(
"skillGroupCode"
).
in
(
skillGroupIds
)
);
int
n
=
entityManager
.
createQuery
(
update1
).
executeUpdate
();
if
(
skillGroupIds
.
size
()
==
n
)
{
// 更新记录条数等于提交记录条数
return
null
;
}
// 可能存在engineerSkill表不存在的记录,需要补充录入
List
<
Boolean
>
statuses
=
new
ArrayList
<
Boolean
>(
Arrays
.
asList
(
true
,
false
));
List
<
String
>
engineerCodes
=
new
ArrayList
<>(
Collections
.
singletonList
(
engineerCode
));
HashMap
<
String
,
List
<
String
>>
engineerSkills
=
this
.
queryEngineerSkills
(
engineerCodes
,
statuses
);
Set
<
String
>
sInput
=
new
HashSet
<>(
skillGroupIds
);
Set
<
String
>
sDB
=
new
HashSet
<>(
engineerSkills
.
getOrDefault
(
engineerCode
,
new
ArrayList
<>()));
sInput
.
removeAll
(
sDB
);
for
(
String
skillGroupId
:
sInput
)
{
EngineerSkillGroupEntity
e
=
new
EngineerSkillGroupEntity
();
e
.
setEngineerCode
(
engineerCode
);
e
.
setSkillGroupCode
(
skillGroupId
);
e
.
setBeanStatus
(
Boolean
.
TRUE
);
e
.
setDescription
(
""
);
e
.
setStatus
(
true
);
e
.
setMemo
(
""
);
e
.
setCreateTime
(
LocalDateTime
.
now
());
e
.
setUpdateTime
(
LocalDateTime
.
now
());
entityManager
.
persist
(
e
);
}
return
null
;
}
@Transactional
@Override
public
Result
<?>
getEngineerBusinessList
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 技术员业务属性配置列表
// 查询技术员列表
Page
<
EngineerInfoEntity
>
pg
=
this
.
queryEngineerInfoIPage
(
levelType
,
levelValue
,
page
,
size
,
kind
,
key
);
List
<
EngineerInfoEntity
>
engineers
=
pg
.
getContent
();
// 查询技术员业务属性
EngineerBusinessListResp
res
=
new
EngineerBusinessListResp
();
res
.
setTotal
(
pg
.
getTotalElements
());
res
.
setPages
(
pg
.
getTotalPages
());
res
.
setPageCurrent
(
pg
.
getNumber
()
+
1
);
res
.
setPageSize
(
pg
.
getSize
());
res
.
setContent
(
this
.
packEngineerBusinesses
(
engineers
));
return
Result
.
success
(
res
);
}
@Override
public
Result
<?>
getEngineerBusinessDetail
(
String
engineerCode
)
{
// 获取技术员业务熟悉详情
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
List
<?>
items
=
this
.
packEngineerBusinesses
(
List
.
of
(
engineer
));
if
(
items
.
isEmpty
())
{
throw
new
BusinessException
(
"技术员不存在"
);
}
return
Result
.
success
(
items
.
get
(
0
));
}
@Transactional
@Override
public
Result
<?>
engineerBusinessUpdate
(
String
engineerCode
,
Integer
maxNum
,
Integer
departure
,
Integer
priority
,
String
workOn
,
String
workOff
,
String
transportMode
)
{
// 计算时间差
int
minute
=
this
.
getMinuteDiff
(
TimeUtils
.
time2LocalTime
(
workOn
),
TimeUtils
.
time2LocalTime
(
workOff
));
// 技术员业务属性配置修改
CriteriaBuilder
cb
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
EngineerBusinessEntity
>
update
=
cb
.
createCriteriaUpdate
(
EngineerBusinessEntity
.
class
);
Root
<
EngineerBusinessEntity
>
root
=
update
.
from
(
EngineerBusinessEntity
.
class
);
update
.
set
(
root
.
get
(
"maxNum"
),
maxNum
);
update
.
set
(
root
.
get
(
"departure"
),
departure
);
update
.
set
(
root
.
get
(
"priority"
),
priority
);
update
.
set
(
root
.
get
(
"workOn"
),
workOn
);
update
.
set
(
root
.
get
(
"workOff"
),
workOff
);
update
.
set
(
root
.
get
(
"maxMinute"
),
minute
);
update
.
set
(
root
.
get
(
"vehicle"
),
transportMode
);
update
.
where
(
cb
.
equal
(
root
.
get
(
"engineerCode"
),
engineerCode
));
entityManager
.
createQuery
(
update
).
executeUpdate
();
return
Result
.
success
(
null
);
}
private
Page
<
EngineerInfoEntity
>
queryEngineerInfoIPage
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
kind
,
String
key
)
{
// 分页查询工程师基础信息
// 查询技术员所在的groupIds
List
<
OrgGroupEntity
>
groups
=
new
ArrayList
<>();
if
(
levelType
.
equals
(
"cluster"
))
{
groups
=
orgGroupDao
.
findAllByClusterId
(
levelValue
);
}
else
if
(
levelType
.
equals
(
"branch"
))
{
groups
=
orgGroupDao
.
findAllByBranchId
(
levelValue
);
}
else
if
(
levelType
.
equals
(
"group"
))
{
groups
=
orgGroupDao
.
findAllByGroupId
(
levelValue
);
}
List
<
String
>
groupIds
=
groups
.
stream
().
map
(
OrgGroupEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
Pageable
pageable
=
PageRequest
.
of
(
page
,
size
);
Specification
<
EngineerInfoEntity
>
spec
=
(
root
,
query
,
cb
)
->
{
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
if
(
groupIds
!=
null
&&
!
groupIds
.
isEmpty
())
{
predicates
.
add
(
root
.
get
(
"groupId"
).
in
(
groupIds
));
}
if
(
StringUtils
.
hasText
(
kind
))
{
int
kindValue
=
kind
.
equals
(
"fullJob"
)
?
1
:
2
;
predicates
.
add
(
cb
.
equal
(
root
.
get
(
"kind"
),
kindValue
));
}
if
(
StringUtils
.
hasText
(
key
))
{
String
likeKey
=
"%"
+
key
+
"%"
;
predicates
.
add
(
cb
.
or
(
cb
.
like
(
root
.
get
(
"phone"
),
likeKey
),
cb
.
like
(
root
.
get
(
"name"
),
likeKey
),
cb
.
like
(
root
.
get
(
"engineerCode"
),
likeKey
)
));
}
return
cb
.
and
(
predicates
.
toArray
(
new
Predicate
[
0
]));
};
return
engineerInfoDao
.
findAll
(
spec
,
pageable
);
}
private
HashMap
<
String
,
String
>
queryGroupNames
(
List
<
String
>
groupIds
)
{
//查询小组名称映射关系
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
if
(
groupIds
.
isEmpty
())
{
return
map
;
}
List
<
OrgGroupEntity
>
groups
=
orgGroupDao
.
findByGroupIdIn
(
groupIds
);
for
(
OrgGroupEntity
g
:
groups
)
{
map
.
put
(
g
.
getGroupId
(),
g
.
getGroupName
());
}
return
map
;
}
private
HashMap
<
String
,
List
<
String
>>
queryEngineerSkills
(
List
<
String
>
engineerCodes
,
List
<
Boolean
>
statuses
)
{
// 获取engineerCode对应的技能表, HashMap<engineerCode, List<skillId>>
HashMap
<
String
,
List
<
String
>>
map
=
new
HashMap
<>();
if
(
engineerCodes
.
isEmpty
())
{
return
map
;
}
List
<
EngineerSkillGroupEntity
>
records
=
engineerSkillGroupDao
.
findByEngineerCodeInAndStatusIn
(
engineerCodes
,
statuses
);
if
(
ListUtils
.
isEmpty
(
records
))
{
return
map
;
}
Comparator
<
EngineerSkillGroupEntity
>
ec
=
Comparator
.
comparing
(
EngineerSkillGroupEntity:
:
getEngineerCode
,
String
.
CASE_INSENSITIVE_ORDER
);
List
<
EngineerSkillGroupEntity
>
results
=
records
.
stream
().
sorted
(
ec
).
collect
(
Collectors
.
toList
());
// 根据engineerCode分组
Map
<
String
,
List
<
EngineerSkillGroupEntity
>>
g
=
results
.
stream
().
collect
(
Collectors
.
groupingBy
(
EngineerSkillGroupEntity:
:
getEngineerCode
));
for
(
String
engineerCode
:
g
.
keySet
())
{
// 技术员技能ID列表
List
<
String
>
skillGroupIds
=
g
.
get
(
engineerCode
).
stream
().
map
(
EngineerSkillGroupEntity:
:
getSkillGroupCode
).
collect
(
Collectors
.
toList
());
map
.
put
(
engineerCode
,
skillGroupIds
);
}
return
map
;
}
private
HashMap
<
String
,
EngineerBusinessEntity
>
queryEngineerBusiness
(
List
<
String
>
engineerCodes
)
{
HashMap
<
String
,
EngineerBusinessEntity
>
map
=
new
HashMap
<>();
if
(
engineerCodes
.
isEmpty
())
{
return
map
;
}
List
<
EngineerBusinessEntity
>
records
=
engineerBusinessDao
.
findByEngineerCodeIn
(
engineerCodes
);
for
(
EngineerBusinessEntity
r
:
records
)
{
map
.
put
(
r
.
getEngineerCode
(),
r
);
}
return
map
;
}
private
List
<
EngineerInfoListResp
.
EngineerInfo
>
packEngineerInfos
(
List
<
EngineerInfoEntity
>
engineers
,
HashMap
<
String
,
String
>
groups
)
{
String
groupName
,
age
,
kind
;
List
<
EngineerInfoListResp
.
EngineerInfo
>
items
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
EngineerInfoListResp
.
EngineerInfo
item
=
new
EngineerInfoListResp
.
EngineerInfo
();
item
.
setEngineerCode
(
e
.
getEngineerCode
());
item
.
setNumber
(
e
.
getEngineerCode
());
item
.
setName
(
e
.
getName
());
item
.
setSex
(
e
.
getGender
());
item
.
setPhone
(
e
.
getPhone
());
item
.
setAddress
(
e
.
getAddress
());
item
.
setGrade
(
e
.
getGrade
());
item
.
setWorkAddress
(
e
.
getWorkAddress
());
// group name
groupName
=
groups
.
getOrDefault
(
e
.
getGroupId
(),
""
);
item
.
setGroupName
(
groupName
);
// 年龄
age
=
this
.
getEngineerAge
(
e
.
getBirth
());
item
.
setAge
(
age
);
// 工作类型:全职/兼职
kind
=
(
e
.
getKind
()
==
1
)
?
"fullJob"
:
"partJob"
;
item
.
setKind
(
kind
);
if
(
e
.
getCredentials
()
!=
null
)
{
item
.
setCredentials
(
Arrays
.
asList
(
e
.
getCredentials
().
split
(
"、"
)));
}
else
{
item
.
setCredentials
(
new
ArrayList
<
String
>());
}
// 标签
/*
List<String> tags = new ArrayList<>();
if (e.getTags() != null && !e.getTags().isEmpty()) {
...
...
@@ -380,121 +381,121 @@ public class EngineerServiceImpl implements EngineerService {
item.setTags(tags);
*/
items
.
add
(
item
);
}
return
items
;
}
private
List
<
EngineerSkillListResp
.
EngineerSkill
>
packEngineerSkills
(
List
<
EngineerInfoEntity
>
engineers
)
{
// 获取groupId类表
List
<
String
>
groupIds
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
groupIds
);
// 获取技术员code列表
List
<
String
>
engineerCodes
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
// 获取技术员的可用技能列表
List
<
Boolean
>
statuses
=
Collections
.
singletonList
(
true
);
HashMap
<
String
,
List
<
String
>>
engineerSkillGroups
=
this
.
queryEngineerSkills
(
engineerCodes
,
statuses
);
List
<
String
>
emptySkills
=
Collections
.
emptyList
();
List
<
EngineerSkillListResp
.
EngineerSkill
>
items
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
EngineerSkillListResp
.
EngineerSkill
skill
=
new
EngineerSkillListResp
.
EngineerSkill
();
skill
.
setEngineerCode
(
e
.
getEngineerCode
());
skill
.
setEngineerName
(
e
.
getName
());
skill
.
setGroupName
(
groupNames
.
getOrDefault
(
e
.
getGroupId
(),
""
));
skill
.
setUpdateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
e
.
getUpdateTime
()));
// 获取一个工程师的技能列表
skill
.
setSkillGroupIds
(
engineerSkillGroups
.
getOrDefault
(
e
.
getEngineerCode
(),
emptySkills
));
items
.
add
(
skill
);
}
return
items
;
}
private
List
<
EngineerBusinessListResp
.
EngineerBusiness
>
packEngineerBusinesses
(
List
<
EngineerInfoEntity
>
engineers
)
{
// 获取技术员code列表
List
<
String
>
engineerCodes
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
List
<
String
>
groupIds
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
groupIds
);
HashMap
<
String
,
EngineerBusinessEntity
>
buss
=
this
.
queryEngineerBusiness
(
engineerCodes
);
List
<
EngineerBusinessListResp
.
EngineerBusiness
>
items
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
EngineerBusinessListResp
.
EngineerBusiness
item
=
new
EngineerBusinessListResp
.
EngineerBusiness
();
EngineerBusinessEntity
b
=
buss
.
getOrDefault
(
e
.
getEngineerCode
(),
null
);
if
(
b
==
null
)
{
// 若没有配置,则不返回, 由同步程序初始化
continue
;
}
item
.
setEngineerCode
(
e
.
getEngineerCode
());
item
.
setGroupName
(
groupNames
.
getOrDefault
(
e
.
getGroupId
(),
""
));
item
.
setEngineerName
(
e
.
getName
());
item
.
setKind
((
e
.
getKind
()
==
1
)
?
"fullJob"
:
"partJob"
);
item
.
setAddress
(
b
.
getAddress
());
item
.
setLocation
(
String
.
format
(
"%s,%s"
,
b
.
getX
(),
b
.
getY
()));
item
.
setWorkOn
(
b
.
getWorkOn
());
item
.
setWorkOff
(
b
.
getWorkOff
());
item
.
setTransportMode
(
b
.
getVehicle
());
item
.
setDeparture
(
b
.
getDeparture
());
item
.
setMaxMinute
(
b
.
getMaxMinute
());
item
.
setMaxNum
(
b
.
getMaxNum
());
item
.
setPriority
(
b
.
getPriority
());
items
.
add
(
item
);
}
return
items
;
}
private
HashMap
<
String
,
Integer
>
getEngineerSkillIds
(
List
<
String
>
skillIds
,
HashMap
<
String
,
Integer
>
engineerSkillIds
)
{
HashMap
<
String
,
Integer
>
map
=
new
HashMap
<>();
for
(
String
skillId
:
skillIds
)
{
map
.
put
(
skillId
,
engineerSkillIds
.
getOrDefault
(
skillId
,
0
));
}
return
map
;
}
private
String
getEngineerAge
(
String
birth
)
{
// 获取工程师年龄
if
(
birth
.
isEmpty
())
{
return
""
;
}
int
age
;
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
try
{
Date
birthDate
=
dateFormat
.
parse
(
birth
);
Calendar
birthCalendar
=
Calendar
.
getInstance
();
birthCalendar
.
setTime
(
birthDate
);
Calendar
nowCalendar
=
Calendar
.
getInstance
();
age
=
nowCalendar
.
get
(
Calendar
.
YEAR
)
-
birthCalendar
.
get
(
Calendar
.
YEAR
);
if
(
nowCalendar
.
get
(
Calendar
.
DAY_OF_YEAR
)
<
birthCalendar
.
get
(
Calendar
.
DAY_OF_YEAR
))
{
age
--;
}
}
catch
(
Exception
e
)
{
return
""
;
}
return
(
age
<=
0
)
?
""
:
Integer
.
toString
(
age
);
}
private
int
getMinuteDiff
(
LocalTime
tBegin
,
LocalTime
tEnd
)
{
int
r
=
tBegin
.
compareTo
(
tEnd
);
if
(
r
==
0
)
{
return
0
;
}
LocalDateTime
dtBegin
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
toLocalDate
(),
tBegin
);
LocalDateTime
dtEnd
;
if
(
r
<
0
)
{
dtEnd
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
toLocalDate
(),
tEnd
);
}
else
{
dtEnd
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
plusDays
(
1
).
toLocalDate
(),
tEnd
);
}
Duration
duration
=
Duration
.
between
(
dtBegin
,
dtEnd
);
return
(
int
)
duration
.
toMinutes
();
}
items
.
add
(
item
);
}
return
items
;
}
private
List
<
EngineerSkillListResp
.
EngineerSkill
>
packEngineerSkills
(
List
<
EngineerInfoEntity
>
engineers
)
{
// 获取groupId类表
List
<
String
>
groupIds
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
groupIds
);
// 获取技术员code列表
List
<
String
>
engineerCodes
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
// 获取技术员的可用技能列表
List
<
Boolean
>
statuses
=
Collections
.
singletonList
(
true
);
HashMap
<
String
,
List
<
String
>>
engineerSkillGroups
=
this
.
queryEngineerSkills
(
engineerCodes
,
statuses
);
List
<
String
>
emptySkills
=
Collections
.
emptyList
();
List
<
EngineerSkillListResp
.
EngineerSkill
>
items
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
EngineerSkillListResp
.
EngineerSkill
skill
=
new
EngineerSkillListResp
.
EngineerSkill
();
skill
.
setEngineerCode
(
e
.
getEngineerCode
());
skill
.
setEngineerName
(
e
.
getName
());
skill
.
setGroupName
(
groupNames
.
getOrDefault
(
e
.
getGroupId
(),
""
));
skill
.
setUpdateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
e
.
getUpdateTime
()));
// 获取一个工程师的技能列表
skill
.
setSkillGroupIds
(
engineerSkillGroups
.
getOrDefault
(
e
.
getEngineerCode
(),
emptySkills
));
items
.
add
(
skill
);
}
return
items
;
}
private
List
<
EngineerBusinessListResp
.
EngineerBusiness
>
packEngineerBusinesses
(
List
<
EngineerInfoEntity
>
engineers
)
{
// 获取技术员code列表
List
<
String
>
engineerCodes
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
List
<
String
>
groupIds
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getGroupId
).
collect
(
Collectors
.
toList
());
HashMap
<
String
,
String
>
groupNames
=
this
.
queryGroupNames
(
groupIds
);
HashMap
<
String
,
EngineerBusinessEntity
>
buss
=
this
.
queryEngineerBusiness
(
engineerCodes
);
List
<
EngineerBusinessListResp
.
EngineerBusiness
>
items
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
EngineerBusinessListResp
.
EngineerBusiness
item
=
new
EngineerBusinessListResp
.
EngineerBusiness
();
EngineerBusinessEntity
b
=
buss
.
getOrDefault
(
e
.
getEngineerCode
(),
null
);
if
(
b
==
null
)
{
// 若没有配置,则不返回, 由同步程序初始化
continue
;
}
item
.
setEngineerCode
(
e
.
getEngineerCode
());
item
.
setGroupName
(
groupNames
.
getOrDefault
(
e
.
getGroupId
(),
""
));
item
.
setEngineerName
(
e
.
getName
());
item
.
setKind
((
e
.
getKind
()
==
1
)
?
"fullJob"
:
"partJob"
);
item
.
setAddress
(
b
.
getAddress
());
item
.
setLocation
(
String
.
format
(
"%s,%s"
,
b
.
getX
(),
b
.
getY
()));
item
.
setWorkOn
(
b
.
getWorkOn
());
item
.
setWorkOff
(
b
.
getWorkOff
());
item
.
setTransportMode
(
b
.
getVehicle
());
item
.
setDeparture
(
b
.
getDeparture
());
item
.
setMaxMinute
(
b
.
getMaxMinute
());
item
.
setMaxNum
(
b
.
getMaxNum
());
item
.
setPriority
(
b
.
getPriority
());
items
.
add
(
item
);
}
return
items
;
}
private
HashMap
<
String
,
Integer
>
getEngineerSkillIds
(
List
<
String
>
skillIds
,
HashMap
<
String
,
Integer
>
engineerSkillIds
)
{
HashMap
<
String
,
Integer
>
map
=
new
HashMap
<>();
for
(
String
skillId
:
skillIds
)
{
map
.
put
(
skillId
,
engineerSkillIds
.
getOrDefault
(
skillId
,
0
));
}
return
map
;
}
private
String
getEngineerAge
(
String
birth
)
{
// 获取工程师年龄
if
(
birth
.
isEmpty
())
{
return
""
;
}
int
age
;
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
try
{
Date
birthDate
=
dateFormat
.
parse
(
birth
);
Calendar
birthCalendar
=
Calendar
.
getInstance
();
birthCalendar
.
setTime
(
birthDate
);
Calendar
nowCalendar
=
Calendar
.
getInstance
();
age
=
nowCalendar
.
get
(
Calendar
.
YEAR
)
-
birthCalendar
.
get
(
Calendar
.
YEAR
);
if
(
nowCalendar
.
get
(
Calendar
.
DAY_OF_YEAR
)
<
birthCalendar
.
get
(
Calendar
.
DAY_OF_YEAR
))
{
age
--;
}
}
catch
(
Exception
e
)
{
return
""
;
}
return
(
age
<=
0
)
?
""
:
Integer
.
toString
(
age
);
}
private
int
getMinuteDiff
(
LocalTime
tBegin
,
LocalTime
tEnd
)
{
int
r
=
tBegin
.
compareTo
(
tEnd
);
if
(
r
==
0
)
{
return
0
;
}
LocalDateTime
dtBegin
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
toLocalDate
(),
tBegin
);
LocalDateTime
dtEnd
;
if
(
r
<
0
)
{
dtEnd
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
toLocalDate
(),
tEnd
);
}
else
{
dtEnd
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
plusDays
(
1
).
toLocalDate
(),
tEnd
);
}
Duration
duration
=
Duration
.
between
(
dtBegin
,
dtEnd
);
return
(
int
)
duration
.
toMinutes
();
}
}
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