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
acb2f6e6
Commit
acb2f6e6
authored
Jan 30, 2023
by
guojx
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature-2023-01-目标配置' into 'developer'
Feature 2023 01 目标配置 See merge request
!910
parents
70c44f71
c61c09b4
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
206 additions
and
7 deletions
+206
-7
TargetController.java
...haoban/manage/web/controller/target/TargetController.java
+80
-7
DataTargetHttpUtils.java
...c/haoban/manage/web/utils/target/DataTargetHttpUtils.java
+14
-0
TargetAnalysisUtils.java
...c/haoban/manage/web/utils/target/TargetAnalysisUtils.java
+112
-0
No files found.
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/controller/target/TargetController.java
View file @
acb2f6e6
package
com
.
gic
.
haoban
.
manage
.
web
.
controller
.
target
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.Page
;
import
com.gic.commons.web.qo.PageQo
;
import
com.gic.commons.webapi.reponse.RestResponse
;
import
com.gic.enterprise.api.dto.StoreDTO
;
import
com.gic.enterprise.api.service.StoreService
;
import
com.gic.haoban.manage.web.qo.target.QueryDataStatisticsCommonQO
;
import
com.gic.haoban.manage.web.utils.StoreAuthUtils
;
import
com.gic.haoban.manage.web.utils.target.DataTargetHttpUtils
;
import
com.gic.haoban.manage.web.utils.target.TargetAnalysisUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
java.util.List
;
...
...
@@ -25,19 +31,39 @@ import java.util.stream.Collectors;
public
class
TargetController
{
@Autowired
private
StoreAuthUtils
storeAuthUtils
;
@Autowired
private
StoreService
storeService
;
/**
* 目标跟进达成分析
月份
数据概览
* 目标跟进达成分析数据概览
* @param qo
* @return
*/
@RequestMapping
(
value
=
"get-target-attainment-analysis-overview"
)
@ResponseBody
public
RestResponse
getTargetAttainmentAnalysisOverview
(
QueryDataStatisticsCommonQO
qo
)
{
JSONObject
jsonObject
=
getCommon
(
qo
,
tru
e
);
JSONObject
jsonObject
=
getCommon
(
qo
,
fals
e
);
Map
<
String
,
Object
>
res
=
DataTargetHttpUtils
.
http
(
DataTargetHttpUtils
.
getParamNoPage
(
jsonObject
).
toJSONString
(),
"data_mbr_target_store_total"
);
JSONObject
result1
=
DataTargetHttpUtils
.
getData
(
res
);
//合并
JSONObject
jsonObject2
=
getCommon
(
qo
,
true
);
Map
<
String
,
Object
>
res2
=
DataTargetHttpUtils
.
http
(
DataTargetHttpUtils
.
getParamNoPage
(
jsonObject2
).
toJSONString
(),
qo
.
getTimeType
()
==
1
?
"data_mbr_target_attainment_analysis_year_overview"
:
"data_mbr_target_attainment_analysis_month_overview"
);
return
DataTargetHttpUtils
.
responseOfOne
(
res
,
null
);
JSONObject
result2
=
DataTargetHttpUtils
.
getData
(
res2
);
result1
.
putAll
(
result2
);
List
<
String
>
keyList
=
TargetAnalysisUtils
.
map
.
get
(
1
);
keyList
.
addAll
(
TargetAnalysisUtils
.
map
.
get
(
0
));
keyList
.
addAll
(
TargetAnalysisUtils
.
map
.
get
(
2
));
keyList
.
addAll
(
TargetAnalysisUtils
.
map
.
get
(
3
));
keyList
.
addAll
(
TargetAnalysisUtils
.
map
.
get
(
4
));
keyList
.
addAll
(
TargetAnalysisUtils
.
map
.
get
(
5
));
JSONObject
result
=
new
JSONObject
();
for
(
String
key
:
keyList
)
{
result
.
put
(
key
,
result1
.
get
(
key
));
}
return
RestResponse
.
successResult
(
result
);
}
/**
...
...
@@ -76,15 +102,62 @@ public class TargetController {
* 目标跟进达成分析门店明细数据
* @param qo
* @param pageQo
* @param sortField 排序字段
* @param sortType asc desc
* @param type 0:实际新增会员数 1:实际会员销售额 2:实际会员消费总次数 3:客单价 4:存量会员消费总次数 5:新增会员消费总次数 6:存量会员仅消费一次总次数 7:存量会员消费多次总次数
* 8:新增会员仅消费一次总次数 9:新增会员消费多次总次数 10:存量会员仅消费一次总人数 11:存量会员消费多次总人数 12 :量会员消费多次人均消费次数
* 13 :新增会员仅消费一次总人数 14:新增会员消费多次总人数 15:新增会员消费多次人均消费次数
* @return
*/
@RequestMapping
(
value
=
"get-target-analysis-store-detail"
)
@ResponseBody
public
RestResponse
getTargetAnalysisStoreDetail
(
QueryDataStatisticsCommonQO
qo
,
PageQo
pageQo
)
{
JSONObject
jsonObject
=
getCommon
(
qo
,
true
);
public
RestResponse
getTargetAnalysisStoreDetail
(
QueryDataStatisticsCommonQO
qo
,
PageQo
pageQo
,
String
sortField
,
String
sortType
,
@RequestParam
(
defaultValue
=
"1"
)
Integer
type
)
{
JSONObject
jsonObject
=
getCommon
(
qo
,
type
<=
3
?
false
:
true
);
if
(
StringUtils
.
isNotBlank
(
sortField
))
{
jsonObject
.
put
(
"orderByField"
,
sortField
+
" "
+
sortType
);
}
Map
<
String
,
Object
>
res
=
DataTargetHttpUtils
.
http
(
DataTargetHttpUtils
.
getParam
(
pageQo
,
jsonObject
).
toJSONString
(),
qo
.
getTimeType
()
==
1
?
"data_mbr_target_analysis_year_store_detail"
:
"data_mbr_target_analysis_month_store_detail"
);
return
DataTargetHttpUtils
.
responsePageData
(
res
);
type
<=
3
?
"data_mbr_target_store_detail"
:
(
qo
.
getTimeType
()
==
1
?
"data_mbr_target_analysis_year_store_detail"
:
"data_mbr_target_analysis_month_store_detail"
));
Page
page
=
DataTargetHttpUtils
.
getPage
(
res
);
//加上总计数据
RestResponse
totalRes
=
getTargetAttainmentAnalysisOverview
(
qo
);
if
(!
"0000"
.
equals
(
totalRes
.
getCode
()))
{
return
totalRes
;
}
JSONObject
totalJson
=
(
JSONObject
)
totalRes
.
getResult
();
JSONObject
total
=
new
JSONObject
();
List
<
String
>
keyList
=
TargetAnalysisUtils
.
map
.
get
(
type
.
toString
());
for
(
String
key
:
keyList
)
{
total
.
put
(
key
,
totalJson
.
get
(
key
));
}
total
.
put
(
"storeId"
,
"-1"
);
total
.
put
(
"storeName"
,
"合计"
);
total
.
put
(
"storeCode"
,
"合计"
);
List
<
JSONObject
>
dataList
=
page
.
getResult
();
List
<
JSONObject
>
resultList
=
page
.
getResult
();
resultList
.
add
(
total
);
if
(
CollectionUtils
.
isNotEmpty
(
dataList
))
{
for
(
JSONObject
obj
:
dataList
)
{
JSONObject
temp
=
new
JSONObject
();
String
storeId
=
obj
.
getString
(
"storeId"
);
temp
.
put
(
"storeId"
,
storeId
);
if
(!
"-1"
.
equals
(
storeId
))
{
StoreDTO
storeDTO
=
storeService
.
getStore
(
storeId
);
if
(
storeDTO
!=
null
)
{
temp
.
put
(
"storeName"
,
storeDTO
.
getStoreName
());
temp
.
put
(
"storeCode"
,
storeDTO
.
getStoreCode
());
}
}
for
(
String
key
:
keyList
)
{
temp
.
put
(
key
,
obj
.
get
(
key
));
}
resultList
.
add
(
temp
);
}
}
page
.
setResult
(
resultList
);
return
RestResponse
.
successResult
(
page
);
}
/**
...
...
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/utils/target/DataTargetHttpUtils.java
View file @
acb2f6e6
...
...
@@ -256,4 +256,18 @@ public class DataTargetHttpUtils {
}
return
data
+
"%"
;
}
public
static
Page
getPage
(
Map
<
String
,
Object
>
detailRes
)
{
Page
page
=
new
Page
();
List
<
JSONObject
>
dataList
=
(
List
<
JSONObject
>)
detailRes
.
get
(
"data"
);
JSONObject
pageJson
=
(
JSONObject
)
detailRes
.
get
(
"page"
);
page
.
setPageSize
(
pageJson
.
getIntValue
(
"pageSize"
));
page
.
setTotalCount
(
pageJson
.
getIntValue
(
"totalCount"
));
page
.
setCurrentPage
(
pageJson
.
getIntValue
(
"currentPage"
));
page
.
setTotalPage
(
pageJson
.
getIntValue
(
"totalPage"
));
page
.
setResult
(
dataList
);
return
page
;
}
}
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/utils/target/TargetAnalysisUtils.java
0 → 100644
View file @
acb2f6e6
package
com
.
gic
.
haoban
.
manage
.
web
.
utils
.
target
;
import
com.alibaba.fastjson.JSONObject
;
import
java.util.*
;
/**
* 目标达成分析处理
* @Author guojx
* @Date 2023/1/18 9:12
*/
public
class
TargetAnalysisUtils
{
/**
* 实际会员销售额
*/
private
static
List
<
String
>
mbrPayAmt
=
Arrays
.
asList
(
"mbrPayAmt"
,
"mbrPayAmtLast"
,
"mbrPayAmtTarget"
,
"mbrPayAmtActualRate"
);
/**
* 实际新增会员数
*/
private
static
List
<
String
>
newMbrNum
=
Arrays
.
asList
(
"newMbrNum"
,
"newMbrNumLast"
,
"newMbrNumRollTarget"
,
"newMbrNumActualRate"
);
/**
* 会员消费总次数
*/
private
static
List
<
String
>
mbrCsmeTimes
=
Arrays
.
asList
(
"mbrCsmeTimes"
,
"mbrCsmeTimesLast"
,
"mbrCsmeTimesTarget"
,
"mbrCsmeTimesActualRate"
);
/**
* 客单价
*/
private
static
List
<
String
>
perCusTrans
=
Arrays
.
asList
(
"perCusTrans"
,
"perCusTransLast"
,
"perCusTransTarget"
,
"perCusTransActualRate"
);
/**
* 存量会员消费总次数
*/
private
static
List
<
String
>
stockMbrCsmeCnt
=
Arrays
.
asList
(
"stockMbrCsmeCnt"
,
"yearStockMbrCsmeCnt"
,
"stockMbrCsmeTimesTarget"
,
"stockMbrCsmeCntRate"
);
/**
* 新增会员消费总次数
*/
private
static
List
<
String
>
newMbrCsmeCnt
=
Arrays
.
asList
(
"newMbrCsmeCnt"
,
"yearNewMbrCsmeCnt"
,
"newMbrCsmeTimesTarget"
,
"newMbrCsmeCntRate"
);
/**
* 存量会员仅消费一次总次数
*/
private
static
List
<
String
>
stockMbrCsmeFristCnt
=
Arrays
.
asList
(
"stockMbrCsmeFristCnt"
,
"yearStockMbrCsmeFristCnt"
,
"stockMbrOneCsmeTimesTarget"
,
"stockMbrCsmeFristCntRate"
);
/**
* 存量会员消费多次总次数
*/
private
static
List
<
String
>
stockMbrCsmeRepchCnt
=
Arrays
.
asList
(
"stockMbrCsmeRepchCnt"
,
"yearStockMbrCsmeRepchCnt"
,
"stockMbrRepchCsmeTimesTarget"
,
"stockMbrCsmeRepchCntRate"
);
/**
* 存量会员仅消费一次总人数
*/
private
static
List
<
String
>
stockMbrCsmeFristNum
=
Arrays
.
asList
(
"stockMbrCsmeFristNum"
,
"yearStockMbrCsmeFristNum"
,
"stockMbrOneCsmeNumTarget"
,
"stockMbrCsmeFristNumRate"
);
/**
* 存量会员消费多次总人数
*/
private
static
List
<
String
>
stockMbrCsmeRepchNum
=
Arrays
.
asList
(
"stockMbrCsmeRepchNum"
,
"yearStockMbrCsmeRepchNum"
,
"stockMbrRepchCsmeNumTarget"
,
"stockMbrCsmeRepchNumRate"
);
/**
* 存量会员消费多次人均消费次数 存量会员复购总人数待定
*/
private
static
List
<
String
>
stockMbrCsmeRepchAvg
=
Arrays
.
asList
(
"stockMbrCsmeRepchAvg"
,
"yearStockMbrCsmeRepchAvg"
,
"stockMbrRepchAvgCsmeTimesTarget"
,
"stockMbrCsmeRepchAvgRate"
);
/**
* 新增会员仅消费一次总次数
*/
private
static
List
<
String
>
newMbrCsmeFristCnt
=
Arrays
.
asList
(
"newMbrCsmeFristCnt"
,
"yearNewMbrCsmeFristCnt"
,
"newMbrOneCsmeTimesTarget"
,
"newMbrCsmeFristCntRate"
);
/**
* 新增会员消费多次总次数
*/
private
static
List
<
String
>
newMbrCsmeRepchCnt
=
Arrays
.
asList
(
"newMbrCsmeRepchCnt"
,
"yearNewMbrCsmeRepchCnt"
,
"newMbrRepchCsmeTimesTarget"
,
"newMbrCsmeRepchCntRate"
);
/**
* 新增会员仅消费一次总人数
*/
private
static
List
<
String
>
newMbrCsmeFristnum
=
Arrays
.
asList
(
"newMbrCsmeFristnum"
,
"yearNewMbrCsmeFristNum"
,
"newMbrOneCsmeNumTarget"
,
"newMbrCsmeFristnumRate"
);
/**
* 新增会员消费多次总人数
*/
private
static
List
<
String
>
newMbrCsmeRepchNum
=
Arrays
.
asList
(
"newMbrCsmeRepchNum"
,
"yearNewMbrCsmeRepchNum"
,
"newMbrRepchCsmeNumTarget"
,
"newMbrCsmeRepchNumRate"
);
/**
* 新增会员消费多次人均消费次数
*/
private
static
List
<
String
>
newMbrCsmeRepchAvg
=
Arrays
.
asList
(
"newMbrCsmeRepchAvg"
,
"yearNewMbrCsmeRepchAvg"
,
"newMbrRepchAvgCsmeTimesTarget"
,
"newMbrCsmeRepchAvgRate"
);
public
static
Map
<
String
,
List
<
String
>>
map
=
new
HashMap
<>(
24
);
static
{
map
.
put
(
"0"
,
newMbrNum
);
map
.
put
(
"1"
,
mbrPayAmt
);
map
.
put
(
"2"
,
mbrCsmeTimes
);
map
.
put
(
"3"
,
perCusTrans
);
map
.
put
(
"4"
,
stockMbrCsmeCnt
);
map
.
put
(
"5"
,
newMbrCsmeCnt
);
map
.
put
(
"6"
,
stockMbrCsmeFristCnt
);
map
.
put
(
"7"
,
stockMbrCsmeRepchCnt
);
map
.
put
(
"8"
,
newMbrCsmeFristCnt
);
map
.
put
(
"9"
,
newMbrCsmeRepchCnt
);
map
.
put
(
"10"
,
stockMbrCsmeFristNum
);
map
.
put
(
"11"
,
stockMbrCsmeRepchNum
);
map
.
put
(
"12"
,
stockMbrCsmeRepchAvg
);
map
.
put
(
"13"
,
newMbrCsmeFristnum
);
map
.
put
(
"14"
,
newMbrCsmeRepchNum
);
map
.
put
(
"15"
,
newMbrCsmeRepchAvg
);
}
public
static
List
<
JSONObject
>
getData
(
String
type
,
List
<
JSONObject
>
list
)
{
List
<
String
>
keyList
=
map
.
get
(
type
);
List
<
JSONObject
>
result
=
new
ArrayList
<>();
for
(
JSONObject
json
:
list
)
{
JSONObject
vo
=
new
JSONObject
();
for
(
String
key
:
keyList
)
{
vo
.
put
(
key
,
json
.
get
(
key
));
}
result
.
add
(
vo
);
}
return
result
;
}
}
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