Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
O
operate-customer-service
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
沈振路
operate-customer-service
Commits
ea73777a
提交
ea73777a
authored
10月 28, 2022
作者:
沈振路
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into customer_service_SZlu
上级
9bec1cab
38050307
显示空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
87 行增加
和
23 行删除
+87
-23
CustomerServiceApplication.java
...ava/com/yaoyaozw/customer/CustomerServiceApplication.java
+1
-1
CustomerGraphics.java
...n/java/com/yaoyaozw/customer/entity/CustomerGraphics.java
+2
-0
RegisterUserEntity.java
...java/com/yaoyaozw/customer/entity/RegisterUserEntity.java
+1
-1
RegisterUserEntityMapper.java
...om/yaoyaozw/customer/mapper/RegisterUserEntityMapper.java
+14
-0
SchedulingTask.java
...java/com/yaoyaozw/customer/scheduling/SchedulingTask.java
+1
-0
AccountOrderServiceImpl.java
...oyaozw/customer/service/impl/AccountOrderServiceImpl.java
+29
-6
CustomerDelayPublishServiceImpl.java
...ustomer/service/impl/CustomerDelayPublishServiceImpl.java
+5
-3
CustomerGraphicsDelayServiceImpl.java
...stomer/service/impl/CustomerGraphicsDelayServiceImpl.java
+1
-3
CustomerGraphicsServiceImpl.java
...zw/customer/service/impl/CustomerGraphicsServiceImpl.java
+8
-4
WeChatServiceImpl.java
...zw/customer/service/wechat/service/WeChatServiceImpl.java
+5
-5
RegisterUserEntityMapper.xml
src/main/resources/mapper/RegisterUserEntityMapper.xml
+20
-0
没有找到文件。
src/main/java/com/yaoyaozw/customer/CustomerServiceApplication.java
浏览文件 @
ea73777a
...
...
@@ -12,7 +12,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* @date 2022/9/15 18:13
*/
@SpringBootApplication
//
@EnableScheduling
@EnableScheduling
@MapperScan
(
"com.yaoyaozw.customer.mapper"
)
@EnableFeignClients
@EnableAsync
...
...
src/main/java/com/yaoyaozw/customer/entity/CustomerGraphics.java
浏览文件 @
ea73777a
...
...
@@ -122,6 +122,8 @@ public class CustomerGraphics implements Serializable {
public
static
final
String
COL_POST_TIME
=
"post_time"
;
public
static
final
String
COL_SEND_STATUS
=
"send_status"
;
public
static
final
String
COL_CREATE_USER
=
"create_user"
;
public
static
final
String
COL_GMT_CREATE
=
"gmt_create"
;
...
...
src/main/java/com/yaoyaozw/customer/entity/RegisterUserEntity.java
浏览文件 @
ea73777a
...
...
@@ -94,7 +94,7 @@ public class RegisterUserEntity implements Serializable {
private
Date
customerPublish
;
/**
*
延时客服发送时间
*
人群包
*/
@TableField
(
value
=
"in_package"
)
private
String
inPackage
;
...
...
src/main/java/com/yaoyaozw/customer/mapper/RegisterUserEntityMapper.java
浏览文件 @
ea73777a
...
...
@@ -7,6 +7,7 @@ import com.yaoyaozw.customer.vo.customer.CrowdPackageUserVO;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.Date
;
import
java.util.List
;
@Mapper
...
...
@@ -58,5 +59,17 @@ public interface RegisterUserEntityMapper extends BaseMapper<RegisterUserEntity>
*/
List
<
AuthorizerInfo
>
existAppid
();
/**
* 根据appid找register用户
* @param appid
* @return
*/
List
<
RegisterUserEntity
>
findAllUserWithoutSetupId
(
String
appid
);
/**
* 找超时客服排期的活跃用户
* @param requestDate
* @return
*/
List
<
RegisterUserEntity
>
findAllExpiredDelayPublish
(
@Param
(
"requestDate"
)
Date
requestDate
);
}
\ No newline at end of file
src/main/java/com/yaoyaozw/customer/scheduling/SchedulingTask.java
浏览文件 @
ea73777a
...
...
@@ -46,6 +46,7 @@ public class SchedulingTask {
/**
* 拉取付费订单(每15min一次)
*/
@Scheduled
(
cron
=
"0 5/15 * * * *"
)
public
void
retrieveOrderData
(){
Calendar
calendar
=
Calendar
.
getInstance
();
...
...
src/main/java/com/yaoyaozw/customer/service/impl/AccountOrderServiceImpl.java
浏览文件 @
ea73777a
...
...
@@ -30,8 +30,14 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
@Override
public
void
activeUserByOrder
(
IntegrationRequestDTO
integrationRequestDTO
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
integrationRequestDTO
.
getRequestDate
());
//间隔5min拉看板订单
calendar
.
add
(
Calendar
.
MINUTE
,-
5
);
//获取runtime订单最新一版数据
List
<
AccountOrder
>
runtimeOrders
=
baseMapper
.
findNewestRuntimeAccountOrder
(
integrationRequestDTO
.
getRequestDat
e
());
List
<
AccountOrder
>
runtimeOrders
=
baseMapper
.
findNewestRuntimeAccountOrder
(
calendar
.
getTim
e
());
Set
<
String
>
openIdSet
=
runtimeOrders
.
stream
().
map
(
AccountOrder:
:
getOpenId
).
collect
(
Collectors
.
toSet
());
...
...
@@ -44,7 +50,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
if
(!
userList
.
isEmpty
()){
Set
<
String
>
appIdSet
=
userList
.
stream
().
map
(
RegisterUserEntity:
:
getAppId
).
collect
(
Collectors
.
toSet
());
List
<
CustomerDelayItemVO
>
allDelayCustomerMessage
=
customerGraphicsDelayService
.
findAllDelayCustomerSort
(
appIdSet
,
1
);
List
<
CustomerDelayItemVO
>
allDelayCustomerMessage
=
customerGraphicsDelayService
.
findAllDelayCustomerSort
(
appIdSet
,
3
);
Map
<
String
,
Map
<
Integer
,
Long
>>
delayMessageMap
=
allDelayCustomerMessage
.
stream
().
collect
(
Collectors
.
groupingBy
(
CustomerDelayItemVO:
:
getAppId
,
Collectors
.
toMap
(
CustomerDelayItemVO:
:
getPostSort
,
CustomerDelayItemVO:
:
getTimeInterval
,
(
v1
,
v2
)
->
v2
)));
...
...
@@ -68,7 +74,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
//如果没有活跃时间,记录为首次活跃
registerUser
.
setFirstActive
(
lastFinishTime
);
//排期重置
delayCustomerManage
(
registerUser
,
lastFinishTime
,
delayMessageMap
);
delayCustomerManage
(
registerUser
,
lastFinishTime
,
integrationRequestDTO
.
getRequestDate
(),
delayMessageMap
);
}
//活跃时间重置
registerUser
.
setLastActive
(
lastFinishTime
);
...
...
@@ -110,7 +116,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
* 延时客服排期
* @param registerUserPublish
*/
public
void
delayCustomerManage
(
RegisterUserEntity
registerUserPublish
,
Date
activeTime
,
Map
<
String
,
Map
<
Integer
,
Long
>>
delayMessageMap
){
public
void
delayCustomerManage
(
RegisterUserEntity
registerUserPublish
,
Date
activeTime
,
Date
currentDate
,
Map
<
String
,
Map
<
Integer
,
Long
>>
delayMessageMap
){
Map
<
Integer
,
Long
>
integerLongMap
=
delayMessageMap
.
get
(
registerUserPublish
.
getAppId
());
...
...
@@ -118,13 +124,30 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
//找初始排期间隔时间
Long
firstDelayMessage
=
integerLongMap
.
get
(
1
);
Date
publishTime
=
new
Date
(
activeTime
.
getTime
()
+
firstDelayMessage
);
Long
secondDelayMessage
=
integerLongMap
.
get
(
2
);
Long
thirdDelayMessage
=
integerLongMap
.
get
(
3
);
//如果活跃时间和当前的间隔大于首次排期间隔,则说明排1就扫不到了;
if
(
firstDelayMessage
!=
null
&&
currentDate
.
getTime
()-
activeTime
.
getTime
()<
firstDelayMessage
){
//时间戳精确到分
Date
publishTime
=
new
Date
((
activeTime
.
getTime
()/(
60
*
1000
))*
60
*
1000
+
firstDelayMessage
);
registerUserPublish
.
setCustomerSort
(
1
);
registerUserPublish
.
setCustomerPublish
(
publishTime
);
}
else
if
(
secondDelayMessage
!=
null
&&
currentDate
.
getTime
()-
activeTime
.
getTime
()<
secondDelayMessage
){
Date
publishTime
=
new
Date
((
activeTime
.
getTime
()/(
60
*
1000
))*
60
*
1000
+
secondDelayMessage
);
registerUserPublish
.
setCustomerSort
(
2
);
registerUserPublish
.
setCustomerPublish
(
publishTime
);
//如果活跃时间和注册时间的间隔小于首次排期间隔,则说明首次没发,从1序列开始排;否则从2序列开始排
}
else
if
(
thirdDelayMessage
!=
null
){
Date
publishTime
=
new
Date
((
activeTime
.
getTime
()/(
60
*
1000
))*
60
*
1000
+
thirdDelayMessage
);
registerUserPublish
.
setCustomerSort
(
3
);
registerUserPublish
.
setCustomerPublish
(
publishTime
);
}
else
{
registerUserPublish
.
setCustomerSort
(-
1
);
}
}
}
...
...
src/main/java/com/yaoyaozw/customer/service/impl/CustomerDelayPublishServiceImpl.java
浏览文件 @
ea73777a
...
...
@@ -48,7 +48,7 @@ public class CustomerDelayPublishServiceImpl extends ServiceImpl<CustomerDelayPu
if
(!
allPostUser
.
isEmpty
()){
//号-用户
Map
<
String
,
List
<
CustomerDelayPublish
>>
userMap
=
allPostUser
.
stream
().
filter
(
a
->
a
.
getCustomerSort
()!=
null
).
collect
(
Collectors
.
groupingBy
(
CustomerDelayPublish:
:
getAppId
));
Map
<
String
,
Map
<
String
,
CustomerDelayPublish
>>
userMap
=
allPostUser
.
stream
().
filter
(
a
->
a
.
getCustomerSort
()!=
null
).
collect
(
Collectors
.
groupingBy
(
CustomerDelayPublish:
:
getAppId
,
Collectors
.
toMap
(
CustomerDelayPublish:
:
getOpenId
,
a
->
a
,(
v1
,
v2
)->
v1
)
));
//获取所有延时客服
List
<
CustomerDelayItemVO
>
allDelayCustomerMessage
=
customerGraphicsDelayService
.
findAllDelayCustomerSort
(
appidSet
,
null
);
...
...
@@ -62,7 +62,7 @@ public class CustomerDelayPublishServiceImpl extends ServiceImpl<CustomerDelayPu
Set
<
CustomerDelayItemVO
>
needUpdateCustomerDelay
=
new
HashSet
<>();
for
(
Map
.
Entry
<
String
,
List
<
CustomerDelayPublish
>>
userEntry
:
userMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
Map
<
String
,
CustomerDelayPublish
>>
userEntry
:
userMap
.
entrySet
())
{
String
appid
=
userEntry
.
getKey
();
//获取该号token
...
...
@@ -74,7 +74,9 @@ public class CustomerDelayPublishServiceImpl extends ServiceImpl<CustomerDelayPu
//该号下延时客服
Map
<
Integer
,
List
<
CustomerDelayItemVO
>>
delaySortMap
=
customerMap
.
get
(
appid
);
//所有的用户
List
<
CustomerDelayPublish
>
userList
=
userEntry
.
getValue
();
Map
<
String
,
CustomerDelayPublish
>
userPublishMap
=
userEntry
.
getValue
();
//去重
List
<
CustomerDelayPublish
>
userList
=
new
ArrayList
<>(
userPublishMap
.
values
())
;
if
(
delaySortMap
!=
null
&&!
delaySortMap
.
isEmpty
()){
//将所有待用延时客服收集
...
...
src/main/java/com/yaoyaozw/customer/service/impl/CustomerGraphicsDelayServiceImpl.java
浏览文件 @
ea73777a
...
...
@@ -97,13 +97,11 @@ public class CustomerGraphicsDelayServiceImpl extends ServiceImpl<CustomerGraphi
return
new
GenericsResult
<>(
false
,
builder
.
toString
());
}
boolean
isCreate
=
false
;
CustomerGraphicsDelay
customerGraphicsDelay
=
new
CustomerGraphicsDelay
();
BeanUtil
.
copyProperties
(
saveDto
,
customerGraphicsDelay
);
// 初始化操作信息
customerGraphicsDelay
.
initOperateInfo
(
tokenManager
.
getUserIdFromToken
(),
ObjectUtil
.
isNull
(
saveDto
.
getId
()));
if
(
ObjectUtil
.
isNull
(
customerGraphicsDelay
.
getId
()))
{
isCreate
=
true
;
long
id
=
snowflakeComponent
.
snowflakeId
();
localLog
.
info
(
"是新增, 新生成ID: {}"
,
id
);
customerGraphicsDelay
.
setId
(
id
);
...
...
@@ -115,7 +113,7 @@ public class CustomerGraphicsDelayServiceImpl extends ServiceImpl<CustomerGraphi
referralEntity
.
setMaterialGraphicsId
(
customerGraphicsDelay
.
getId
());
// 非自定义获取链接
if
(
isCreate
&&
!
referralEntity
.
getNewsType
().
equals
(-
1
))
{
if
(!
referralEntity
.
getNewsType
().
equals
(-
1
))
{
try
{
customerGraphicsDelay
.
setSendStatus
(
CustomerCommonConstant
.
SEND_STATUS_LINK_GETTING
);
localLog
.
info
(
"准备获取链接"
);
...
...
src/main/java/com/yaoyaozw/customer/service/impl/CustomerGraphicsServiceImpl.java
浏览文件 @
ea73777a
...
...
@@ -47,6 +47,9 @@ import com.yaoyaozw.customer.service.CustomerGraphicsService;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
static
java
.
util
.
stream
.
Collectors
.
collectingAndThen
;
import
static
java
.
util
.
stream
.
Collectors
.
toCollection
;
/**
* 客户图形服务impl
*
...
...
@@ -215,16 +218,17 @@ public class CustomerGraphicsServiceImpl extends ServiceImpl<CustomerGraphicsMap
public
void
sendCustomerMessage
(
IntegrationRequestDTO
integrationRequestDTO
)
{
Date
requestDate
=
integrationRequestDTO
.
getRequestDate
();
//todo:当前时刻发送的客服(需要加启用禁用)
List
<
CustomerGraphics
>
customerGraphicsList
=
list
(
new
QueryWrapper
<
CustomerGraphics
>().
eq
(
CustomerGraphics
.
COL_POST_TIME
,
requestDate
));
List
<
CustomerGraphics
>
customerGraphicsList
=
list
(
new
QueryWrapper
<
CustomerGraphics
>().
eq
(
CustomerGraphics
.
COL_POST_TIME
,
requestDate
)
.
eq
(
CustomerGraphics
.
COL_SEND_STATUS
,
9
)
);
for
(
CustomerGraphics
customerGraphics
:
customerGraphicsList
)
{
//人群包id
Long
packId
=
customerGraphics
.
getPackId
();
//根据人群包找人,并按appId分组
List
<
CrowdPackageUserVO
>
userList
=
registerUserEntityService
.
getCurrentInPackUserList
(
packId
,
false
);
Map
<
String
,
List
<
CrowdPackageUserVO
>>
appidUserMap
=
userList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrowdPackageUserVO:
:
getAppId
));
//去重
Map
<
String
,
List
<
CrowdPackageUserVO
>>
appidUserMap
=
userList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrowdPackageUserVO:
:
getAppId
,
Collectors
.
collectingAndThen
(
toCollection
(()
->
new
TreeSet
<>(
Comparator
.
comparing
(
CrowdPackageUserVO:
:
getOpenId
))),
ArrayList:
:
new
)));
//根据客服id找不同公众号的链接,并按appId分组
List
<
ReferralEntityVo
>
referralList
=
referralEntityService
.
findReferralByCustomerGraphicsId
(
customerGraphics
.
getId
());
...
...
src/main/java/com/yaoyaozw/customer/service/wechat/service/WeChatServiceImpl.java
浏览文件 @
ea73777a
...
...
@@ -98,19 +98,19 @@ public class WeChatServiceImpl implements WeChatService{
}
}
//用户首次活跃时间
Long
subscribeTimestamp
=
user
.
getFirstActive
().
getTime
();
Long
subscribeTimestamp
=
user
.
getFirstActive
()
!=
null
?
user
.
getFirstActive
().
getTime
():
user
.
getGmtCreate
()
.
getTime
();
Set
<
Integer
>
sortSet
=
delaySortMap
.
keySet
();
//找
最小
//找
大于当前序列的最小序列
Integer
newSort
=
sortSet
.
stream
().
filter
(
a
->
a
>
user
.
getCustomerSort
()).
min
(
Comparator
.
naturalOrder
()).
orElse
(-
1
);
user
.
setCustomerSort
(
newSort
);
CustomerDelayItemVO
customerDelayItemVO
=
delaySortMap
.
get
(
newSort
)!=
null
?
delaySortMap
.
get
(
newSort
).
get
(
0
):
null
;
//下次排期
if
(
customerDelayItemVO
!=
null
&&
customerDelayItemVO
.
getTimeInterval
()!=
null
){
user
.
setCustomerPublish
(
new
Date
(
subscribeTimestamp
+
customerDelayItemVO
.
getTimeInterval
()));
//时间戳舍秒和毫秒
user
.
setCustomerPublish
(
new
Date
(
(
subscribeTimestamp
/(
60
*
1000
))*
60
*
1000
+
customerDelayItemVO
.
getTimeInterval
()));
}
return
new
AsyncResult
<>(
user
);
}
...
...
src/main/resources/mapper/RegisterUserEntityMapper.xml
浏览文件 @
ea73777a
...
...
@@ -121,4 +121,23 @@
</select>
<resultMap
id=
"updateCustomerSortMap"
type=
"com.yaoyaozw.customer.entity.RegisterUserEntity"
>
<!--@mbg.generated-->
<!--@Table register_user_entity-->
<id
column=
"id"
jdbcType=
"BIGINT"
property=
"id"
/>
<result
column=
"app_id"
jdbcType=
"VARCHAR"
property=
"appId"
/>
<result
column=
"customer_sort"
jdbcType=
"INTEGER"
property=
"customerSort"
/>
<result
column=
"customer_publish"
jdbcType=
"TIMESTAMP"
property=
"customerPublish"
/>
<result
column=
"first_active"
jdbcType=
"TIMESTAMP"
property=
"firstActive"
/>
</resultMap>
<select
id=
"findAllExpiredDelayPublish"
resultMap=
"updateCustomerSortMap"
>
select id,app_id,customer_sort,customer_publish ,first_active from register_user_entity
where customer_sort > 0 AND first_active is not null and customer_publish
<
#{requestDate}
</select>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论