Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
380a8bfe
提交
380a8bfe
authored
8月 12, 2024
作者:
jiangwujie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feature(电子围栏): 增加测试方法
上级
e8f79b5f
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
280 行增加
和
5 行删除
+280
-5
OrderChildEnum.java
...c/main/java/com/clx/performance/enums/OrderChildEnum.java
+2
-2
OrderChildServiceImpl.java
...m/clx/performance/service/impl/OrderChildServiceImpl.java
+4
-1
OrderChildServiceImpl2Test.java
.../performance/service/impl/OrderChildServiceImpl2Test.java
+274
-2
没有找到文件。
performance-api/src/main/java/com/clx/performance/enums/OrderChildEnum.java
浏览文件 @
380a8bfe
...
...
@@ -260,8 +260,8 @@ public enum OrderChildEnum {
@AllArgsConstructor
public
enum
ExitNoticeStatus
{
NOT_NOTIFIED
(
0
,
"
到达货源地
"
),
NOTIFIED
(
1
,
"
驶入
"
);
NOT_NOTIFIED
(
0
,
"
未通知
"
),
NOTIFIED
(
1
,
"
已通知
"
);
private
final
Integer
code
;
private
final
String
name
;
...
...
performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
浏览文件 @
380a8bfe
...
...
@@ -3302,6 +3302,7 @@ public class OrderChildServiceImpl implements OrderChildService {
//超出货源地x公里范围了,且通知状态为未通知
// 到达货源地
if
(
Objects
.
equals
(
child
.
getStatus
(),
OrderChildEnum
.
Status
.
ARRIVE_SEND
.
getCode
()))
{
log
.
info
(
"{}超出货源地x公里范围了,运单{}为到达货源地状态,发送短信"
,
truckNo
,
childNo
);
sendLoadSms
(
child
.
getDriverMobile
(),
child
.
getTruckNo
(),
child
.
getChildNo
());
}
// 已装货
...
...
@@ -3314,6 +3315,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 修改 通知状态 为已通知
child
.
setExitNoticeStatus
(
OrderChildEnum
.
ExitNoticeStatus
.
NOTIFIED
.
getCode
());
child
.
setEnterExitSendStatus
(
OrderChildEnum
.
EnterExitSendStatus
.
DRIVE_OUT
.
getCode
());
orderChildDao
.
updateEntityByKey
(
child
);
}
}
else
{
...
...
@@ -3325,6 +3327,7 @@ public class OrderChildServiceImpl implements OrderChildService {
child
.
setExitNoticeStatus
(
OrderChildEnum
.
ExitNoticeStatus
.
NOT_NOTIFIED
.
getCode
());
// 状态改为驶入货源地
child
.
setEnterExitSendStatus
(
OrderChildEnum
.
EnterExitSendStatus
.
DRIVE_IN
.
getCode
());
orderChildDao
.
updateEntityByKey
(
child
);
}
}
}
...
...
@@ -3342,7 +3345,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* @param truckNo 当前运单关联车牌号
* @param childNo 运单单号
*/
pr
ivate
void
sendLoadSms
(
String
mobile
,
String
truckNo
,
String
childNo
)
{
pr
otected
void
sendLoadSms
(
String
mobile
,
String
truckNo
,
String
childNo
)
{
AliSmsMessageReq
req
=
new
AliSmsMessageReq
();
// 模板CODE
//SMS_470795021
...
...
performance-web/src/test/java/com/clx/performance/service/impl/OrderChildServiceImpl2Test.java
浏览文件 @
380a8bfe
package
com
.
clx
.
performance
.
service
.
impl
;
import
com.clx.message.feign.ClxMessageOpenapiFeign
;
import
com.clx.performance.config.ClxMessageConfig
;
import
com.clx.performance.config.LoadAppConfig
;
import
com.clx.performance.constant.RedisConstants
;
import
com.clx.performance.dao.OrderChildDao
;
import
com.clx.performance.dao.OrderGoodsDao
;
import
com.clx.performance.dto.gd.GdRouteDTO
;
import
com.clx.performance.dto.zjxl.TruckTraceDTO
;
import
com.clx.performance.enums.OrderChildEnum
;
import
com.clx.performance.model.App
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.service.DriverNoticeConfigService
;
import
com.clx.performance.utils.gd.GdService
;
import
com.clx.performance.vo.pc.DriverNoticeConfigVO
;
import
com.msl.common.base.Optional
;
import
com.msl.common.open.OpenClient
;
import
com.msl.common.result.Result
;
import
com.purchase.manage.dto.SupervisionLoadInfoDto
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.Mockito
;
import
org.mockito.junit.jupiter.MockitoExtension
;
import
org.mockito.junit.jupiter.MockitoSettings
;
import
org.mockito.quality.Strictness
;
import
org.springframework.data.redis.core.HashOperations
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyList
;
import
static
org
.
mockito
.
Mockito
.
when
;
@ExtendWith
(
MockitoExtension
.
class
)
@MockitoSettings
(
strictness
=
Strictness
.
LENIENT
)
public
class
OrderChildServiceImpl2Test
{
@Mock
private
RedisTemplate
redisTemplate
;
@Mock
private
OrderGoodsDao
orderGoodsDao
;
@Mock
private
HashOperations
<
String
,
String
,
TruckTraceDTO
>
hashOps
;
@Mock
private
DriverNoticeConfigService
driverNoticeConfigService
;
...
...
@@ -27,6 +57,19 @@ public class OrderChildServiceImpl2Test {
@InjectMocks
private
OrderChildServiceImpl
orderChildService
;
@Mock
private
OrderChildDao
orderChildDao
;
@Mock
private
GdService
gdService
;
@Mock
private
ClxMessageConfig
messageConfig
;
@Mock
private
ClxMessageOpenapiFeign
clxMessageOpenapiFeign
;
@Mock
private
LoadAppConfig
appConfig
;
@BeforeEach
void
setUp
()
{
// Setup common mock interactions here if any
...
...
@@ -49,4 +92,234 @@ public class OrderChildServiceImpl2Test {
orderChildService
.
orderChildMessageNotice
();
}
}
\ No newline at end of file
/**
* 状态为到达货源地,超出范围,发短信,修改状态,修改已发短信状态
*/
@Test
void
testOrderChildMessageNoticeListConfigEnabled
()
{
//模拟两个运单
List
<
OrderChild
>
mockOrderChildList
=
new
ArrayList
<>();
OrderChild
child1
=
new
OrderChild
();
child1
.
setChildNo
(
"childNo1"
);
child1
.
setOrderGoodsNo
(
"orderGoods1"
);
child1
.
setTruckNo
(
"truckNo1"
);
child1
.
setRemoveLoadLimitStatus
(
0
);
child1
.
setExitNoticeStatus
(
0
);
//到达货源地
child1
.
setStatus
(
OrderChildEnum
.
Status
.
ARRIVE_SEND
.
getCode
());
child1
.
setDriverMobile
(
"12345678901"
);
mockOrderChildList
.
add
(
child1
);
when
(
orderChildDao
.
listOrderChild
(
anyList
(),
any
(),
any
())).
thenReturn
(
mockOrderChildList
);
Map
<
String
,
TruckTraceDTO
>
truckTraceMap
=
new
HashMap
<>();
TruckTraceDTO
truckTraceDTO
=
new
TruckTraceDTO
();
truckTraceDTO
.
setLocation
(
new
BigDecimal
[]{
BigDecimal
.
ONE
,
BigDecimal
.
TEN
});
truckTraceDTO
.
setTruckNo
(
"truckNo1"
);
truckTraceMap
.
put
(
"truckNo1"
,
truckTraceDTO
);
when
(
redisTemplate
.
opsForHash
()).
thenReturn
(
hashOps
);
when
(
hashOps
.
entries
(
RedisConstants
.
ZJXL_TRUCK_TRACE_LIST
)).
thenReturn
(
truckTraceMap
);
OrderGoods
orderGoods
=
new
OrderGoods
();
//货单
when
(
orderGoodsDao
.
getByOrderGoodsNo
(
child1
.
getOrderGoodsNo
())).
thenReturn
(
Optional
.
of
(
orderGoods
));
when
(
driverNoticeConfigService
.
listConfig
()).
thenReturn
(
mockDriverNoticeConfigVO
());
// gdRoute
GdRouteDTO
gdRoute
=
new
GdRouteDTO
();
//设置3000 ,超出提醒范围了
gdRoute
.
setDistance
(
3000
);
// 假设高德服务返回了一个有效的路线
Mockito
.
when
(
gdService
.
getRoute
(
any
(),
any
(),
any
(),
any
())).
thenReturn
(
Collections
.
singletonList
(
gdRoute
));
// 调用方法
orderChildService
.
orderChildMessageNotice
();
//验证运单状态
assertEquals
(
child1
.
getEnterExitSendStatus
(),
OrderChildEnum
.
EnterExitSendStatus
.
DRIVE_OUT
.
getCode
());
assertEquals
(
child1
.
getExitNoticeStatus
(),
OrderChildEnum
.
ExitNoticeStatus
.
NOTIFIED
.
getCode
());
//看日志为已发短信
}
/**
* 状态为已装货,超出范围,发短信,修改状态,修改已发短信状态
*/
@Test
void
testOrderChildMessageNoticeListConfigEnabled2
()
{
//模拟两个运单
List
<
OrderChild
>
mockOrderChildList
=
new
ArrayList
<>();
OrderChild
child1
=
new
OrderChild
();
child1
.
setChildNo
(
"childNo1"
);
child1
.
setOrderGoodsNo
(
"orderGoods1"
);
child1
.
setTruckNo
(
"truckNo1"
);
child1
.
setRemoveLoadLimitStatus
(
0
);
child1
.
setExitNoticeStatus
(
0
);
//到达货源地
child1
.
setStatus
(
OrderChildEnum
.
Status
.
LOAD
.
getCode
());
child1
.
setDriverMobile
(
"12345678901"
);
mockOrderChildList
.
add
(
child1
);
when
(
orderChildDao
.
listOrderChild
(
anyList
(),
any
(),
any
())).
thenReturn
(
mockOrderChildList
);
Map
<
String
,
TruckTraceDTO
>
truckTraceMap
=
new
HashMap
<>();
TruckTraceDTO
truckTraceDTO
=
new
TruckTraceDTO
();
truckTraceDTO
.
setLocation
(
new
BigDecimal
[]{
BigDecimal
.
ONE
,
BigDecimal
.
TEN
});
truckTraceDTO
.
setTruckNo
(
"truckNo1"
);
truckTraceMap
.
put
(
"truckNo1"
,
truckTraceDTO
);
when
(
redisTemplate
.
opsForHash
()).
thenReturn
(
hashOps
);
when
(
hashOps
.
entries
(
RedisConstants
.
ZJXL_TRUCK_TRACE_LIST
)).
thenReturn
(
truckTraceMap
);
OrderGoods
orderGoods
=
new
OrderGoods
();
//货单
when
(
orderGoodsDao
.
getByOrderGoodsNo
(
child1
.
getOrderGoodsNo
())).
thenReturn
(
Optional
.
of
(
orderGoods
));
when
(
driverNoticeConfigService
.
listConfig
()).
thenReturn
(
mockDriverNoticeConfigVO
());
// gdRoute
GdRouteDTO
gdRoute
=
new
GdRouteDTO
();
//设置3000 ,超出提醒范围了
gdRoute
.
setDistance
(
3000
);
// 假设高德服务返回了一个有效的路线
Mockito
.
when
(
gdService
.
getRoute
(
any
(),
any
(),
any
(),
any
())).
thenReturn
(
Collections
.
singletonList
(
gdRoute
));
App
app
=
new
App
();
app
.
setAppNo
(
"appNo"
);
app
.
setAppKey
(
"appKey"
);
app
.
setCallback
(
"callback"
);
Mockito
.
when
(
appConfig
.
getPurchaseManageApp
()).
thenReturn
(
app
);
// 调用方法
orderChildService
.
orderChildMessageNotice
();
SupervisionLoadInfoDto
supervisionLoadInfoDto
=
new
SupervisionLoadInfoDto
();
supervisionLoadInfoDto
.
setTaskAddress
(
"aaaa"
);
supervisionLoadInfoDto
.
setTaskContracts
(
"bbbb"
);
supervisionLoadInfoDto
.
setTaskMobile
(
"18888888888"
);
Result
<
SupervisionLoadInfoDto
>
r
=
Result
.
ok
(
supervisionLoadInfoDto
);
// todo: jiangwujie 此处因为无法模拟静态方法,所以这个测试方法是不通过的, 有机会再说
Mockito
.<
Result
<
SupervisionLoadInfoDto
>>
when
(
OpenClient
.
doAction
(
any
(),
any
())).
thenReturn
(
r
);
//验证运单状态
assertEquals
(
child1
.
getEnterExitSendStatus
(),
OrderChildEnum
.
EnterExitSendStatus
.
DRIVE_OUT
.
getCode
());
assertEquals
(
child1
.
getExitNoticeStatus
(),
OrderChildEnum
.
ExitNoticeStatus
.
NOTIFIED
.
getCode
());
}
/**
* 验证取消监装限制
*
* @return
*/
@Test
public
void
test_orderChildMessageNotice_removeLimit
()
throws
Exception
{
//模拟两个运单
List
<
OrderChild
>
mockOrderChildList
=
new
ArrayList
<>();
OrderChild
child1
=
new
OrderChild
();
child1
.
setChildNo
(
"childNo1"
);
child1
.
setOrderGoodsNo
(
"orderGoods1"
);
child1
.
setTruckNo
(
"truckNo1"
);
child1
.
setRemoveLoadLimitStatus
(
0
);
child1
.
setExitNoticeStatus
(
0
);
child1
.
setEnterExitSendStatus
(
OrderChildEnum
.
EnterExitSendStatus
.
INIT
.
getCode
());
child1
.
setRemoveLoadLimitStatus
(
OrderChildEnum
.
RemoveLoadLimitStatus
.
REMOVED
.
getCode
());
//到达货源地
child1
.
setStatus
(
OrderChildEnum
.
Status
.
ARRIVE_SEND
.
getCode
());
child1
.
setDriverMobile
(
"12345678901"
);
mockOrderChildList
.
add
(
child1
);
when
(
orderChildDao
.
listOrderChild
(
anyList
(),
any
(),
any
())).
thenReturn
(
mockOrderChildList
);
Map
<
String
,
TruckTraceDTO
>
truckTraceMap
=
new
HashMap
<>();
TruckTraceDTO
truckTraceDTO
=
new
TruckTraceDTO
();
truckTraceDTO
.
setLocation
(
new
BigDecimal
[]{
BigDecimal
.
ONE
,
BigDecimal
.
TEN
});
truckTraceDTO
.
setTruckNo
(
"truckNo1"
);
truckTraceMap
.
put
(
"truckNo1"
,
truckTraceDTO
);
when
(
redisTemplate
.
opsForHash
()).
thenReturn
(
hashOps
);
when
(
hashOps
.
entries
(
RedisConstants
.
ZJXL_TRUCK_TRACE_LIST
)).
thenReturn
(
truckTraceMap
);
OrderGoods
orderGoods
=
new
OrderGoods
();
//货单
when
(
orderGoodsDao
.
getByOrderGoodsNo
(
child1
.
getOrderGoodsNo
())).
thenReturn
(
Optional
.
of
(
orderGoods
));
when
(
driverNoticeConfigService
.
listConfig
()).
thenReturn
(
mockDriverNoticeConfigVO
());
// 调用方法
orderChildService
.
orderChildMessageNotice
();
//验证运单状态
assertEquals
(
child1
.
getEnterExitSendStatus
(),
OrderChildEnum
.
EnterExitSendStatus
.
INIT
.
getCode
());
assertEquals
(
child1
.
getExitNoticeStatus
(),
OrderChildEnum
.
ExitNoticeStatus
.
NOT_NOTIFIED
.
getCode
());
//看日志为已发短信
}
/**
* 状态为到达货源地,未超出范围,修改驶入驶出状态,修改通知状态
*/
@Test
void
testOrderChildMessageNotice_inRange
()
{
//模拟两个运单
List
<
OrderChild
>
mockOrderChildList
=
new
ArrayList
<>();
OrderChild
child1
=
new
OrderChild
();
child1
.
setChildNo
(
"childNo1"
);
child1
.
setOrderGoodsNo
(
"orderGoods1"
);
child1
.
setTruckNo
(
"truckNo1"
);
//驶离
child1
.
setEnterExitSendStatus
(
OrderChildEnum
.
EnterExitSendStatus
.
DRIVE_OUT
.
getCode
());
child1
.
setRemoveLoadLimitStatus
(
0
);
child1
.
setExitNoticeStatus
(
1
);
//到达货源地
child1
.
setStatus
(
OrderChildEnum
.
Status
.
ARRIVE_SEND
.
getCode
());
child1
.
setDriverMobile
(
"12345678901"
);
mockOrderChildList
.
add
(
child1
);
when
(
orderChildDao
.
listOrderChild
(
anyList
(),
any
(),
any
())).
thenReturn
(
mockOrderChildList
);
Map
<
String
,
TruckTraceDTO
>
truckTraceMap
=
new
HashMap
<>();
TruckTraceDTO
truckTraceDTO
=
new
TruckTraceDTO
();
truckTraceDTO
.
setLocation
(
new
BigDecimal
[]{
BigDecimal
.
ONE
,
BigDecimal
.
TEN
});
truckTraceDTO
.
setTruckNo
(
"truckNo1"
);
truckTraceMap
.
put
(
"truckNo1"
,
truckTraceDTO
);
when
(
redisTemplate
.
opsForHash
()).
thenReturn
(
hashOps
);
when
(
hashOps
.
entries
(
RedisConstants
.
ZJXL_TRUCK_TRACE_LIST
)).
thenReturn
(
truckTraceMap
);
OrderGoods
orderGoods
=
new
OrderGoods
();
//货单
when
(
orderGoodsDao
.
getByOrderGoodsNo
(
child1
.
getOrderGoodsNo
())).
thenReturn
(
Optional
.
of
(
orderGoods
));
when
(
driverNoticeConfigService
.
listConfig
()).
thenReturn
(
mockDriverNoticeConfigVO
());
// gdRoute
GdRouteDTO
gdRoute
=
new
GdRouteDTO
();
// 未超出范围
gdRoute
.
setDistance
(
1000
);
// 假设高德服务返回了一个有效的路线
Mockito
.
when
(
gdService
.
getRoute
(
any
(),
any
(),
any
(),
any
())).
thenReturn
(
Collections
.
singletonList
(
gdRoute
));
// 调用方法
orderChildService
.
orderChildMessageNotice
();
//验证运单状态 -> 驶入
assertEquals
(
child1
.
getEnterExitSendStatus
(),
OrderChildEnum
.
EnterExitSendStatus
.
DRIVE_IN
.
getCode
());
// 通知状态改为未通知
assertEquals
(
child1
.
getExitNoticeStatus
(),
OrderChildEnum
.
ExitNoticeStatus
.
NOT_NOTIFIED
.
getCode
());
}
private
DriverNoticeConfigVO
mockDriverNoticeConfigVO
()
{
DriverNoticeConfigVO
configVO
=
new
DriverNoticeConfigVO
();
//启用
configVO
.
setStatus
(
1
);
//距离2公里
configVO
.
setNoticeTriggerDistance
(
new
BigDecimal
(
2
));
return
configVO
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论