Commit ac7bff25 by guojx

活动已完成的会员

parent 41a1e6ca
...@@ -263,6 +263,12 @@ ...@@ -263,6 +263,12 @@
<version>${gic-webapp-common}</version> <version>${gic-webapp-common}</version>
</dependency> </dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-search-engine-api</artifactId>
<version>${gic-search-engine-api}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.gic.haoban.manage.web.controller.data; package com.gic.haoban.manage.web.controller.data;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DataApiUtils; import com.gic.commons.util.DataApiUtils;
import com.gic.commons.webapi.reponse.RestResponse; import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.web.qo.canvas.CanvasConversionDataQO; import com.gic.haoban.manage.web.qo.canvas.CanvasConversionDataQO;
import com.gic.haoban.manage.web.qo.canvas.CanvasConversionMemberQO;
import com.gic.haoban.manage.web.utils.EsMemberInfoUtils;
import com.gic.haoban.manage.web.vo.canvas.CanvasConversionDataVO; import com.gic.haoban.manage.web.vo.canvas.CanvasConversionDataVO;
import com.gic.haoban.manage.web.vo.canvas.CanvasConversionMemberVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 画布数据 * 画布数据
...@@ -20,6 +27,8 @@ import java.util.Map; ...@@ -20,6 +27,8 @@ import java.util.Map;
@RestController @RestController
@RequestMapping("/canvas-data") @RequestMapping("/canvas-data")
public class CanvasDataController { public class CanvasDataController {
@Autowired
private EsMemberInfoUtils esMemberInfoUtils;
/** /**
* 活动转化数据 * 活动转化数据
...@@ -29,11 +38,39 @@ public class CanvasDataController { ...@@ -29,11 +38,39 @@ public class CanvasDataController {
@RequestMapping("get-canvas-conversion-data") @RequestMapping("get-canvas-conversion-data")
public RestResponse<CanvasConversionDataVO> getCanvasConversionData(@RequestBody CanvasConversionDataQO qo) { public RestResponse<CanvasConversionDataVO> getCanvasConversionData(@RequestBody CanvasConversionDataQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo); JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.put("pageNum", 1); setPageParam(jsonObject, null, null);
jsonObject.put("pageSize", 10); //1画布维度2导购维度3会员维度
jsonObject.put("dataType", 1);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_list"); Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_list");
List<CanvasConversionDataVO> list = DataApiUtils.parsePageDataList(res, CanvasConversionDataVO.class); List<CanvasConversionDataVO> list = DataApiUtils.parsePageDataList(res, CanvasConversionDataVO.class);
return RestResponse.successResult(list.size() > 0 ? list.get(0) : new CanvasConversionDataVO()); return RestResponse.successResult(list.size() > 0 ? list.get(0) : new CanvasConversionDataVO());
} }
/**
* 活动已完成的会员
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-data")
public RestResponse<Page<CanvasConversionMemberVO>> getCanvasConversionData(@RequestBody CanvasConversionMemberQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
//1导购2会员
jsonObject.put("dataType", 2);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_clerk");
Page<CanvasConversionMemberVO> page = DataApiUtils.getPageData(res, CanvasConversionMemberVO.class);
List<CanvasConversionMemberVO> list = page.getResult();
esMemberInfoUtils.setMemberInfo(qo.getEnterpriseId(), list, Stream.of("memberName","memberNick","photoUrl","clerkCode", "clerkName")
.collect(Collectors.toSet()));
return RestResponse.successResult(page);
}
private void setPageParam(JSONObject jsonObject, Integer pageNum, Integer pageSize) {
jsonObject.put("pageNum", pageNum == null ? 1 : pageNum);
jsonObject.put("pageSize", pageSize == null ? 10 : pageSize);
//1画布维度2导购维度3会员维度
jsonObject.put("dataType", 1);
}
} }
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasConversionMemberQO extends CanvasConversionDataQO implements Serializable {
private Integer pageNum;
private Integer pageSize;
}
package com.gic.haoban.manage.web.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import com.gic.search.engine.api.constant.OperateEnum;
import com.gic.search.engine.api.dto.ESResponseQueryBatch;
import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO;
import com.gic.search.engine.api.filter.NewNodeAddUtil;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
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;
@Component
@Slf4j
public class EsMemberInfoUtils {
@Autowired
private ESDataDynamicOperationApiService esDataDynamicOperationApiService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
public void setMemberInfo(String enterpriseId, List list, Set<String> fieldName) {
if (CollectionUtils.isNotEmpty(list)) {
List<String> memberIdList = new ArrayList<>();
for (Object o : list) {
String memberId = ReflectUtils.getDateFieldValue(o, "memberId");
if (org.apache.commons.lang.StringUtils.isNotBlank(memberId) && !"-1".equals(memberId)) {
memberIdList.add(memberId);
}
}
if (CollectionUtils.isNotEmpty(memberIdList)) {
List<JSONObject> memberJson = queryDataBatch(enterpriseId, memberIdList, "memberId,name,mainStoreId,phoneNumber,name,nickName,mainClerkId,photoUrl");
if (CollectionUtils.isNotEmpty(memberJson)) {
Map<String, JSONObject> map = memberJson.stream()
.collect(Collectors.toMap(e -> e.getString("memberId"), e -> e));
Map<String, StoreDTO> storeMap = new HashMap<>();
Map<String, ClerkDTO> clerkMap = new HashMap<>();
boolean isQueryStore = fieldName.contains("storeName") || fieldName.contains("storeCode");
if (isQueryStore) {
List<String> mainStoreIdList = memberJson.stream().
filter(e -> org.apache.commons.lang3.StringUtils.isNotBlank(e.getString("mainStoreId")))
.map(e -> e.getString("mainStoreId")).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(mainStoreIdList)) {
List<StoreDTO> mainStoreList = storeService.queryStore(mainStoreIdList);
if (CollectionUtils.isNotEmpty(mainStoreList)) {
storeMap = mainStoreList.stream().collect(Collectors.toMap(e -> e.getStoreId(), e -> e));
}
}
}
boolean isQueryClerk = fieldName.contains("clerkCode") || fieldName.contains("clerkName");
if (isQueryClerk) {
Set<String> mainClerkIdList = memberJson.stream().
filter(e -> org.apache.commons.lang3.StringUtils.isNotBlank(e.getString("mainClerkId")))
.map(e -> e.getString("mainClerkId")).collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(mainClerkIdList)) {
List<ClerkDTO> mainClerkList = clerkService.getClerkByClerkIds(mainClerkIdList);
if (CollectionUtils.isNotEmpty(mainClerkList)) {
clerkMap = mainClerkList.stream().collect(Collectors.toMap(e -> e.getClerkId(), e -> e));
}
}
}
for (Object vo : list) {
String memberId = ReflectUtils.getDateFieldValue(vo, "memberId");
JSONObject jsonValue = map.get(memberId);
if (jsonValue != null) {
if (fieldName.contains("memberPhone")) {
ReflectUtils.setDateFieldValue(vo, "memberPhone", jsonValue.getString("phoneNumber"));
}
if (fieldName.contains("memberName")) {
ReflectUtils.setDateFieldValue(vo, "memberName", jsonValue.getString("name"));
}
if (fieldName.contains("memberNick")) {
ReflectUtils.setDateFieldValue(vo, "memberNick", jsonValue.getString("nickName"));
}
if (fieldName.contains("photoUrl")) {
ReflectUtils.setDateFieldValue(vo, "photoUrl", jsonValue.getString("photoUrl"));
}
if (fieldName.contains("memberScene")) {
ReflectUtils.setDateFieldValue(vo, "memberScene", 3);
}
if (isQueryStore) {
String mainStoreId = jsonValue.getString("mainStoreId");
// ReflectUtils.setDateFieldValue(vo, "storeId", mainStoreId);
if (org.apache.commons.lang.StringUtils.isNotBlank(mainStoreId)) {
StoreDTO storeValue = storeMap.get(mainStoreId);
if (storeValue != null) {
ReflectUtils.setDateFieldValue(vo, "storeCode", storeValue.getStoreCode());
ReflectUtils.setDateFieldValue(vo, "storeName", storeValue.getStoreName());
if (fieldName.contains("parentStoreGroupName")) {
ReflectUtils.setDateFieldValue(vo, "parentStoreGroupName", storeValue.getStoreGroupName());
}
}
}
}
if (isQueryClerk) {
String mainClerkId = jsonValue.getString("mainClerkId");
// ReflectUtils.setDateFieldValue(vo, "clerkId", mainClerkId);
if (org.apache.commons.lang.StringUtils.isNotBlank(mainClerkId)) {
ClerkDTO clerkDTO = clerkMap.get(mainClerkId);
if (clerkDTO != null) {
ReflectUtils.setDateFieldValue(vo, "clerkCode", clerkDTO.getClerkCode());
ReflectUtils.setDateFieldValue(vo, "clerkName", clerkDTO.getClerkName());
}
}
}
}
}
}
}
}
}
public List<JSONObject> queryDataBatch(String enterpriseId, List<String> memberIdList, String returnFields) {
if (CollectionUtils.isEmpty(memberIdList)) {
log.warn("memberIdList 为空", enterpriseId);
return null;
}
List<JSONObject> jsonObjList = new ArrayList<JSONObject>();
try {
JSONObject searchJson = new JSONObject();
String[] memberIdArr = memberIdList.toArray(new String[memberIdList.size()]);
String memberIds = StringUtils.join(memberIdArr, " ");
searchJson = NewNodeAddUtil.addNewNodeForAnd("memberId", OperateEnum.OPERATE_CONTAIN.getValue(), memberIds,
searchJson);
DynamicSearchDTO search = new DynamicSearchDTO();
log.info("==============搜索条件==============: {}", JSON.toJSONString(searchJson));
search.setRecordNumber(memberIdList.size() + 1);
search.setSearchJson(searchJson);
search.setEnterpriseId(enterpriseId);
search.setColumnCategoryCode("member");
search.setReturnFileds(returnFields);
search.setSortJson(NewNodeAddUtil.createSortNode("memberId", NewNodeAddUtil.SORT_RULE_ASC));
ESResponseQueryBatch esRes = esDataDynamicOperationApiService.queryDataBatch(search, false, null);
jsonObjList = esRes.getRes();
} catch (Exception e) {
log.warn("从搜索引擎搜索会员数据异常", memberIdList, enterpriseId, e);
}
return jsonObjList;
}
}
package com.gic.haoban.manage.web.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberInfoQO implements Serializable {
/**
* 是否设置服务门店名称和code
*/
private boolean setStore;
/**
* 是否设置专属导购名称和code
*/
private boolean setClerk;
/**
* 是否设置服务门店上级分组名称
*/
private boolean setParentStoreGroup;
/**
* 是否设置会员类型。
* 1:非会员 2:会员已注销 3:正常
*/
private boolean setMemberScene;
}
package com.gic.haoban.manage.web.utils;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Method;
@Slf4j
public class ReflectUtils {
public static String getDateFieldValue(Object obj, String fieldName) {
try {
Method method = obj.getClass().getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
return (String) method.invoke(obj);
} catch (Exception e) {
log.warn("反射get值错误:{}", e.getMessage(), e);
return null;
}
}
public static void setDateFieldValue(Object obj, String fieldName, String dataValue) {
try {
Method method = obj.getClass().getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), String.class);
method.invoke(obj, dataValue);
} catch (Exception e) {
log.warn("反射set值错误:{}", e.getMessage(), e);
}
}
public static void setDateFieldValue(Object obj, String fieldName, Integer dataValue) {
try {
Method method = obj.getClass().getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), Integer.class);
method.invoke(obj, dataValue);
} catch (Exception e) {
log.warn("反射set值错误:{}", e.getMessage(), e);
}
}
public static <T> T createInstance(Class<T> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException e) {
return null;
} catch (IllegalAccessException e) {
return null;
}
}
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasConversionMemberVO extends CanvasConversionDataVO implements Serializable {
/**
* 会员id
*/
private String mbrId;
private String memberId;
private String clerkId;
private String clerkCode;
private String clerkName;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNick;
/**
* 头像
*/
private String photoUrl;
public String getMemberId() {
return mbrId;
}
}
...@@ -186,4 +186,7 @@ ...@@ -186,4 +186,7 @@
<dubbo:reference id="gatheringActivityWxApiService" interface="com.gic.marketing.pro.api.service.activity.GatheringActivityWxApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference id="gatheringActivityWxApiService" interface="com.gic.marketing.pro.api.service.activity.GatheringActivityWxApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference id="eSDataDynamicOperationApiService"
interface="com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService"
timeout="10000"/>
</beans> </beans>
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