Commit 9bd82fac by 王祖波

建联转化记录

parent f976321a
package com.gic.haoban.manage.api.dto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactOrderDetailDTO implements Serializable {
private static final long serialVersionUID = 973688857967269975L;
/**
* 主键
*/
private Long id;
/**
* 订单id
*/
private String orderId;
/**
* 会员id
*/
private String memberId;
/**
* 订单编号
*/
private String orderNumber;
/**
* 实付金额
*/
private Double paidAmount;
/**
* 商品数量
*/
private Integer productCount;
/**
* 付款时间
*/
private Date payTime;
/**
* 单据时间
*/
private Date receiptsDate;
/**
* 业务渠道
*/
private String channelCode;
/**
* 1 线上; 2 线下
*/
private Integer channelType;
/**
* 建联导购id
*/
private String clerkId;
/**
* 建联导购code
*/
private String clerkCode;
/**
* 建联导购名称
*/
private String clerkName;
/**
* 建联门店id
*/
private String storeId;
/**
* 建联门店code
*/
private String storeCode;
/**
* 建联门店名称
*/
private String storeName;
/**
* 建联id
*/
private Long contactLogId;
/**
* 建联时间
*/
private Date contactTime;
/**
* 成为潜客时间
*/
private Date potentialTime;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNick;
/**
* 会员手机号
*/
private String memberMobile;
/**
* 会员卡号
*/
private String memberCard;
/**
* 会员头像
*/
private String memberImage;
/**
* 主门店code
*/
private String mainStoreCode;
/**
* 主门店名称
*/
private String mainStoreName;
/**
* 主导购code
*/
private String mainClerkCode;
/**
* 主导购名称
*/
private String mainClerkName;
/**
* 会员是否删除 1是0否
*/
private Integer memberDeleteFlag = 0;
/**
* 商品信息
*/
private List<ContactOrderGoodsInfoDTO> goodsInfoList;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public Double getPaidAmount() {
return paidAmount;
}
public void setPaidAmount(Double paidAmount) {
this.paidAmount = paidAmount;
}
public Integer getProductCount() {
return productCount;
}
public void setProductCount(Integer productCount) {
this.productCount = productCount;
}
public Date getPayTime() {
return payTime;
}
public void setPayTime(Date payTime) {
this.payTime = payTime;
}
public Date getReceiptsDate() {
return receiptsDate;
}
public void setReceiptsDate(Date receiptsDate) {
this.receiptsDate = receiptsDate;
}
public String getChannelCode() {
return channelCode;
}
public void setChannelCode(String channelCode) {
this.channelCode = channelCode;
}
public Integer getChannelType() {
return channelType;
}
public void setChannelType(Integer channelType) {
this.channelType = channelType;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
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 Long getContactLogId() {
return contactLogId;
}
public void setContactLogId(Long contactLogId) {
this.contactLogId = contactLogId;
}
public Date getContactTime() {
return contactTime;
}
public void setContactTime(Date contactTime) {
this.contactTime = contactTime;
}
public Date getPotentialTime() {
return potentialTime;
}
public void setPotentialTime(Date potentialTime) {
this.potentialTime = potentialTime;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberNick() {
return memberNick;
}
public void setMemberNick(String memberNick) {
this.memberNick = memberNick;
}
public String getMemberMobile() {
return memberMobile;
}
public void setMemberMobile(String memberMobile) {
this.memberMobile = memberMobile;
}
public String getMemberCard() {
return memberCard;
}
public void setMemberCard(String memberCard) {
this.memberCard = memberCard;
}
public String getMemberImage() {
return memberImage;
}
public void setMemberImage(String memberImage) {
this.memberImage = memberImage;
}
public String getMainStoreCode() {
return mainStoreCode;
}
public void setMainStoreCode(String mainStoreCode) {
this.mainStoreCode = mainStoreCode;
}
public String getMainStoreName() {
return mainStoreName;
}
public void setMainStoreName(String mainStoreName) {
this.mainStoreName = mainStoreName;
}
public String getMainClerkCode() {
return mainClerkCode;
}
public void setMainClerkCode(String mainClerkCode) {
this.mainClerkCode = mainClerkCode;
}
public String getMainClerkName() {
return mainClerkName;
}
public void setMainClerkName(String mainClerkName) {
this.mainClerkName = mainClerkName;
}
public Integer getMemberDeleteFlag() {
return memberDeleteFlag;
}
public void setMemberDeleteFlag(Integer memberDeleteFlag) {
this.memberDeleteFlag = memberDeleteFlag;
}
public List<ContactOrderGoodsInfoDTO> getGoodsInfoList() {
return goodsInfoList;
}
public void setGoodsInfoList(List<ContactOrderGoodsInfoDTO> goodsInfoList) {
this.goodsInfoList = goodsInfoList;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.dto.contact;
import java.io.Serializable;
import java.util.Date;
public class ContactOrderGoodsInfoDTO implements Serializable {
private static final long serialVersionUID = 973688857967269975L;
/**
* 商品ID
*/
private String goodsId;
/**
* 商品图片
*/
private String imageUrl;
/**
* 商品数量
*/
private Integer number;
/**
* 应收
*/
private Double paidAmount;
/**
* 实付
*/
private Double payAmount;
/**
* 商品名称
*/
private String proName;
/**
* 商品编号
*/
private String proNo;
/**
* 商品类型
*/
private Integer proType;
/**
* 商品规格编码
*/
private String skuCode;
/**
* 商品规格属性
*/
private String attribute;
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public Double getPaidAmount() {
return paidAmount;
}
public void setPaidAmount(Double paidAmount) {
this.paidAmount = paidAmount;
}
public Double getPayAmount() {
return payAmount;
}
public void setPayAmount(Double payAmount) {
this.payAmount = payAmount;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public String getProNo() {
return proNo;
}
public void setProNo(String proNo) {
this.proNo = proNo;
}
public Integer getProType() {
return proType;
}
public void setProType(Integer proType) {
this.proType = proType;
}
public String getSkuCode() {
return skuCode;
}
public void setSkuCode(String skuCode) {
this.skuCode = skuCode;
}
public Double getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(Double unitPrice) {
this.unitPrice = unitPrice;
}
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.qdto.contact;
import cn.hutool.core.date.DateUtil;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactOrderSearchQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 门店id
*/
private List<String> storeIdList;
/**
* 导购搜索
*/
private String clerkSearch;
/**
* 开始时间
*/
private Date beginTime;
/**
* 结束时间
*/
private Date endTime;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public List<String> getStoreIdList() {
return storeIdList;
}
public void setStoreIdList(List<String> storeIdList) {
this.storeIdList = storeIdList;
}
public String getClerkSearch() {
return clerkSearch;
}
public void setClerkSearch(String clerkSearch) {
this.clerkSearch = clerkSearch;
}
public Date getBeginTime() {
return beginTime;
}
public void setBeginTime(Date beginTime) {
if (beginTime != null) {
this.beginTime = DateUtil.beginOfDay(beginTime);
}
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
if (endTime != null) {
this.endTime = DateUtil.endOfDay(endTime);
}
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.service.contact; package com.gic.haoban.manage.api.service.contact;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.contact.ContactOrderDetailDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderQDTO; import com.gic.haoban.manage.api.qdto.contact.ContactOrderQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
public interface ContactOrderApiService { public interface ContactOrderApiService {
...@@ -11,4 +15,13 @@ public interface ContactOrderApiService { ...@@ -11,4 +15,13 @@ public interface ContactOrderApiService {
*/ */
ServiceResponse<Void> saveContactOrder(ContactOrderQDTO contactOrderQDTO); ServiceResponse<Void> saveContactOrder(ContactOrderQDTO contactOrderQDTO);
/**
* 分页查询订单转化
* @param enterpriseId
* @param searchQDTO
* @param pageInfo
* @return
*/
ServiceResponse<Page<ContactOrderDetailDTO>> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo);
} }
package com.gic.haoban.manage.service.dao.mapper.contact; package com.gic.haoban.manage.service.dao.mapper.contact;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
import com.gic.haoban.manage.service.entity.contact.TabContactOrder; import com.gic.haoban.manage.service.entity.contact.TabContactOrder;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -29,6 +30,14 @@ public interface TabContactOrderMapper { ...@@ -29,6 +30,14 @@ public interface TabContactOrderMapper {
List<TabContactOrder> queryByIds(@Param("ids") List<Long> ids); List<TabContactOrder> queryByIds(@Param("ids") List<Long> ids);
/** /**
* 查询指定行数据
* @param enterpriseId
* @param search
* @return
*/
List<TabContactOrder> queryContactOrder(@Param("enterpriseId")String enterpriseId, @Param("search") ContactOrderSearchQDTO search);
/**
* 统计总行数 * 统计总行数
* *
* @param tabContactOrder 查询条件 * @param tabContactOrder 查询条件
......
package com.gic.haoban.manage.service.entity.contact; package com.gic.haoban.manage.service.entity.contact;
import java.math.BigDecimal;
import java.util.Date;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* 建联转化订单(TabContactOrder)实体类 * 建联转化订单(TabContactOrder)实体类
...@@ -65,6 +64,10 @@ public class TabContactOrder implements Serializable { ...@@ -65,6 +64,10 @@ public class TabContactOrder implements Serializable {
*/ */
private String clerkCode; private String clerkCode;
/** /**
* 导购名称
*/
private String clerkName;
/**
* 门店id * 门店id
*/ */
private String storeId; private String storeId;
...@@ -201,6 +204,14 @@ public class TabContactOrder implements Serializable { ...@@ -201,6 +204,14 @@ public class TabContactOrder implements Serializable {
this.clerkCode = clerkCode; this.clerkCode = clerkCode;
} }
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getStoreId() { public String getStoreId() {
return storeId; return storeId;
} }
......
...@@ -47,4 +47,14 @@ public interface ESMemberInfoService { ...@@ -47,4 +47,14 @@ public interface ESMemberInfoService {
* @throws * @throws
*/ */
JSONObject queryDataSingle(String enterpriseId, String memberId, String returnFields) ; JSONObject queryDataSingle(String enterpriseId, String memberId, String returnFields) ;
/**
* 批量查询会员
* @param enterpriseId
* @param memberIdList
* @param returnFields
* @return
*/
List<MemberDataDTO> queryDataBatch(String enterpriseId, List<String> memberIdList, String returnFields);
} }
package com.gic.haoban.manage.service.service.contact; package com.gic.haoban.manage.service.service.contact;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.haoban.manage.api.dto.contact.ContactOrderDetailDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
import com.gic.order.api.dto.resp.OrderInfoResp; import com.gic.order.api.dto.resp.OrderInfoResp;
public interface ContactOrderService { public interface ContactOrderService {
...@@ -7,8 +11,18 @@ public interface ContactOrderService { ...@@ -7,8 +11,18 @@ public interface ContactOrderService {
/** /**
* 保存建联转化订单 * 保存建联转化订单
*
* @param orderInfoResp * @param orderInfoResp
*/ */
void saveContactOrder(OrderInfoResp orderInfoResp); void saveContactOrder(OrderInfoResp orderInfoResp);
/**
* 分页查询建联转化信息
* @param enterpriseId
* @param searchQDTO
* @param pageInfo
* @return
*/
Page<ContactOrderDetailDTO> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo);
} }
...@@ -102,6 +102,9 @@ public class ContactFollowServiceImpl implements ContactFollowService { ...@@ -102,6 +102,9 @@ public class ContactFollowServiceImpl implements ContactFollowService {
} }
private List<ContactFollowDTO> convertExtInfo(List<TabContactFollow> list) { private List<ContactFollowDTO> convertExtInfo(List<TabContactFollow> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
Map<String, StoreGoodsVO> goodsMap = new HashMap<>(); Map<String, StoreGoodsVO> goodsMap = new HashMap<>();
Set<String> goodsIdSet = list.stream().map(TabContactFollow::getGoodsInfo).filter(StringUtils::isNotBlank) Set<String> goodsIdSet = list.stream().map(TabContactFollow::getGoodsInfo).filter(StringUtils::isNotBlank)
.flatMap(x -> JSONArray.parseArray(x,String.class).stream()).collect(Collectors.toSet()); .flatMap(x -> JSONArray.parseArray(x,String.class).stream()).collect(Collectors.toSet());
......
package com.gic.haoban.manage.service.service.contact.impl; package com.gic.haoban.manage.service.service.contact.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.enums.PlatformChannelEnum; import com.gic.enterprise.api.enums.PlatformChannelEnum;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.manage.service.dao.mapper.contact.TabContactLogMapper; import com.gic.haoban.manage.api.dto.contact.ContactOrderGoodsInfoDTO;
import com.gic.haoban.manage.api.dto.contact.ContactOrderDetailDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
import com.gic.haoban.manage.service.dao.mapper.contact.TabContactOrderMapper; import com.gic.haoban.manage.service.dao.mapper.contact.TabContactOrderMapper;
import com.gic.haoban.manage.service.entity.contact.TabContactLog; import com.gic.haoban.manage.service.entity.contact.TabContactLog;
import com.gic.haoban.manage.service.entity.contact.TabContactOrder; import com.gic.haoban.manage.service.entity.contact.TabContactOrder;
import com.gic.haoban.manage.service.service.contact.ContactFollowService; import com.gic.haoban.manage.service.service.ESMemberInfoService;
import com.gic.haoban.manage.service.service.contact.ContactLogService; import com.gic.haoban.manage.service.service.contact.ContactLogService;
import com.gic.haoban.manage.service.service.contact.ContactOrderService; import com.gic.haoban.manage.service.service.contact.ContactOrderService;
import com.gic.member.api.service.MemberService; import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.order.api.dto.resp.OrderInfoResp; import com.gic.order.api.dto.resp.OrderInfoResp;
import com.gic.store.goods.service.StoreGoodsService; import com.gic.order.api.dto.resp.OrderItemResp;
import com.github.pagehelper.PageHelper;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.*;
import java.util.Objects; import java.util.stream.Collectors;
@Service("contactOrderService") @Service("contactOrderService")
public class ContactOrderServiceImpl implements ContactOrderService { public class ContactOrderServiceImpl implements ContactOrderService {
...@@ -33,6 +46,12 @@ public class ContactOrderServiceImpl implements ContactOrderService { ...@@ -33,6 +46,12 @@ public class ContactOrderServiceImpl implements ContactOrderService {
private TabContactOrderMapper contactOrderMapper; private TabContactOrderMapper contactOrderMapper;
@Autowired @Autowired
private ContactLogService contactLogService; private ContactLogService contactLogService;
@Autowired
private ESMemberInfoService esMemberInfoService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
@Override @Override
public void saveContactOrder(OrderInfoResp orderInfoResp) { public void saveContactOrder(OrderInfoResp orderInfoResp) {
...@@ -67,16 +86,111 @@ public class ContactOrderServiceImpl implements ContactOrderService { ...@@ -67,16 +86,111 @@ public class ContactOrderServiceImpl implements ContactOrderService {
contactOrder.setProductCount(orderInfoResp.getGoodsCount()); contactOrder.setProductCount(orderInfoResp.getGoodsCount());
contactOrder.setPayTime(orderInfoResp.getReceiptsDate()); contactOrder.setPayTime(orderInfoResp.getReceiptsDate());
contactOrder.setReceiptsDate(orderInfoResp.getReceiptsDate()); contactOrder.setReceiptsDate(orderInfoResp.getReceiptsDate());
List<OrderItemResp> orderItems = orderInfoResp.getOrderItems();
if (CollectionUtils.isNotEmpty(orderItems)) {
List<ContactOrderGoodsInfoDTO> goodsInfoDTOS = JSONObject.parseArray(JSON.toJSONString(orderItems), ContactOrderGoodsInfoDTO.class);
contactOrder.setGoodsInfo(JSON.toJSONString(goodsInfoDTOS));
}
contactOrder.setChannelCode(channelCode); contactOrder.setChannelCode(channelCode);
contactOrder.setChannelType(channelType); contactOrder.setChannelType(channelType);
contactOrder.setClerkId(lastContactLog.getClerkId()); contactOrder.setClerkId(lastContactLog.getClerkId());
contactOrder.setClerkCode(lastContactLog.getClerkCode()); contactOrder.setClerkCode(lastContactLog.getClerkCode());
contactOrder.setClerkName(lastContactLog.getClerkName());
contactOrder.setStoreId(lastContactLog.getStoreId()); contactOrder.setStoreId(lastContactLog.getStoreId());
contactOrder.setContactLogId(lastContactLog.getLogId()); contactOrder.setContactLogId(lastContactLog.getLogId());
contactOrder.setContactTime(lastContactLog.getContactTime()); contactOrder.setContactTime(lastContactLog.getContactTime());
contactOrder.setPotentialTime(lastContactLog.getPotentialTime()); contactOrder.setPotentialTime(lastContactLog.getPotentialTime());
contactOrder.setEnterpriseId(lastContactLog.getEnterpriseId()); contactOrder.setEnterpriseId(lastContactLog.getEnterpriseId());
contactOrderMapper.insert(contactOrder); contactOrderMapper.insert(contactOrder);
}
@Override
public Page<ContactOrderDetailDTO> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo);
List<TabContactOrder> list = contactOrderMapper.queryContactOrder(enterpriseId, searchQDTO);
Page<ContactOrderDetailDTO> page = PageHelperUtils.changePageHelperToCurrentPage(list, ContactOrderDetailDTO.class);
List<ContactOrderDetailDTO> pageList = convertExtInfo(enterpriseId,list);
page.setResult(pageList);
return page;
}
private List<ContactOrderDetailDTO> convertExtInfo(String enterpriseId, List<TabContactOrder> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
Set<String> memberIdSet = list.stream().map(TabContactOrder::getMemberId)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
Map<String, ClerkDTO> clerkIdMap = new HashMap<>();
Map<String, StoreDTO> storeIdMap = new HashMap<>();
Map<String, MemberDataDTO> memberMap = new HashMap<>();
Set<String> storeIdSet = new HashSet<>();
Set<String> clerkIdSet = new HashSet<>();
// 组装商品信息
if (CollectionUtils.isNotEmpty(memberIdSet)) {
List<MemberDataDTO> memberList = esMemberInfoService.queryDataBatch(enterpriseId, Lists.newArrayList(memberIdSet), "memberId,name,cardNo,phoneNumber,nickName,mainClerkId,mainStoreId");
for (MemberDataDTO memberDataDTO : memberList) {
memberMap.put(memberDataDTO.getMemberId(), memberDataDTO);
String mainClerkId = memberDataDTO.getMainClerkId();
String mainStoreId = memberDataDTO.getMainStoreId();
if (StringUtils.isNotBlank(mainClerkId)) {
clerkIdSet.add(mainClerkId);
}
if (StringUtils.isNotBlank(mainStoreId)) {
storeIdSet.add(mainStoreId);
}
}
}
// 构建门店map
if (CollectionUtils.isNotEmpty(storeIdSet)) {
List<StoreDTO> stores = storeService.getStores(storeIdSet.toArray(new String[0]));
if (CollectionUtils.isNotEmpty(stores)) {
storeIdMap = stores.stream().collect(Collectors.toMap(StoreDTO::getStoreId, x -> x, (e, x) -> e));
} }
}
// 构建导购map
if (CollectionUtils.isNotEmpty(clerkIdSet)) {
List<ClerkDTO> clerks = clerkService.getClerkByClerkIds(clerkIdSet);
if (CollectionUtils.isNotEmpty(clerks)) {
clerkIdMap = clerks.stream().collect(Collectors.toMap(ClerkDTO::getClerkId, x -> x, (e, x) -> e));
}
}
List<ContactOrderDetailDTO> dtoList = new ArrayList<>();
for (TabContactOrder contactOrder : list) {
ContactOrderDetailDTO contactOrderDTO = EntityUtil.changeEntityNew(ContactOrderDetailDTO.class, contactOrder);
String goodsInfo = contactOrder.getGoodsInfo();
if (StringUtils.isNotBlank(goodsInfo)) {
contactOrderDTO.setGoodsInfoList(JSONArray.parseArray(goodsInfo, ContactOrderGoodsInfoDTO.class));
}
String memberId = contactOrder.getMemberId();
MemberDataDTO memberDataDTO = memberMap.get(memberId);
if (memberDataDTO != null) {
contactOrderDTO.setMemberName(memberDataDTO.getName());
contactOrderDTO.setMemberNick(memberDataDTO.getNickName());
contactOrderDTO.setMemberMobile(memberDataDTO.getPhoneNumber());
contactOrderDTO.setMemberCard(memberDataDTO.getCardNo());
contactOrderDTO.setMemberImage(memberDataDTO.getPhotoUrl());
if (StringUtils.isNotBlank(memberDataDTO.getMainClerkId())) {
ClerkDTO clerkDTO = clerkIdMap.get(memberDataDTO.getMainClerkId());
if (clerkDTO != null) {
contactOrderDTO.setMainClerkCode(clerkDTO.getClerkCode());
contactOrderDTO.setMainClerkName(clerkDTO.getClerkName());
}
}
if (StringUtils.isNotBlank(memberDataDTO.getMainStoreId())) {
StoreDTO storeDTO = storeIdMap.get(memberDataDTO.getMainStoreId());
if (storeDTO != null) {
contactOrderDTO.setMainStoreCode(storeDTO.getStoreCode());
contactOrderDTO.setMainStoreName(storeDTO.getStoreName());
}
}
}else {
contactOrderDTO.setMemberName("账号已注销");
contactOrderDTO.setMemberDeleteFlag(1);
}
dtoList.add(contactOrderDTO);
}
return dtoList;
}
} }
...@@ -109,4 +109,27 @@ public class ESMemberInfoServiceImpl implements ESMemberInfoService { ...@@ -109,4 +109,27 @@ public class ESMemberInfoServiceImpl implements ESMemberInfoService {
} }
return searchRes; return searchRes;
} }
@Override
public List<MemberDataDTO> queryDataBatch(String enterpriseId, List<String> memberIdList, String returnFields) {
DynamicSearchDTO search = new DynamicSearchDTO();
search.setEnterpriseId(enterpriseId);
search.setColumnCategoryCode("member");
String memberIds = String.join(" ", memberIdList);
JSONObject searchObj = new JSONObject();
searchObj = NewNodeAddUtil.addNewNodeForAnd("memberId", OperateEnum.OPERATE_CONTAIN.getValue(), memberIds,
searchObj);
search.setSearchJson(searchObj);
search.setReturnFileds(returnFields);
search.setSortJson(NewNodeAddUtil.createSortNode("memberId", NewNodeAddUtil.SORT_RULE_ASC));
search.setBegin(0);
search.setRecordNumber(memberIdList.size());
ESResponseQueryBatch response = esApiService
.queryDataBatch(search, Boolean.FALSE, null);
List<JSONObject> res = response.getRes();
if (CollectionUtils.isEmpty(res)) {
return new ArrayList<>();
}
return res.stream().map(x -> x.toJavaObject(MemberDataDTO.class)).collect(Collectors.toList());
}
} }
package com.gic.haoban.manage.service.service.out.impl.contact; package com.gic.haoban.manage.service.service.out.impl.contact;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil; import com.gic.haoban.manage.api.dto.contact.ContactOrderDetailDTO;
import com.gic.haoban.manage.api.dto.contact.ContactLogDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderQDTO; import com.gic.haoban.manage.api.qdto.contact.ContactOrderQDTO;
import com.gic.haoban.manage.api.service.contact.ContactLogApiService; import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
import com.gic.haoban.manage.api.service.contact.ContactOrderApiService; import com.gic.haoban.manage.api.service.contact.ContactOrderApiService;
import com.gic.haoban.manage.service.entity.contact.TabContactLog;
import com.gic.haoban.manage.service.service.contact.ContactLogService; import com.gic.haoban.manage.service.service.contact.ContactLogService;
import com.gic.haoban.manage.service.service.contact.ContactOrderService; import com.gic.haoban.manage.service.service.contact.ContactOrderService;
import com.gic.order.api.dto.resp.OrderInfoResp; import com.gic.order.api.dto.resp.OrderInfoResp;
...@@ -44,4 +44,9 @@ public class ContactOrderApiServiceImpl implements ContactOrderApiService { ...@@ -44,4 +44,9 @@ public class ContactOrderApiServiceImpl implements ContactOrderApiService {
return ServiceResponse.success(); return ServiceResponse.success();
} }
@Override
public ServiceResponse<Page<ContactOrderDetailDTO>> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo) {
Page<ContactOrderDetailDTO> page = contactOrderService.pageContactOrder(enterpriseId, searchQDTO, pageInfo);
return ServiceResponse.success(page);
}
} }
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
<result column="channel_type" property="channelType" /> <result column="channel_type" property="channelType" />
<result column="clerk_id" property="clerkId" /> <result column="clerk_id" property="clerkId" />
<result column="clerk_code" property="clerkCode" /> <result column="clerk_code" property="clerkCode" />
<result column="clerk_name" property="clerkName" />
<result column="store_id" property="storeId" /> <result column="store_id" property="storeId" />
<result column="contact_log_id" property="contactLogId" /> <result column="contact_log_id" property="contactLogId" />
<result column="contact_time" property="contactTime" /> <result column="contact_time" property="contactTime" />
...@@ -29,7 +30,7 @@ ...@@ -29,7 +30,7 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, order_id, member_id, order_number, paid_amount, product_count, goods_info, pay_time, receipts_date, channel_code, channel_type, clerk_id, clerk_code, store_id, contact_log_id, contact_time, potential_time, delete_flag, enterprise_id, create_time, update_time id, order_id, member_id, order_number, paid_amount, product_count, goods_info, pay_time, receipts_date, channel_code, channel_type, clerk_id, clerk_code,clerk_name, store_id, contact_log_id, contact_time, potential_time, delete_flag, enterprise_id, create_time, update_time
</sql> </sql>
<select id="queryById" resultMap="BaseResultMap"> <select id="queryById" resultMap="BaseResultMap">
...@@ -49,6 +50,37 @@ ...@@ -49,6 +50,37 @@
</foreach> </foreach>
</select> </select>
<select id="queryContactOrder" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM
tab_contact_order
WHERE
enterprise_id = #{enterpriseId}
<if test="search.memberId != null and search.memberId != ''">
AND member_id = #{search.memberId}
</if>
<if test="search.clerkId != null and search.clerkId != ''">
AND clerk_id = #{search.clerkId}
</if>
<if test="search.storeIdList != null and search.storeIdList.size() > 0">
AND store_id IN
<foreach item="storeId" index="index" collection="search.storeIdList" open="(" separator="," close=")">
#{search.storeId}
</foreach>
</if>
<if test="search.clerkSearch != null and search.clerkSearch != ''">
AND (clerk_code LIKE CONCAT('%', #{search.clerkSearch}, '%') OR clerk_name LIKE CONCAT('%', #{search.clerkSearch}, '%'))
</if>
<if test="search.beginTime != null">
AND receipts_date >= #{search.beginTime}
</if>
<if test="search.endTime != null">
AND receipts_date <![CDATA[<=]]> #{search.endTime}
</if>
ORDER BY receipts_date DESC,id desc
</select>
<select id="count" resultType="long"> <select id="count" resultType="long">
SELECT COUNT(*) SELECT COUNT(*)
FROM tab_contact_order FROM tab_contact_order
...@@ -66,8 +98,8 @@ ...@@ -66,8 +98,8 @@
</select> </select>
<insert id="insert" useGeneratedKeys="true" keyProperty="id"> <insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO tab_contact_order (order_id, member_id, order_number, paid_amount, product_count, goods_info, pay_time, receipts_date, channel_code, channel_type, clerk_id, clerk_code, store_id, contact_log_id, contact_time, potential_time, enterprise_id) INSERT INTO tab_contact_order (order_id, member_id, order_number, paid_amount, product_count, goods_info, pay_time, receipts_date, channel_code, channel_type, clerk_id, clerk_code,clerk_name, store_id, contact_log_id, contact_time, potential_time, enterprise_id)
VALUES (#{orderId}, #{memberId}, #{orderNumber}, #{paidAmount}, #{productCount}, #{goodsInfo}, #{payTime}, #{receiptsDate}, #{channelCode}, #{channelType}, #{clerkId}, #{clerkCode}, #{storeId}, #{contactLogId}, #{contactTime}, #{potentialTime}, #{enterpriseId}) VALUES (#{orderId}, #{memberId}, #{orderNumber}, #{paidAmount}, #{productCount}, #{goodsInfo}, #{payTime}, #{receiptsDate}, #{channelCode}, #{channelType}, #{clerkId}, #{clerkCode},#{clerkName}, #{storeId}, #{contactLogId}, #{contactTime}, #{potentialTime}, #{enterpriseId})
</insert> </insert>
<update id="update"> <update id="update">
......
package com.gic.haoban.manage.web.controller.contact;
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.webapi.reponse.RestResponse;
import com.gic.haoban.manage.api.dto.contact.ContactOrderDetailDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
import com.gic.haoban.manage.api.service.contact.ContactOrderApiService;
import com.gic.haoban.manage.web.qo.contact.ContactOrderPageQO;
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;
/**
* 潜客雷达-跟进记录
*/
@RestController
@RequestMapping()
public class DataController {
@Autowired
private ContactOrderApiService contactOrderApiService;
/**
* 分页查询转化记录
* @param contactOrderPageQO
* @return
*/
@RequestMapping(path = "/contact/page-order")
public RestResponse<Page<ContactOrderDetailDTO>> pageFollow(@RequestBody ContactOrderPageQO contactOrderPageQO) {
String enterpriseId = contactOrderPageQO.getEnterpriseId();
String clerkId = contactOrderPageQO.getClerkId();
String storeId = contactOrderPageQO.getStoreId();
ContactOrderSearchQDTO searchQDTO = new ContactOrderSearchQDTO();
searchQDTO.setMemberId(storeId);
searchQDTO.setClerkId(clerkId);
searchQDTO.setBeginTime(contactOrderPageQO.getBeginTime());
searchQDTO.setEndTime(contactOrderPageQO.getEndTime());
BasePageInfo basePageInfo = contactOrderPageQO.getBasePageInfo();
ServiceResponse<Page<ContactOrderDetailDTO>> serviceResponse = contactOrderApiService.pageContactOrder(enterpriseId,searchQDTO,basePageInfo);
if (!serviceResponse.isSuccess()) {
return RestResponse.failure(serviceResponse.getCode(), serviceResponse.getMessage());
}
return RestResponse.successResult(serviceResponse.getResult());
}
}
package com.gic.haoban.manage.web.qo.contact;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gic.commons.web.qo.PageQo;
import java.util.Date;
/**
* Created by wangzubo on 2025/3/15.
*/
public class ContactOrderPageQO extends PageQo {
/**
* 导购id
*/
private String clerkId;
/**
* 门店id
*/
private String storeId;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date beginTime;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
/**
* 企业id
*/
private String enterpriseId;
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Date getBeginTime() {
return beginTime;
}
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
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