Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
haoban-manage3.0
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
haoban3.0
haoban-manage3.0
Commits
b1e0a158
Commit
b1e0a158
authored
Jun 25, 2024
by
徐高华
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into 'feature/xgh/240625上线'
Master See merge request
!1953
parents
6927181a
7377271d
Hide whitespace changes
Inline
Side-by-side
Showing
60 changed files
with
3893 additions
and
40 deletions
+3893
-40
WxUserAddLogQDTO.java
...m/gic/haoban/manage/api/dto/qdto/hm/WxUserAddLogQDTO.java
+3
-3
TriggerCustomerChannelType.java
.../manage/api/enums/content/TriggerCustomerChannelType.java
+3
-2
ExternalClerkRelatedApiService.java
...an/manage/api/service/ExternalClerkRelatedApiService.java
+3
-1
TabHaobanExternalClerkRelatedMapper.java
...rvice/dao/mapper/TabHaobanExternalClerkRelatedMapper.java
+3
-1
HoloDataSource.java
...anage/service/dao/mapper/content/holo/HoloDataSource.java
+64
-7
TabHaobanInteractRecord.java
...anage/service/entity/content/TabHaobanInteractRecord.java
+1
-1
TabHaobanTriggerCustomerDetail.java
...ervice/entity/content/TabHaobanTriggerCustomerDetail.java
+1
-1
TabWxUserAddLog.java
.../gic/haoban/manage/service/entity/hm/TabWxUserAddLog.java
+3
-3
TriggerCustomerDetailBO.java
...nage/service/pojo/bo/content/TriggerCustomerDetailBO.java
+1
-1
InteractRecordMessageBO.java
...vice/pojo/bo/content/message/InteractRecordMessageBO.java
+6
-1
MessageConvertHelper.java
...service/service/content/adaptor/MessageConvertHelper.java
+18
-0
ExternalClerkRelatedServiceImpl.java
...service/service/impl/ExternalClerkRelatedServiceImpl.java
+5
-5
StaffClerkRelationServiceImpl.java
...e/service/service/impl/StaffClerkRelationServiceImpl.java
+22
-2
ExternalClerkRelatedApiServiceImpl.java
.../service/out/impl/ExternalClerkRelatedApiServiceImpl.java
+6
-0
MemberUnionidRelatedApiServiceImpl.java
.../service/out/impl/MemberUnionidRelatedApiServiceImpl.java
+2
-2
TabHaobanExternalClerkRelatedMapper.xml
.../resources/mapper/TabHaobanExternalClerkRelatedMapper.xml
+14
-2
EventTrackingController.java
...haoban/manage/web/controller/EventTrackingController.java
+334
-0
WechatWorkController.java
...ic/haoban/manage/web/controller/WechatWorkController.java
+389
-0
GlobalExceptionHandler.java
...c/haoban/manage/web/exception/GlobalExceptionHandler.java
+7
-0
WechatEventTrackingClerkDetailHandle.java
...nage/web/handle/WechatEventTrackingClerkDetailHandle.java
+78
-0
WechatEventTrackingStoreGroupHandle.java
...anage/web/handle/WechatEventTrackingStoreGroupHandle.java
+70
-0
WechatWorkLostClerkHandle.java
...c/haoban/manage/web/handle/WechatWorkLostClerkHandle.java
+101
-0
WechatWorkLostDetailHandle.java
.../haoban/manage/web/handle/WechatWorkLostDetailHandle.java
+83
-0
WechatWorkLostStoreGroupHandle.java
...ban/manage/web/handle/WechatWorkLostStoreGroupHandle.java
+74
-0
WechatEventTrackingClerkDetailQO.java
...eb/qo/eventtracking/WechatEventTrackingClerkDetailQO.java
+115
-0
WechatEventTrackingStoreGroupQO.java
...web/qo/eventtracking/WechatEventTrackingStoreGroupQO.java
+90
-0
WechatOverviewQO.java
.../haoban/manage/web/qo/eventtracking/WechatOverviewQO.java
+37
-0
StoreGroupCommonQO.java
...c/haoban/manage/web/qo/wechatwork/StoreGroupCommonQO.java
+63
-0
WechatWorkLostClerkQO.java
...aoban/manage/web/qo/wechatwork/WechatWorkLostClerkQO.java
+99
-0
WechatWorkLostDetailQO.java
...oban/manage/web/qo/wechatwork/WechatWorkLostDetailQO.java
+114
-0
WechatWorkLostOverviewQO.java
...an/manage/web/qo/wechatwork/WechatWorkLostOverviewQO.java
+29
-0
WechatWorkLostStoreGroupQO.java
.../manage/web/qo/wechatwork/WechatWorkLostStoreGroupQO.java
+82
-0
AuthorizedUserUtils.java
.../com/gic/haoban/manage/web/utils/AuthorizedUserUtils.java
+21
-0
ConcurrencyUtils.java
...om/gic/haoban/manage/web/utils/data/ConcurrencyUtils.java
+78
-0
MapThreadHandlerRequest.java
...haoban/manage/web/utils/data/MapThreadHandlerRequest.java
+65
-0
StoreAuthUtils.java
.../com/gic/haoban/manage/web/utils/data/StoreAuthUtils.java
+327
-0
ThreadHandlerRequest.java
...ic/haoban/manage/web/utils/data/ThreadHandlerRequest.java
+39
-0
DateExpandUtils.java
...aoban/manage/web/utils/eventtracking/DateExpandUtils.java
+100
-0
TrendVO.java
...a/com/gic/haoban/manage/web/vo/eventtracking/TrendVO.java
+49
-0
ViewModuleVO.java
.../gic/haoban/manage/web/vo/eventtracking/ViewModuleVO.java
+35
-0
WechatEventTrackingClerkVO.java
...nage/web/vo/eventtracking/WechatEventTrackingClerkVO.java
+58
-0
WechatEventTrackingOverviewVO.java
...e/web/vo/eventtracking/WechatEventTrackingOverviewVO.java
+88
-0
WechatEventTrackingStoreGroupVO.java
...web/vo/eventtracking/WechatEventTrackingStoreGroupVO.java
+44
-0
DataPageVO.java
...a/com/gic/haoban/manage/web/vo/wechatwork/DataPageVO.java
+18
-0
StoreGroupCommonVO.java
...c/haoban/manage/web/vo/wechatwork/StoreGroupCommonVO.java
+25
-0
WechatWorkLostClerkVO.java
...aoban/manage/web/vo/wechatwork/WechatWorkLostClerkVO.java
+39
-0
WechatWorkLostDetailVO.java
...oban/manage/web/vo/wechatwork/WechatWorkLostDetailVO.java
+78
-0
WechatWorkLostStoreGroupVO.java
.../manage/web/vo/wechatwork/WechatWorkLostStoreGroupVO.java
+33
-0
WechatWorkLostVO.java
...gic/haoban/manage/web/vo/wechatwork/WechatWorkLostVO.java
+38
-0
spring-servlet.xml
...an-manage3-web/src/main/webapp/WEB-INF/spring-servlet.xml
+1
-1
CouponController.java
...haoban/manage/web/controller/coupon/CouponController.java
+140
-0
MemberMarketingController.java
...e/web/controller/marketing/MemberMarketingController.java
+15
-5
GicOrderController.java
...aoban/manage/web/controller/order/GicOrderController.java
+17
-1
ScanController.java
...gic/haoban/manage/web/controller/scan/ScanController.java
+135
-0
ContentMaterialShareQO.java
.../haoban/manage/web/qo/content/ContentMaterialShareQO.java
+14
-1
CoupCardClerkLogCountVO.java
.../haoban/manage/web/vo/coupon/CoupCardClerkLogCountVO.java
+49
-0
CoupCardClerkLogVO.java
...m/gic/haoban/manage/web/vo/coupon/CoupCardClerkLogVO.java
+191
-0
CoupCardVO.java
.../java/com/gic/haoban/manage/web/vo/coupon/CoupCardVO.java
+198
-0
ScanDetailVO.java
.../java/com/gic/haoban/manage/web/vo/scan/ScanDetailVO.java
+77
-0
dubbo-haoban-manage-wx.xml
...ge3-wx/src/main/webapp/WEB-INF/dubbo-haoban-manage-wx.xml
+1
-0
No files found.
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/dto/qdto/hm/WxUserAddLogQDTO.java
View file @
b1e0a158
...
...
@@ -21,7 +21,7 @@ public class WxUserAddLogQDTO implements Serializable{
private
String
staffName
;
private
String
clerkId
;
private
Integer
addWay
;
private
Date
qwAddTime
;
private
Long
qwAddTime
;
private
String
friendClerkId
;
private
String
friendStoreId
;
...
...
@@ -41,11 +41,11 @@ public class WxUserAddLogQDTO implements Serializable{
this
.
friendStoreId
=
friendStoreId
;
}
public
Date
getQwAddTime
()
{
public
Long
getQwAddTime
()
{
return
qwAddTime
;
}
public
void
setQwAddTime
(
Date
qwAddTime
)
{
public
void
setQwAddTime
(
Long
qwAddTime
)
{
this
.
qwAddTime
=
qwAddTime
;
}
...
...
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/enums/content/TriggerCustomerChannelType.java
View file @
b1e0a158
...
...
@@ -16,7 +16,8 @@ public enum TriggerCustomerChannelType {
CUSTOMER_GROUP
(
2
,
"客户群"
),
DIALOG_BOX
(
3
,
"对话框"
),
CONTENT_COPY
(
4
,
"复制文案"
),
CONTENT_DOWNLOAD
(
5
,
"下载素材"
)
CONTENT_DOWNLOAD
(
5
,
"下载素材"
),
RECOMMEND
(
6
,
"潜客推荐"
)
;
/**
...
...
@@ -24,7 +25,7 @@ public enum TriggerCustomerChannelType {
* @return
*/
public
static
List
<
Integer
>
showDescChannel
(){
return
Arrays
.
asList
(
PYQ
.
code
,
CUSTOMER_GROUP
.
code
,
DIALOG_BOX
.
code
);
return
Arrays
.
asList
(
PYQ
.
code
,
CUSTOMER_GROUP
.
code
,
DIALOG_BOX
.
code
,
RECOMMEND
.
code
);
}
public
static
TriggerCustomerChannelType
getInstance
(
Integer
code
)
{
...
...
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/service/ExternalClerkRelatedApiService.java
View file @
b1e0a158
...
...
@@ -199,7 +199,9 @@ public interface ExternalClerkRelatedApiService {
List
<
String
>
listMemberAndStaff
(
List
<
String
>
memberIdList
,
String
StaffId
,
String
enterpriseId
)
;
List
<
String
>
listMemberAndStaff
(
List
<
String
>
memberIdList
,
String
StaffId
,
String
enterpriseId
)
;
List
<
ExternalClerkRelatedDTO
>
listRelationMemberAndStaff
(
List
<
String
>
memberIdList
,
String
StaffId
,
String
enterpriseId
)
;
/**
*
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/TabHaobanExternalClerkRelatedMapper.java
View file @
b1e0a158
...
...
@@ -18,7 +18,7 @@ public interface TabHaobanExternalClerkRelatedMapper {
int
updateByPrimaryKeySelective
(
TabHaobanExternalClerkRelated
record
);
int
selectByClerkIdAndExternalUserId
(
@Param
(
"
clerkId"
)
String
clerk
Id
,
int
selectByClerkIdAndExternalUserId
(
@Param
(
"
staffId"
)
String
staff
Id
,
@Param
(
"externalUserId"
)
String
externalUserId
);
int
delByUserIdAndExternalUserId
(
@Param
(
"externalUserId"
)
String
externalUserId
,
@Param
(
"staffId"
)
String
staffId
);
...
...
@@ -397,6 +397,8 @@ public interface TabHaobanExternalClerkRelatedMapper {
List
<
String
>
listMemberAndStaff
(
@Param
(
"memberIdList"
)
List
<
String
>
memberIdList
,
@Param
(
"staffId"
)
String
staffId
,
@Param
(
"enterpriseId"
)
String
enterpriseId
);
List
<
TabHaobanExternalClerkRelated
>
listRelationMemberAndStaff
(
@Param
(
"memberIdList"
)
List
<
String
>
memberIdList
,
@Param
(
"staffId"
)
String
staffId
,
@Param
(
"enterpriseId"
)
String
enterpriseId
);
/**
* 查询成员的好友列表
*/
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/content/holo/HoloDataSource.java
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
service
.
dao
.
mapper
.
content
.
holo
;
import
cn.hutool.core.date.DateField
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.lang.Pair
;
import
cn.hutool.core.lang.TypeReference
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.json.JSON
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.hologres.client.HoloClient
;
import
com.alibaba.hologres.client.HoloConfig
;
import
com.ctrip.framework.apollo.Config
;
...
...
@@ -9,6 +18,12 @@ import org.springframework.beans.factory.DisposableBean;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.Map
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.ScheduledExecutorService
;
import
java.util.concurrent.TimeUnit
;
/**
* @Author MUSI
* @Date 2023/9/4 4:11 PM
...
...
@@ -19,22 +34,34 @@ import org.springframework.stereotype.Component;
@Component
public
class
HoloDataSource
implements
InitializingBean
,
DisposableBean
{
HoloClient
client
;
private
volatile
HoloClient
client
;
private
final
ScheduledExecutorService
scheduler
=
Executors
.
newScheduledThreadPool
(
1
);
public
synchronized
void
init
()
{
public
synchronized
void
init
()
{
try
{
Config
appConfig
=
ConfigService
.
getAppConfig
();
String
holoUrl
=
appConfig
.
getProperty
(
"holo.url"
,
""
);
String
holoUserName
=
appConfig
.
getProperty
(
"holo.username"
,
""
);
String
holoPassword
=
appConfig
.
getProperty
(
"holo.password"
,
""
);
Pair
<
String
,
String
>
holoAuth
=
getHoloAuth
();
if
(
holoAuth
==
null
)
{
log
.
info
(
"holo链接初始化获取授权信息失败"
);
return
;
}
String
holoUserName
=
holoAuth
.
getKey
();
String
holoPassword
=
holoAuth
.
getValue
();
HoloConfig
holoConfig
=
new
HoloConfig
();
holoConfig
.
setJdbcUrl
(
holoUrl
);
holoConfig
.
setUsername
(
holoUserName
);
holoConfig
.
setPassword
(
holoPassword
);
holoConfig
.
setConnectionMaxIdleMs
(
13000
);
this
.
client
=
new
HoloClient
(
holoConfig
);
this
.
client
.
setAsyncCommit
(
false
);
HoloClient
newClient
=
new
HoloClient
(
holoConfig
);
newClient
.
setAsyncCommit
(
false
);
if
(
this
.
client
!=
null
)
{
this
.
client
.
close
();
this
.
client
=
null
;
}
this
.
client
=
newClient
;
log
.
info
(
"holo链接初始化完成"
);
}
catch
(
Exception
ex
)
{
log
.
info
(
"初始化client 异常 >>>"
,
ex
);
...
...
@@ -46,6 +73,7 @@ public class HoloDataSource implements InitializingBean, DisposableBean {
if
(
client
!=
null
)
{
client
.
close
();
}
scheduler
.
shutdown
();
}
@Override
...
...
@@ -53,13 +81,42 @@ public class HoloDataSource implements InitializingBean, DisposableBean {
if
(
client
==
null
)
{
this
.
init
();
}
DateTime
now
=
DateUtil
.
date
();
Date
todayTwo
=
DateUtil
.
beginOfDay
(
now
).
offset
(
DateField
.
HOUR_OF_DAY
,
2
);
if
(
now
.
after
(
todayTwo
))
{
todayTwo
=
DateUtil
.
offsetDay
(
todayTwo
,
1
);
}
scheduler
.
scheduleAtFixedRate
(
this
::
reinitialize
,
DateUtil
.
between
(
now
,
todayTwo
,
DateUnit
.
SECOND
,
true
),
24
*
60
*
60
,
TimeUnit
.
SECONDS
);
}
public
HoloClient
getClient
()
{
if
(
this
.
client
==
null
)
{
this
.
init
();
synchronized
(
this
)
{
if
(
this
.
client
==
null
)
{
this
.
init
();
}
}
}
return
this
.
client
;
}
// 重新初始化方法
public
synchronized
void
reinitialize
()
{
this
.
init
();
}
private
Pair
<
String
,
String
>
getHoloAuth
()
{
//{"appId":"ops_key","cluster":"default","namespaceName":"key_config","configurations":{"demo_aliyun_key":"{\n \"LTAI5tMF2pZGShdULEYbyntc\": \"pC16FjCeklpXg18duNhJsEF91FvxpE\"\n}"},"releaseKey":"20240604165817-7632f04ffbe11f53"}
String
result
=
HttpUtil
.
get
(
"http://10.0.100.2:7080/configs/ops_key/default/key_config"
,
10000
);
JSON
json
=
JSONUtil
.
parse
(
result
);
String
authInfo
=
json
.
getByPath
(
"configurations.demo_aliyun_key"
,
String
.
class
);
JSON
authJson
=
JSONUtil
.
parseObj
(
authInfo
);
Map
<
String
,
String
>
map
=
authJson
.
toBean
(
new
TypeReference
<
Map
<
String
,
String
>>()
{});
for
(
Map
.
Entry
<
String
,
String
>
entry
:
map
.
entrySet
())
{
return
new
Pair
<>(
entry
.
getKey
(),
entry
.
getValue
());
}
return
null
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/entity/content/TabHaobanInteractRecord.java
View file @
b1e0a158
...
...
@@ -46,7 +46,7 @@ public class TabHaobanInteractRecord implements Serializable {
*/
private
String
storeId
;
/**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
* 线索来源 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
;6 潜客推荐
* @see TriggerCustomerChannelType
*/
private
Integer
channelSource
;
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/entity/content/TabHaobanTriggerCustomerDetail.java
View file @
b1e0a158
...
...
@@ -48,7 +48,7 @@ public class TabHaobanTriggerCustomerDetail implements Serializable {
private
String
storeId
;
/**
* 渠道类型 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
* 渠道类型 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
;6 潜客推荐
*/
private
Integer
channelType
;
/**
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/entity/hm/TabWxUserAddLog.java
View file @
b1e0a158
...
...
@@ -59,7 +59,7 @@ public class TabWxUserAddLog implements Serializable {
private
java
.
util
.
Date
updateTime
;
/**是否所有好友删除 1是0否*/
private
Integer
allDelFlag
;
private
Date
qwAddTime
;
private
Long
qwAddTime
;
private
String
friendClerkId
;
private
String
friendStoreId
;
...
...
@@ -80,11 +80,11 @@ public class TabWxUserAddLog implements Serializable {
this
.
friendStoreId
=
friendStoreId
;
}
public
Date
getQwAddTime
()
{
public
Long
getQwAddTime
()
{
return
qwAddTime
;
}
public
void
setQwAddTime
(
Date
qwAddTime
)
{
public
void
setQwAddTime
(
Long
qwAddTime
)
{
this
.
qwAddTime
=
qwAddTime
;
}
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/bo/content/TriggerCustomerDetailBO.java
View file @
b1e0a158
...
...
@@ -44,7 +44,7 @@ public class TriggerCustomerDetailBO implements Serializable {
*/
private
String
storeId
;
/**
* 渠道类型 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
* 渠道类型 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
;6 潜客推荐
*/
private
Integer
channelType
;
/**
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/bo/content/message/InteractRecordMessageBO.java
View file @
b1e0a158
...
...
@@ -41,7 +41,7 @@ public class InteractRecordMessageBO implements Serializable {
private
String
materialId
;
/**
* 来源渠道
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
* 线索来源 1朋友圈; 2客户群; 3 对话框;
6 潜客推荐;
0其他
*/
private
Integer
channelSource
;
/**
...
...
@@ -120,4 +120,9 @@ public class InteractRecordMessageBO implements Serializable {
* 3 基础线下单
*/
private
Integer
orderType
;
/**
* 商品类型 微盟、达摩
*/
private
String
goodsChannel
;
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/content/adaptor/MessageConvertHelper.java
View file @
b1e0a158
...
...
@@ -9,6 +9,8 @@ import org.apache.commons.collections.MapUtils;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Component
;
import
java.util.Objects
;
/**
* @Author MUSI
* @Date 2023/9/4 3:14 PM
...
...
@@ -71,6 +73,8 @@ public class MessageConvertHelper {
String
weimoFlag
=
cuspJson
.
getString
(
"is_weiMob"
);
interactRecordMessageBO
.
setWeimoGoodsFlag
(
this
.
convertWeimoFlag
(
weimoFlag
));
String
goodsChannel
=
cuspJson
.
getString
(
"goods_channel"
);
interactRecordMessageBO
.
setGoodsChannel
(
goodsChannel
);
String
goodsId
=
cuspJson
.
getString
(
"goods_id"
);
interactRecordMessageBO
.
setGoodsId
(
goodsId
);
String
goodsCode
=
cuspJson
.
getString
(
"goods_code"
);
...
...
@@ -93,6 +97,7 @@ public class MessageConvertHelper {
String
refUrl
=
syspJson
.
getString
(
"ref_url"
);
interactRecordMessageBO
.
setRefUrl
(
refUrl
);
dealRecordFilter
(
eventCode
,
interactRecordMessageBO
);
return
interactRecordMessageBO
;
}
...
...
@@ -110,11 +115,24 @@ public class MessageConvertHelper {
return
2
;
case
"对话框"
:
return
3
;
case
"潜客推荐"
:
return
6
;
default
:
return
0
;
}
}
private
void
dealRecordFilter
(
String
eventCode
,
InteractRecordMessageBO
interactRecordMessageBO
)
{
if
(
StringUtils
.
isBlank
(
eventCode
)
||
interactRecordMessageBO
==
null
)
{
return
;
}
// 商品详情页埋点如果是微盟类型商品不计算页面停留时长
if
(
Objects
.
equals
(
"store_goods_detail"
,
eventCode
)
&&
Objects
.
equals
(
"微盟"
,
interactRecordMessageBO
.
getGoodsChannel
()))
{
interactRecordMessageBO
.
setDurationTime
(
0
);
}
}
private
Integer
convertEventType
(
String
eventCode
)
{
if
(
StringUtils
.
isBlank
(
eventCode
))
{
return
null
;
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/ExternalClerkRelatedServiceImpl.java
View file @
b1e0a158
...
...
@@ -87,15 +87,15 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
@Override
public
void
insert
(
TabHaobanExternalClerkRelated
related
)
{
String
clerkId
=
related
.
getClerkId
()
;
String
staffId
=
related
.
getStaffId
()
;
String
externalUserId
=
related
.
getExternalUserId
();
String
lockKey
=
"addExternalUser:"
+
externalUserId
+
clerk
Id
;
int
num1
=
mapper
.
selectByClerkIdAndExternalUserId
(
clerk
Id
,
externalUserId
);
String
lockKey
=
"addExternalUser:"
+
externalUserId
+
staff
Id
;
int
num1
=
mapper
.
selectByClerkIdAndExternalUserId
(
staff
Id
,
externalUserId
);
if
(
num1
>
0
)
{
return
;
}
RedisUtil
.
lock
(
lockKey
,
2L
);
int
num2
=
mapper
.
selectByClerkIdAndExternalUserId
(
clerk
Id
,
externalUserId
);
int
num2
=
mapper
.
selectByClerkIdAndExternalUserId
(
staff
Id
,
externalUserId
);
logger
.
info
(
"好友数={},{},{}"
,
num1
,
num2
,
externalUserId
);
if
(
num2
==
0
)
{
String
uuId
=
StringUtil
.
randomUUID
();
...
...
@@ -168,7 +168,7 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
wxUserAddLogQDTO
.
setStaffId
(
related
.
getStaffId
());
wxUserAddLogQDTO
.
setClerkId
(
related
.
getClerkId
());
if
(
null
!=
related
.
getAddTime
())
{
wxUserAddLogQDTO
.
setQwAddTime
(
new
Date
(
related
.
getAddTime
()*
1000
));
wxUserAddLogQDTO
.
setQwAddTime
(
related
.
getAddTime
(
));
}
wxUserAddLogQDTO
.
setFriendClerkId
(
related
.
getClerkId
());
wxUserAddLogQDTO
.
setFriendStoreId
(
related
.
getStoreId
());
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/StaffClerkRelationServiceImpl.java
View file @
b1e0a158
...
...
@@ -99,14 +99,32 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
public
List
<
StaffClerkRelationDTO
>
listBindCodeByStaffId
(
List
<
String
>
enterpriseIdList
,
String
staffId
)
{
return
this
.
filterDelClerkList
(
mapper
.
listBindCodeByStaffId
(
enterpriseIdList
,
staffId
));
}
private
String
changeExistClerk
(
String
wxEnterpriseId
,
String
staffId
,
String
newClerkId
)
{
if
(
StringUtils
.
isBlank
(
newClerkId
))
{
return
newClerkId
;
}
ClerkDTO
clerkDTO
=
this
.
clerkService
.
getclerkById
(
newClerkId
)
;
String
storeId
=
clerkDTO
.
getStoreId
()
;
List
<
StaffClerkRelationDTO
>
relationList
=
this
.
listByStaffId
(
wxEnterpriseId
,
staffId
)
;
if
(
CollectionUtils
.
isEmpty
(
relationList
))
{
return
newClerkId
;
}
relationList
=
relationList
.
stream
().
filter
(
o
->
o
.
getStoreId
().
equals
(
storeId
)).
collect
(
Collectors
.
toList
())
;
if
(
CollectionUtils
.
isEmpty
(
relationList
))
{
return
newClerkId
;
}
return
relationList
.
get
(
0
).
getClerkId
()
;
}
/*
* 导购进行解绑/换导购,更新好友和导购关联关系
*/
@Override
public
boolean
delBind
(
String
oldClerkId
,
String
optStaffId
,
int
channelCode
,
String
newClerkId
,
String
wxEnterpriseId
)
{
boolean
changeClerkFlag
=
StringUtils
.
isNotEmpty
(
newClerkId
)
;
logger
.
info
(
"导购解绑/换导购={},oldClerkId={},optStaffId={}
"
,
changeClerkFlag
,
oldClerkId
,
optStaffId
);
logger
.
info
(
"导购解绑/换导购={},oldClerkId={},optStaffId={}
,newClerkId={},channelCode={}"
,
changeClerkFlag
,
oldClerkId
,
optStaffId
,
newClerkId
,
channelCode
);
if
(
StringUtils
.
isNotEmpty
(
optStaffId
)
&&
!
"-1"
.
equals
(
optStaffId
))
{
TabHaobanStaff
staff
=
this
.
staffService
.
selectById
(
optStaffId
)
;
if
(
null
!=
staff
)
{
...
...
@@ -119,6 +137,8 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
logger
.
info
(
"老的绑定关联不存在,oldClerkId={}"
,
oldClerkId
);
return
true
;
}
newClerkId
=
this
.
changeExistClerk
(
clerkRelation
.
getWxEnterpriseId
()
,
clerkRelation
.
getStaffId
()
,
newClerkId
)
;
logger
.
info
(
"转换后的新导购={}"
,
newClerkId
);
// 如果是区经
if
(
clerkRelation
.
getManageFlag
()==
1
)
{
this
.
mapper
.
changeStatusByClerkId
(
oldClerkId
,
0
);
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/ExternalClerkRelatedApiServiceImpl.java
View file @
b1e0a158
...
...
@@ -524,6 +524,12 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
}
@Override
public
List
<
ExternalClerkRelatedDTO
>
listRelationMemberAndStaff
(
List
<
String
>
memberIdList
,
String
staffId
,
String
enterpriseId
)
{
List
<
TabHaobanExternalClerkRelated
>
list
=
tabHaobanExternalClerkRelatedMapper
.
listRelationMemberAndStaff
(
memberIdList
,
staffId
,
enterpriseId
);
return
EntityUtil
.
changeEntityListNew
(
ExternalClerkRelatedDTO
.
class
,
list
);
}
@Override
public
Map
<
String
,
List
<
ClerkStaffWxUserDTO
>>
listMemberStaffRel
(
List
<
String
>
memberIdList
,
List
<
String
>
clerkIdList
,
String
enterpriseId
,
String
wxEnterpriseId
)
{
if
(
CollectionUtils
.
isEmpty
(
memberIdList
)
||
CollectionUtils
.
isEmpty
(
clerkIdList
))
{
// 2个列表都为空查不了关系
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/MemberUnionidRelatedApiServiceImpl.java
View file @
b1e0a158
...
...
@@ -250,7 +250,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
wxUserAddLogQDTO
.
setClerkId
(
related
.
getClerkId
());
wxUserAddLogQDTO
.
setDelClerkFlag
(
true
);
if
(
null
!=
related
.
getAddTime
())
{
wxUserAddLogQDTO
.
setQwAddTime
(
new
Date
(
related
.
getAddTime
()*
1000
));
wxUserAddLogQDTO
.
setQwAddTime
(
related
.
getAddTime
(
));
}
wxUserAddLogQDTO
.
setFriendClerkId
(
related
.
getClerkId
());
wxUserAddLogQDTO
.
setFriendStoreId
(
related
.
getStoreId
());
...
...
@@ -678,7 +678,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
wxUserAddLogQDTO
.
setClerkId
(
hyClerkId
);
wxUserAddLogQDTO
.
setAddWay
(
dto
.
getAddWay
());
if
(
StringUtils
.
isNotBlank
(
dto
.
getAddCreateTime
()))
{
wxUserAddLogQDTO
.
setQwAddTime
(
new
Date
(
Long
.
valueOf
(
createTime
)*
1000
));
wxUserAddLogQDTO
.
setQwAddTime
(
Long
.
valueOf
(
createTime
));
}
wxUserAddLogQDTO
.
setFriendClerkId
(
staffClerkRelationDTO
.
getClerkId
());
wxUserAddLogQDTO
.
setFriendStoreId
(
staffClerkRelationDTO
.
getStoreId
());
...
...
haoban-manage3-service/src/main/resources/mapper/TabHaobanExternalClerkRelatedMapper.xml
View file @
b1e0a158
...
...
@@ -231,7 +231,7 @@
select
count(*)
from tab_haoban_external_clerk_related
where
clerk_id = #{clerkId,jdbcType=VARCHAR
}
where
staff_id = #{staffId
}
and external_user_id = #{externalUserId}
and status_flag = 1
</select>
...
...
@@ -848,6 +848,18 @@
AND status_flag = 1
</select>
<select
id=
"listRelationMemberAndStaff"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from tab_haoban_external_clerk_related
where member_id in
<foreach
collection=
"memberIdList"
item=
"item"
separator=
","
open=
"("
close=
")"
>
#{item}
</foreach>
and staff_id = #{staffId}
and enterprise_id = #{enterpriseId}
AND status_flag = 1
</select>
<select
id=
"listByWxEnterpriseId"
resultType=
"java.lang.String"
>
select staff_id
from tab_haoban_external_clerk_related
...
...
@@ -918,7 +930,7 @@
<select
id=
"halfDelFriendPage"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from tab_haoban_external_clerk_related
where wx_enterprise_id = #{wxEnterpriseId} and status_flag in (1,3,4) and external_status = 3
and half_del_time is null limit
${startItem},
1000
and half_del_time is null limit 1000
</select>
<update
id=
"updateHalfTime"
>
...
...
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/controller/EventTrackingController.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.JSONResponse
;
import
com.gic.api.base.commons.Page
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.commons.webapi.reponse.RestResponse
;
import
com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO
;
import
com.gic.haoban.common.utils.AuthWebRequestUtil
;
import
com.gic.haoban.manage.web.handle.WechatEventTrackingClerkDetailHandle
;
import
com.gic.haoban.manage.web.handle.WechatEventTrackingStoreGroupHandle
;
import
com.gic.haoban.manage.web.qo.eventtracking.WechatEventTrackingClerkDetailQO
;
import
com.gic.haoban.manage.web.qo.eventtracking.WechatEventTrackingStoreGroupQO
;
import
com.gic.haoban.manage.web.qo.eventtracking.WechatOverviewQO
;
import
com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO
;
import
com.gic.haoban.manage.web.utils.AuthorizedUserUtils
;
import
com.gic.haoban.manage.web.utils.data.ConcurrencyUtils
;
import
com.gic.haoban.manage.web.utils.data.MapThreadHandlerRequest
;
import
com.gic.haoban.manage.web.utils.data.StoreAuthUtils
;
import
com.gic.haoban.manage.web.utils.eventtracking.DateExpandUtils
;
import
com.gic.haoban.manage.web.vo.eventtracking.*
;
import
com.gic.haoban.manage.web.vo.wechatwork.DataPageVO
;
import
com.gic.qcloud.BucketNameEnum
;
import
com.gic.web.common.controller.NewBaseController
;
import
com.gic.web.common.download.DownloadTask
;
import
com.gic.web.common.download.DownloadTaskUtil
;
import
com.gic.web.common.download.constants.TaskTypeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 好办小程序埋点分析
* @Author guojx
* @Date 2024/5/30 9:06
*/
@RestController
@Slf4j
@RequestMapping
(
"wechat-event-tracking"
)
public
class
EventTrackingController
extends
NewBaseController
{
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Autowired
private
WechatEventTrackingStoreGroupHandle
wechatEventTrackingStoreGroupHandle
;
@Autowired
private
WechatEventTrackingClerkDetailHandle
wechatEventTrackingClerkDetailHandle
;
/**
* 概览
* @param qo
* @return
*/
@RequestMapping
(
value
=
"overview"
)
public
RestResponse
<
WechatEventTrackingOverviewVO
>
overview
(
@RequestBody
WechatOverviewQO
qo
)
{
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
getOverviewParam
(
qo
).
toJSONString
(),
"data_point_anal_hb_app_overview"
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getDataList
(
res
);
return
RestResponse
.
successResult
(
CollectionUtils
.
isEmpty
(
list
)
?
new
WechatEventTrackingOverviewVO
()
:
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
list
.
get
(
0
)),
WechatEventTrackingOverviewVO
.
class
));
}
/**
* 趋势图
* @param qo
* @return
*/
@RequestMapping
(
value
=
"trend"
)
public
RestResponse
<
List
<
TrendVO
>>
trend
(
@RequestBody
WechatOverviewQO
qo
)
{
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
getOverviewParam
(
qo
).
toJSONString
(),
"data_point_anal_hb_app_trend"
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getDataList
(
res
);
Map
<
String
,
JSONObject
>
map
=
new
HashMap
<>();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
map
=
list
.
stream
().
collect
(
Collectors
.
toMap
(
e
->
e
.
getString
(
"bizDate"
),
e
->
e
));
}
//日期补零
List
<
String
>
dateList
=
DateExpandUtils
.
getDateList
(
qo
.
getStartDate
(),
qo
.
getEndDate
(),
qo
.
getDateType
());
List
<
TrendVO
>
voList
=
new
ArrayList
<>();
for
(
String
date
:
dateList
)
{
TrendVO
vo
=
null
;
JSONObject
temp
=
map
.
get
(
date
);
if
(
temp
==
null
)
{
vo
=
new
TrendVO
();
}
else
{
vo
=
JSONObject
.
parseObject
(
temp
.
toJSONString
(),
TrendVO
.
class
);
}
vo
.
setBizDate
(
date
);
voList
.
add
(
vo
);
}
return
RestResponse
.
successResult
(
voList
);
}
/**
* 模块访问统计
* @param qo
* @return
*/
@RequestMapping
(
value
=
"view-module"
)
public
RestResponse
<
List
<
ViewModuleVO
>>
viewModule
(
@RequestBody
WechatOverviewQO
qo
)
{
JSONObject
jsonParam
=
getOverviewParam
(
qo
);
List
<
MapThreadHandlerRequest
>
list
=
new
ArrayList
<>();
// 1 访问次数 2 访问人数 3 访问时长
jsonParam
.
put
(
"orderByFields"
,
1
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonParam
,
"data_point_anal_hb_app_module"
,
"1_visitCnt"
));
jsonParam
.
put
(
"orderByFields"
,
2
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonParam
,
"data_point_anal_hb_app_module"
,
"2_visitNum"
));
jsonParam
.
put
(
"orderByFields"
,
3
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonParam
,
"data_point_anal_hb_app_module"
,
"3_visitTime"
));
Map
<
String
,
List
<
JSONObject
>>
map
=
ConcurrencyUtils
.
concurrencyDataForMap
(
list
);
List
<
ViewModuleVO
>
voList
=
new
ArrayList
<>();
if
(
map
!=
null
&&
map
.
size
()
>
0
)
{
map
.
forEach
((
k
,
v
)
->
{
if
(
CollectionUtils
.
isNotEmpty
(
v
))
{
String
dataType
=
k
.
substring
(
0
,
1
);
String
key
=
k
.
substring
(
2
);
List
<
ViewModuleVO
>
tempList
=
new
ArrayList
<>();
for
(
JSONObject
temp
:
v
)
{
ViewModuleVO
vo
=
JSON
.
parseObject
(
temp
.
toJSONString
(),
ViewModuleVO
.
class
);
vo
.
setDataType
(
Integer
.
parseInt
(
dataType
));
vo
.
setData
(
temp
.
getLong
(
key
));
tempList
.
add
(
vo
);
}
voList
.
addAll
(
tempList
);
}
});
}
return
RestResponse
.
successResult
(
voList
);
}
/**
* 门店分组下钻
* @param qo
* @return
*/
@RequestMapping
(
value
=
"store-group"
)
public
RestResponse
<
DataPageVO
<
WechatEventTrackingStoreGroupVO
>>
storeGroup
(
@RequestBody
WechatEventTrackingStoreGroupQO
qo
)
{
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
List
<
String
>
statusList
=
new
ArrayList
<>();
statusList
.
add
(
"2"
);
storeAuthUtils
.
setStoreGroupJsonParam
(
jsonObject
,
qo
.
setStatusList
(
statusList
));
jsonObject
.
put
(
"apolloKey"
,
"data_point_anal_hb_app_store"
);
DataPageVO
vo
=
storeAuthUtils
.
getDataCommonParent
(
jsonObject
.
toJSONString
(),
qo
.
getPageNum
(),
"data_point_anal_hb_app_store"
,
qo
.
getPageSize
(),
true
,
true
);
if
(
CollectionUtils
.
isNotEmpty
(
vo
.
getRows
()))
{
vo
.
setRows
(
JSONArray
.
parseArray
(
JSON
.
toJSONString
(
vo
.
getRows
()),
WechatEventTrackingStoreGroupVO
.
class
));
}
return
RestResponse
.
successResult
(
vo
);
}
/**
* 门店明细导出
* @param qo
* @return
*/
@RequestMapping
(
value
=
"export-store-group"
)
public
RestResponse
exportStoreGroup
(
@RequestBody
WechatEventTrackingStoreGroupQO
qo
)
{
DownloadTask
task
=
new
DownloadTask
();
task
.
setTaskTypeEnum
(
TaskTypeEnum
.
HAOBAN_WECHAT_EVENT_STORE
);
task
.
setDataType
(
qo
.
getDataType
());
task
.
setUser
(
AuthorizedUserUtils
.
getUserInfo
());
task
.
setTotalCount
(
storeGroup
(
qo
).
getResult
().
getTotalNum
());
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
List
<
String
>
statusList
=
new
ArrayList
<>();
statusList
.
add
(
"2"
);
storeAuthUtils
.
setStoreGroupJsonParam
(
jsonObject
,
qo
.
setStatusList
(
statusList
));
jsonObject
.
put
(
"apolloKey"
,
"data_point_anal_hb_app_store"
);
//Excel的标题是字段进行计算
List
<
String
>
indexList
=
new
ArrayList
<>();
List
<
String
>
fieldList
=
new
ArrayList
<>();
Integer
storeGroup
=
jsonObject
.
getInteger
(
"storeGroup"
);
boolean
isStore
=
storeGroup
!=
null
&&
storeGroup
==
7
;
if
(
isStore
)
{
indexList
.
add
(
"门店名称"
);
fieldList
.
add
(
"storeName"
);
indexList
.
add
(
"门店code"
);
fieldList
.
add
(
"storeCode"
);
}
else
{
indexList
.
add
(
"分组名称"
);
fieldList
.
add
(
"storeGroupName"
);
}
indexList
.
add
(
"上级分组"
);
fieldList
.
add
(
"parentStoreGroupName"
);
indexList
.
add
(
"员工总人数"
);
fieldList
.
add
(
"clerkNum"
);
indexList
.
add
(
"绑定人数"
);
fieldList
.
add
(
"bindingNum"
);
indexList
.
add
(
"绑定率"
);
fieldList
.
add
(
"bindingRate"
);
indexList
.
add
(
"活跃人数"
);
fieldList
.
add
(
"visitNum"
);
indexList
.
add
(
"活跃率"
);
fieldList
.
add
(
"visitRate"
);
task
.
setFileName
(
"门店明细数据-"
+
qo
.
getStartDate
()
+
(
StringUtils
.
isNotBlank
(
qo
.
getEndDate
())
?
"_"
+
qo
.
getEndDate
()
:
""
));
task
.
setChannelName
(
"数据-登录数据-好办使用详情"
);
task
.
setBucketName
(
BucketNameEnum
.
REPORT_50000
.
getName
());
jsonObject
.
put
(
"indexList"
,
indexList
);
jsonObject
.
put
(
"fieldList"
,
fieldList
);
task
.
setSearchDataParams
(
jsonObject
.
toJSONString
());
task
.
setHandler
(
wechatEventTrackingStoreGroupHandle
);
JSONResponse
downloadTask
=
DownloadTaskUtil
.
createDownloadTask
(
task
);
return
RestResponse
.
successResult
(
downloadTask
.
getResult
());
}
/**
* 导购明细
* @param qo
* @return
*/
@RequestMapping
(
value
=
"clerk"
)
public
RestResponse
<
DataPageVO
<
WechatEventTrackingClerkVO
>>
clerk
(
@RequestBody
WechatEventTrackingClerkDetailQO
qo
)
{
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
List
<
String
>
statusList
=
new
ArrayList
<>();
statusList
.
add
(
"2"
);
storeAuthUtils
.
setStoreGroupJsonParam
(
jsonObject
,
new
StoreGroupCommonQO
()
.
setStoreGroupId
(
qo
.
getStoreGroupId
()).
setStoreId
(
qo
.
getStoreId
()).
setStatusList
(
statusList
));
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_point_anal_hb_app_clerk"
);
DataPageVO
<
WechatEventTrackingClerkVO
>
vo
=
new
DataPageVO
<>();
Page
page
=
DataApiUtils
.
getPageData
(
res
);
vo
.
setTotalNum
(
page
.
getTotalCount
());
vo
.
setPageNum
(
page
.
getCurrentPage
());
vo
.
setPageSize
(
page
.
getPageSize
());
List
<
JSONObject
>
list
=
page
.
getResult
();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
vo
.
setRows
(
JSONArray
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatEventTrackingClerkVO
.
class
));
}
return
RestResponse
.
successResult
(
vo
);
}
/**
* 查询分组下的门店,即无归属门店
* @param storeGroupId
* @return
*/
@RequestMapping
(
value
=
"get-unaffiliated-store"
)
public
RestResponse
<
List
<
String
>>
getUnaffiliatedStoreByStoreGroupId
(
String
storeGroupId
)
{
WebLoginDTO
login
=
AuthWebRequestUtil
.
getLoginUser
();
List
<
String
>
statusList
=
new
ArrayList
<>();
statusList
.
add
(
"2"
);
return
RestResponse
.
successResult
(
storeAuthUtils
.
getPreStoreIdListCommon
(
storeGroupId
,
login
.
getEnterpriseId
(),
statusList
));
}
/**
* 导购明细导出
* @param qo
* @return
*/
@RequestMapping
(
value
=
"export-clerk"
)
public
RestResponse
exportClerk
(
@RequestBody
WechatEventTrackingClerkDetailQO
qo
)
{
DownloadTask
task
=
new
DownloadTask
();
task
.
setTaskTypeEnum
(
TaskTypeEnum
.
HAOBAN_WECHAT_EVENT_CLERK
);
task
.
setDataType
(
qo
.
getDataType
());
task
.
setUser
(
AuthorizedUserUtils
.
getUserInfo
());
task
.
setTotalCount
(
clerk
(
qo
).
getResult
().
getTotalNum
());
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
List
<
String
>
statusList
=
new
ArrayList
<>();
statusList
.
add
(
"2"
);
storeAuthUtils
.
setStoreGroupJsonParam
(
jsonObject
,
new
StoreGroupCommonQO
()
.
setStoreGroupId
(
qo
.
getStoreGroupId
()).
setStoreId
(
qo
.
getStoreId
()).
setStatusList
(
statusList
));
jsonObject
.
put
(
"apolloKey"
,
"data_point_anal_hb_app_clerk"
);
//Excel的标题是字段进行计算
List
<
String
>
indexList
=
new
ArrayList
<>();
List
<
String
>
fieldList
=
new
ArrayList
<>();
indexList
.
add
(
"导购code"
);
fieldList
.
add
(
"clerkCode"
);
indexList
.
add
(
"导购名称"
);
fieldList
.
add
(
"clerkName"
);
indexList
.
add
(
"归属门店名称"
);
fieldList
.
add
(
"storeName"
);
indexList
.
add
(
"归属门店code"
);
fieldList
.
add
(
"storeCode"
);
indexList
.
add
(
"是否绑定"
);
fieldList
.
add
(
"isBinding"
);
indexList
.
add
(
"是否登陆"
);
fieldList
.
add
(
"isLogin"
);
indexList
.
add
(
"登陆次数"
);
fieldList
.
add
(
"visitCnt"
);
indexList
.
add
(
"日均访问时长"
);
fieldList
.
add
(
"visitTimeStr"
);
indexList
.
add
(
"最近一次登陆时间"
);
fieldList
.
add
(
"lastVisitTime"
);
task
.
setFileName
(
"导购明细数据-"
+
qo
.
getStartDate
()
+
(
StringUtils
.
isNotBlank
(
qo
.
getEndDate
())
?
"_"
+
qo
.
getEndDate
()
:
""
));
task
.
setChannelName
(
"数据-登录数据-好办使用详情"
);
task
.
setBucketName
(
BucketNameEnum
.
REPORT_50000
.
getName
());
jsonObject
.
put
(
"indexList"
,
indexList
);
jsonObject
.
put
(
"fieldList"
,
fieldList
);
task
.
setSearchDataParams
(
jsonObject
.
toJSONString
());
task
.
setHandler
(
wechatEventTrackingClerkDetailHandle
);
JSONResponse
downloadTask
=
DownloadTaskUtil
.
createDownloadTask
(
task
);
return
RestResponse
.
successResult
(
downloadTask
.
getResult
());
}
private
JSONObject
getOverviewParam
(
WechatOverviewQO
qo
)
{
JSONObject
jsonObject
=
(
JSONObject
)
JSONObject
.
toJSON
(
qo
);
jsonObject
.
remove
(
"storeGroupId"
);
jsonObject
.
remove
(
"storeId"
);
List
<
String
>
statusList
=
new
ArrayList
<>();
statusList
.
add
(
"2"
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
().
setStoreGroupId
(
qo
.
getStoreGroupId
()).
setStoreId
(
qo
.
getStoreId
()).
setStatusList
(
statusList
));
return
jsonObject
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/controller/WechatWorkController.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.JSONResponse
;
import
com.gic.api.base.commons.Page
;
import
com.gic.clerk.api.dto.AuthorizedUser
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.commons.util.DateUtil
;
import
com.gic.commons.webapi.reponse.RestResponse
;
import
com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO
;
import
com.gic.haoban.common.utils.AuthWebRequestUtil
;
import
com.gic.haoban.manage.web.handle.WechatWorkLostClerkHandle
;
import
com.gic.haoban.manage.web.handle.WechatWorkLostDetailHandle
;
import
com.gic.haoban.manage.web.handle.WechatWorkLostStoreGroupHandle
;
import
com.gic.haoban.manage.web.qo.wechatwork.*
;
import
com.gic.haoban.manage.web.utils.AuthorizedUserUtils
;
import
com.gic.haoban.manage.web.utils.data.ConcurrencyUtils
;
import
com.gic.haoban.manage.web.utils.data.MapThreadHandlerRequest
;
import
com.gic.haoban.manage.web.utils.data.StoreAuthUtils
;
import
com.gic.haoban.manage.web.vo.wechatwork.*
;
import
com.gic.qcloud.BucketNameEnum
;
import
com.gic.web.common.controller.NewBaseController
;
import
com.gic.web.common.download.DownloadTask
;
import
com.gic.web.common.download.DownloadTaskUtil
;
import
com.gic.web.common.download.constants.TaskTypeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.text.ParseException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 企微流失接口
* @Author guojx
* @Date 2024/5/21 13:45
*/
@RestController
@Slf4j
@RequestMapping
(
"wechat-work"
)
public
class
WechatWorkController
extends
NewBaseController
{
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Autowired
private
WechatWorkLostClerkHandle
wechatWorkLostClerkHandle
;
@Autowired
private
WechatWorkLostStoreGroupHandle
wechatWorkLostStoreGroupHandle
;
@Autowired
private
WechatWorkLostDetailHandle
wechatWorkLostDetailHandle
;
/**
* 流失数据概览
* @param qo
* @return
*/
@RequestMapping
(
value
=
"lost-overview"
)
public
RestResponse
<
WechatWorkLostVO
>
lostOverview
(
@RequestBody
WechatWorkLostOverviewQO
qo
)
{
JSONObject
jsonObject
=
(
JSONObject
)
JSONObject
.
toJSON
(
qo
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
().
setStoreGroupId
(
qo
.
getStoreGroupId
()));
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_mbr_scale_haoban_background_loss"
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getDataList
(
res
);
List
<
WechatWorkLostVO
>
voList
=
JSONArray
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatWorkLostVO
.
class
);
return
RestResponse
.
successResult
(
CollectionUtils
.
isEmpty
(
voList
)
?
null
:
voList
.
get
(
0
));
}
/**
* 流失数据概览趋势图
* @param qo
* @return
* @throws ParseException
*/
@RequestMapping
(
value
=
"lost-overview-trend"
)
public
RestResponse
<
List
<
WechatWorkLostVO
>>
lostOverviewTrend
(
@RequestBody
WechatWorkLostOverviewQO
qo
)
throws
ParseException
{
JSONObject
jsonObject
=
(
JSONObject
)
JSONObject
.
toJSON
(
qo
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
().
setStoreGroupId
(
qo
.
getStoreGroupId
()));
List
<
MapThreadHandlerRequest
>
list
=
new
ArrayList
<>();
jsonObject
.
put
(
"groupType"
,
1
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonObject
,
"data_mbr_scale_haoban_background_loss_date"
,
"1_onewayFriendNum"
));
jsonObject
.
put
(
"groupType"
,
2
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonObject
,
"data_mbr_scale_haoban_background_loss_date"
,
"2_totalLostNum"
));
jsonObject
.
put
(
"groupType"
,
3
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonObject
,
"data_mbr_scale_haoban_background_loss_date"
,
"3_deleteSalesNum"
));
jsonObject
.
put
(
"groupType"
,
4
);
list
.
add
(
new
MapThreadHandlerRequest
(
jsonObject
,
"data_mbr_scale_haoban_background_loss_date"
,
"4_salesDeleteNum"
));
Map
<
String
,
List
<
JSONObject
>>
map
=
ConcurrencyUtils
.
concurrencyDataForMap
(
list
);
List
<
JSONObject
>
resultList
=
new
ArrayList
<>();
if
(
map
!=
null
)
{
map
.
forEach
((
k
,
v
)
->
{
if
(
CollectionUtils
.
isNotEmpty
(
v
))
{
for
(
JSONObject
tempJson
:
v
)
{
tempJson
.
put
(
k
.
substring
(
0
,
1
),
tempJson
.
get
(
k
.
substring
(
2
)));
}
resultList
.
addAll
(
v
);
}
});
}
Map
<
String
,
List
<
JSONObject
>>
voMap
=
resultList
.
stream
().
collect
(
Collectors
.
groupingBy
(
e
->
e
.
getString
(
"bizDate"
)));
List
<
String
>
dateList
=
DateUtil
.
getBetweenDates
(
qo
.
getStartDate
(),
qo
.
getEndDate
());
List
<
WechatWorkLostVO
>
voList
=
new
ArrayList
<>();
for
(
String
date
:
dateList
)
{
WechatWorkLostVO
vo
=
new
WechatWorkLostVO
();
vo
.
setBizDate
(
date
);
List
<
JSONObject
>
mapValue
=
voMap
.
get
(
date
);
if
(
CollectionUtils
.
isNotEmpty
(
mapValue
))
{
for
(
JSONObject
tempJson
:
mapValue
)
{
if
(
tempJson
.
containsKey
(
"1"
))
{
vo
.
setOnewayFriendNum
(
tempJson
.
getInteger
(
"1"
));
}
if
(
tempJson
.
containsKey
(
"2"
))
{
vo
.
setTotalLostNum
(
tempJson
.
getInteger
(
"2"
));
}
if
(
tempJson
.
containsKey
(
"3"
))
{
vo
.
setDeleteSalesNum
(
tempJson
.
getInteger
(
"3"
));
}
if
(
tempJson
.
containsKey
(
"4"
))
{
vo
.
setSalesDeleteNum
(
tempJson
.
getInteger
(
"4"
));
}
}
}
voList
.
add
(
vo
);
}
return
RestResponse
.
successResult
(
voList
);
}
/**
* 流失数据统计-门店分组
* @param qo
* @return
*/
@RequestMapping
(
value
=
"lost-store-group"
)
public
RestResponse
<
DataPageVO
<
WechatWorkLostStoreGroupVO
>>
lostStoreGroup
(
@RequestBody
WechatWorkLostStoreGroupQO
qo
)
{
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
storeAuthUtils
.
setStoreGroupJsonParam
(
jsonObject
,
qo
);
jsonObject
.
put
(
"apolloKey"
,
"data_mbr_scale_haoban_background_loss_statisti"
);
jsonObject
.
put
(
"groupType"
,
1
);
DataPageVO
vo
=
storeAuthUtils
.
getDataCommon
(
jsonObject
.
toJSONString
(),
qo
.
getPageNum
(),
"data_mbr_scale_haoban_background_loss_statisti"
,
qo
.
getPageSize
(),
true
);
if
(
CollectionUtils
.
isNotEmpty
(
vo
.
getRows
()))
{
vo
.
setRows
(
JSONArray
.
parseArray
(
JSON
.
toJSONString
(
vo
.
getRows
()),
WechatWorkLostStoreGroupVO
.
class
));
}
return
RestResponse
.
successResult
(
vo
);
}
/**
* 流失数据统计-门店分组导出
* @param qo
* @return
*/
@RequestMapping
(
value
=
"export-lost-store-group"
)
public
RestResponse
exportLostStoreGroup
(
@RequestBody
WechatWorkLostStoreGroupQO
qo
)
{
DownloadTask
task
=
new
DownloadTask
();
task
.
setTaskTypeEnum
(
TaskTypeEnum
.
WECHAT_WORK_STORE_GROUP
);
task
.
setDataType
(
qo
.
getDataType
());
task
.
setUser
(
getUserInfo
());
task
.
setTotalCount
(
lostStoreGroup
(
qo
).
getResult
().
getTotalNum
());
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
storeAuthUtils
.
setStoreGroupJsonParam
(
jsonObject
,
qo
);
jsonObject
.
put
(
"apolloKey"
,
"data_mbr_scale_haoban_background_loss_statisti"
);
jsonObject
.
put
(
"groupType"
,
1
);
//Excel的标题是字段进行计算
List
<
String
>
indexList
=
new
ArrayList
<>();
List
<
String
>
fieldList
=
new
ArrayList
<>();
Integer
storeGroup
=
jsonObject
.
getInteger
(
"storeGroup"
);
boolean
isStore
=
storeGroup
!=
null
&&
storeGroup
==
7
;
if
(
isStore
)
{
indexList
.
add
(
"门店名称"
);
fieldList
.
add
(
"storeName"
);
indexList
.
add
(
"门店code"
);
fieldList
.
add
(
"storeCode"
);
}
else
{
indexList
.
add
(
"分组名称"
);
fieldList
.
add
(
"storeGroupName"
);
}
indexList
.
add
(
"上级分组"
);
fieldList
.
add
(
"parentStoreGroupName"
);
indexList
.
add
(
"删除导购人数"
);
fieldList
.
add
(
"deleteSalesNum"
);
indexList
.
add
(
"导购删除人数"
);
fieldList
.
add
(
"salesDeleteNum"
);
indexList
.
add
(
"单向好友人数"
);
fieldList
.
add
(
"onewayFriendNum"
);
task
.
setFileName
(
"流失好友-门店维度数据统计-"
+
qo
.
getStartDate
()
+
"_"
+
qo
.
getEndDate
());
task
.
setChannelName
(
"数据-企微数据-流失好友"
);
task
.
setBucketName
(
BucketNameEnum
.
REPORT_50000
.
getName
());
jsonObject
.
put
(
"indexList"
,
indexList
);
jsonObject
.
put
(
"fieldList"
,
fieldList
);
task
.
setSearchDataParams
(
jsonObject
.
toJSONString
());
task
.
setHandler
(
wechatWorkLostStoreGroupHandle
);
JSONResponse
downloadTask
=
DownloadTaskUtil
.
createDownloadTask
(
task
);
return
RestResponse
.
successResult
(
downloadTask
.
getResult
());
}
/**
* 流失数据统计-导购
* @param qo
* @return
*/
@RequestMapping
(
value
=
"lost-clerk"
)
public
RestResponse
<
DataPageVO
<
WechatWorkLostClerkVO
>>
lostClerk
(
@RequestBody
WechatWorkLostClerkQO
qo
)
{
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
());
jsonObject
.
put
(
"groupType"
,
2
);
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_mbr_scale_haoban_background_loss_statisti"
);
Page
page
=
DataApiUtils
.
getPageData
(
res
);
DataPageVO
vo
=
new
DataPageVO
();
vo
.
setPageSize
(
page
.
getPageSize
());
vo
.
setPageNum
(
page
.
getCurrentPage
());
List
<
JSONObject
>
list
=
page
.
getResult
();
vo
.
setTotalNum
(
page
.
getTotalCount
());
jsonObject
.
put
(
"groupType"
,
1
);
jsonObject
.
put
(
"storeGroup"
,
8
);
JSONObject
total
=
storeAuthUtils
.
getTotalJson
(
jsonObject
,
"data_mbr_scale_haoban_background_loss_statisti"
);
if
(
list
==
null
)
{
list
=
new
ArrayList
<>();
}
if
(
total
!=
null
)
{
total
.
put
(
"clerkName"
,
"合计("
+
list
.
size
()
+
")"
);
list
.
add
(
0
,
total
);
}
vo
.
setRows
(
list
);
if
(
CollectionUtils
.
isNotEmpty
(
vo
.
getRows
()))
{
vo
.
setRows
(
JSONArray
.
parseArray
(
JSON
.
toJSONString
(
vo
.
getRows
()),
WechatWorkLostClerkVO
.
class
));
}
return
RestResponse
.
successResult
(
vo
);
}
/**
* 流失数据统计-导购导出
* @param qo
* @return
*/
@RequestMapping
(
value
=
"export-lost-clerk"
)
public
RestResponse
exportLostClerk
(
@RequestBody
WechatWorkLostClerkQO
qo
)
{
DownloadTask
task
=
new
DownloadTask
();
task
.
setTaskTypeEnum
(
TaskTypeEnum
.
WECHAT_WORK_CLERK_DETAIL
);
task
.
setDataType
(
qo
.
getDataType
());
task
.
setUser
(
getUserInfo
());
task
.
setTotalCount
(
lostClerk
(
qo
).
getResult
().
getTotalNum
());
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
());
jsonObject
.
put
(
"apolloKey"
,
"data_mbr_scale_haoban_background_loss_statisti"
);
jsonObject
.
put
(
"groupType"
,
2
);
//Excel的标题是字段进行计算
List
<
String
>
indexList
=
new
ArrayList
<>();
List
<
String
>
fieldList
=
new
ArrayList
<>();
indexList
.
add
(
"导购姓名"
);
fieldList
.
add
(
"clerkName"
);
indexList
.
add
(
"导购code"
);
fieldList
.
add
(
"clerkCode"
);
indexList
.
add
(
"所属门店名称"
);
fieldList
.
add
(
"storeName"
);
indexList
.
add
(
"所属门店code"
);
fieldList
.
add
(
"storeCode"
);
indexList
.
add
(
"所属分组"
);
fieldList
.
add
(
"storeGroupName"
);
indexList
.
add
(
"删除导购人数"
);
fieldList
.
add
(
"deleteSalesNum"
);
indexList
.
add
(
"导购删除人数"
);
fieldList
.
add
(
"salesDeleteNum"
);
indexList
.
add
(
"单向好友人数"
);
fieldList
.
add
(
"onewayFriendNum"
);
task
.
setFileName
(
"流失好友-导购维度数据统计-"
+
qo
.
getStartDate
()
+
"_"
+
qo
.
getEndDate
());
task
.
setChannelName
(
"数据-企微数据-流失好友"
);
task
.
setBucketName
(
BucketNameEnum
.
REPORT_50000
.
getName
());
jsonObject
.
put
(
"indexList"
,
indexList
);
jsonObject
.
put
(
"fieldList"
,
fieldList
);
task
.
setSearchDataParams
(
jsonObject
.
toJSONString
());
task
.
setHandler
(
wechatWorkLostClerkHandle
);
JSONResponse
downloadTask
=
DownloadTaskUtil
.
createDownloadTask
(
task
);
return
RestResponse
.
successResult
(
downloadTask
.
getResult
());
}
/**
* 流失明细
* @param qo
* @return
*/
@RequestMapping
(
value
=
"lost-detail"
)
public
RestResponse
<
DataPageVO
<
WechatWorkLostDetailVO
>>
lostDetail
(
@RequestBody
WechatWorkLostDetailQO
qo
)
{
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
());
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_mbr_scale_haoban_background_loss_detail"
);
Page
page
=
DataApiUtils
.
getPageData
(
res
);
DataPageVO
<
WechatWorkLostDetailVO
>
vo
=
new
DataPageVO
();
vo
.
setPageSize
(
page
.
getPageSize
());
vo
.
setPageNum
(
page
.
getCurrentPage
());
List
<
JSONObject
>
list
=
page
.
getResult
();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
WechatWorkLostDetailVO
>
voList
=
JSONArray
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatWorkLostDetailVO
.
class
);
vo
.
setRows
(
voList
);
}
vo
.
setTotalNum
(
page
.
getTotalCount
());
return
RestResponse
.
successResult
(
vo
);
}
/**
* 流失明细-导出
* @param qo
* @return
*/
@RequestMapping
(
value
=
"export-lost-detail"
)
public
RestResponse
exportLostDetail
(
@RequestBody
WechatWorkLostDetailQO
qo
)
{
DownloadTask
task
=
new
DownloadTask
();
task
.
setTaskTypeEnum
(
TaskTypeEnum
.
WECHAT_WORK_MEMBER_DETAIL
);
task
.
setDataType
(
qo
.
getDataType
());
task
.
setUser
(
getUserInfo
());
task
.
setTotalCount
(
lostDetail
(
qo
).
getResult
().
getTotalNum
());
JSONObject
jsonObject
=
new
JSONObject
();
qo
.
dealWithParam
(
jsonObject
);
storeAuthUtils
.
setCommonParam
(
jsonObject
,
new
StoreGroupCommonQO
());
jsonObject
.
put
(
"apolloKey"
,
"data_mbr_scale_haoban_background_loss_detail"
);
//Excel的标题是字段进行计算
List
<
String
>
indexList
=
new
ArrayList
<>();
List
<
String
>
fieldList
=
new
ArrayList
<>();
indexList
.
add
(
"客户姓名"
);
fieldList
.
add
(
"memberName"
);
indexList
.
add
(
"客户昵称"
);
fieldList
.
add
(
"memberNick"
);
indexList
.
add
(
"客户手机号"
);
fieldList
.
add
(
"memberPhone"
);
indexList
.
add
(
"导购姓名"
);
fieldList
.
add
(
"clerkName"
);
indexList
.
add
(
"导购code"
);
fieldList
.
add
(
"clerkCode"
);
indexList
.
add
(
"所属门店名称"
);
fieldList
.
add
(
"storeName"
);
indexList
.
add
(
"所属门店code"
);
fieldList
.
add
(
"storeCode"
);
indexList
.
add
(
"删除类型"
);
fieldList
.
add
(
"deleteType"
);
indexList
.
add
(
"留存天数"
);
fieldList
.
add
(
"remainDays"
);
indexList
.
add
(
"添加好友时间"
);
fieldList
.
add
(
"addTime"
);
indexList
.
add
(
"最近消费时间"
);
fieldList
.
add
(
"lastCsmeDate"
);
indexList
.
add
(
"删除时间"
);
fieldList
.
add
(
"deleteTime"
);
task
.
setFileName
(
"流失好友-流失明细-"
+
qo
.
getStartDate
()
+
"_"
+
qo
.
getEndDate
());
task
.
setChannelName
(
"数据-企微数据-流失好友"
);
task
.
setBucketName
(
BucketNameEnum
.
REPORT_50000
.
getName
());
jsonObject
.
put
(
"indexList"
,
indexList
);
jsonObject
.
put
(
"fieldList"
,
fieldList
);
task
.
setSearchDataParams
(
jsonObject
.
toJSONString
());
task
.
setHandler
(
wechatWorkLostDetailHandle
);
JSONResponse
downloadTask
=
DownloadTaskUtil
.
createDownloadTask
(
task
);
return
RestResponse
.
successResult
(
downloadTask
.
getResult
());
}
private
AuthorizedUser
getUserInfo
()
{
return
AuthorizedUserUtils
.
getUserInfo
();
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/exception/GlobalExceptionHandler.java
View file @
b1e0a158
...
...
@@ -169,4 +169,11 @@ public class GlobalExceptionHandler extends WebBaseController {
return
RestResponse
.
failure
(
ex
.
getCode
(),
ex
.
getMessage
());
}
@ResponseBody
@ExceptionHandler
(
com
.
gic
.
commons
.
exception
.
DataApiException
.
class
)
public
RestResponse
dataApiExceptionCommon
(
HttpServletResponse
response
,
com
.
gic
.
commons
.
exception
.
DataApiException
ex
)
{
logger
.
info
(
"DataApiException common异常信息:{}"
,
ex
);
return
RestResponse
.
failure
(
ex
.
getCode
(),
ex
.
getMessage
());
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/handle/WechatEventTrackingClerkDetailHandle.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
handle
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.enterprise.api.dto.security.DownloadReportDTO
;
import
com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingClerkVO
;
import
com.gic.web.common.download.DownloadHandlerAbstract
;
import
com.gic.web.common.download.context.Context
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.stereotype.Component
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 数据-登录数据-好办使用详情
*/
@Component
public
class
WechatEventTrackingClerkDetailHandle
extends
DownloadHandlerAbstract
<
WechatEventTrackingClerkVO
>
{
private
static
final
Logger
LOGGER
=
LogManager
.
getLogger
(
WechatEventTrackingClerkDetailHandle
.
class
);
@Override
public
List
<
WechatEventTrackingClerkVO
>
getData
(
Context
context
,
String
searchDataParams
,
Integer
currentPage
)
{
boolean
isFirst
=
currentPage
!=
null
&&
currentPage
==
1
;
if
(
isFirst
)
{
LOGGER
.
info
(
"数据-登录数据-好办使用导购详情导出日志"
);
}
JSONObject
jsonObject
=
JSON
.
parseObject
(
searchDataParams
);
jsonObject
.
put
(
"pageNum"
,
currentPage
);
jsonObject
.
put
(
"pageSize"
,
getPageSize
());
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_point_anal_hb_app_clerk"
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getPageList
(
res
);
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
WechatEventTrackingClerkVO
>
result
=
JSONObject
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatEventTrackingClerkVO
.
class
);
return
result
;
}
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
(
Context
context
){
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"indexList"
);
return
list
;
}
@Override
public
LinkedHashMap
<
String
,
List
<
String
>>
doubleColumnNames
()
{
return
null
;
}
@Override
public
List
<
String
>
getColumns
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumns
(
Context
context
)
{
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"fieldList"
);
return
list
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/handle/WechatEventTrackingStoreGroupHandle.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
handle
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.enterprise.api.dto.security.DownloadReportDTO
;
import
com.gic.haoban.manage.web.utils.data.StoreAuthUtils
;
import
com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingStoreGroupVO
;
import
com.gic.web.common.download.DownloadHandlerAbstract
;
import
com.gic.web.common.download.context.Context
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
/**
* 数据-登录数据-好办使用详情
*/
@Component
public
class
WechatEventTrackingStoreGroupHandle
extends
DownloadHandlerAbstract
<
WechatEventTrackingStoreGroupVO
>
{
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Override
public
List
<
WechatEventTrackingStoreGroupVO
>
getData
(
Context
context
,
String
searchDataParams
,
Integer
currentPage
)
{
List
<
JSONObject
>
list
=
storeAuthUtils
.
getDataCommonParent
(
searchDataParams
,
currentPage
,
"数据-登录数据-好办使用详情导出日志进来"
,
getPageSize
(),
false
,
true
).
getRows
();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
WechatEventTrackingStoreGroupVO
>
result
=
JSONObject
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatEventTrackingStoreGroupVO
.
class
);
return
result
;
}
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
(
Context
context
){
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"indexList"
);
return
list
;
}
@Override
public
LinkedHashMap
<
String
,
List
<
String
>>
doubleColumnNames
()
{
return
null
;
}
@Override
public
List
<
String
>
getColumns
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumns
(
Context
context
)
{
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"fieldList"
);
return
list
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/handle/WechatWorkLostClerkHandle.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
handle
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.Page
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.enterprise.api.dto.security.DownloadReportDTO
;
import
com.gic.haoban.manage.web.utils.data.StoreAuthUtils
;
import
com.gic.haoban.manage.web.vo.wechatwork.WechatWorkLostClerkVO
;
import
com.gic.web.common.download.DownloadHandlerAbstract
;
import
com.gic.web.common.download.context.Context
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
/**
* 数据-企微数据-流失好友-导购
*/
@Component
public
class
WechatWorkLostClerkHandle
extends
DownloadHandlerAbstract
<
WechatWorkLostClerkVO
>
{
private
static
final
Logger
LOGGER
=
LogManager
.
getLogger
(
WechatWorkLostClerkHandle
.
class
);
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Override
public
List
<
WechatWorkLostClerkVO
>
getData
(
Context
context
,
String
searchDataParams
,
Integer
currentPage
)
{
boolean
isFirst
=
currentPage
!=
null
&&
currentPage
==
1
;
if
(
isFirst
)
{
LOGGER
.
info
(
"数据-企微数据-流失好友-导购导出日志"
);
}
JSONObject
jsonObject
=
JSON
.
parseObject
(
searchDataParams
);
jsonObject
.
put
(
"pageNum"
,
currentPage
);
jsonObject
.
put
(
"pageSize"
,
getPageSize
());
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_mbr_scale_haoban_background_loss_statisti"
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getPageList
(
res
);
jsonObject
.
put
(
"groupType"
,
1
);
jsonObject
.
put
(
"storeGroup"
,
8
);
if
(
list
==
null
)
{
list
=
new
ArrayList
<>();
}
if
(
isFirst
)
{
Map
<
String
,
Object
>
totalRes
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_mbr_scale_haoban_background_loss_statisti"
);
Page
page
=
DataApiUtils
.
getPageData
(
totalRes
);
if
(
page
!=
null
)
{
List
<
JSONObject
>
totalList
=
page
.
getResult
();
if
(
CollectionUtils
.
isNotEmpty
(
totalList
))
{
JSONObject
total
=
totalList
.
get
(
0
);
total
.
put
(
"clerkName"
,
"合计("
+
page
.
getTotalCount
()
+
")"
);
list
.
add
(
0
,
total
);
}
}
}
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
WechatWorkLostClerkVO
>
result
=
JSONObject
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatWorkLostClerkVO
.
class
);
return
result
;
}
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
(
Context
context
){
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"indexList"
);
return
list
;
}
@Override
public
LinkedHashMap
<
String
,
List
<
String
>>
doubleColumnNames
()
{
return
null
;
}
@Override
public
List
<
String
>
getColumns
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumns
(
Context
context
)
{
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"fieldList"
);
return
list
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/handle/WechatWorkLostDetailHandle.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
handle
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.enterprise.api.dto.security.DownloadReportDTO
;
import
com.gic.haoban.manage.web.utils.data.StoreAuthUtils
;
import
com.gic.haoban.manage.web.vo.wechatwork.WechatWorkLostDetailVO
;
import
com.gic.web.common.download.DownloadHandlerAbstract
;
import
com.gic.web.common.download.context.Context
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 数据-企微数据-流失好友-明细
*/
@Component
public
class
WechatWorkLostDetailHandle
extends
DownloadHandlerAbstract
<
WechatWorkLostDetailVO
>
{
private
static
final
Logger
LOGGER
=
LogManager
.
getLogger
(
WechatWorkLostDetailHandle
.
class
);
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Override
public
List
<
WechatWorkLostDetailVO
>
getData
(
Context
context
,
String
searchDataParams
,
Integer
currentPage
)
{
boolean
isFirst
=
currentPage
!=
null
&&
currentPage
==
1
;
if
(
isFirst
)
{
LOGGER
.
info
(
"数据-企微数据-流失好友-明细导出日志"
);
}
JSONObject
jsonObject
=
JSON
.
parseObject
(
searchDataParams
);
jsonObject
.
put
(
"pageNum"
,
currentPage
);
jsonObject
.
put
(
"pageSize"
,
getPageSize
());
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_mbr_scale_haoban_background_loss_detail"
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getPageList
(
res
);
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
WechatWorkLostDetailVO
>
result
=
JSONObject
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatWorkLostDetailVO
.
class
);
return
result
;
}
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
(
Context
context
){
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"indexList"
);
return
list
;
}
@Override
public
LinkedHashMap
<
String
,
List
<
String
>>
doubleColumnNames
()
{
return
null
;
}
@Override
public
List
<
String
>
getColumns
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumns
(
Context
context
)
{
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"fieldList"
);
return
list
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/handle/WechatWorkLostStoreGroupHandle.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
handle
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.enterprise.api.dto.security.DownloadReportDTO
;
import
com.gic.haoban.manage.web.utils.data.StoreAuthUtils
;
import
com.gic.haoban.manage.web.vo.wechatwork.WechatWorkLostStoreGroupVO
;
import
com.gic.web.common.download.DownloadHandlerAbstract
;
import
com.gic.web.common.download.context.Context
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
/**
* 数据-企微数据-流失好友
*/
@Component
public
class
WechatWorkLostStoreGroupHandle
extends
DownloadHandlerAbstract
<
WechatWorkLostStoreGroupVO
>
{
private
static
final
Logger
LOGGER
=
LogManager
.
getLogger
(
WechatWorkLostStoreGroupHandle
.
class
);
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Override
public
List
<
WechatWorkLostStoreGroupVO
>
getData
(
Context
context
,
String
searchDataParams
,
Integer
currentPage
)
{
List
<
JSONObject
>
list
=
storeAuthUtils
.
getDataCommon
(
searchDataParams
,
currentPage
,
"数据-企微数据-流失好友导出日志进来"
,
getPageSize
(),
false
).
getRows
();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
WechatWorkLostStoreGroupVO
>
result
=
JSONObject
.
parseArray
(
JSON
.
toJSONString
(
list
),
WechatWorkLostStoreGroupVO
.
class
);
return
result
;
}
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumnNames
(
Context
context
){
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"indexList"
);
return
list
;
}
@Override
public
LinkedHashMap
<
String
,
List
<
String
>>
doubleColumnNames
()
{
return
null
;
}
@Override
public
List
<
String
>
getColumns
()
{
return
Collections
.
EMPTY_LIST
;
}
@Override
public
List
<
String
>
getColumns
(
Context
context
)
{
DownloadReportDTO
downloadReportDTO
=
context
.
getDownloadReportDTO
();
String
searchDataParams
=
downloadReportDTO
.
getSearchDataParams
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
List
<
String
>
list
=
(
List
<
String
>)
jsonObject
.
get
(
"fieldList"
);
return
list
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/eventtracking/WechatEventTrackingClerkDetailQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
eventtracking
;
import
com.alibaba.fastjson.JSONObject
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author guojx
* @Date 2024/5/21 14:12
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatEventTrackingClerkDetailQO
implements
Serializable
{
/**
* yyyy-MM-dd
*/
private
String
startDate
;
/**
* yyyy-MM-dd
*/
private
String
endDate
;
/**
* 导购名称/code
*/
private
String
vagueQueryClerk
;
/**
* 数据类型 1天 2近7天 3近30天 4周 5月
*/
private
Integer
dateType
;
/**
* 排序类型 1 正序 2 倒序
*/
private
Integer
orderByType
;
/**
* 排序字段名称
*/
private
String
orderByFields
;
/**
* 分组ID,可为空
*/
private
String
storeGroupId
;
/**
* 0:未登录
*/
private
Integer
isLogin
;
/**
* 门店ID。可为空
*/
private
String
storeId
;
private
Integer
pageNum
;
private
Integer
pageSize
;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private
Integer
dataType
=
1
;
/**
* 下载导出参数:为了兼容前端传参
*/
private
String
requestProject
;
public
Integer
getDataApiOrderField
()
{
Map
<
String
,
Integer
>
map
=
new
HashMap
<>(
8
);
map
.
put
(
"avgVisitTime"
,
1
);
map
.
put
(
"lastVisitTime"
,
2
);
return
map
.
get
(
orderByFields
)
==
null
?
1
:
map
.
get
(
orderByFields
);
}
public
void
dealWithParam
(
JSONObject
jsonObject
)
{
if
(
jsonObject
==
null
)
{
jsonObject
=
new
JSONObject
();
}
if
(
StringUtils
.
isNotBlank
(
startDate
))
{
jsonObject
.
put
(
"startDate"
,
startDate
);
}
if
(
StringUtils
.
isNotBlank
(
endDate
))
{
jsonObject
.
put
(
"endDate"
,
endDate
);
}
if
(
dateType
!=
null
)
{
jsonObject
.
put
(
"dateType"
,
dateType
);
}
if
(
orderByType
!=
null
)
{
jsonObject
.
put
(
"orderByType"
,
orderByType
);
}
if
(
orderByFields
!=
null
)
{
jsonObject
.
put
(
"orderByFields"
,
orderByFields
);
}
if
(
isLogin
!=
null
)
{
jsonObject
.
put
(
"isLogin"
,
isLogin
);
}
jsonObject
.
put
(
"pageNum"
,
pageNum
);
jsonObject
.
put
(
"pageSize"
,
pageSize
);
if
(
StringUtils
.
isNotBlank
(
vagueQueryClerk
))
{
jsonObject
.
put
(
"vagueQueryClerk"
,
vagueQueryClerk
);
}
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/eventtracking/WechatEventTrackingStoreGroupQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
eventtracking
;
import
com.alibaba.fastjson.JSONObject
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author guojx
* @Date 2024/5/22 9:27
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatEventTrackingStoreGroupQO
extends
StoreGroupCommonQO
implements
Serializable
{
/**
* 周期起始时间
*/
private
String
startDate
;
/**
* 结束时间
*/
private
String
endDate
;
/**
* 数据类型 1天 2近7天 3近30天 4周 5月
*/
private
Integer
dateType
;
/**
* 排序类型 1 正序 2 倒序
*/
private
Integer
orderByType
;
/**
* 排序字段名称
*/
private
String
orderByFields
;
private
Integer
pageNum
;
private
Integer
pageSize
;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private
Integer
dataType
=
1
;
/**
* 下载导出参数:为了兼容前端传参
*/
private
String
requestProject
;
public
Integer
getDataApiOrderField
()
{
Map
<
String
,
Integer
>
map
=
new
HashMap
<>(
8
);
map
.
put
(
"clerkNum"
,
1
);
map
.
put
(
"bindingNum"
,
2
);
map
.
put
(
"bindingRate"
,
3
);
map
.
put
(
"visitNum"
,
4
);
map
.
put
(
"visitRate"
,
5
);
map
.
put
(
"visitCnt"
,
6
);
return
map
.
get
(
orderByFields
)
==
null
?
1
:
map
.
get
(
orderByFields
);
}
public
void
dealWithParam
(
JSONObject
jsonObject
)
{
if
(
jsonObject
==
null
)
{
jsonObject
=
new
JSONObject
();
}
if
(
StringUtils
.
isNotBlank
(
startDate
))
{
jsonObject
.
put
(
"startDate"
,
startDate
);
}
if
(
dateType
!=
null
)
{
jsonObject
.
put
(
"dateType"
,
dateType
);
}
if
(
orderByType
!=
null
)
{
jsonObject
.
put
(
"orderByType"
,
orderByType
);
}
if
(
orderByFields
!=
null
)
{
jsonObject
.
put
(
"orderByFields"
,
orderByFields
);
}
jsonObject
.
put
(
"pageNum"
,
pageNum
);
jsonObject
.
put
(
"pageSize"
,
pageSize
);
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/eventtracking/WechatOverviewQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
eventtracking
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/30 9:14
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatOverviewQO
implements
Serializable
{
/**
* yyyy-MM-dd
*/
private
String
startDate
;
private
String
endDate
;
/**
* 数据类型 1天 2近7天 3近30天 4周 5月
*/
private
Integer
dateType
;
/**
* 分组ID,可为空
*/
private
String
storeGroupId
;
/**
* 门店ID。可为空
*/
private
String
storeId
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/wechatwork/StoreGroupCommonQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
wechatwork
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @Author guojx
* @Date 2024/5/22 9:16
*/
@Data
@Accessors
(
chain
=
true
)
public
class
StoreGroupCommonQO
implements
Serializable
{
/**
* 门店code/名称
*/
private
String
storeSearchParam
;
/**
* 可以多选,英文逗号隔开。优先级高于storeId
*/
private
String
storeGroupId
;
/**
* 可以多选,英文逗号隔开
*/
private
String
storeId
;
/**
* 分组下钻的时候,当前点击的分组id参数.如果是无归属,则值是-1
* @return
*/
private
String
nextStoreGroupId
;
/**
* 因为存在nextStoreGroupId = -1的无归属分组。当下钻无归属,值为无归属上一层级的分组id。如果为空,说明上一层级是所有哦门店,否则必有值
*/
private
String
preStoreGroupId
;
/**
* 分组维度查询,勾选展示门店 1:是
*/
private
Integer
showStore
;
/**
* 门店状态
*/
private
List
<
String
>
statusList
;
public
boolean
isRecycle
()
{
return
"-3"
.
equals
(
nextStoreGroupId
);
}
public
boolean
isNoBelongStoreGroup
()
{
return
"-1"
.
equals
(
nextStoreGroupId
);
}
public
boolean
isSelectStore
()
{
return
showStore
!=
null
&&
showStore
==
1
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/wechatwork/WechatWorkLostClerkQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
wechatwork
;
import
com.alibaba.fastjson.JSONObject
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author guojx
* @Date 2024/5/21 14:12
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatWorkLostClerkQO
implements
Serializable
{
/**
* yyyy-MM-dd
*/
private
String
startDate
;
/**
* yyyy-MM-dd
*/
private
String
endDate
;
/**
* 门店名称/code
*/
private
String
vagueQueryStore
;
/**
* 导购名称/code
*/
private
String
vagueQueryClerk
;
/**
* 排序类型 1 正序 2 倒序
*/
private
Integer
orderByType
;
/**
* 排序字段名称
*/
private
String
orderByFields
;
private
Integer
pageNum
;
private
Integer
pageSize
;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private
Integer
dataType
=
1
;
/**
* 下载导出参数:为了兼容前端传参
*/
private
String
requestProject
;
public
Integer
getDataApiOrderField
()
{
Map
<
String
,
Integer
>
map
=
new
HashMap
<>(
8
);
map
.
put
(
"onewayFriendNum"
,
1
);
map
.
put
(
"totalLostNum"
,
2
);
map
.
put
(
"deleteSalesNum"
,
3
);
map
.
put
(
"salesDeleteNum"
,
4
);
return
map
.
get
(
orderByFields
)
==
null
?
1
:
map
.
get
(
orderByFields
);
}
public
void
dealWithParam
(
JSONObject
jsonObject
)
{
if
(
jsonObject
==
null
)
{
jsonObject
=
new
JSONObject
();
}
if
(
StringUtils
.
isNotBlank
(
startDate
))
{
jsonObject
.
put
(
"startDate"
,
startDate
);
}
if
(
StringUtils
.
isNotBlank
(
endDate
))
{
jsonObject
.
put
(
"endDate"
,
endDate
);
}
if
(
orderByType
!=
null
)
{
jsonObject
.
put
(
"orderByType"
,
orderByType
);
}
if
(
orderByFields
!=
null
)
{
jsonObject
.
put
(
"orderByFields"
,
getDataApiOrderField
());
}
jsonObject
.
put
(
"pageNum"
,
pageNum
);
jsonObject
.
put
(
"pageSize"
,
pageSize
);
if
(
StringUtils
.
isNotBlank
(
vagueQueryClerk
))
{
jsonObject
.
put
(
"vagueQueryClerk"
,
vagueQueryClerk
);
}
if
(
StringUtils
.
isNotBlank
(
vagueQueryStore
))
{
jsonObject
.
put
(
"vagueQueryStore"
,
vagueQueryStore
);
}
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/wechatwork/WechatWorkLostDetailQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
wechatwork
;
import
com.alibaba.fastjson.JSONObject
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author guojx
* @Date 2024/5/21 14:12
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatWorkLostDetailQO
implements
Serializable
{
/**
* yyyy-MM-dd
*/
private
String
startDate
;
/**
* yyyy-MM-dd
*/
private
String
endDate
;
/**
* 用户模糊
*/
private
String
vagueQueryUser
;
/**
* 导购名称/code
*/
private
String
vagueQueryClerk
;
/**
* 是/否
* 是否已解除双向好友
*/
private
String
isDelete
;
/**
* 导购删除好友/好友删除导购
* 删除类型
*/
private
String
deleteType
;
/**
* 排序类型 1 正序 2 倒序
*/
private
Integer
orderByType
;
/**
* 排序字段名称
*/
private
String
orderByFields
;
private
Integer
pageNum
;
private
Integer
pageSize
;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private
Integer
dataType
=
1
;
/**
* 下载导出参数:为了兼容前端传参
*/
private
String
requestProject
;
public
Integer
getDataApiOrderField
()
{
Map
<
String
,
Integer
>
map
=
new
HashMap
<>(
8
);
map
.
put
(
"remainDays"
,
9
);
return
map
.
get
(
orderByFields
)
==
null
?
1
:
map
.
get
(
orderByFields
);
}
public
void
dealWithParam
(
JSONObject
jsonObject
)
{
if
(
jsonObject
==
null
)
{
jsonObject
=
new
JSONObject
();
}
if
(
StringUtils
.
isNotBlank
(
startDate
))
{
jsonObject
.
put
(
"startDate"
,
startDate
);
}
if
(
StringUtils
.
isNotBlank
(
endDate
))
{
jsonObject
.
put
(
"endDate"
,
endDate
);
}
if
(
orderByType
!=
null
)
{
jsonObject
.
put
(
"orderByType"
,
orderByType
);
}
if
(
orderByFields
!=
null
)
{
jsonObject
.
put
(
"orderByFields"
,
getDataApiOrderField
());
}
jsonObject
.
put
(
"pageNum"
,
pageNum
);
jsonObject
.
put
(
"pageSize"
,
pageSize
);
if
(
StringUtils
.
isNotBlank
(
vagueQueryClerk
))
{
jsonObject
.
put
(
"vagueQueryClerk"
,
vagueQueryClerk
);
}
if
(
StringUtils
.
isNotBlank
(
vagueQueryUser
))
{
jsonObject
.
put
(
"vagueQueryUser"
,
vagueQueryUser
);
}
if
(
StringUtils
.
isNotBlank
(
isDelete
))
{
jsonObject
.
put
(
"isDelete"
,
isDelete
);
}
if
(
StringUtils
.
isNotBlank
(
deleteType
))
{
jsonObject
.
put
(
"deleteType"
,
deleteType
);
}
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/wechatwork/WechatWorkLostOverviewQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
wechatwork
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 14:12
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatWorkLostOverviewQO
implements
Serializable
{
/**
* yyyy-MM-dd
*/
private
String
startDate
;
/**
* yyyy-MM-dd
*/
private
String
endDate
;
/**
* 分组ID,支持多选,英文逗号隔开
*/
private
String
storeGroupId
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/qo/wechatwork/WechatWorkLostStoreGroupQO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
qo
.
wechatwork
;
import
com.alibaba.fastjson.JSONObject
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author guojx
* @Date 2024/5/22 9:27
*/
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
WechatWorkLostStoreGroupQO
extends
StoreGroupCommonQO
implements
Serializable
{
/**
* 开始日期, 非日类型的时候。根据数据组api文档
*/
private
String
startDate
;
/**
* 结束日期, 非日类型的时候。根据数据组api文档
*/
private
String
endDate
;
/**
* 排序类型 1 正序 2 倒序
*/
private
Integer
orderByType
;
/**
* 排序字段名称
*/
private
String
orderByFields
;
private
Integer
pageNum
;
private
Integer
pageSize
;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private
Integer
dataType
=
1
;
/**
* 下载导出参数:为了兼容前端传参
*/
private
String
requestProject
;
public
Integer
getDataApiOrderField
()
{
Map
<
String
,
Integer
>
map
=
new
HashMap
<>(
8
);
map
.
put
(
"onewayFriendNum"
,
1
);
map
.
put
(
"totalLostNum"
,
2
);
map
.
put
(
"deleteSalesNum"
,
3
);
map
.
put
(
"salesDeleteNum"
,
4
);
return
map
.
get
(
orderByFields
)
==
null
?
1
:
map
.
get
(
orderByFields
);
}
public
void
dealWithParam
(
JSONObject
jsonObject
)
{
if
(
jsonObject
==
null
)
{
jsonObject
=
new
JSONObject
();
}
if
(
StringUtils
.
isNotBlank
(
startDate
))
{
jsonObject
.
put
(
"startDate"
,
startDate
);
}
if
(
StringUtils
.
isNotBlank
(
endDate
))
{
jsonObject
.
put
(
"endDate"
,
endDate
);
}
if
(
orderByType
!=
null
)
{
jsonObject
.
put
(
"orderByType"
,
orderByType
);
}
if
(
orderByFields
!=
null
)
{
jsonObject
.
put
(
"orderByFields"
,
getDataApiOrderField
());
}
jsonObject
.
put
(
"pageNum"
,
pageNum
);
jsonObject
.
put
(
"pageSize"
,
pageSize
);
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/utils/AuthorizedUserUtils.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
;
import
com.gic.clerk.api.dto.AuthorizedUser
;
import
com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO
;
import
com.gic.haoban.common.utils.AuthWebRequestUtil
;
/**
* @Author guojx
* @Date 2024/5/30 10:59
*/
public
class
AuthorizedUserUtils
{
public
static
AuthorizedUser
getUserInfo
()
{
WebLoginDTO
loginUser
=
AuthWebRequestUtil
.
getLoginUser
();
AuthorizedUser
user
=
new
AuthorizedUser
();
user
.
setUserId
(
loginUser
.
getClerkId
());
user
.
setEnterpriseId
(
loginUser
.
getEnterpriseId
());
user
.
setRealName
(
loginUser
.
getClerkName
());
return
user
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/utils/data/ConcurrencyUtils.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
.
data
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.dubbo.entity.ProviderLocalTag
;
import
com.gic.web.common.utils.ExecutorPoolSingleton
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.Future
;
/**
* @Author guojx
* @Date 2024/1/12 13:41
*/
@Slf4j
public
class
ConcurrencyUtils
{
public
static
Map
<
String
,
List
<
JSONObject
>>
concurrencyDataForMap
(
List
<
MapThreadHandlerRequest
>
list
)
{
Map
<
String
,
List
<
JSONObject
>>
resultMap
=
new
HashMap
<>();
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
resultMap
;
}
ProviderLocalTag
providerLocalTag
=
ProviderLocalTag
.
tag
.
get
();
String
traceId
=
providerLocalTag
.
traceId
;
for
(
MapThreadHandlerRequest
temp
:
list
)
{
temp
.
setTraceId
(
traceId
);
}
long
startTime
=
System
.
currentTimeMillis
();
try
{
List
<
Future
<
Map
<
String
,
List
<
JSONObject
>>>>
futures2
=
ExecutorPoolSingleton
.
getInstance
().
getExecutorService
().
invokeAll
(
list
);
log
.
info
(
"调用API耗时 : "
+
(
System
.
currentTimeMillis
()
-
startTime
));
for
(
Future
<
Map
<
String
,
List
<
JSONObject
>>>
future
:
futures2
)
{
try
{
Map
<
String
,
List
<
JSONObject
>>
map
=
future
.
get
();
if
(
map
!=
null
)
{
map
.
forEach
((
k
,
v
)
->
{
resultMap
.
put
(
k
,
v
);
});
}
}
catch
(
Exception
e
)
{
log
.
warn
(
"remote Api failed : {}"
,
e
.
getCause
().
getMessage
());
}
}
long
endTime
=
System
.
currentTimeMillis
();
log
.
info
(
"耗时 : "
+
(
endTime
-
startTime
));
}
catch
(
Exception
e
)
{
log
.
warn
(
"并发调用错误:{}"
,
e
.
getMessage
(),
e
);
}
return
resultMap
;
}
public
static
List
<
JSONObject
>
concurrencyData
(
List
<
ThreadHandlerRequest
>
list
)
{
List
<
JSONObject
>
resultList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
resultList
;
}
List
<
MapThreadHandlerRequest
>
mapParam
=
new
ArrayList
<>();
for
(
int
i
=
0
,
len
=
list
.
size
();
i
<
len
;
i
++)
{
MapThreadHandlerRequest
res
=
new
MapThreadHandlerRequest
(
list
.
get
(
i
).
getJsonObject
(),
list
.
get
(
i
).
getApolloKey
(),
"data"
+
i
);
mapParam
.
add
(
res
);
}
Map
<
String
,
List
<
JSONObject
>>
map
=
concurrencyDataForMap
(
mapParam
);
if
(
map
!=
null
)
{
map
.
forEach
((
k
,
v
)
->
{
if
(
CollectionUtils
.
isNotEmpty
(
v
))
{
resultList
.
addAll
(
v
);
}
});
}
return
resultList
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/utils/data/MapThreadHandlerRequest.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
.
data
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.commons.exception.DataApiException
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.dubbo.entity.ProviderLocalTag
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.Callable
;
/**
* @Author guojx
* @Date 2024/1/11 15:33
*/
@Slf4j
public
class
MapThreadHandlerRequest
implements
Callable
<
Map
<
String
,
List
<
JSONObject
>>>
{
private
JSONObject
jsonObject
;
private
String
apolloKey
;
private
String
webObjName
;
private
String
traceId
;
public
MapThreadHandlerRequest
(
JSONObject
jsonObject
,
String
apolloKey
,
String
webObjName
)
{
this
.
jsonObject
=
JSONObject
.
parseObject
(
jsonObject
.
toJSONString
());
this
.
apolloKey
=
apolloKey
;
this
.
webObjName
=
webObjName
;
}
@Override
public
Map
<
String
,
List
<
JSONObject
>>
call
()
throws
Exception
{
try
{
//log.info("并发调用入口:{}-{}", apolloKey, webObjName);
ProviderLocalTag
providerLocalTag
=
ProviderLocalTag
.
tag
.
get
();
providerLocalTag
.
traceId
=
traceId
;
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
apolloKey
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getDataList
(
res
);
Map
<
String
,
List
<
JSONObject
>>
map
=
new
HashMap
<>(
2
);
map
.
put
(
webObjName
,
list
);
return
map
;
}
catch
(
DataApiException
e
)
{
// if (DataApiException.OVER_HANDLE_ERROR.equals(e.getCode())) {
// throw new DataApiException(e.getCode(), e.getMessage());
// }
log
.
info
(
"{}调用错误:{}"
,
apolloKey
,
e
.
getMessage
(),
e
);
}
catch
(
Exception
e
)
{
log
.
info
(
"{}调用错误:{}"
,
apolloKey
,
e
.
getMessage
(),
e
);
}
return
null
;
}
public
String
getTraceId
()
{
return
traceId
;
}
public
MapThreadHandlerRequest
setTraceId
(
String
traceId
)
{
this
.
traceId
=
traceId
;
return
this
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/utils/data/StoreAuthUtils.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
.
data
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.Page
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.enterprise.api.dto.StoreDTO
;
import
com.gic.enterprise.api.dto.StoreGroupDTO
;
import
com.gic.enterprise.api.dto.StoreSearchDTO
;
import
com.gic.enterprise.api.service.StoreGroupService
;
import
com.gic.enterprise.api.service.StoreService
;
import
com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO
;
import
com.gic.haoban.common.utils.AuthWebRequestUtil
;
import
com.gic.haoban.manage.api.service.StaffApiService
;
import
com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO
;
import
com.gic.haoban.manage.web.vo.wechatwork.DataPageVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @Author guojx
* @Date 2024/5/22 9:44
*/
@Component
@Slf4j
public
class
StoreAuthUtils
{
@Autowired
private
StoreGroupService
storeGroupService
;
@Autowired
private
StaffApiService
staffApiService
;
@Autowired
private
StoreService
storeService
;
private
static
final
String
NO_EXIST_STORE_ID
=
"no_exist_store_id"
;
public
void
setCommonParam
(
JSONObject
jsonObject
,
StoreGroupCommonQO
storeCommonQO
)
{
List
<
String
>
storeIds
=
getAuthStoreId
(
storeCommonQO
);
if
(
CollectionUtils
.
isNotEmpty
(
storeIds
))
{
jsonObject
.
put
(
"storeId"
,
storeIds
);
}
WebLoginDTO
login
=
AuthWebRequestUtil
.
getLoginUser
();
jsonObject
.
put
(
"enterpriseId"
,
login
.
getEnterpriseId
());
jsonObject
.
put
(
"wxEnterpriseId"
,
login
.
getWxEnterpriseId
());
}
public
List
<
String
>
getAuthStoreId
(
StoreGroupCommonQO
storeCommonQO
)
{
String
storeGroupId
=
storeCommonQO
.
getStoreGroupId
();
String
storeSearchParam
=
storeCommonQO
.
getStoreSearchParam
();
String
storeId
=
storeCommonQO
.
getStoreId
();
List
<
String
>
storeIdList
=
new
ArrayList
<>();
List
<
String
>
statusList
=
getAllStoreStatus
();
List
<
String
>
statusListParam
=
storeCommonQO
.
getStatusList
();
if
(
CollectionUtils
.
isNotEmpty
(
statusListParam
))
{
statusList
.
retainAll
(
statusListParam
);
}
if
(
StringUtils
.
isNotBlank
(
storeId
))
{
storeIdList
.
addAll
(
Arrays
.
stream
(
storeId
.
split
(
","
)).
collect
(
Collectors
.
toList
()));
}
String
nextStoreGroupId
=
storeCommonQO
.
getNextStoreGroupId
();
String
preStoreGroupId
=
storeCommonQO
.
getPreStoreGroupId
();
boolean
isSelectStore
=
storeCommonQO
.
isSelectStore
();
WebLoginDTO
login
=
AuthWebRequestUtil
.
getLoginUser
();
List
<
String
>
roleStoreIds
=
staffApiService
.
getHaoBanStoreIdsRolesByClerkId
(
login
.
getClerkId
(),
login
.
getWxEnterpriseId
());
if
(
CollectionUtils
.
isEmpty
(
roleStoreIds
))
{
log
.
info
(
"登录人无门店权限"
);
return
getNoExistStore
();
}
List
<
String
>
groupIds
=
null
;
List
<
String
>
storeGroupIds
=
new
ArrayList
<>();
if
(
StringUtils
.
isNotBlank
(
storeGroupId
)
||
StringUtils
.
isNotBlank
(
nextStoreGroupId
))
{
if
(
StringUtils
.
isNotBlank
(
storeGroupId
))
{
storeGroupIds
=
Arrays
.
stream
(
storeGroupId
.
split
(
","
)).
collect
(
Collectors
.
toList
());
}
else
if
(
StringUtils
.
isNotBlank
(
nextStoreGroupId
))
{
if
(
storeCommonQO
.
isNoBelongStoreGroup
())
{
storeIdList
.
addAll
(
getPreStoreIdList
(
preStoreGroupId
,
login
.
getEnterpriseId
()));
}
else
if
(
storeCommonQO
.
isRecycle
())
{
statusList
.
clear
();
statusList
.
add
(
"-3"
);
}
else
{
storeGroupIds
.
add
(
nextStoreGroupId
);
}
}
if
(
CollectionUtils
.
isNotEmpty
(
storeGroupIds
))
{
groupIds
=
storeGroupService
.
getStoreGroupIdsByParentGroupId
(
login
.
getEnterpriseId
(),
storeGroupIds
);
}
}
List
<
String
>
searchStoreIdList
=
getStore
(
login
.
getEnterpriseId
(),
login
.
getClerkId
(),
storeSearchParam
,
groupIds
,
statusList
,
storeIdList
);
if
(
isAllAuth
(
roleStoreIds
))
{
return
searchStoreIdList
;
}
//交集
roleStoreIds
.
retainAll
(
searchStoreIdList
);
if
(
CollectionUtils
.
isEmpty
(
roleStoreIds
))
{
return
getNoExistStore
();
}
return
roleStoreIds
;
}
public
void
setStoreGroupJsonParam
(
JSONObject
jsonObject
,
StoreGroupCommonQO
qo
)
{
WebLoginDTO
login
=
AuthWebRequestUtil
.
getLoginUser
();
jsonObject
.
put
(
"enterpriseId"
,
login
.
getEnterpriseId
());
Integer
storeGroup
=
getStoreGroupLevel
(
qo
);
jsonObject
.
put
(
"storeGroup"
,
storeGroup
);
List
<
String
>
storeIds
=
getAuthStoreId
(
qo
);
if
(
CollectionUtils
.
isNotEmpty
(
storeIds
))
{
jsonObject
.
put
(
"storeId"
,
storeIds
);
}
}
public
boolean
needRecycleStoreWhenAllStoreGroup
(
String
enterpriseId
,
StoreGroupCommonQO
qo
)
{
if
(
qo
.
isSelectStore
())
{
return
true
;
}
return
StringUtils
.
isBlank
(
qo
.
getStoreGroupId
())
||
qo
.
getStoreGroupId
().
contains
(
initGroupId
(
enterpriseId
))
||
qo
.
isRecycle
();
}
public
int
getStoreGroupLevel
(
StoreGroupCommonQO
qo
)
{
if
(
qo
.
isSelectStore
())
{
return
7
;
}
WebLoginDTO
login
=
AuthWebRequestUtil
.
getLoginUser
();
String
enterpriseId
=
login
.
getEnterpriseId
();
String
storeGroupId
=
qo
.
getStoreGroupId
();
if
(
StringUtils
.
isNotBlank
(
storeGroupId
))
{
List
<
StoreGroupDTO
>
list
=
storeGroupService
.
listStoreGroup
(
Arrays
.
stream
(
storeGroupId
.
split
(
","
)).
toArray
(
String
[]::
new
),
enterpriseId
);
int
min
=
list
.
stream
().
map
(
e
->
e
.
getGroupLevel
()).
min
(
Integer:
:
compareTo
).
get
();
return
min
==
0
?
1
:
min
;
}
//1:分组1,2:分组2,3:分组3,4:分组4,5:分组5,6:分组6,7:门店,8:区经)
String
nextStoreGroupId
=
qo
.
getNextStoreGroupId
();
if
(
StringUtils
.
isNotBlank
(
nextStoreGroupId
))
{
if
(
qo
.
isNoBelongStoreGroup
()
||
"-3"
.
equals
(
nextStoreGroupId
))
{
//无归属门店
return
7
;
}
//如果是叶子结点的分组,下面没有层级了,就展示门店
List
<
StoreGroupDTO
>
childList
=
storeGroupService
.
getStoreGroupList
(
enterpriseId
,
null
,
nextStoreGroupId
);
if
(
CollectionUtils
.
isEmpty
(
childList
))
{
return
7
;
}
StoreGroupDTO
storeGroupDTO
=
storeGroupService
.
getStoreGroupById
(
nextStoreGroupId
);
return
storeGroupDTO
.
getGroupLevel
()
+
1
;
}
//如果是门店筛选,则直接显示门店
if
(
StringUtils
.
isNotBlank
(
qo
.
getStoreId
()))
{
return
7
;
}
return
1
;
}
public
DataPageVO
getDataCommon
(
String
searchDataParams
,
Integer
currentPage
,
String
logStr
,
Integer
pageSize
,
boolean
hasCountPerPage
)
{
return
getDataCommonParent
(
searchDataParams
,
currentPage
,
logStr
,
pageSize
,
hasCountPerPage
,
false
);
}
public
DataPageVO
getDataCommonParent
(
String
searchDataParams
,
Integer
currentPage
,
String
logStr
,
Integer
pageSize
,
boolean
hasCountPerPage
,
boolean
noTotal
)
{
boolean
isFirst
=
currentPage
!=
null
&&
currentPage
==
1
;
if
(
isFirst
)
{
log
.
info
(
logStr
);
}
DataPageVO
vo
=
new
DataPageVO
();
vo
.
setPageNum
(
currentPage
);
vo
.
setPageSize
(
pageSize
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
searchDataParams
);
Integer
storeGroup
=
jsonObject
.
getInteger
(
"storeGroup"
);
boolean
isStore
=
storeGroup
!=
null
&&
storeGroup
==
7
;
jsonObject
.
put
(
"pageNum"
,
currentPage
);
jsonObject
.
put
(
"pageSize"
,
pageSize
);
String
apolloKey
=
jsonObject
.
getString
(
"apolloKey"
);
String
allApolloKey
=
jsonObject
.
getString
(
"allApolloKey"
);
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
apolloKey
);
Page
page
=
DataApiUtils
.
getPageData
(
res
);
List
<
JSONObject
>
list
=
DataApiUtils
.
getPageList
(
res
);
Integer
totalCount
=
page
.
getTotalCount
();
vo
.
setTotalNum
(
totalCount
);
if
(!
noTotal
)
{
//调用一次合计
if
(
hasCountPerPage
||
(
isFirst
&&
CollectionUtils
.
isNotEmpty
(
list
)))
{
if
(
hasCountPerPage
&&
CollectionUtils
.
isEmpty
(
list
))
{
list
=
new
ArrayList
<>();
}
jsonObject
.
put
(
"pageNum"
,
1
);
jsonObject
.
put
(
"storeGroup"
,
8
);
String
totalApolloKey
=
apolloKey
;
if
(
StringUtils
.
isNotBlank
(
allApolloKey
))
{
totalApolloKey
=
allApolloKey
;
}
JSONObject
total
=
getTotalJson
(
jsonObject
,
totalApolloKey
);
if
(
total
==
null
)
{
total
=
new
JSONObject
();
}
if
(
isStore
)
{
total
.
put
(
"storeName"
,
"合计("
+
totalCount
+
")"
);
}
else
{
total
.
put
(
"storeGroupName"
,
"合计("
+
totalCount
+
")"
);
}
total
.
put
(
"storeGroupId"
,
"all"
);
list
.
add
(
0
,
total
);
}
}
vo
.
setRows
(
list
);
return
vo
;
}
private
List
<
String
>
getStore
(
String
enterpriseId
,
String
userId
,
String
search
,
List
<
String
>
storeGroupIdList
,
List
<
String
>
status
,
List
<
String
>
storeIdList
)
{
StoreSearchDTO
storeSearchDTO
=
new
StoreSearchDTO
();
storeSearchDTO
.
setEnterpriseId
(
enterpriseId
);
if
(
StringUtils
.
isNotBlank
(
search
))
{
storeSearchDTO
.
setSearchName
(
search
);
}
if
(
CollectionUtils
.
isNotEmpty
(
status
))
{
storeSearchDTO
.
setStatusAnyIn
(
status
);
if
(
status
.
contains
(
"-3"
))
{
storeSearchDTO
.
setStatusIn
(
"-3"
);
}
}
if
(
CollectionUtils
.
isNotEmpty
(
storeIdList
))
{
storeSearchDTO
.
setStoreIdList
(
storeIdList
);
}
storeSearchDTO
.
setUserId
(
userId
);
if
(
CollectionUtils
.
isNotEmpty
(
storeGroupIdList
))
{
storeSearchDTO
.
setStoreGroupIdList
(
storeGroupIdList
);
}
Page
pageStore
=
new
Page
<>();
//-1代表不分页
pageStore
.
setCurrentPage
(-
1
);
Page
resultPage
=
storeService
.
storeListPage
(
pageStore
,
storeSearchDTO
);
List
<
StoreDTO
>
storeDTOList
=
resultPage
.
getResult
();
if
(
CollectionUtils
.
isEmpty
(
storeDTOList
))
{
return
getNoExistStore
();
}
return
storeDTOList
.
stream
().
map
(
e
->
e
.
getStoreId
()).
collect
(
Collectors
.
toList
());
}
public
List
<
String
>
getPreStoreIdList
(
String
preStoreGroupId
,
String
enterpriseId
)
{
return
getPreStoreIdListCommon
(
preStoreGroupId
,
enterpriseId
,
null
);
}
public
List
<
String
>
getPreStoreIdListCommon
(
String
preStoreGroupId
,
String
enterpriseId
,
List
<
String
>
statusList
)
{
preStoreGroupId
=
getPreStoreGroupId
(
preStoreGroupId
,
enterpriseId
);
String
[]
queryArr
=
new
String
[]{
preStoreGroupId
};
List
<
String
>
defaultStatusList
=
getAllStoreStatus
();
if
(
CollectionUtils
.
isNotEmpty
(
statusList
))
{
defaultStatusList
.
retainAll
(
statusList
);
}
List
<
String
>
storeIdList
=
storeService
.
getStoreIdListByGroupId
(
queryArr
,
defaultStatusList
.
stream
().
mapToInt
(
e
->
Integer
.
parseInt
(
e
)).
boxed
().
collect
(
Collectors
.
toList
()));
if
(
CollectionUtils
.
isEmpty
(
storeIdList
))
{
storeIdList
.
add
(
NO_EXIST_STORE_ID
);
}
return
storeIdList
;
}
private
String
getPreStoreGroupId
(
String
preStoreGroupId
,
String
enterpriseId
)
{
if
(
isAllStoreGroup
(
preStoreGroupId
))
{
return
initGroupId
(
enterpriseId
);
}
return
preStoreGroupId
;
}
private
static
boolean
isAllStoreGroup
(
String
preStoreGroupId
)
{
if
(
StringUtils
.
isBlank
(
preStoreGroupId
)
||
"preStoreGroupId"
.
equals
(
preStoreGroupId
))
{
return
true
;
}
return
false
;
}
private
static
boolean
isAllAuth
(
List
<
String
>
roleStoreIds
)
{
return
roleStoreIds
.
size
()
==
1
&&
"-1"
.
equals
(
roleStoreIds
.
get
(
0
));
}
public
String
initGroupId
(
String
enterpriseId
)
{
List
<
StoreGroupDTO
>
groups
=
storeGroupService
.
getStoreGroupList
(
enterpriseId
,
null
,
"0"
);
if
(
groups
!=
null
&&
groups
.
size
()
>
0
&&
groups
.
get
(
0
)
!=
null
)
{
return
groups
.
get
(
0
).
getStoreGroupId
();
}
else
{
return
null
;
}
}
private
static
List
<
String
>
getAllStoreStatus
()
{
List
<
String
>
list
=
new
ArrayList
<>();
list
.
add
(
"2"
);
list
.
add
(
"3"
);
list
.
add
(
"4"
);
list
.
add
(
"6"
);
list
.
add
(
"7"
);
//好办不要回收站
//list.add("-3");
return
list
;
}
private
static
List
<
String
>
getNoExistStore
()
{
List
<
String
>
list
=
new
ArrayList
<>(
1
);
list
.
add
(
NO_EXIST_STORE_ID
);
return
list
;
}
public
JSONObject
getTotalJson
(
JSONObject
param
,
String
apolloKey
)
{
Map
<
String
,
Object
>
totalRes
=
DataApiUtils
.
http
(
param
.
toJSONString
(),
apolloKey
);
List
<
JSONObject
>
totalList
=
DataApiUtils
.
getPageList
(
totalRes
);
if
(
CollectionUtils
.
isEmpty
(
totalList
))
{
return
null
;
}
JSONObject
total
=
totalList
.
get
(
0
);
return
total
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/utils/data/ThreadHandlerRequest.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
.
data
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @Author guojx
* @Date 2024/1/11 15:33
*/
@Slf4j
public
class
ThreadHandlerRequest
{
private
JSONObject
jsonObject
;
private
String
apolloKey
;
public
ThreadHandlerRequest
(
JSONObject
jsonObject
,
String
apolloKey
)
{
this
.
jsonObject
=
JSONObject
.
parseObject
(
jsonObject
.
toJSONString
());
this
.
apolloKey
=
apolloKey
;
}
public
JSONObject
getJsonObject
()
{
return
jsonObject
;
}
public
ThreadHandlerRequest
setJsonObject
(
JSONObject
jsonObject
)
{
this
.
jsonObject
=
jsonObject
;
return
this
;
}
public
String
getApolloKey
()
{
return
apolloKey
;
}
public
ThreadHandlerRequest
setApolloKey
(
String
apolloKey
)
{
this
.
apolloKey
=
apolloKey
;
return
this
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/utils/eventtracking/DateExpandUtils.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
.
eventtracking
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.commons.util.DataApiUtils
;
import
com.gic.commons.util.DateUtil
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @Author guojx
* @Date 2024/5/30 15:34
*/
public
class
DateExpandUtils
{
public
static
List
<
String
>
getDateList
(
String
startDate
,
String
endDate
,
Integer
dateType
)
{
//数据类型 1天 2近7天 3近30天 4周 5月
List
<
String
>
list
=
new
ArrayList
<>();
if
(
dateType
==
null
)
{
dateType
=
1
;
}
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Calendar
calendar
=
Calendar
.
getInstance
();
try
{
switch
(
dateType
)
{
case
1
:
case
2
:
case
3
:
calendar
.
setTime
(
dateType
==
1
?
df
.
parse
(
startDate
)
:
df
.
parse
(
endDate
));
calendar
.
add
(
Calendar
.
DAY_OF_YEAR
,
-
29
);
list
=
DateUtil
.
getBetweenDates
(
df
.
format
(
calendar
.
getTime
()),
dateType
==
1
?
startDate
:
endDate
);
break
;
case
4
:
calendar
.
setTime
(
DateUtil
.
strToDate
(
startDate
,
"yyyy-MM-dd"
));
calendar
.
add
(
Calendar
.
WEEK_OF_YEAR
,
-
11
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"startDate"
,
df
.
format
(
calendar
.
getTime
()));
jsonObject
.
put
(
"endDate"
,
startDate
);
jsonObject
.
put
(
"pageNum"
,
1
);
jsonObject
.
put
(
"pageSize"
,
100
);
Map
<
String
,
Object
>
res
=
DataApiUtils
.
http
(
jsonObject
.
toJSONString
(),
"data_pub_date_week"
);
List
<
JSONObject
>
data
=
DataApiUtils
.
getPageList
(
res
);
list
=
data
.
stream
().
map
(
e
->
e
.
getString
(
"weekYear"
)).
collect
(
Collectors
.
toList
());
break
;
case
5
:
//月
SimpleDateFormat
monthFormat
=
new
SimpleDateFormat
(
"yyyy-MM"
);
calendar
.
setTime
(
df
.
parse
(
startDate
));
calendar
.
add
(
Calendar
.
MONTH
,
-
11
);
for
(
int
i
=
1
;
i
<=
12
;
i
++)
{
list
.
add
(
monthFormat
.
format
(
calendar
.
getTime
()));
calendar
.
add
(
Calendar
.
MONTH
,
1
);
}
break
;
default
:
}
}
catch
(
Exception
e
)
{
}
return
list
;
}
public
static
String
getVisitTimeStr
(
Long
avgVisitTime
)
{
if
(
avgVisitTime
!=
null
)
{
int
hour
=
(
int
)
(
avgVisitTime
/
3600
);
String
str
=
getTimeStr
(
hour
);
if
(
hour
>
0
)
{
avgVisitTime
=
avgVisitTime
-
(
3600
*
hour
);
}
int
minute
=
(
int
)
(
avgVisitTime
/
60
);
str
=
str
+
":"
+
getTimeStr
(
minute
);
if
(
minute
>
0
)
{
avgVisitTime
=
avgVisitTime
-
(
60
*
minute
);
}
str
=
str
+
":"
+
getTimeStr
(
avgVisitTime
.
shortValue
());
return
str
;
}
return
null
;
}
private
static
String
getTimeStr
(
int
time
)
{
String
str
=
""
;
if
(
time
==
0
)
{
str
=
"00"
;
}
else
if
(
time
<
10
)
{
str
=
"0"
+
time
+
""
;
}
else
{
str
=
""
+
time
;
}
return
str
;
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/eventtracking/TrendVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
eventtracking
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/30 9:24
*/
@Data
public
class
TrendVO
implements
Serializable
{
private
Integer
avgVisitTime
;
/**
* 员工总人数
*/
private
Integer
clerkNum
;
/**
* 绑定人数
*/
private
Integer
bindingNum
;
/**
* 绑定率
*/
private
Double
bindingRate
;
/**
* 活跃人数
*/
private
Integer
visitNum
;
/**
* 活跃率
*/
private
Double
visitRate
;
/**
* 访问次数
*/
private
Integer
visitCnt
;
/**
* 业务日期
*/
private
String
bizDate
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/eventtracking/ViewModuleVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
eventtracking
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/30 9:44
*/
@Data
public
class
ViewModuleVO
implements
Serializable
{
/**
* 模块code
*/
private
String
moduleCode
;
/**
* 模块名称
*/
private
String
moduleName
;
/**
* 数值
*/
private
Long
data
;
/**
* 1:访问次数 2:访问人数 3:访问时长 (单位秒)
*/
private
Integer
dataType
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/eventtracking/WechatEventTrackingClerkVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
eventtracking
;
import
com.gic.haoban.manage.web.utils.eventtracking.DateExpandUtils
;
import
com.gic.haoban.manage.web.vo.wechatwork.StoreGroupCommonVO
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatEventTrackingClerkVO
extends
StoreGroupCommonVO
implements
Serializable
{
/**
* 1访问时长 单位秒
*/
private
Long
avgVisitTime
;
/**
* 访问时长 00:00:00格式
*/
private
String
visitTimeStr
;
/**
* 2最后一次登陆时间
*/
private
String
lastVisitTime
;
/**
* 是否绑定
*/
private
String
isBinding
;
/**
* 是否登陆
*/
private
String
isLogin
;
/**
* 登陆次数
*/
private
Integer
visitCnt
;
/**
* 导购id
*/
private
String
clerkId
;
private
String
clerkName
;
private
String
clerkCode
;
public
String
getVisitTimeStr
()
{
return
DateExpandUtils
.
getVisitTimeStr
(
avgVisitTime
);
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/eventtracking/WechatEventTrackingOverviewVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
eventtracking
;
import
com.gic.haoban.manage.web.utils.eventtracking.DateExpandUtils
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatEventTrackingOverviewVO
implements
Serializable
{
/**
* 次均访问时长 单位秒
*/
private
Long
avgVisitTime
;
/**
* 次均访问时长较前一期
*/
private
Double
avgVisitTimeSply
;
/**
* 次均访问时长 00:00:00格式
*/
private
String
visitTimeStr
;
/**
* 访问次数
*/
private
Integer
visitCnt
;
/**
* 访问次数较前一期
*/
private
Double
visitCntSply
;
/**
* 活跃率
*/
private
Double
visitRate
;
/**
* 活跃率较前一期
*/
private
Double
visitRateSply
;
/**
* 活跃人数
*/
private
Integer
visitNum
;
/**
* 活跃人数较前一期
*/
private
Double
visitNumSply
;
/**
* 绑定率
*/
private
Double
bindingRate
;
/**
* 绑定率较前一期
*/
private
Double
bindingRateSply
;
/**
* 绑定人数
*/
private
Integer
bindingNum
;
/**
* 绑定人数较前一期
*/
private
Double
bindingSply
;
/**
* 员工总人数
*/
private
Integer
clerkNum
;
public
String
getVisitTimeStr
()
{
return
DateExpandUtils
.
getVisitTimeStr
(
avgVisitTime
);
}
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/eventtracking/WechatEventTrackingStoreGroupVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
eventtracking
;
import
com.gic.haoban.manage.web.vo.wechatwork.StoreGroupCommonVO
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatEventTrackingStoreGroupVO
extends
StoreGroupCommonVO
implements
Serializable
{
/**
* 1员工总人数
*/
private
Integer
clerkNum
;
/**
* 2绑定人数
*/
private
Integer
bindingNum
;
/**
* 3绑定率
*/
private
Double
bindingRate
;
/**
* 4活跃人数
*/
private
Integer
visitNum
;
/**
* 5活跃率
*/
private
Double
visitRate
;
/**
* 6访问次数
*/
private
Integer
visitCnt
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/wechatwork/DataPageVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
wechatwork
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @Author guojx
* @Date 2024/1/11 14:22
*/
@Data
public
class
DataPageVO
<
T
>
implements
Serializable
{
private
Integer
pageNum
;
private
Integer
pageSize
;
private
List
<
T
>
rows
;
private
Integer
totalNum
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/wechatwork/StoreGroupCommonVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
wechatwork
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/22 9:35
*/
@Data
public
class
StoreGroupCommonVO
implements
Serializable
{
private
String
storeGroupId
;
private
String
storeGroupName
;
private
String
storeId
;
private
String
storeName
;
private
String
storeCode
;
private
String
parentStoreGroupName
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/wechatwork/WechatWorkLostClerkVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
wechatwork
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatWorkLostClerkVO
extends
StoreGroupCommonVO
implements
Serializable
{
/**
* 单向好友人数
*/
private
Integer
onewayFriendNum
;
/**
* 总流失人数
*/
private
Integer
totalLostNum
;
/**
* 删除导购人数
*/
private
Integer
deleteSalesNum
;
/**
* 导购删除好友人数
*/
private
Integer
salesDeleteNum
;
private
String
clerkCode
;
private
String
clerkName
;
private
String
clerkId
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/wechatwork/WechatWorkLostDetailVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
wechatwork
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.gic.web.common.jsonSeralizer.PhoneNumberJsonSeralizer
;
import
com.gic.web.common.jsonSeralizer.UserNameJsonSeralizer
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatWorkLostDetailVO
extends
StoreGroupCommonVO
implements
Serializable
{
/**
* 删除类型
*/
private
String
deleteType
;
/**
* 留存天数
*/
private
Integer
remainDays
;
/**
* 是否已经解除双向好友
*/
private
String
isDelete
;
/**
* 添加好友时间
*/
private
String
addTime
;
/**
* 最近消费时间
*/
private
String
lastCsmeDate
;
/**
* 删除时间
*/
private
String
deleteTime
;
private
String
clerkCode
;
private
String
clerkName
;
private
String
clerkId
;
/**
* 客户姓名
*/
@JsonSerialize
(
using
=
UserNameJsonSeralizer
.
class
)
private
String
memberName
;
/**
* 客户手机号
*/
@JsonSerialize
(
using
=
PhoneNumberJsonSeralizer
.
class
)
private
String
memberPhone
;
/**
* 会员昵称
*/
private
String
memberNick
;
/**
* 会员id -1:不存在
*/
private
String
memberId
;
private
String
staffCode
;
private
String
staffName
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/wechatwork/WechatWorkLostStoreGroupVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
wechatwork
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatWorkLostStoreGroupVO
extends
StoreGroupCommonVO
implements
Serializable
{
/**
* 单向好友人数
*/
private
Integer
onewayFriendNum
;
/**
* 总流失人数
*/
private
Integer
totalLostNum
;
/**
* 删除导购人数
*/
private
Integer
deleteSalesNum
;
/**
* 导购删除好友人数
*/
private
Integer
salesDeleteNum
;
}
haoban-manage3-web/src/main/java/com/gic/haoban/manage/web/vo/wechatwork/WechatWorkLostVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
wechatwork
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public
class
WechatWorkLostVO
implements
Serializable
{
/**
* 单向好友数
*/
private
Integer
onewayFriendNum
=
0
;
/**
* 总流失人数
*/
private
Integer
totalLostNum
=
0
;
/**
* 删除导购人数
*/
private
Integer
deleteSalesNum
=
0
;
/**
* 导购删除好友人数
*/
private
Integer
salesDeleteNum
=
0
;
/**
*
*/
private
String
bizDate
;
}
haoban-manage3-web/src/main/webapp/WEB-INF/spring-servlet.xml
View file @
b1e0a158
...
...
@@ -11,7 +11,7 @@
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
>
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<context:component-scan
base-package=
"com.gic.haoban.*"
/>
<context:component-scan
base-package=
"com.gic.haoban.*
, com.gic.web.common.*
"
/>
<!-- 启动对@AspectJ注解的支持 -->
<aop:aspectj-autoproxy
/>
...
...
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/controller/coupon/CouponController.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
controller
.
coupon
;
import
com.gic.api.base.commons.BasePageInfo
;
import
com.gic.api.base.commons.Page
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.commons.util.EntityUtil
;
import
com.gic.commons.util.PageHelperUtils
;
import
com.gic.commons.webapi.reponse.RestResponse
;
import
com.gic.haoban.manage.web.vo.coupon.CoupCardClerkLogCountVO
;
import
com.gic.haoban.manage.web.vo.coupon.CoupCardClerkLogVO
;
import
com.gic.haoban.manage.web.vo.coupon.CoupCardVO
;
import
com.gic.marketing.api.dto.CoupCardDTO
;
import
com.gic.marketing.api.dto.card.CoupCardClerkLogDTO
;
import
com.gic.marketing.api.out.service.CouponHBOuterService
;
import
com.gic.marketing.api.qdto.card.HaobanWriteOffCardQDTO
;
import
org.apache.logging.log4j.LogManager
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 卡券
*/
@RestController
@RequestMapping
(
"/coupon"
)
public
class
CouponController
{
private
static
final
org
.
apache
.
logging
.
log4j
.
Logger
logger
=
LogManager
.
getLogger
(
CouponController
.
class
);
@Autowired
private
CouponHBOuterService
couponHBOuterService
;
/**
* 卡券导购核销
* @param cardLogId 卡券日志id
* @param enterpriseId 企业id
* @param clerkId 导购id
* @return
*/
@RequestMapping
(
"/clerk-write-off"
)
public
RestResponse
<
CoupCardVO
>
writeOff
(
String
cardLogId
,
String
enterpriseId
,
String
clerkId
)
{
HaobanWriteOffCardQDTO
writeOffCardQDTO
=
new
HaobanWriteOffCardQDTO
();
writeOffCardQDTO
.
setEnterpriseId
(
enterpriseId
);
writeOffCardQDTO
.
setCardLogId
(
cardLogId
);
writeOffCardQDTO
.
setClerkId
(
clerkId
);
writeOffCardQDTO
.
setCardType
(
2
);
ServiceResponse
<
CoupCardClerkLogDTO
>
response
=
couponHBOuterService
.
scanWriteOff
(
writeOffCardQDTO
);
if
(!
response
.
isSuccess
())
{
return
RestResponse
.
failure
(
response
.
getCode
(),
response
.
getMessage
());
}
CoupCardVO
cardVO
=
getCardVO
(
response
.
getResult
());
return
RestResponse
.
successResult
(
cardVO
);
}
/**
* 卡券导购核销列表
* @param pageInfo 分页参数
* @param enterpriseId 企业id
* @param clerkId 导购id
* @param writeOffType 核销类型 1客户核销2导购核销
* @return
*/
@RequestMapping
(
"/clerk-list"
)
public
RestResponse
<
Page
<
CoupCardClerkLogVO
>>
list
(
BasePageInfo
pageInfo
,
String
enterpriseId
,
String
clerkId
,
Integer
writeOffType
)
{
Page
<
CoupCardClerkLogDTO
>
page
=
new
Page
<>();
page
.
setCurrentPage
(
pageInfo
.
getPageNum
());
page
.
setPageSize
(
pageInfo
.
getPageSize
());
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"clerkId"
,
clerkId
);
params
.
put
(
"writeOffType"
,
writeOffType
);
page
.
setParams
(
params
);
ServiceResponse
<
Page
<
CoupCardClerkLogDTO
>>
response
=
couponHBOuterService
.
pageClerkLog
(
enterpriseId
,
page
);
if
(!
response
.
isSuccess
())
{
return
RestResponse
.
failure
(
response
.
getCode
(),
response
.
getMessage
());
}
Page
<
CoupCardClerkLogVO
>
retPage
=
PageHelperUtils
.
changePageToCurrentPage
(
response
.
getResult
(),
CoupCardClerkLogVO
.
class
);
return
RestResponse
.
successResult
(
retPage
);
}
/**
* 卡券导购核销详情
* @param clerkLogId
* @return
*/
@RequestMapping
(
"/clerk-get"
)
public
RestResponse
<
CoupCardVO
>
get
(
String
clerkLogId
)
{
ServiceResponse
<
CoupCardClerkLogDTO
>
response
=
couponHBOuterService
.
getClerkLogById
(
clerkLogId
);
if
(!
response
.
isSuccess
())
{
return
RestResponse
.
failure
(
response
.
getCode
(),
response
.
getMessage
());
}
if
(
response
.
getResult
()
==
null
)
{
return
RestResponse
.
successResult
();
}
CoupCardVO
coupCardVO
=
getCardVO
(
response
.
getResult
());
return
RestResponse
.
successResult
(
coupCardVO
);
}
private
static
CoupCardVO
getCardVO
(
CoupCardClerkLogDTO
result
)
{
if
(
result
==
null
)
{
return
null
;
}
CoupCardVO
coupCardVO
=
EntityUtil
.
changeEntityNew
(
CoupCardVO
.
class
,
result
);
CoupCardDTO
coupCardDTO
=
result
.
getCoupCardDTO
();
if
(
coupCardDTO
!=
null
)
{
coupCardVO
.
setUseCondition
(
coupCardDTO
.
getUseCondition
());
coupCardVO
.
setEffectTime
(
coupCardDTO
.
getEffectTime
());
coupCardVO
.
setLimitTime
(
coupCardDTO
.
getLimitTime
());
coupCardVO
.
setStatus
(
coupCardDTO
.
getStatus
());
coupCardVO
.
setThirdName
(
coupCardDTO
.
getThirdName
());
coupCardVO
.
setMemberName
(
coupCardDTO
.
getMemberName
());
coupCardVO
.
setPhoneNum
(
coupCardDTO
.
getPhoneNum
());
coupCardVO
.
setCardNum
(
coupCardDTO
.
getCardNum
());
}
coupCardVO
.
setUseTime
(
result
.
getCreateTime
());
return
coupCardVO
;
}
/**
* 卡券核销数量
* @param enterpriseId 企业id
* @param clerkId 导购id
* @return
*/
@RequestMapping
(
"/clerk-count"
)
public
RestResponse
<
CoupCardClerkLogCountVO
>
get
(
String
enterpriseId
,
String
clerkId
)
{
ServiceResponse
<
Integer
>
memberResponse
=
couponHBOuterService
.
countClerkLog
(
enterpriseId
,
clerkId
,
1
);
ServiceResponse
<
Integer
>
clerkResponse
=
couponHBOuterService
.
countClerkLog
(
enterpriseId
,
clerkId
,
2
);
Integer
memberCount
=
memberResponse
.
getResult
();
Integer
clerkCount
=
clerkResponse
.
getResult
();
CoupCardClerkLogCountVO
countVO
=
new
CoupCardClerkLogCountVO
();
countVO
.
setMemberCount
(
memberCount
==
null
?
0
:
memberCount
);
countVO
.
setClerkCount
(
clerkCount
==
null
?
0
:
clerkCount
);
return
RestResponse
.
successResult
(
countVO
);
}
}
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/controller/marketing/MemberMarketingController.java
View file @
b1e0a158
...
...
@@ -11,6 +11,10 @@ import java.util.Map;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
com.alibaba.fastjson.JSON
;
import
com.gic.business.order.dto.ordermanage.ListOrderDTO
;
import
com.gic.business.order.qdto.ordermanage.ListOrderManageQDTO
;
import
com.gic.business.order.service.ordermanage.WebOrderManageApiService
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -92,15 +96,21 @@ public class MemberMarketingController extends WebBaseController {
private
AchievementService
achievementService
;
@Autowired
private
IntegralmallService
integralMallService
;
@Autowired
private
WebOrderManageApiService
webOrderManageApiService
;
// 会员积分商城订单数
@RequestMapping
(
"/member/integral-order-num"
)
private
RestResponse
<
Object
>
getIntegralOrderNum
(
String
enterpriseId
,
String
memberId
)
{
Page
<
IntegralMallExchangeLogDTO
>
page
=
new
Page
<>();
page
.
setCurrentPage
(
1
);
page
.
setPageSize
(
20
);
page
=
integralMallService
.
findExchangeLogFromMember
(
enterpriseId
,
memberId
,
null
,
null
,
"1,2,3"
,
null
,
page
);
return
RestResponse
.
successResult
(
page
.
getTotalCount
());
ListOrderManageQDTO
qdto
=
new
ListOrderManageQDTO
();
qdto
.
setEnterpriseId
(
enterpriseId
);
qdto
.
setMemberId
(
memberId
);
qdto
.
setBusinessType
(
2
);
logger
.
info
(
"积分商城订单查询,qdto={}"
,
JSON
.
toJSONString
(
qdto
));
qdto
.
setPageNum
(
1
);
qdto
.
setPageSize
(
1
);
ServiceResponse
<
Page
<
ListOrderDTO
>>
ret
=
webOrderManageApiService
.
listOrder
(
qdto
);
return
RestResponse
.
successResult
(
ret
.
getResult
().
getTotalCount
())
;
}
/**
...
...
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/controller/order/GicOrderController.java
View file @
b1e0a158
...
...
@@ -88,6 +88,22 @@ public class GicOrderController {
@Autowired
private
EvaluateDataApiService
evaluateDataApiService
;
// 1 虚拟商品; 2实物商品 3优惠券
// -1 全部 1 2 待发货 3已发货 4完成 关闭 0
@RequestMapping
(
"list-member-integral-order"
)
public
RestResponse
<
Object
>
listMemberIntegralOrder
(
String
enterpriseId
,
String
memberId
,
@RequestParam
(
defaultValue
=
"2"
)
Integer
type
,
@RequestParam
(
defaultValue
=
"-1"
)
int
status
,
BasePageInfo
pageInfo
)
{
ListOrderManageQDTO
qdto
=
new
ListOrderManageQDTO
();
qdto
.
setEnterpriseId
(
enterpriseId
);
qdto
.
setOrderStep
(
status
+
""
);
qdto
.
setGoodsType
(
type
);
qdto
.
setMemberId
(
memberId
);
qdto
.
setBusinessType
(
2
);
logger
.
info
(
"积分商城订单查询,qdto={}"
,
JSON
.
toJSONString
(
qdto
));
return
this
.
orderListSelect
(
qdto
,
pageInfo
,
false
);
}
// 发货订单列表 (0全部,待发货2+待收货3,部分发货7)
@RequestMapping
(
"list-order"
)
public
RestResponse
<
Object
>
orderList
(
String
enterpriseId
,
String
storeId
,
String
clerkId
,
String
search
,
...
...
@@ -479,7 +495,7 @@ public class GicOrderController {
}
// 订单详情
p
rivate
OrderDetailVO
getOrderDetail
(
String
enterpriseId
,
OrderInfoDTO
orderInfo
,
p
ublic
OrderDetailVO
getOrderDetail
(
String
enterpriseId
,
OrderInfoDTO
orderInfo
,
List
<
ListOrderItemDTO
>
orderItemDTOList
,
String
storeId
)
{
OrderDetailVO
orderDetailVO
=
EntityUtil
.
changeEntityByJSON
(
OrderDetailVO
.
class
,
orderInfo
);
orderDetailVO
.
setUsePoint
(
orderInfo
.
getUsePoints
());
...
...
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/controller/scan/ScanController.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
controller
.
scan
;
import
com.alibaba.fastjson.JSON
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.business.order.dto.ordermanage.OrderDetailDTO
;
import
com.gic.business.order.qdto.ordermanage.QueryOrderDetailQDTO
;
import
com.gic.business.order.service.ordermanage.WebOrderManageApiService
;
import
com.gic.clerk.api.dto.ClerkDTO
;
import
com.gic.clerk.api.service.ClerkService
;
import
com.gic.commons.util.EntityUtil
;
import
com.gic.commons.util.GlobalInfo
;
import
com.gic.commons.webapi.reponse.RestResponse
;
import
com.gic.haoban.manage.web.controller.order.GicOrderController
;
import
com.gic.haoban.manage.web.vo.coupon.CoupCardVO
;
import
com.gic.haoban.manage.web.vo.order.OrderDetailVO
;
import
com.gic.haoban.manage.web.vo.scan.ScanDetailVO
;
import
com.gic.marketing.api.dto.CoupCardDTO
;
import
com.gic.marketing.api.out.service.CouponHBOuterService
;
import
com.gic.marketing.api.qdto.card.HaobanWriteOffCardQDTO
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
/**
* 工作台
*/
@RestController
@RequestMapping
(
"/scan"
)
public
class
ScanController
{
private
static
final
org
.
apache
.
logging
.
log4j
.
Logger
logger
=
LogManager
.
getLogger
(
ScanController
.
class
);
@Autowired
GicOrderController
getOrderDetail
;
@Autowired
private
WebOrderManageApiService
webOrderManageApiService
;
@Autowired
private
CouponHBOuterService
couponHBOuterService
;
@Autowired
private
ClerkService
clerkService
;
/**
* 原有扫码接口聚合
* @see GicOrderController#scan(String, String, String)
* @param enterpriseId 企业id
* @param writeOffCode 核销码
* @param storeId 门店id
* @param clerkId 导购id
* @param analysisFlag 是否扫码 1是 0否
* @return
*/
@RequestMapping
(
"/all"
)
public
RestResponse
<
ScanDetailVO
>
scan
(
String
enterpriseId
,
String
writeOffCode
,
String
storeId
,
String
clerkId
,
Integer
analysisFlag
)
{
if
(
StringUtils
.
isEmpty
(
writeOffCode
))
{
return
RestResponse
.
failure
(
"9999"
,
"核销码为空"
);
}
ScanDetailVO
scanDetailVO
=
new
ScanDetailVO
();
// 通过核销码查询
QueryOrderDetailQDTO
qdto
=
new
QueryOrderDetailQDTO
();
qdto
.
setEnterpriseId
(
enterpriseId
);
qdto
.
setWriteOffCode
(
writeOffCode
);
ServiceResponse
<
OrderDetailDTO
>
ret
=
webOrderManageApiService
.
getOrderDetail
(
qdto
);
OrderDetailDTO
detail
=
ret
.
getResult
();
logger
.
info
(
"订单信息={}"
,
JSON
.
toJSONString
(
ret
));
//订单
if
(
ret
.
isSuccess
()
&&
detail
!=
null
)
{
// 已核销,且不是好办核销的
if
(
null
!=
detail
.
getOrderInfo
().
getDeliveryOptType
()
&&
detail
.
getOrderInfo
().
getDeliveryOptType
()
!=
1
)
{
logger
.
info
(
"已核销,且不是好办核销的={}"
,
writeOffCode
);
scanDetailVO
.
setOrderError
(
"此自提点无法核销"
);
}
if
(!
storeId
.
equals
(
detail
.
getOrderInfo
().
getPickUpStoreId
()))
{
scanDetailVO
.
setOrderError
(
"此自提点无法核销"
);
}
OrderDetailVO
orderDetailVO
=
getOrderDetail
.
getOrderDetail
(
enterpriseId
,
ret
.
getResult
().
getOrderInfo
(),
ret
.
getResult
().
getOrderItemList
(),
storeId
);
if
(!(
orderDetailVO
.
getOrderStep
().
equals
(
"2"
)
||
orderDetailVO
.
getOrderStep
().
equals
(
"4"
)))
{
scanDetailVO
.
setOrderError
(
"核销订单不存在"
);
}
Date
pickOverTime
=
detail
.
getOrderInfo
().
getPickUpOverTime
();
if
(
null
!=
pickOverTime
&&
pickOverTime
.
before
(
new
Date
()))
{
scanDetailVO
.
setOrderError
(
"此订单自提时间已截止"
);
}
scanDetailVO
.
setOrderDetailVO
(
orderDetailVO
);
}
//卡券
HaobanWriteOffCardQDTO
writeOffCardQDTO
=
new
HaobanWriteOffCardQDTO
();
writeOffCardQDTO
.
setEnterpriseId
(
enterpriseId
);
writeOffCardQDTO
.
setCardCode
(
writeOffCode
);
writeOffCardQDTO
.
setClerkId
(
clerkId
);
writeOffCardQDTO
.
setCardType
(
2
);
writeOffCardQDTO
.
setAnalysisFlag
(
analysisFlag
);
ServiceResponse
<
List
<
CoupCardDTO
>>
couponRet
=
couponHBOuterService
.
getCardLogByCode
(
writeOffCardQDTO
);
if
(
couponRet
.
isSuccess
()
&&
CollectionUtils
.
isNotEmpty
(
couponRet
.
getResult
()))
{
List
<
CoupCardDTO
>
couponList
=
couponRet
.
getResult
();
CoupCardDTO
coupCardDTO
=
couponList
.
get
(
0
);
if
(
couponList
.
size
()
>
1
)
{
scanDetailVO
.
setCouponError
(
"识别到多张兑换券,为防止核销错误,请协助会员,在会员小程序中进行兑换券核销"
);
scanDetailVO
.
setCouponErrorType
(
1
);
}
else
{
boolean
checkStore
=
coupCardDTO
.
isCheckStore
();
if
(!
checkStore
)
{
scanDetailVO
.
setCouponError
(
"兑换券在本店不可用"
);
}
Integer
verificationType
=
coupCardDTO
.
getVerificationType
();
if
(!
Objects
.
equals
(
verificationType
,
0
))
{
scanDetailVO
.
setCouponError
(
"请通过收银台核销此兑换券"
);
}
}
CoupCardVO
cardVO
=
EntityUtil
.
changeEntityNew
(
CoupCardVO
.
class
,
coupCardDTO
);
if
(
Objects
.
equals
(
GlobalInfo
.
COUPON_STATUS_USED
,
coupCardDTO
.
getStatus
()))
{
cardVO
.
setStoreName
(
coupCardDTO
.
getOrderStoreName
());
cardVO
.
setClerkName
(
coupCardDTO
.
getOrderClerkName
());
}
else
{
ClerkDTO
clerkDTO
=
clerkService
.
getclerkById
(
clerkId
);
if
(
clerkDTO
!=
null
)
{
cardVO
.
setStoreName
(
clerkDTO
.
getStoreName
());
cardVO
.
setClerkName
(
clerkDTO
.
getClerkName
());
}
}
cardVO
.
setUseTime
(
coupCardDTO
.
getUseTime
());
scanDetailVO
.
setCardVO
(
cardVO
);
}
return
RestResponse
.
successResult
(
scanDetailVO
);
}
}
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/qo/content/ContentMaterialShareQO.java
View file @
b1e0a158
...
...
@@ -43,10 +43,15 @@ public class ContentMaterialShareQO implements Serializable {
private
String
storeCode
;
/**
* 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
* 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
;6 潜客推荐
*/
private
Integer
channelSource
;
/**
* 喜好推荐、商品中心、商品素材、其他
*/
private
String
goodsDetailSource
;
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
...
...
@@ -102,4 +107,12 @@ public class ContentMaterialShareQO implements Serializable {
public
void
setChannelSource
(
Integer
channelSource
)
{
this
.
channelSource
=
channelSource
;
}
public
String
getGoodsDetailSource
()
{
return
goodsDetailSource
;
}
public
void
setGoodsDetailSource
(
String
goodsDetailSource
)
{
this
.
goodsDetailSource
=
goodsDetailSource
;
}
}
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/vo/coupon/CoupCardClerkLogCountVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
coupon
;
import
java.io.Serializable
;
import
java.util.Date
;
public
class
CoupCardClerkLogCountVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
707322017107902L
;
/**
* 导购核销数量
*/
private
Integer
clerkCount
=
0
;
/**
* 会员核销数量
*/
private
Integer
memberCount
=
0
;
/**
* 总核销数量
*/
private
Integer
totalCount
=
0
;
public
Integer
getClerkCount
()
{
return
clerkCount
;
}
public
void
setClerkCount
(
Integer
clerkCount
)
{
this
.
clerkCount
=
clerkCount
;
}
public
Integer
getMemberCount
()
{
return
memberCount
;
}
public
void
setMemberCount
(
Integer
memberCount
)
{
this
.
memberCount
=
memberCount
;
}
public
Integer
getTotalCount
()
{
return
this
.
memberCount
+
clerkCount
;
}
public
void
setTotalCount
(
Integer
totalCount
)
{
this
.
totalCount
=
totalCount
;
}
}
\ No newline at end of file
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/vo/coupon/CoupCardClerkLogVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
coupon
;
import
java.io.Serializable
;
import
java.util.Date
;
public
class
CoupCardClerkLogVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
707322017107902L
;
/**主键*/
private
String
clerkLogId
;
/**企业id*/
private
String
enterpriseId
;
/** 会员id */
private
String
memberId
;
/** 卡券日志id */
private
String
cardLogId
;
/**
* 卡券编码
*/
private
String
cardCode
;
/**
* 卡券名称
*/
private
String
cardName
;
/** 卡券id */
private
String
coupCardId
;
/** 门店id */
private
String
storeId
;
/** 门店code */
private
String
storeCode
;
/** 门店名称 */
private
String
storeName
;
/** 导购id */
private
String
clerkId
;
/** 导购名称 */
private
String
clerkName
;
/** 导购code */
private
String
clerkCode
;
/**
* 核销类型1客户核销2导购核销
*/
private
Integer
writeOffType
;
private
Date
updateTime
;
private
Date
createTime
;
/**
* 核销时间
*/
private
Date
useTime
;
public
String
getClerkLogId
()
{
return
clerkLogId
;
}
public
void
setClerkLogId
(
String
clerkLogId
)
{
this
.
clerkLogId
=
clerkLogId
;
}
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
public
void
setEnterpriseId
(
String
enterpriseId
)
{
this
.
enterpriseId
=
enterpriseId
;
}
public
String
getMemberId
()
{
return
memberId
;
}
public
void
setMemberId
(
String
memberId
)
{
this
.
memberId
=
memberId
;
}
public
String
getCardLogId
()
{
return
cardLogId
;
}
public
void
setCardLogId
(
String
cardLogId
)
{
this
.
cardLogId
=
cardLogId
;
}
public
String
getCardName
()
{
return
cardName
;
}
public
void
setCardName
(
String
cardName
)
{
this
.
cardName
=
cardName
;
}
public
String
getCardCode
()
{
return
cardCode
;
}
public
void
setCardCode
(
String
cardCode
)
{
this
.
cardCode
=
cardCode
;
}
public
String
getCoupCardId
()
{
return
coupCardId
;
}
public
void
setCoupCardId
(
String
coupCardId
)
{
this
.
coupCardId
=
coupCardId
;
}
public
String
getStoreId
()
{
return
storeId
;
}
public
void
setStoreId
(
String
storeId
)
{
this
.
storeId
=
storeId
;
}
public
String
getStoreCode
()
{
return
storeCode
;
}
public
void
setStoreCode
(
String
storeCode
)
{
this
.
storeCode
=
storeCode
;
}
public
String
getStoreName
()
{
return
storeName
;
}
public
void
setStoreName
(
String
storeName
)
{
this
.
storeName
=
storeName
;
}
public
String
getClerkId
()
{
return
clerkId
;
}
public
void
setClerkId
(
String
clerkId
)
{
this
.
clerkId
=
clerkId
;
}
public
String
getClerkName
()
{
return
clerkName
;
}
public
void
setClerkName
(
String
clerkName
)
{
this
.
clerkName
=
clerkName
;
}
public
String
getClerkCode
()
{
return
clerkCode
;
}
public
void
setClerkCode
(
String
clerkCode
)
{
this
.
clerkCode
=
clerkCode
;
}
public
Integer
getWriteOffType
()
{
return
writeOffType
;
}
public
void
setWriteOffType
(
Integer
writeOffType
)
{
this
.
writeOffType
=
writeOffType
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Date
getUseTime
()
{
return
createTime
;
}
public
void
setUseTime
(
Date
useTime
)
{
this
.
useTime
=
useTime
;
}
}
\ No newline at end of file
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/vo/coupon/CoupCardVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
coupon
;
import
java.io.Serializable
;
import
java.util.Date
;
public
class
CoupCardVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5868328668312616015L
;
/**
* 卡券日志id
*/
private
String
cardLogId
;
/**
* 卡券id
*/
private
String
coupCardId
;
/**
* 卡券名称
*/
private
String
cardName
;
/**
* 使用条件
*/
private
String
useCondition
;
/**
* 券号
*/
private
String
cardCode
;
/**
* 生效时间
*/
private
Date
effectTime
;
/**
* 截止时间
*/
private
Date
limitTime
;
/**
* 状态 待领取:3; 待核销:4; 已核销:5; 已过期:6; 已销毁:7; 已占用:8; 转赠中:9 ;已转赠:10
*/
private
Integer
status
;
/**
* 会员昵称
*/
private
String
thirdName
;
/**
* 会员名称
*/
private
String
memberName
;
/**
* 会员手机号码
*/
private
String
phoneNum
;
/**
* 会员卡号
*/
private
String
cardNum
;
/**
* 门店名称
*/
private
String
storeName
;
/**
* 导购名称
*/
private
String
clerkName
;
/**
* 核销时间
*/
private
Date
useTime
;
public
String
getCardLogId
()
{
return
cardLogId
;
}
public
void
setCardLogId
(
String
cardLogId
)
{
this
.
cardLogId
=
cardLogId
;
}
public
String
getCoupCardId
()
{
return
coupCardId
;
}
public
void
setCoupCardId
(
String
coupCardId
)
{
this
.
coupCardId
=
coupCardId
;
}
public
String
getCardName
()
{
return
cardName
;
}
public
void
setCardName
(
String
cardName
)
{
this
.
cardName
=
cardName
;
}
public
String
getUseCondition
()
{
return
useCondition
;
}
public
void
setUseCondition
(
String
useCondition
)
{
this
.
useCondition
=
useCondition
;
}
public
String
getCardCode
()
{
return
cardCode
;
}
public
void
setCardCode
(
String
cardCode
)
{
this
.
cardCode
=
cardCode
;
}
public
Date
getEffectTime
()
{
return
effectTime
;
}
public
void
setEffectTime
(
Date
effectTime
)
{
this
.
effectTime
=
effectTime
;
}
public
Date
getLimitTime
()
{
return
limitTime
;
}
public
void
setLimitTime
(
Date
limitTime
)
{
this
.
limitTime
=
limitTime
;
}
public
Integer
getStatus
()
{
return
status
;
}
public
void
setStatus
(
Integer
status
)
{
this
.
status
=
status
;
}
public
String
getThirdName
()
{
return
thirdName
;
}
public
void
setThirdName
(
String
thirdName
)
{
this
.
thirdName
=
thirdName
;
}
public
String
getMemberName
()
{
return
memberName
;
}
public
void
setMemberName
(
String
memberName
)
{
this
.
memberName
=
memberName
;
}
public
String
getPhoneNum
()
{
return
phoneNum
;
}
public
void
setPhoneNum
(
String
phoneNum
)
{
this
.
phoneNum
=
phoneNum
;
}
public
String
getCardNum
()
{
return
cardNum
;
}
public
void
setCardNum
(
String
cardNum
)
{
this
.
cardNum
=
cardNum
;
}
public
String
getStoreName
()
{
return
storeName
;
}
public
void
setStoreName
(
String
storeName
)
{
this
.
storeName
=
storeName
;
}
public
String
getClerkName
()
{
return
clerkName
;
}
public
void
setClerkName
(
String
clerkName
)
{
this
.
clerkName
=
clerkName
;
}
public
Date
getUseTime
()
{
return
useTime
;
}
public
void
setUseTime
(
Date
useTime
)
{
this
.
useTime
=
useTime
;
}
}
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/vo/scan/ScanDetailVO.java
0 → 100644
View file @
b1e0a158
package
com
.
gic
.
haoban
.
manage
.
web
.
vo
.
scan
;
import
com.gic.haoban.manage.web.vo.coupon.CoupCardVO
;
import
com.gic.haoban.manage.web.vo.order.OrderDetailVO
;
import
com.gic.marketing.api.dto.CoupCardDTO
;
import
java.io.Serializable
;
public
class
ScanDetailVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
5215230055823016992L
;
/**
* 订单详情
*/
private
OrderDetailVO
orderDetailVO
;
/**
* 卡券详情
*/
private
CoupCardVO
cardVO
;
/**
* 订单错误信息
*/
private
String
orderError
;
/**
* 卡券错误信息
*/
private
String
couponError
;
/**
* 错误信息类型 1弹窗
*/
private
Integer
couponErrorType
=
0
;
public
OrderDetailVO
getOrderDetailVO
()
{
return
orderDetailVO
;
}
public
void
setOrderDetailVO
(
OrderDetailVO
orderDetailVO
)
{
this
.
orderDetailVO
=
orderDetailVO
;
}
public
CoupCardVO
getCardVO
()
{
return
cardVO
;
}
public
void
setCardVO
(
CoupCardVO
cardVO
)
{
this
.
cardVO
=
cardVO
;
}
public
String
getOrderError
()
{
return
orderError
;
}
public
void
setOrderError
(
String
orderError
)
{
this
.
orderError
=
orderError
;
}
public
String
getCouponError
()
{
return
couponError
;
}
public
void
setCouponError
(
String
couponError
)
{
this
.
couponError
=
couponError
;
}
public
Integer
getCouponErrorType
()
{
return
couponErrorType
;
}
public
void
setCouponErrorType
(
Integer
couponErrorType
)
{
this
.
couponErrorType
=
couponErrorType
;
}
}
haoban-manage3-wx/src/main/webapp/WEB-INF/dubbo-haoban-manage-wx.xml
View file @
b1e0a158
...
...
@@ -21,6 +21,7 @@
<dubbo:reference
interface=
"com.gic.marketing.api.service.WechatMarketingService"
id=
"wechatMarketingService"
/>
<dubbo:reference
interface=
"com.gic.marketing.pro.api.service.ai.AiMemberLogApiService"
id=
"aiMemberLogApiService"
/>
<dubbo:reference
interface=
"com.gic.marketing.api.service.CouponCardService"
id=
"couponCardService"
/>
<dubbo:reference
interface=
"com.gic.marketing.api.out.service.CouponHBOuterService"
id=
"couponHBOuterService"
/>
<dubbo:reference
interface=
"com.gic.game.api.service.GameService"
id=
"gameService"
/>
<dubbo:reference
interface=
"com.gic.enterprise.service.CustomSettingApiService"
id=
"customSettingApiService"
/>
<dubbo:reference
interface=
"com.gic.marketing.pro.api.service.game.GameApiService"
id=
"gameApiService"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment