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 185fa736
authored
Nov 01, 2023
by
刘鑫
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.dituhui.com/bsh/project/project
into develop-16542
2 parents
e5ccf54d
36263ee8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
267 additions
and
76 deletions
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/ExtractServiceImpl.java
project-interface/src/main/java/com/dituhui/pea/enums/StatusCodeEnum.java
project-interface/src/main/java/com/dituhui/pea/util/DateUtil.java
project-order/src/main/java/com/dituhui/pea/order/dao/MsgDao.java
project-order/src/main/java/com/dituhui/pea/order/dto/DispatchOrderListResp.java
project-order/src/main/java/com/dituhui/pea/order/dto/EngineersGanttDTO.java
project-order/src/main/java/com/dituhui/pea/order/dto/ScheduleEngineerOverviewResp.java
project-order/src/main/java/com/dituhui/pea/order/dto/param/OrderDTO.java
project-order/src/main/java/com/dituhui/pea/order/entity/MsgReceiverEntity.java
project-order/src/main/java/com/dituhui/pea/order/entity/OrderInfoEntity.java
project-order/src/main/java/com/dituhui/pea/order/enums/AppointmentMethodEnum.java
project-order/src/main/java/com/dituhui/pea/order/enums/AppointmentStatus.java
project-order/src/main/java/com/dituhui/pea/order/enums/VehicleEnum.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/BusinessBlockServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/DispatchServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/EngineerGanttServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/MsgServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderCreateServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderInfoServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/ScheduleServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/utils/CommonUtil.java
project-order/src/main/java/com/dituhui/pea/order/utils/EncryptionUtil.java
project-order/src/main/resources/application.yaml
project-user/src/main/java/com/dituhui/pea/user/controller/RoleController.java
project-user/src/main/java/com/dituhui/pea/user/service/RoleService.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/ExtractServiceImpl.java
View file @
185fa73
...
...
@@ -20,7 +20,6 @@ import org.springframework.transaction.annotation.Propagation;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.persistence.EntityManager
;
import
java.sql.SQLException
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
...
...
project-interface/src/main/java/com/dituhui/pea/enums/StatusCodeEnum.java
View file @
185fa73
...
...
@@ -134,7 +134,7 @@ public enum StatusCodeEnum {
FENDAN_IS_TRANSCEND
(
"024"
,
"分单超派"
,
false
),
RESOURCE_USER_EXISTS_ROLE
(
"025"
,
"
用绑定用户的角色不允许删除,需要解绑后才可以删除角色
"
,
false
),
RESOURCE_USER_EXISTS_ROLE
(
"025"
,
"
角色已绑定用户,请解绑用户后再删除角色!
"
,
false
),
ORDER_EXISTS
(
"026"
,
"订单已存在"
,
false
);
...
...
project-interface/src/main/java/com/dituhui/pea/util/DateUtil.java
View file @
185fa73
...
...
@@ -556,6 +556,22 @@ public class DateUtil {
return
false
;
}
/***
* @param localDateTime
* @return: boolean
* @Description: 根据LocalDateTime来判断是否是今天
*/
public
boolean
judgeTimeIsisTomorrow
(
LocalDateTime
localDateTime
)
{
LocalDateTime
startTime
=
LocalDate
.
now
().
plusDays
(
1
).
atTime
(
0
,
0
,
0
);
LocalDateTime
endTime
=
LocalDate
.
now
().
plusDays
(
1
).
atTime
(
23
,
59
,
59
);
//如果大于今天的开始日期,小于今天的结束日期
if
(
localDateTime
.
isAfter
(
startTime
)
&&
localDateTime
.
isBefore
(
endTime
))
{
return
true
;
}
return
false
;
}
/**
* 根据日期转换到指定时间
* 2023-10-30+2023-10-22 21:21:12 -> 2023-10-30 21:21:12
...
...
project-order/src/main/java/com/dituhui/pea/order/dao/MsgDao.java
View file @
185fa73
...
...
@@ -45,7 +45,7 @@ public interface MsgDao extends JpaRepository<MsgEntity, Integer> {
@Query
(
value
=
"select t.* from (select tt.*,r.is_read,"
+
" (select group_concat(u.nickname) from zzz_msg_receiver rr join sys_user u on u.id=rr.user_id where rr.msg_id=tt.id) receivers"
+
" from zzz_msg tt join zzz_msg_receiver r on r.msg_id=tt.id and r.user_id=:#{#req.userId}"
+
" from zzz_msg tt join zzz_msg_receiver r on r.
deleted=0 and r.
msg_id=tt.id and r.user_id=:#{#req.userId}"
+
" where IF(:#{#msgGroupResp.clusterId} is not null, tt.cluster_id=:#{#msgGroupResp.clusterId}, tt.cluster_id is null)"
+
" and IF(:#{#msgGroupResp.branchId} is not null, tt.branch_id=:#{#msgGroupResp.branchId}, tt.branch_id is null)"
+
" and IF(:#{#msgGroupResp.groupId} is not null, tt.group_id=:#{#msgGroupResp.groupId}, tt.group_id is null)"
+
...
...
project-order/src/main/java/com/dituhui/pea/order/dto/DispatchOrderListResp.java
View file @
185fa73
...
...
@@ -86,10 +86,19 @@ public class DispatchOrderListResp {
*/
private
String
beanPriority
;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private
Integer
isSpecialTime
;
/**
* 是否是cutoff,0否 1是 默认0
*/
private
Integer
isCutoff
;
/**
* bean标签
*/
private
String
beanTags
;
}
}
project-order/src/main/java/com/dituhui/pea/order/dto/EngineersGanttDTO.java
View file @
185fa73
...
...
@@ -83,5 +83,10 @@ public class EngineersGanttDTO {
private
String
text
;
private
List
<
LabelValueDTO
>
tooltip
;
private
String
url
;
/**
* 服务状态:INIT-初始化/PENDING待服务/CONTACTED已排期/STARTED-已开始/FINISHED已完成/UNFINISHED-已上门未完成
*/
private
String
serviceStatus
;
}
}
project-order/src/main/java/com/dituhui/pea/order/dto/ScheduleEngineerOverviewResp.java
View file @
185fa73
...
...
@@ -22,12 +22,30 @@ public class ScheduleEngineerOverviewResp {
private
String
skill
;
private
String
orderStatus
;
private
String
orderStatusName
;
/**
* 在途公里数
*/
private
Integer
distance
;
/**
* 上门时间
*/
private
String
arriveTime
;
private
String
timeType
;
/**
* 在途时间段
*/
private
String
expectArriveDuration
;
/**
* 实际到达时间
*/
private
String
arriveDuration
;
/**
* 计划工时
*/
private
String
expectWorkDuration
;
/**
* 工实际工时
*/
private
String
workDuration
;
}
...
...
project-order/src/main/java/com/dituhui/pea/order/dto/param/OrderDTO.java
View file @
185fa73
...
...
@@ -124,13 +124,13 @@ public class OrderDTO {
/**
* 服务单标签列表
*/
@NotNull
//
@NotNull
private
List
<
String
>
orderTags
;
/**
* 备注(周末安装/到小区打电话)
*/
@NotBlank
//
@NotBlank
private
String
description
;
/**
...
...
project-order/src/main/java/com/dituhui/pea/order/entity/MsgReceiverEntity.java
View file @
185fa73
...
...
@@ -42,6 +42,12 @@ public class MsgReceiverEntity {
@Column
(
name
=
"is_read"
)
private
Integer
isRead
;
/**
* 是否删除,0:正常,1:删除
*/
@Column
(
name
=
"deleted"
)
private
Integer
deleted
=
0
;
@Column
(
name
=
"create_time"
,
nullable
=
false
,
columnDefinition
=
"datetime default current_timestamp"
)
private
Date
createTime
;
...
...
project-order/src/main/java/com/dituhui/pea/order/entity/OrderInfoEntity.java
View file @
185fa73
package
com
.
dituhui
.
pea
.
order
.
entity
;
import
com.dituhui.pea.order.enums.
OrderFlow
Enum
;
import
com.dituhui.pea.order.enums.
ServiceStatus
Enum
;
import
lombok.Data
;
import
javax.persistence.*
;
...
...
@@ -132,7 +132,7 @@ public class OrderInfoEntity {
private
String
orderStatus
=
"NORMAL"
;
@Column
(
name
=
"service_status"
,
nullable
=
true
,
length
=
20
,
columnDefinition
=
"varchar(20) default 'INIT'"
)
private
String
serviceStatus
=
OrderFlowEnum
.
INIT
.
nam
e
();
private
String
serviceStatus
=
ServiceStatusEnum
.
INIT
.
getCod
e
();
@Column
(
name
=
"engineer_code"
,
nullable
=
true
,
length
=
32
,
columnDefinition
=
"varchar(32) default ''"
)
private
String
engineerCode
=
""
;
...
...
@@ -234,4 +234,10 @@ public class OrderInfoEntity {
*/
@Column
(
name
=
"reason_for_failure"
)
private
String
reasonForFailure
;
/**
* 是否是cutoff,0否 1是 默认0
*/
@Column
(
name
=
"is_cutoff"
)
private
Integer
isCutoff
=
0
;
}
project-order/src/main/java/com/dituhui/pea/order/enums/AppointmentMethodEnum.java
0 → 100644
View file @
185fa73
package
com
.
dituhui
.
pea
.
order
.
enums
;
public
enum
AppointmentMethodEnum
{
// 指派方式(MANUAL人工/AUTO_NOW 自动立即/AUTO_BATCH/PROTECTION 自保点)
MANUAL
,
AUTO_NOW
,
AUTO_BATCH
,
PROTECTION
}
project-order/src/main/java/com/dituhui/pea/order/enums/AppointmentStatus.java
deleted
100644 → 0
View file @
e5ccf54
package
com
.
dituhui
.
pea
.
order
.
enums
;
public
enum
AppointmentStatus
{
// 指派状态: INIT-待指派/PRE-预指派/CONFIRM-确认指派(通知BEAN)
INIT
(
"待指派"
),
PRE
(
"预指派"
),
CONFIRM
(
"确认指派"
);
private
final
String
description
;
AppointmentStatus
(
String
description
){
this
.
description
=
description
;
}
public
String
getDescription
()
{
return
description
;
}
public
static
String
getEnumName
(
AppointmentStatus
appointmentStatus
){
return
appointmentStatus
.
toString
();
}
}
project-order/src/main/java/com/dituhui/pea/order/enums/VehicleEnum.java
0 → 100644
View file @
185fa73
package
com
.
dituhui
.
pea
.
order
.
enums
;
import
cn.hutool.core.util.ObjectUtil
;
import
java.util.Objects
;
/**
* 交通工具:1汽车;2电动车;3自行车;4步行 默认是汽车
*
* @author RenPing
* @date 2023/10/24
*/
public
enum
VehicleEnum
{
CAR
(
1
,
"汽车"
),
ELECTRIC_CAR
(
2
,
"电动车"
),
BICYCLE
(
3
,
"自行车"
),
WALK
(
4
,
"步行"
);
private
Integer
code
;
private
String
name
;
private
VehicleEnum
(
Integer
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
public
Integer
getCode
()
{
return
code
;
}
public
String
getName
()
{
return
name
;
}
public
static
String
getNameByValue
(
Integer
value
)
{
if
(
Objects
.
isNull
(
value
))
{
return
null
;
}
for
(
VehicleEnum
enums
:
VehicleEnum
.
values
())
{
if
(
ObjectUtil
.
equal
(
enums
.
getCode
(),
value
))
{
return
enums
.
getName
();
}
}
return
null
;
}
}
project-order/src/main/java/com/dituhui/pea/order/service/impl/BusinessBlockServiceImpl.java
View file @
185fa73
...
...
@@ -10,6 +10,7 @@ import com.dituhui.pea.order.dto.BusinessServerBlocksRespDTO;
import
com.dituhui.pea.order.entity.*
;
import
com.dituhui.pea.order.feign.ISaaSRemoteService
;
import
com.dituhui.pea.order.service.BusinessBlockService
;
import
com.dituhui.pea.order.utils.EncryptionUtil
;
import
com.dituhui.pea.order.utils.TypeUtils
;
import
com.google.gson.internal.LinkedTreeMap
;
...
...
@@ -57,6 +58,8 @@ public class BusinessBlockServiceImpl implements BusinessBlockService {
private
MapLayerCustomizeDao
mapLayerCustomizeDao
;
@Autowired
private
EntityManager
entityManager
;
@Autowired
private
EncryptionUtil
encryptionUtil
;
@Override
public
Result
<?>
businessServerBlocks
(
String
levelType
,
String
levelValue
,
int
page
,
int
size
,
String
layerId
,
String
teamId
)
{
...
...
@@ -143,6 +146,8 @@ public class BusinessBlockServiceImpl implements BusinessBlockService {
+
"&jump=basedata&navHidden=true&layerId="
+
StringUtils
.
trimToEmpty
(
b
.
getSaasLayerId
())
+
"&layercode="
+
StringUtils
.
trimToEmpty
(
b
.
getSaasLayercode
())
+
"&area_ids="
+
StringUtils
.
trimToEmpty
(
b
.
getAreaIds
());
// 传输加密
saasUrl
=
encryptionUtil
.
AESEncrypt
(
saasUrl
);
block
.
setSaasUrl
(
saasUrl
);
if
(
null
!=
b
.
getUpdateTime
())
{
block
.
setUpdateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
b
.
getUpdateTime
()));
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/DispatchServiceImpl.java
View file @
185fa73
...
...
@@ -388,6 +388,8 @@ public class DispatchServiceImpl implements DispatchService {
item
.
setBeanPriority
(
o
.
getBeanPriority
());
item
.
setOrgGroupId
(
o
.
getOrgGroupId
());
item
.
setIsSpecialTime
(
o
.
getIsSpecialTime
());
item
.
setBeanTags
(
o
.
getBeanTags
());
item
.
setIsCutoff
(
o
.
getIsCutoff
());
item
.
setOrgGroupName
(
groupMap
.
get
(
o
.
getOrgGroupId
()));
if
(
isContinue
&&
StringUtils
.
isNotEmpty
(
o
.
getMultipleOrders
()))
{
List
<
OrderInfoEntity
>
byMultipleOrders
=
orderInfoDao
.
findByMultipleOrdersAndOrderIdNot
(
o
.
getMultipleOrders
(),
o
.
getOrderId
());
...
...
@@ -425,7 +427,7 @@ public class DispatchServiceImpl implements DispatchService {
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
four
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getSkill
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getSkill
());
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
five
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getMultipleOrders
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getMultipleOrders
());
makeOrderMap
(
groupByMap
,
item
,
"一家多台ID:"
+
item
.
getMultipleOrders
());
}
else
{
makeOrderMap
(
groupByMap
,
item
,
"其他"
);
}
...
...
@@ -457,7 +459,7 @@ public class DispatchServiceImpl implements DispatchService {
CriteriaQuery
<
OrderInfoEntity
>
criteriaQuery
=
criteriaBuilder
.
createQuery
(
OrderInfoEntity
.
class
);
Root
<
OrderInfoEntity
>
root
=
criteriaQuery
.
from
(
OrderInfoEntity
.
class
);
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
criteriaQuery
.
orderBy
(
criteriaBuilder
.
desc
(
root
.
get
(
"createTime"
)));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"dt"
),
TimeUtils
.
IsoDate2LocalDate
(
reqDTO
.
getDate
())));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"appointmentStatus"
),
OrderFlowEnum
.
INIT
.
name
()));
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/EngineerGanttServiceImpl.java
View file @
185fa73
...
...
@@ -62,6 +62,7 @@ public class EngineerGanttServiceImpl implements EngineerGanttService {
EngineersGanttDTO
.
Slot
slot
=
new
EngineersGanttDTO
.
Slot
();
// todo 需要根据订单时间和状态,采用expectXXXX或者actualXXXX
slot
.
setOrderId
(
order
.
getOrderId
());
slot
.
setServiceStatus
(
order
.
getServiceStatus
());
if
(
checkOrderIsFinish
(
order
.
getServiceStatus
()))
{
slot
.
setBtime
(
getHourMinute
(
order
.
getActualStartTime
()));
slot
.
setEtime
(
getHourMinute
(
order
.
getActualEndTime
()));
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/MsgServiceImpl.java
View file @
185fa73
...
...
@@ -87,9 +87,14 @@ public class MsgServiceImpl implements MsgService {
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Integer
msgId
,
String
userId
)
{
List
<
MsgReceiverEntity
>
list
=
msgReceiverDao
.
findAll
(
Example
.
of
(
new
MsgReceiverEntity
().
setMsgId
(
msgId
).
setUserId
(
userId
)));
List
<
MsgReceiverEntity
>
list
=
msgReceiverDao
.
findAll
(
Example
.
of
(
new
MsgReceiverEntity
()
.
setMsgId
(
msgId
).
setUserId
(
userId
)
.
setDeleted
(
0
)));
list
.
forEach
(
msgReceiverEntity
->
{
msgReceiverDao
.
deleteById
(
msgReceiverEntity
.
getId
());
msgReceiverEntity
.
setDeleted
(
1
);
msgReceiverDao
.
save
(
msgReceiverEntity
);
});
}
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderCreateServiceImpl.java
View file @
185fa73
...
...
@@ -17,6 +17,7 @@
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.common.ResultEnum
;
import
com.dituhui.pea.enums.StatusCodeEnum
;
...
...
@@ -27,7 +28,7 @@ import com.dituhui.pea.order.dto.param.Location;
import
com.dituhui.pea.order.dto.param.OrderDTO
;
import
com.dituhui.pea.order.dto.param.OrgTeamInfo
;
import
com.dituhui.pea.order.entity.*
;
import
com.dituhui.pea.order.enums.Appointment
Status
;
import
com.dituhui.pea.order.enums.Appointment
MethodEnum
;
import
com.dituhui.pea.order.enums.OrderFlowEnum
;
import
com.dituhui.pea.order.enums.OrderStatusEnum
;
import
com.dituhui.pea.order.service.*
;
...
...
@@ -128,7 +129,7 @@ public class OrderCreateServiceImpl implements OrderCreateService {
@Override
@Transactional
public
Result
<?>
createOrder
(
OrderDTO
.
OrderCreateRequest
req
)
{
log
.
info
(
"[createOrder]
current XID: {}"
,
RootContext
.
getXID
(
));
log
.
info
(
"[createOrder]
req: {}"
,
JSONObject
.
toJSONString
(
req
));
OrderInfoEntity
entity
=
new
OrderInfoEntity
();
String
orderId
=
req
.
getOrderId
();
if
(
StringUtils
.
isEmpty
(
orderId
))
{
...
...
@@ -140,14 +141,13 @@ public class OrderCreateServiceImpl implements OrderCreateService {
return
Result
.
failed
(
StatusCodeEnum
.
ORDER_EXISTS
);
}
// 分单处理
String
peaBrand
=
fixBrand
(
req
.
getBrand
());
// location
Location
location
=
req
.
getLocation
();
//
先处理时间,后面用
//
预处理字段
entity
.
setExpectTimeBegin
(
DateUtil
.
fromDate
(
req
.
getExpectBegin
()));
entity
.
setExpectTimeEnd
(
DateUtil
.
fromDate
(
req
.
getExpectEnd
()));
entity
.
setAppointmentStatus
(
AppointmentStatus
.
INIT
.
getDescription
());
entity
.
setAppointmentStatus
(
OrderFlowEnum
.
INIT
.
name
());
entity
.
setAppointmentMethod
(
AppointmentMethodEnum
.
AUTO_NOW
.
name
());
//获取省市区
AdministrativeDistrictReq
administrativeDistrictReq
=
new
AdministrativeDistrictReq
();
administrativeDistrictReq
.
setPoints
(
location
.
getLongitude
()
+
","
+
location
.
getLatitude
());
...
...
@@ -157,21 +157,19 @@ public class OrderCreateServiceImpl implements OrderCreateService {
entity
.
setCity
(
adminDistrict
.
getResult
().
getSubNames
().
getCity
());
entity
.
setCounty
(
adminDistrict
.
getResult
().
getSubNames
().
getCounty
());
}
// 分单处理
Result
<
OrgTeamInfo
>
fendanResult
=
fendanService
.
fendanToGroupCapacity
(
req
,
2
,
entity
.
getExpectTimeBegin
().
toLocalDate
(),
entity
.
getExpectTimeBegin
().
toLocalTime
(),
entity
.
getExpectTimeEnd
().
toLocalTime
());
if
(!
fendanResult
.
getCode
().
equals
(
ResultEnum
.
SUCCESS
.
getCode
())
||
ObjectUtil
.
isNull
(
fendanResult
.
getResult
()))
{
if
(
fendanResult
.
getCode
().
equals
(
StatusCodeEnum
.
FENDAN_IS_TRANSCEND
.
getCode
()))
{
// 处理超派
entity
.
setTranscend
(
1
);
}
OrgBranchEntity
branchEntity
=
orgBranchDao
.
findByCitycodeListLike
(
"%"
+
adminDistrict
.
getResult
().
getSubNames
().
getC
oun
ty
()
+
"%"
);
OrgBranchEntity
branchEntity
=
orgBranchDao
.
findByCitycodeListLike
(
"%"
+
adminDistrict
.
getResult
().
getSubNames
().
getC
i
ty
()
+
"%"
);
entity
.
setOrgClusterId
(
branchEntity
.
getClusterId
());
entity
.
setOrgBranchId
(
branchEntity
.
getBranchId
());
entity
.
setAppointmentMethod
(
AppointmentMethodEnum
.
MANUAL
.
name
());
//发送通知分部消息
MsgDTO
msgDTO
=
new
MsgDTO
();
msgDTO
.
setBranchId
(
branchEntity
.
getBranchId
());
msgDTO
.
setType
(
0
);
msgDTO
.
setOrderIds
(
orderId
);
msgDTO
.
setContent
(
"有1条预约日期在"
+
entity
.
getExpectTimeBegin
().
toLocalDate
()
+
"的工单需人工外理"
);
msgService
.
add
(
msgDTO
);
sendMsg
(
branchEntity
.
getBranchId
(),
orderId
,
entity
.
getExpectTimeBegin
().
toLocalDate
());
}
else
{
// 根据分单工作队,填写clusterId/branchId/groupId/teamId等
OrgTeamInfo
teamInfo
=
fendanResult
.
getResult
();
...
...
@@ -179,11 +177,25 @@ public class OrderCreateServiceImpl implements OrderCreateService {
entity
.
setOrgBranchId
(
teamInfo
.
getBranchId
());
entity
.
setOrgGroupId
(
teamInfo
.
getGroupId
());
entity
.
setOrgTeamId
(
teamInfo
.
getTeamId
());
entity
.
setAppointmentStatus
(
AppointmentStatus
.
PRE
.
getDescription
());
//处理超派,特殊时间段
entity
.
setIsSpecialTime
(
CommonUtil
.
isSpecial
(
entity
.
getExpectTimeBegin
().
toLocalTime
(),
entity
.
getExpectTimeEnd
().
toLocalTime
(),
teamInfo
.
getWorkOn
(),
teamInfo
.
getWorkOff
()));
entity
.
setAppointmentStatus
(
OrderFlowEnum
.
PRE
.
name
());
//特殊时间段
Integer
special
=
CommonUtil
.
isSpecial
(
entity
.
getExpectTimeBegin
().
toLocalTime
(),
entity
.
getExpectTimeEnd
().
toLocalTime
(),
teamInfo
.
getWorkOn
(),
teamInfo
.
getWorkOff
());
Integer
cutoff
=
CommonUtil
.
isCutoff
(
LocalDateTime
.
now
(),
teamInfo
.
getWorkOff
());
// 处理cutoff 动态排班结束后创建的当日单和次日单
boolean
isToday
=
DateUtil
.
judgeTimeIsToday
(
entity
.
getExpectTimeBegin
());
boolean
isTomorrow
=
DateUtil
.
judgeTimeIsisTomorrow
(
entity
.
getExpectTimeBegin
());
// 特殊时间段,当天单,cutoff需要人工处理
if
(
isToday
||
(
isTomorrow
&&
cutoff
==
1
)
||
special
==
1
)
{
//判断是否在今天cutoff之后
entity
.
setIsCutoff
(
cutoff
);
entity
.
setIsSpecialTime
(
special
);
entity
.
setAppointmentMethod
(
AppointmentMethodEnum
.
MANUAL
.
name
());
//发送通知分部消息
sendMsg
(
teamInfo
.
getBranchId
(),
orderId
,
entity
.
getExpectTimeBegin
().
toLocalDate
());
}
}
// 字段转换
entity
.
setSource
(
req
.
getSource
());
entity
.
setOrderId
(
orderId
);
entity
.
setName
(
req
.
getName
());
...
...
@@ -197,7 +209,8 @@ public class OrderCreateServiceImpl implements OrderCreateService {
// 使用期望时间来初始化计划时间,后面在指派环节更新为真正的有效的计划时间
entity
.
setPlanStartTime
(
entity
.
getExpectTimeBegin
());
entity
.
setPlanEndTime
(
entity
.
getExpectTimeEnd
());
entity
.
setApplyNote
(
req
.
getDescription
());
// order_request的description字段,仅仅用于内部备注,不对外
// order_request的description字段,仅仅用于内部备注,不对外
entity
.
setApplyNote
(
req
.
getDescription
());
entity
.
setDt
(
entity
.
getExpectTimeBegin
().
toLocalDate
());
entity
.
setSubId
(
newSubId
(
entity
.
getOrderId
(),
entity
.
getDt
()));
entity
.
setX
(
req
.
getLocation
().
getLongitude
().
toString
());
...
...
@@ -205,38 +218,44 @@ public class OrderCreateServiceImpl implements OrderCreateService {
entity
.
setAddress
(
location
.
getAddress
());
entity
.
setAddressId
(
location
.
getAddressId
());
// 默认值
entity
.
setAppointmentStatus
(
OrderFlowEnum
.
INIT
.
name
());
//
entity.setAppointmentStatus(OrderFlowEnum.INIT.name());
entity
.
setBeanStatus
(
"OPEN"
);
entity
.
setBeanSubStatus
(
""
);
entity
.
setAppointmentMethod
(
"AUTO_NOW"
);
entity
.
setWorkshop
(
false
);
// 处理工程师
entity
.
setIsAppointEngineer
(
req
.
getIsAppointEngineer
());
String
appointEngineerCodes
=
CollectionUtils
.
isEmpty
(
req
.
getAppointEngineerCodes
())
?
""
:
String
.
join
(
","
,
req
.
getAppointEngineerCodes
());
entity
.
setAppointEngineerCodes
(
appointEngineerCodes
);
// 处理技能和标签
SkillInfoEntity
skillInfoEntity
=
skillInfoDao
.
getByBrandAndTypeAndSkill
(
peaBrand
,
req
.
getProductType
(),
req
.
getServiceType
());
assert
skillInfoEntity
!=
null
;
entity
.
setTakeTime
(
skillInfoEntity
.
getTakeTime
());
// 基础保存
String
joinTags
=
CollectionUtils
.
isEmpty
(
req
.
getOrderTags
())
?
""
:
String
.
join
(
","
,
req
.
getOrderTags
());
entity
.
setBeanTags
(
joinTags
);
entity
.
setBeanPriority
(
req
.
getPriority
());
entity
.
setIsMultiple
(
joinTags
.
contains
(
"重物搬运"
)
?
1
:
0
);
//一家多单
Result
<
String
>
addMultipleOrders
=
orderInfoService
.
addMultipleOrders
(
entity
.
getDt
(),
location
.
getAddressId
(),
orderId
);
entity
.
setMultipleOrders
(
addMultipleOrders
.
getResult
());
// todo 服务单状态、预约状态等
// 记录订单和节点
orderInfoDao
.
save
(
entity
);
// 登记
commonService
.
addOrderEvent
(
orderId
,
""
,
req
.
getSource
(),
"API"
,
OrderStatusEnum
.
CREATE
.
getDescription
(),
OrderStatusEnum
.
CREATE
.
getDescription
(),
""
);
// 指派检查,简单处理,遇到第一个可以指派的就停止检查
// tryVirtualAppointment(entity, req.getSource(), teamId);
return
Result
.
success
(
null
);
}
private
void
sendMsg
(
String
branchId
,
String
orderId
,
LocalDate
toLocalDate
)
{
MsgDTO
msgDTO
=
new
MsgDTO
();
msgDTO
.
setBranchId
(
branchId
);
msgDTO
.
setType
(
0
);
msgDTO
.
setOrderIds
(
orderId
);
msgDTO
.
setContent
(
"有1条预约日期在"
+
toLocalDate
+
"的工单需人工外理"
);
msgService
.
add
(
msgDTO
);
}
private
void
tryVirtualAppointment
(
OrderInfoEntity
thisOrderEntity
,
String
source
,
String
teamId
)
{
try
{
List
<
String
>
engineerCodes
=
engineerUtils
.
getEngineersByLevel
(
"team"
,
teamId
).
stream
()
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderInfoServiceImpl.java
View file @
185fa73
...
...
@@ -364,7 +364,7 @@ public class OrderInfoServiceImpl implements OrderInfoService {
if
(
fendanResult
.
getCode
().
equals
(
StatusCodeEnum
.
FENDAN_IS_TRANSCEND
.
getCode
()))
{
order
.
setTranscend
(
1
);
}
OrgBranchEntity
branchEntity
=
orgBranchDao
.
findByCitycodeListLike
(
"%"
+
adminDistrict
.
getResult
().
getSubNames
().
getC
oun
ty
()
+
"%"
);
OrgBranchEntity
branchEntity
=
orgBranchDao
.
findByCitycodeListLike
(
"%"
+
adminDistrict
.
getResult
().
getSubNames
().
getC
i
ty
()
+
"%"
);
clusterId
=
branchEntity
.
getClusterId
();
branchId
=
branchEntity
.
getBranchId
();
sendMsg
(
branchEntity
.
getBranchId
(),
order
.
getOrderId
(),
req
.
getExpectBegin
());
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/ScheduleServiceImpl.java
View file @
185fa73
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.LocalDateTimeUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.dituhui.pea.common.BusinessException
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.order.common.DateUtils
;
import
com.dituhui.pea.order.common.ListUtils
;
import
com.dituhui.pea.order.common.TimeUtils
;
import
com.dituhui.pea.order.dao.*
;
import
com.dituhui.pea.order.dto.*
;
import
com.dituhui.pea.order.entity.*
;
import
com.dituhui.pea.order.enums.OrderFlowEnum
;
import
com.dituhui.pea.order.enums.VehicleEnum
;
import
com.dituhui.pea.order.service.ScheduleService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
...
...
@@ -20,7 +23,10 @@ import org.springframework.data.jpa.domain.Specification;
import
org.springframework.stereotype.Service
;
import
javax.persistence.criteria.Predicate
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.temporal.ChronoUnit
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -48,6 +54,9 @@ public class ScheduleServiceImpl implements ScheduleService {
private
EngineerInfoDao
engineerInfoDao
;
@Autowired
private
EngineerBusinessDao
engineerBusinessDao
;
@Autowired
private
SkillInfoDao
skillInfoDao
;
@Override
...
...
@@ -116,6 +125,7 @@ public class ScheduleServiceImpl implements ScheduleService {
Collectors
.
groupingBy
(
EngineerInfoEntity:
:
getEngineerCode
));
List
<
ScheduleOverviewResp
.
Item
>
children
=
new
ArrayList
<>();
Integer
teamDistance
=
0
;
for
(
Map
.
Entry
<
String
,
List
<
EngineerInfoEntity
>>
entry
:
engineers
.
entrySet
())
{
ScheduleOverviewResp
.
Item
child
=
new
ScheduleOverviewResp
.
Item
();
...
...
@@ -131,7 +141,9 @@ public class ScheduleServiceImpl implements ScheduleService {
child
.
setLevel
(
"engineer"
);
child
.
setOrder
(
this
.
getTeamOrderSum
(
orders2
,
skillMapping
));
child
.
setOrderDesc
(
Integer
.
toString
(
orders2
.
size
()));
child
.
setDistanceDesc
(
""
);
Integer
distanceSum
=
orders2
.
stream
().
map
(
order
->
Objects
.
nonNull
(
order
.
getArriveDistance
())
?
order
.
getArriveDistance
()
:
0
).
reduce
(
Integer:
:
sum
).
orElse
(
0
);
teamDistance
+=
distanceSum
;
child
.
setDistanceDesc
(
distanceSum
+
""
);
children
.
add
(
child
);
}
...
...
@@ -139,7 +151,7 @@ public class ScheduleServiceImpl implements ScheduleService {
team
.
setChildren
(
children
);
team
.
setOrderDesc
(
String
.
format
(
"人均:%d"
,
teamEngineers
.
size
()
>
0
?
(
orders
.
size
()
/
teamEngineers
.
size
())
:
0
));
team
.
setDistanceDesc
(
""
);
team
.
setDistanceDesc
(
teamDistance
+
""
);
teams
.
add
(
team
);
}
...
...
@@ -160,11 +172,14 @@ public class ScheduleServiceImpl implements ScheduleService {
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"分销员不存在"
);
}
EngineerBusinessEntity
engineerBusinessEntity
=
engineerBusinessDao
.
getByEngineerCode
(
engineerCode
);
List
<
LabelValueDTO
>
emptyTips
=
new
ArrayList
<>();
List
<
OrderInfoEntity
>
orderAppointments
=
orderInfoDao
.
findByEngineerCodeAndDtAndAppointmentStatusIn
(
engineerCode
,
date
,
List
.
of
(
OrderFlowEnum
.
PRE
.
name
(),
OrderFlowEnum
.
CONFIRM
.
name
()));
List
<
TimeLineDTO
>
timelines
=
new
ArrayList
<>();
int
sumDistance
=
0
;
int
sumElapsed
=
0
;
for
(
OrderInfoEntity
o
:
orderAppointments
)
{
TimeLineDTO
item
=
new
TimeLineDTO
();
item
.
setOrderId
(
o
.
getOrderId
());
...
...
@@ -173,6 +188,8 @@ public class ScheduleServiceImpl implements ScheduleService {
item
.
setEndTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getPlanEndTime
()));
item
.
setTips
(
emptyTips
);
timelines
.
add
(
item
);
sumDistance
+=
Objects
.
isNull
(
o
.
getArriveDistance
())
?
0
:
o
.
getArriveDistance
();
sumElapsed
+=
Objects
.
isNull
(
o
.
getArriveElapsed
())
?
0
:
o
.
getArriveElapsed
();
}
Map
<
String
,
List
<
OrderInfoEntity
>>
statusGroup
=
orderAppointments
.
stream
().
collect
(
Collectors
.
groupingBy
(
OrderInfoEntity:
:
getServiceStatus
));
...
...
@@ -188,10 +205,17 @@ public class ScheduleServiceImpl implements ScheduleService {
dynamics
.
add
(
new
LabelValueDTO
(
"已完成"
,
Integer
.
toString
(
statusGroup
.
getOrDefault
(
"FINISHED"
,
empty
).
size
())));
dynamics
.
add
(
new
LabelValueDTO
(
"已取消"
,
Integer
.
toString
(
statusGroup
.
getOrDefault
(
"CANCELED"
,
empty
).
size
())));
dynamics
.
add
(
new
LabelValueDTO
(
"已改约"
,
Integer
.
toString
(
statusGroup
.
getOrDefault
(
"RESCHEDULED"
,
empty
).
size
())));
dynamics
.
add
(
new
LabelValueDTO
(
"预计总耗时"
,
"6小时"
));
dynamics
.
add
(
new
LabelValueDTO
(
"公里数"
,
"42公里"
));
dynamics
.
add
(
new
LabelValueDTO
(
"工作时间"
,
"08:00-18:00"
));
dynamics
.
add
(
new
LabelValueDTO
(
"交通工具"
,
"电动车"
));
dynamics
.
add
(
new
LabelValueDTO
(
"预计总耗时"
,
new
BigDecimal
(
sumElapsed
)
.
divide
(
new
BigDecimal
(
60
),
2
,
RoundingMode
.
HALF_UP
)
.
stripTrailingZeros
()
+
"小时"
));
dynamics
.
add
(
new
LabelValueDTO
(
"公里数"
,
sumDistance
+
""
));
if
(
Objects
.
nonNull
(
engineerBusinessEntity
))
{
dynamics
.
add
(
new
LabelValueDTO
(
"工作时间"
,
engineerBusinessEntity
.
getWorkOn
()
+
"-"
+
engineerBusinessEntity
.
getWorkOff
()));
}
else
{
dynamics
.
add
(
new
LabelValueDTO
(
"工作时间"
,
"08:00-18:00"
));
}
dynamics
.
add
(
new
LabelValueDTO
(
"交通工具"
,
VehicleEnum
.
getNameByValue
(
engineer
.
getVehicle
())));
List
<
String
>
orderIds
=
orderAppointments
.
stream
().
map
(
OrderInfoEntity:
:
getOrderId
).
collect
(
Collectors
.
toList
());
List
<
OrderInfoEntity
>
orderRequests
=
new
ArrayList
<>();
...
...
@@ -209,8 +233,22 @@ public class ScheduleServiceImpl implements ScheduleService {
item
.
setOrderStatusName
(
""
);
item
.
setDistance
(
o
.
getArriveDistance
());
item
.
setTimeType
(
"auto"
);
item
.
setExpectArriveDuration
(
o
.
getArriveElapsed
()
+
"分钟"
);
item
.
setArriveTime
(
null
);
if
(
Objects
.
nonNull
(
o
.
getArriveElapsed
()))
{
String
btime
=
null
;
String
etime
=
null
;
if
(
checkOrderIsFinish
(
o
.
getServiceStatus
()))
{
btime
=
getHourMinute
(
o
.
getActualStartTime
(),
-
o
.
getArriveElapsed
());
etime
=
getHourMinute
(
o
.
getActualStartTime
());
}
else
{
btime
=
getHourMinute
(
o
.
getPlanStartTime
(),
-
o
.
getArriveElapsed
());
etime
=
getHourMinute
(
o
.
getPlanStartTime
());
}
//在途时间段
item
.
setExpectArriveDuration
(
String
.
format
(
"%s-%s"
,
btime
,
etime
));
}
item
.
setArriveTime
(
DateUtil
.
format
(
o
.
getActualStartTime
(),
"HH:mm"
));
item
.
setArriveDuration
(
null
);
if
(
ObjectUtil
.
isAllNotEmpty
(
o
.
getPlanStartTime
(),
o
.
getPlanEndTime
()))
{
item
.
setExpectWorkDuration
(
LocalDateTimeUtil
.
between
(
o
.
getPlanStartTime
(),
o
.
getPlanEndTime
(),
ChronoUnit
.
MINUTES
)
+
"分钟"
);
}
...
...
@@ -239,6 +277,19 @@ public class ScheduleServiceImpl implements ScheduleService {
return
Result
.
success
(
res
);
}
private
boolean
checkOrderIsFinish
(
String
serviceStatus
)
{
String
[]
array
=
{
"FINISHED"
,
"UNFINISHED"
};
return
Arrays
.
asList
(
array
).
contains
(
serviceStatus
);
}
private
String
getHourMinute
(
LocalDateTime
time
)
{
return
this
.
getHourMinute
(
time
,
0
);
}
private
String
getHourMinute
(
LocalDateTime
time
,
int
deltaMinute
)
{
return
DateUtils
.
formatDateTime
(
time
.
plusMinutes
(
deltaMinute
),
"HH:mm"
);
}
public
Page
<
OrgTeamEntity
>
queryOrgTeams
(
long
page
,
long
size
,
String
levelType
,
List
<
String
>
levelIds
)
{
Pageable
pageable
=
PageRequest
.
of
((
int
)
page
,
(
int
)
size
);
...
...
project-order/src/main/java/com/dituhui/pea/order/utils/CommonUtil.java
View file @
185fa73
...
...
@@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil;
import
com.dituhui.pea.util.DateUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.util.*
;
...
...
@@ -74,7 +76,20 @@ public class CommonUtil {
public
static
Integer
isSpecial
(
LocalTime
expectBegin
,
LocalTime
expectEnd
,
String
strOn
,
String
strOff
)
{
LocalTime
workOn
=
LocalTime
.
parse
(
strOn
+
":00"
,
DateUtil
.
TIME_FORMATTER
);
LocalTime
workOff
=
LocalTime
.
parse
(
strOff
+
":00"
,
DateUtil
.
TIME_FORMATTER
);
if
(
expectBegin
.
isBefore
(
workOn
)
||
expectEnd
.
isAfter
(
workOff
))
{
if
(
expectBegin
.
isBefore
(
workOn
)
||
expectBegin
.
isAfter
(
workOff
)
||
expectEnd
.
isAfter
(
workOff
)
||
expectEnd
.
isBefore
(
workOn
))
{
return
1
;
}
return
0
;
}
/**
* 判断是否cutoff
*
* @return
*/
public
static
Integer
isCutoff
(
LocalDateTime
localTime
,
String
strOff
)
{
LocalDateTime
workOff
=
LocalDate
.
now
().
atTime
(
Integer
.
parseInt
(
strOff
.
split
(
":"
)[
0
]),
Integer
.
parseInt
(
strOff
.
split
(
":"
)[
1
]),
0
);
if
(
localTime
.
isAfter
(
workOff
))
{
return
1
;
}
return
0
;
...
...
project-order/src/main/java/com/dituhui/pea/order/utils/EncryptionUtil.java
0 → 100644
View file @
185fa73
This diff is collapsed.
Click to expand it.
project-order/src/main/resources/application.yaml
View file @
185fa73
...
...
@@ -65,6 +65,7 @@ SaaS:
ak
:
64e1cde3f9144bfb850b7d37c51af559
userAccount
:
sMvf3yZWA69lKcvlgKcOHQ==
userPassword
:
qjOHxpQPXLnJP+Jq1CZGBQ==
encryptionPassWord
:
64e1cde3f9144bfb
bean
:
server
:
https://bean-test.bshg.com.cn
app-key
:
eDZEhTCxAcM9paRfwPjAM7RGkfmbf15S_PEA
...
...
project-user/src/main/java/com/dituhui/pea/user/controller/RoleController.java
View file @
185fa73
...
...
@@ -58,8 +58,7 @@ public class RoleController implements IRole {
if
(
StringUtils
.
isBlank
(
roleInfo
.
getId
()))
{
return
Result
.
failed
(
StatusCodeEnum
.
COMMON_PARAM_EMPTY
,
false
);
}
roleService
.
deleteRole
(
roleInfo
.
getId
());
return
Result
.
success
(
true
);
return
roleService
.
deleteRole
(
roleInfo
.
getId
());
}
@Override
...
...
project-user/src/main/java/com/dituhui/pea/user/service/RoleService.java
View file @
185fa73
...
...
@@ -125,15 +125,15 @@ public class RoleService {
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteRole
(
String
roleId
)
{
public
Result
deleteRole
(
String
roleId
)
{
// 查询角色是否存在
RoleEntity
roleEntity
=
roleDao
.
findById
(
roleId
).
orElse
(
null
);
if
(
ObjectUtil
.
isNull
(
roleEntity
))
{
throw
new
BusinessException
(
StatusCodeEnum
.
ROLE_DOES_NOT_EXIST
);
return
Result
.
failed
(
StatusCodeEnum
.
ROLE_DOES_NOT_EXIST
);
}
List
<
UserRoleEntity
>
roleEntities
=
userRoleDao
.
findByRoleId
(
roleId
);
if
(
CollectionUtils
.
isNotEmpty
(
roleEntities
))
{
throw
new
BusinessException
(
StatusCodeEnum
.
RESOURCE_USER_EXISTS_ROLE
);
return
Result
.
failed
(
StatusCodeEnum
.
RESOURCE_USER_EXISTS_ROLE
);
}
// 删除角色
roleDao
.
deleteById
(
roleId
);
...
...
@@ -141,6 +141,7 @@ public class RoleService {
userRoleDao
.
deleteByRoleId
(
roleId
);
// 删除权限和角色的关系
roleResourceDao
.
deleteByRoleId
(
roleId
);
return
Result
.
success
();
}
...
...
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