Commit acb2f6e6 by guojx

Merge branch 'feature-2023-01-目标配置' into 'developer'

Feature 2023 01 目标配置

See merge request !910
parents 70c44f71 c61c09b4
package com.gic.haoban.manage.web.controller.target; package com.gic.haoban.manage.web.controller.target;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.web.qo.PageQo; import com.gic.commons.web.qo.PageQo;
import com.gic.commons.webapi.reponse.RestResponse; 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.qo.target.QueryDataStatisticsCommonQO;
import com.gic.haoban.manage.web.utils.StoreAuthUtils; 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.DataTargetHttpUtils;
import com.gic.haoban.manage.web.utils.target.TargetAnalysisUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List; import java.util.List;
...@@ -25,19 +31,39 @@ import java.util.stream.Collectors; ...@@ -25,19 +31,39 @@ import java.util.stream.Collectors;
public class TargetController { public class TargetController {
@Autowired @Autowired
private StoreAuthUtils storeAuthUtils; private StoreAuthUtils storeAuthUtils;
@Autowired
private StoreService storeService;
/** /**
* 目标跟进达成分析月份数据概览 * 目标跟进达成分析数据概览
* @param qo * @param qo
* @return * @return
*/ */
@RequestMapping(value = "get-target-attainment-analysis-overview") @RequestMapping(value = "get-target-attainment-analysis-overview")
@ResponseBody @ResponseBody
public RestResponse getTargetAttainmentAnalysisOverview(QueryDataStatisticsCommonQO qo) { public RestResponse getTargetAttainmentAnalysisOverview(QueryDataStatisticsCommonQO qo) {
JSONObject jsonObject = getCommon(qo, true); JSONObject jsonObject = getCommon(qo, false);
Map<String, Object> res = DataTargetHttpUtils.http(DataTargetHttpUtils.getParamNoPage(jsonObject).toJSONString(), 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"); 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 { ...@@ -76,15 +102,62 @@ public class TargetController {
* 目标跟进达成分析门店明细数据 * 目标跟进达成分析门店明细数据
* @param qo * @param qo
* @param pageQo * @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 * @return
*/ */
@RequestMapping(value = "get-target-analysis-store-detail") @RequestMapping(value = "get-target-analysis-store-detail")
@ResponseBody @ResponseBody
public RestResponse getTargetAnalysisStoreDetail(QueryDataStatisticsCommonQO qo, PageQo pageQo) { public RestResponse getTargetAnalysisStoreDetail(QueryDataStatisticsCommonQO qo, PageQo pageQo,
JSONObject jsonObject = getCommon(qo, true); 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(), 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"); type <=3 ? "data_mbr_target_store_detail" : (qo.getTimeType() == 1 ?
return DataTargetHttpUtils.responsePageData(res); "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);
} }
/** /**
......
...@@ -256,4 +256,18 @@ public class DataTargetHttpUtils { ...@@ -256,4 +256,18 @@ public class DataTargetHttpUtils {
} }
return data + "%"; 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;
}
} }
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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment