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 38b0ddab
authored
Oct 28, 2023
by
刘鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(容量): 容量计算逻辑
1 parent
3829dfac
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
106 additions
and
9 deletions
project-order/src/main/java/com/dituhui/pea/order/dao/EngineerInfoDao.java
project-order/src/main/java/com/dituhui/pea/order/entity/EngineerInfoEntity.java
project-order/src/main/java/com/dituhui/pea/order/service/CapacityQueryService.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/CapacityQueryServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/dao/EngineerInfoDao.java
View file @
38b0dda
...
@@ -12,6 +12,7 @@ import org.springframework.data.jpa.repository.Query;
...
@@ -12,6 +12,7 @@ import org.springframework.data.jpa.repository.Query;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
@Repository
@Repository
public
interface
EngineerInfoDao
extends
JpaRepository
<
EngineerInfoEntity
,
Integer
>,
JpaSpecificationExecutor
<
EngineerInfoEntity
>
{
public
interface
EngineerInfoDao
extends
JpaRepository
<
EngineerInfoEntity
,
Integer
>,
JpaSpecificationExecutor
<
EngineerInfoEntity
>
{
...
@@ -37,6 +38,23 @@ public interface EngineerInfoDao extends JpaRepository<EngineerInfoEntity, Integ
...
@@ -37,6 +38,23 @@ public interface EngineerInfoDao extends JpaRepository<EngineerInfoEntity, Integ
return
(
root
,
query
,
criteriaBuilder
)
->
root
.
get
(
"engineerCode"
).
in
(
engineerCodes
);
return
(
root
,
query
,
criteriaBuilder
)
->
root
.
get
(
"engineerCode"
).
in
(
engineerCodes
);
}
}
/**
* 根据技能、产品、产品类型 分站ID获取分站下用户对应技能的技术员
*
* @param brand 产品
* @param productType 产品类型
* @param skill 技能
* @param groupId 分站ID
* @return 工程师信息
*/
@Query
(
value
=
"SELECT ei.* FROM skill_info si LEFT JOIN skill_group sg ON sg.skill_group_code =si.skill_group_code "
+
" LEFT JOIN engineer_skill_group esg ON sg.skill_group_code = esg.skill_group_code "
+
" LEFT JOIN engineer_info ei ON esg.engineer_code = ei.engineer_code "
+
" WHERE si.brand = :brand AND si.type= :productType AND si.skill = :skill "
+
" AND group_id = :groupId "
,
nativeQuery
=
true
)
Set
<
EngineerInfoEntity
>
listByBrandAndTypeAndSkillAndGroupId
(
@Param
(
"brand"
)
String
brand
,
@Param
(
"productType"
)
String
productType
,
@Param
(
"skill"
)
String
skill
,
@Param
(
"groupId"
)
String
groupId
);
@Query
(
value
=
"SELECT ei.* from engineer_info ei left join engineer_skill_group esg on ei.engineer_code = esg.engineer_code "
+
@Query
(
value
=
"SELECT ei.* from engineer_info ei left join engineer_skill_group esg on ei.engineer_code = esg.engineer_code "
+
"left join skill_info si on si.skill_group_code = esg.skill_group_code left join map_layer_customize mlc on mlc.layer_id = si.layer_id "
+
"left join skill_info si on si.skill_group_code = esg.skill_group_code left join map_layer_customize mlc on mlc.layer_id = si.layer_id "
+
...
...
project-order/src/main/java/com/dituhui/pea/order/entity/EngineerInfoEntity.java
View file @
38b0dda
package
com
.
dituhui
.
pea
.
order
.
entity
;
package
com
.
dituhui
.
pea
.
order
.
entity
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
javax.persistence.*
;
import
javax.persistence.*
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.Date
;
@Data
@Data
@Entity
@Entity
@Table
(
name
=
"engineer_info"
)
@Table
(
name
=
"engineer_info"
)
@EqualsAndHashCode
public
class
EngineerInfoEntity
{
public
class
EngineerInfoEntity
{
/**
/**
* 工程师id
* 工程师id
...
@@ -112,5 +113,6 @@ public class EngineerInfoEntity {
...
@@ -112,5 +113,6 @@ public class EngineerInfoEntity {
*/
*/
private
LocalDateTime
updateTime
=
LocalDateTime
.
now
();
private
LocalDateTime
updateTime
=
LocalDateTime
.
now
();
public
EngineerInfoEntity
()
{}
public
EngineerInfoEntity
()
{
}
}
}
project-order/src/main/java/com/dituhui/pea/order/service/CapacityQueryService.java
View file @
38b0dda
...
@@ -2,7 +2,23 @@ package com.dituhui.pea.order.service;
...
@@ -2,7 +2,23 @@ package com.dituhui.pea.order.service;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.order.dto.CapacityOrderQueryDTO
;
import
com.dituhui.pea.order.dto.CapacityOrderQueryDTO
;
import
com.dituhui.pea.order.dto.param.CapacityQueryDTO
;
import
com.dituhui.pea.order.dto.param.Location
;
import
java.time.LocalDate
;
import
java.util.List
;
public
interface
CapacityQueryService
{
public
interface
CapacityQueryService
{
Result
<?>
queryMatchCapacityData
(
CapacityOrderQueryDTO
.
Request
capacityQueryReqDTO
);
Result
<?>
queryMatchCapacityData
(
CapacityOrderQueryDTO
.
Request
capacityQueryReqDTO
);
/**
* 对外创单可用容量查询
*
* @param services 服务技能信息, 包含品牌, 产品类型, 服务技能
* @param location 需要查询容量的地址
* @param beginDate 开始日期
* @param endDate 结束日期
* @return 满足对应技能工作队的容量(三种类型与工作队绑定)
*/
Result
<?>
matchCapacityData
(
List
<
CapacityQueryDTO
.
Service
>
services
,
Location
location
,
LocalDate
beginDate
,
LocalDate
endDate
);
}
}
project-order/src/main/java/com/dituhui/pea/order/service/impl/CapacityQueryServiceImpl.java
View file @
38b0dda
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.enums.StatusCodeEnum
;
import
com.dituhui.pea.order.common.CapacityUtils
;
import
com.dituhui.pea.order.common.CapacityUtils
;
import
com.dituhui.pea.order.common.DateUtils
;
import
com.dituhui.pea.order.common.DateUtils
;
import
com.dituhui.pea.order.common.EngineerUtils
;
import
com.dituhui.pea.order.common.EngineerUtils
;
import
com.dituhui.pea.order.common.SaasUtils
;
import
com.dituhui.pea.order.common.SaasUtils
;
import
com.dituhui.pea.order.dao.CapacityEngineerStatDao
;
import
com.dituhui.pea.order.dao.*
;
import
com.dituhui.pea.order.dao.EngineerSkillDao
;
import
com.dituhui.pea.order.dao.OrgTeamDao
;
import
com.dituhui.pea.order.dao.SkillInfoDao
;
import
com.dituhui.pea.order.dto.CapacityOrderQueryDTO
;
import
com.dituhui.pea.order.dto.CapacityOrderQueryDTO
;
import
com.dituhui.pea.order.dto.param.CapacityQueryDTO
;
import
com.dituhui.pea.order.dto.param.Location
;
import
com.dituhui.pea.order.entity.*
;
import
com.dituhui.pea.order.entity.*
;
import
com.dituhui.pea.order.feign.ISaaSRemoteService
;
import
com.dituhui.pea.order.feign.ISaaSRemoteService
;
import
com.dituhui.pea.order.service.CapacityQueryService
;
import
com.dituhui.pea.order.service.CapacityQueryService
;
import
com.dituhui.pea.pojo.fendan.FendanDTO
;
import
com.google.common.collect.Sets
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -23,6 +26,7 @@ import java.time.LocalDate;
...
@@ -23,6 +26,7 @@ import java.time.LocalDate;
import
java.time.temporal.ChronoUnit
;
import
java.time.temporal.ChronoUnit
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
...
@@ -47,6 +51,63 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
...
@@ -47,6 +51,63 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
@Autowired
@Autowired
ISaaSRemoteService
saasRemoteService
;
ISaaSRemoteService
saasRemoteService
;
@Autowired
private
EngineerInfoDao
engineerInfoDao
;
@Autowired
private
MapBlockInfoDao
mapBlockInfoDao
;
@Override
public
Result
<?>
matchCapacityData
(
List
<
CapacityQueryDTO
.
Service
>
services
,
Location
location
,
LocalDate
beginDate
,
LocalDate
endDate
)
{
//TODO 转换品牌、产品类型、 技能代码为对应汉字
//1:根据经纬度分单获取面
FendanDTO
fendanDTO
=
new
FendanDTO
();
final
String
addressLongLat
=
location
.
getLongitude
()
+
","
+
location
.
getLatitude
();
fendanDTO
.
setXy
(
addressLongLat
);
List
<
SaasUtils
.
BlockInfo
>
blockInfoList
=
saasUtils
.
queryBlocksByXy
(
fendanDTO
);
if
(
blockInfoList
.
isEmpty
())
{
return
Result
.
failed
(
StatusCodeEnum
.
FENDAN_AREA_UNMATCHED
);
}
//2:根据查询出区划匹配分站信息
List
<
String
>
blockIds
=
blockInfoList
.
stream
().
map
(
SaasUtils
.
BlockInfo
::
getBlockId
).
distinct
().
collect
(
Collectors
.
toList
());
// List<MapBlockInfoEntity> mapBlockInfoEntities = mapBlockInfoDao.findByBlockIdIn(blockIds);
List
<
MapBlockInfoEntity
>
mapBlockInfoEntities
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
mapBlockInfoEntities
))
{
return
Result
.
failed
(
StatusCodeEnum
.
FENDAN_TEAM_UNMATCHED
);
}
//分站、网点ID
List
<
String
>
groupIdList
=
mapBlockInfoEntities
.
stream
().
map
(
MapBlockInfoEntity:
:
getGroupId
).
distinct
()
.
collect
(
Collectors
.
toList
());
final
String
groupId
=
groupIdList
.
get
(
0
);
//3. 查询分站下拥有对应技能的工程师(排重) todo 技能码转换为对应的技能汉字
List
<
CapacityQueryDTO
.
Service
>
convertServices
=
services
;
List
<
SkillInfoEntity
>
querySkillGroup
=
new
ArrayList
<>();
Set
<
EngineerInfoEntity
>
allFulfillEngineer
=
Sets
.
newConcurrentHashSet
();
for
(
CapacityQueryDTO
.
Service
service
:
convertServices
)
{
Set
<
EngineerInfoEntity
>
engineerInfoEntities
=
engineerInfoDao
.
listByBrandAndTypeAndSkillAndGroupId
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
(),
groupId
);
//查询对应的技能信息
SkillInfoEntity
skillInfo
=
skillInfoDao
.
getByBrandAndTypeAndSkill
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
());
querySkillGroup
.
add
(
skillInfo
);
allFulfillEngineer
.
addAll
(
engineerInfoEntities
);
}
log
.
info
(
"[matchCapacityData]【符合技能要求的工程师总数为:{} 个】"
,
allFulfillEngineer
.
size
());
//TODO 计算所有查询技能的所需耗时 (querySkillGroup)
//TODO 查询单个工程师日期范围内的技能容量信息 后加和汇总
return
null
;
}
//TODO 计算单个工程师 单日 多技能容量
private
void
reckonEngineerDaySkillsVolume
(
LocalDate
date
,
EngineerInfoEntity
engineerInfo
)
{
//TODO
}
@Override
@Override
public
Result
<?>
queryMatchCapacityData
(
CapacityOrderQueryDTO
.
Request
reqDTO
)
{
public
Result
<?>
queryMatchCapacityData
(
CapacityOrderQueryDTO
.
Request
reqDTO
)
{
// 单条容量查询
// 单条容量查询
...
@@ -180,8 +241,8 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
...
@@ -180,8 +241,8 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
return
calendar
;
return
calendar
;
}
}
private
String
fixBrand
(
String
brand
){
private
String
fixBrand
(
String
brand
)
{
if
(!
brand
.
equals
(
"嘉格纳"
)){
if
(!
brand
.
equals
(
"嘉格纳"
))
{
return
"博世/西门子以及其他品牌"
;
return
"博世/西门子以及其他品牌"
;
}
else
{
}
else
{
return
brand
;
return
brand
;
...
...
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