Commit fb5d0b8d by 徐高华

Merge branch 'feature-canvas' into 'developer'

Feature canvas

See merge request !2374
parents 73900cea d310d84e
......@@ -268,6 +268,12 @@
<version>${gic-webapp-common}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-search-engine-api</artifactId>
<version>${gic-search-engine-api}</version>
</dependency>
</dependencies>
<build>
......
package com.gic.haoban.manage.web.controller.data;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DataApiUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.web.qo.canvas.*;
import com.gic.haoban.manage.web.utils.EsMemberInfoUtils;
import com.gic.haoban.manage.web.vo.canvas.*;
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.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 画布数据
*/
@Slf4j
@RestController
@RequestMapping("/canvas-data")
public class CanvasDataController {
@Autowired
private EsMemberInfoUtils esMemberInfoUtils;
@Autowired
private StaffApiService staffApiService;
/**
* 活动转化数据
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-data")
public RestResponse<CanvasConversionDataVO> getCanvasConversionData(@RequestBody CanvasConversionDataQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, null, null);
//1画布维度2导购维度3会员维度
jsonObject.put("dataType", 1);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_list");
List<CanvasConversionDataVO> list = DataApiUtils.parsePageDataList(res, CanvasConversionDataVO.class);
return RestResponse.successResult(list.size() > 0 ? list.get(0) : new CanvasConversionDataVO());
}
/**
* 画布待完成会员列表
* @param qo
* @return
*/
@RequestMapping("get-canvas-to-do-complete-member")
public RestResponse<Page<CanvasToDoCompleteMemberVO>> getCanvasToDoCompleteMember(@RequestBody CanvasToDoCompleteMemberQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mbr");
Page<CanvasToDoCompleteMemberVO> page = DataApiUtils.getPageData(res, CanvasToDoCompleteMemberVO.class);
List<CanvasToDoCompleteMemberVO> list = page.getResult();
esMemberInfoUtils.setMemberInfo(qo.getEnterpriseId(), list, Stream.of("memberName","memberNick","photoUrl","clerkCode", "clerkName")
.collect(Collectors.toSet()));
return RestResponse.successResult(page);
}
/**
* 活动已完成的会员
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-member")
public RestResponse<Page<CanvasConversionMemberVO>> getCanvasConversionMember(@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);
}
/**
* 活动导购详情
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-clerk")
public RestResponse<Page<CanvasConversionMemberVO>> getCanvasConversionClerk(@RequestBody CanvasConversionClerkQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
//1导购2会员
jsonObject.put("dataType", 1);
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("clerkCode", "clerkName")
.collect(Collectors.toSet()));
return RestResponse.successResult(page);
}
/**
* 区经的话务/群发 门店和活动数据
* @param qo
* @return
*/
@RequestMapping("get-tel-or-mass-task-data")
public RestResponse<Page<CanvasTaskVO>> getTelOrMassTaskData(@RequestBody CanvasTaskQO qo) {
boolean isStore = qo.getDataType() == 1;
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
if (StringUtils.isBlank(qo.getStoreId())) {
List<String> authStoreIdList = staffApiService
.getHaobanStoreIdsRolesByClerkIdAndStoreStatus(qo.getClerkId(), qo.getWxEnterpriseId(), null, null);
if (CollectionUtils.isNotEmpty(authStoreIdList)) {
jsonObject.put("storeId", authStoreIdList.stream().collect(Collectors.joining(",")));
}
}
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mkt_task");
Page<CanvasTaskVO> page = DataApiUtils.getPageData(res, CanvasTaskVO.class);
List<CanvasTaskVO> list = page.getResult();
if (qo.getPageNum() == 1) {
//合计
jsonObject.put("dataType", 4);
res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mkt_task");
JSONObject total = DataApiUtils.getPageOne(res);
total.put(isStore ? "storeName" : "canvasName", "合计");
if (CollectionUtils.isEmpty(list)) {
list = new ArrayList<>();
}
list.add(0, JSONObject.parseObject(total.toJSONString(), CanvasTaskVO.class));
page.setResult(list);
}
return RestResponse.successResult(page);
}
/**
* 店长 任务列表
* @param qo
* @return
*/
@RequestMapping("get-tel-and-mass-task-data")
public RestResponse<Page<CanvasStoreTaskVO>> getTelAndMassTaskData(@RequestBody CanvasStoreTaskQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
jsonObject.put("subType", "all");
if (StringUtils.isNotBlank(qo.getClerkId()) && staffApiService.isManager(qo.getClerkId())) {
//店长不需要传参
jsonObject.remove("clerkId");
}
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mkt_task");
Page<CanvasStoreTaskVO> page = DataApiUtils.getPageData(res, CanvasStoreTaskVO.class);
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);
}
}
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 CanvasConversionClerkQO extends CanvasConversionDataQO implements Serializable {
private Integer pageNum;
private Integer pageSize;
/**
* 1 升序 2降序
*/
private Integer orderByType;
/**
* 1金额/积分 2人数
*/
private String orderByFields;
}
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 CanvasConversionDataQO implements Serializable {
private Long canvasId;
private String enterpriseId;
/**
* 1:积分消耗 2:转化
*/
private Integer sourceType;
/**
* mass:群发任务 tel_task:话务任务
*/
private String subType;
}
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;
/**
* 1已转化2为转化 默认已转化
*/
private Integer isConvs;
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.commons.web.qo.PageQo;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasStoreTaskQO extends PageQo implements Serializable {
/**
* 1 升序 2降序
*/
private Integer orderByType;
/**
* 1完成任务数2待完成任务数3逾期任务数4逾期失效任务数5总任务数6任务完成率
*/
private String orderByFields;
/**
* 开始时间 yyyy-MM-dd
*/
private String startDate;
private String endDate;
/**
* 导购筛选
*/
private String clerkQuery;
/**
* 画布活动筛选
*/
private String canvasQuery;
/**
* 活动ID
*/
private String canvasId;
/**
* 门店ID
*/
private String storeId;
/**
* 普通导购
*/
private String clerkId;
/**
* 2导购3活动 4:门店合计
*/
private Integer dataType;
/**
* 企业ID.
*/
private String enterpriseId;
public Integer getDataType() {
return dataType == null ? 2 : dataType;
}
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.commons.web.qo.PageQo;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasTaskQO extends PageQo implements Serializable {
/**
* 1 升序 2降序
*/
private Integer orderByType;
/**
* 1完成任务数2待完成任务数3逾期任务数4逾期失效任务数5总任务数6任务完成率
*/
private String orderByFields;
/**
* tel_task 话务任务 mass 群发任务
*/
private String subType;
/**
* 开始时间 yyyy-MM-dd
*/
private String startDate;
private String endDate;
/**
* 门店筛选
*/
private String storeQuery;
/**
* 画布活动筛选
*/
private String canvasQuery;
/**
* 门店维度跳转到活动维度时候,传递
*/
private String storeId;
/**
* 1门店 3活动
*/
private Integer dataType;
/**
* 企业ID.
*/
private String enterpriseId;
/**
* 微信企业
*/
private String wxEnterpriseId;
/**
* 区经,用于查询管辖门店权限
*/
private String clerkId;
public Integer getDataType() {
return dataType == null ? 1 : dataType;
}
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.commons.web.qo.PageQo;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasToDoCompleteMemberQO extends PageQo implements Serializable {
private Long canvasId;
private String enterpriseId;
/**
* mass:群发任务 tel_task:话务任务
*/
private String subType;
}
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 CanvasConversionDataVO implements Serializable {
/**
* 消耗积分数
*/
private Integer convsCsmeIntglCnt;
/**
* 转化人数/积分消耗人数
*/
private Integer convsMbrNum;
/**
* 转化金额
*/
private Double convsAmt;
}
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;
}
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasStoreTaskVO implements Serializable {
/**
* 完成任务数
*/
private Integer complTaskCnt;
/**
* 待完成任务数
*/
private Integer untreatedTaskCnt;
/**
* 逾期中任务数
*/
private Integer overdueTaskCnt;
/**
* 逾期失效任务数
*/
private Integer overdueInvalidTaskCnt;
/**
* 总任务数
*/
private Integer assignedTaskCnt;
/**
* 任务完成率
*/
private Double taskComplRate;
/**
* 放弃任务数
*/
private Integer abandonTaskCnt;
/**
* 导购名称
*/
private String clerkName;
private String clerkId;
/**
* 画布活动名称
*/
private String canvasName;
/**
* 活动ID
*/
private String canvasId;
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasTaskVO implements Serializable {
/**
* 完成任务数
*/
private Integer complTaskCnt;
/**
* 待完成任务数
*/
private Integer untreatedTaskCnt;
/**
* 逾期中任务数
*/
private Integer overdueTaskCnt;
/**
* 逾期失效任务数
*/
private Integer overdueInvalidTaskCnt;
/**
* 总任务数
*/
private Integer assignedTaskCnt;
/**
* 任务完成率
*/
private Double taskComplRate;
/**
*
*/
private String storeId;
/**
* 放弃任务数
*/
private Integer abandonTaskCnt;
/**
* 门店名称
*/
private String storeName;
/**
* 画布活动名称
*/
private String canvasName;
/**
* 活动ID
*/
private String canvasId;
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasToDoCompleteMemberVO implements Serializable {
private String mbrId;
private String memberId;
private String clerkId;
private String clerkCode;
private String clerkName;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNick;
/**
* 头像
*/
private String photoUrl;
/**
* 逾期天数
*/
private Integer invalidDays;
public String getMemberId() {
return mbrId;
}
}
......@@ -187,4 +187,7 @@
<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>
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