Commit c41067f3 by 王祖波

建联和跟进

parent c9a97e60
package com.gic.haoban.manage.api.dto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactFollowDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 导购code
*/
private String clerkCode;
/**
* 跟进记录
*/
private String followRemark;
/**
* 跟进上传素材,数组格式
*/
private List<String> followMaterialList;
/**
* 关联商品信息
*/
private List<ContactFollowGoodsDTO> goodsInfoList;
/**
* 跟进时间
*/
private Date followTime;
/**
* 企业id
*/
private String enterpriseId;
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 String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getFollowRemark() {
return followRemark;
}
public void setFollowRemark(String followRemark) {
this.followRemark = followRemark;
}
public List<String> getFollowMaterialList() {
return followMaterialList;
}
public void setFollowMaterialList(List<String> followMaterialList) {
this.followMaterialList = followMaterialList;
}
public List<ContactFollowGoodsDTO> getGoodsInfoList() {
return goodsInfoList;
}
public void setGoodsInfoList(List<ContactFollowGoodsDTO> goodsInfoList) {
this.goodsInfoList = goodsInfoList;
}
public Date getFollowTime() {
return followTime;
}
public void setFollowTime(Date followTime) {
this.followTime = followTime;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.dto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactFollowGoodsDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
private String goodsId;
private String goodsCode;
private String goodsName;
private String mainImageUrl;
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsCode() {
return goodsCode;
}
public void setGoodsCode(String goodsCode) {
this.goodsCode = goodsCode;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getMainImageUrl() {
return mainImageUrl;
}
public void setMainImageUrl(String mainImageUrl) {
this.mainImageUrl = mainImageUrl;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.qdto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactFollowQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 导购code
*/
private String clerkCode;
/**
* 跟进记录
*/
private String followRemark;
/**
* 跟进上传素材,数组格式
*/
private List<String> followMaterialList;
/**
* 关联商品信息
*/
private List<String> goodsInfoList;
/**
* 跟进时间
*/
private Date followTime;
/**
* 企业id
*/
private String enterpriseId;
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 String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getFollowRemark() {
return followRemark;
}
public void setFollowRemark(String followRemark) {
this.followRemark = followRemark;
}
public List<String> getFollowMaterialList() {
return followMaterialList;
}
public void setFollowMaterialList(List<String> followMaterialList) {
this.followMaterialList = followMaterialList;
}
public List<String> getGoodsInfoList() {
return goodsInfoList;
}
public void setGoodsInfoList(List<String> goodsInfoList) {
this.goodsInfoList = goodsInfoList;
}
public Date getFollowTime() {
return followTime;
}
public void setFollowTime(Date followTime) {
this.followTime = followTime;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.qdto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactFollowSearchQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
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;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.qdto.contact;
import java.io.Serializable;
import java.util.Date;
public class ContactLogQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269973L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 门店id
*/
private String storeId;
/**
* 企业id
*/
private String enterpriseId;
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 String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
\ No newline at end of file
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.haoban.manage.api.dto.contact.ContactFollowDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import java.util.List;
import java.util.Map;
public interface ContactFollowApiService {
/**
* 保存跟进记录
* @param qdto
*/
ServiceResponse<Void> saveFollow(ContactFollowQDTO qdto);
/**
* 批量保存跟进记录
* @param list
*/
ServiceResponse<Void> saveBatchFollow(List<ContactFollowQDTO> list);
/**
* 跟进记录列表查询
* @param enterpriseId
* @param searchQDTO
* @param pageInfo
* @return
*/
ServiceResponse<Page<ContactFollowDTO>> pageFollow(String enterpriseId, ContactFollowSearchQDTO searchQDTO, BasePageInfo pageInfo);
/**
* 导购获取会员维度最新跟进记录
* @param enterpriseId
* @param clerkId
* @param memberIdList
* @return
*/
ServiceResponse<Map<String, ContactFollowDTO>> mapMemberLastFollow(String enterpriseId, String clerkId, List<String> memberIdList);
}
package com.gic.haoban.manage.service.dao.mapper.contact;
import com.gic.haoban.manage.api.qdto.chat.GroupChatActivitySearchQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.service.entity.contact.TabContactFollow;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 跟进日志表(TabContactFollow)表数据库访问层
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public interface TabContactFollowMapper {
/**
* 通过ID查询单条数据
*
* @param followId 主键
* @return 实例对象
*/
TabContactFollow queryById(Long followId);
/**
* 通过实体作为筛选条件查询
*
* @return 对象列表
*/
List<TabContactFollow> pageFollow(@Param("enterpriseId") String enterpriseId,
@Param("search") ContactFollowSearchQDTO searchQDTO);
/**
* 通过memberId查询最后一次跟进记录
* @param enterpriseId
* @param clerkId
* @param memberIdList
* @return
*/
List<TabContactFollow> lastFollowByMemberId(@Param("enterpriseId") String enterpriseId,
@Param("clerkId") String clerkId,
@Param("memberIdList")List<String> memberIdList);
/**
* 通过ID列表查询多条数据
* @param followIds
* @return
*/
List<TabContactFollow> queryByIds(@Param("followIds") List<Long> followIds);
/**
* 统计总行数
*
* @param tabContactFollow 查询条件
* @return 总行数
*/
long count(TabContactFollow tabContactFollow);
/**
* 新增数据
*
* @param tabContactFollow 实例对象
* @return 影响行数
*/
int insert(TabContactFollow tabContactFollow);
/**
* 批量新增数据(MyBatis原生foreach方法)
* @param tabContactFollowList
* @return
*/
int insertBatch(List<TabContactFollow> tabContactFollowList);
/**
* 修改数据
*
* @param tabContactFollow 实例对象
* @return 影响行数
*/
int update(TabContactFollow tabContactFollow);
/**
* 通过主键删除数据
*
* @param followId 主键
* @return 影响行数
*/
int deleteById(@Param("followId") Long followId);
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.contact;
import com.gic.haoban.manage.service.entity.contact.TabContactLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 建联日志表(TabContactLog)表数据库访问层
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public interface TabContactLogMapper {
/**
* 通过ID查询单条数据
*
* @param logId 主键
* @return 实例对象
*/
TabContactLog queryById(Long logId);
/**
* 通过ID列表查询多条数据
* @param logIds
* @return
*/
List<TabContactLog> queryByIds(@Param("logIds") List<Long> logIds);
/**
* 查询最后一次建联记录
* @param memberId
* @param clerkId
* @return
*/
TabContactLog queryLastLog(@Param("memberId")String memberId,@Param("clerkId")String clerkId);
/**
* 统计总行数
*
* @param tabContactLog 查询条件
* @return 总行数
*/
long count(TabContactLog tabContactLog);
/**
* 新增数据
*
* @param tabContactLog 实例对象
* @return 影响行数
*/
int insert(TabContactLog tabContactLog);
/**
* 修改数据
*
* @param tabContactLog 实例对象
* @return 影响行数
*/
int update(TabContactLog tabContactLog);
/**
* 通过主键删除数据
*
* @param logId 主键
* @return 影响行数
*/
int deleteById(@Param("logId") Long logId);
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.contact;
import com.gic.haoban.manage.service.entity.contact.TabContactOrder;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 建联转化订单(TabContactOrder)表数据库访问层
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public interface TabContactOrderMapper {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
TabContactOrder queryById(Long id);
/**
* 通过ID列表查询多条数据
* @param ids
* @return
*/
List<TabContactOrder> queryByIds(@Param("ids") List<Long> ids);
/**
* 统计总行数
*
* @param tabContactOrder 查询条件
* @return 总行数
*/
long count(TabContactOrder tabContactOrder);
/**
* 新增数据
*
* @param tabContactOrder 实例对象
* @return 影响行数
*/
int insert(TabContactOrder tabContactOrder);
/**
* 修改数据
*
* @param tabContactOrder 实例对象
* @return 影响行数
*/
int update(TabContactOrder tabContactOrder);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(@Param("id") Long id);
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.content; package com.gic.haoban.manage.service.dao.mapper.content;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord; import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO;
import com.gic.haoban.manage.service.pojo.bo.potential.MemberLastInteractBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -106,6 +106,21 @@ public interface TabHaobanInteractRecordMapper { ...@@ -106,6 +106,21 @@ public interface TabHaobanInteractRecordMapper {
List<PotentialCustomerStaticsBO> staticsClerkInteractRecordNew(InteractRecordQO interactRecordQO); List<PotentialCustomerStaticsBO> staticsClerkInteractRecordNew(InteractRecordQO interactRecordQO);
/** /**
* 查询会员最新互动记录
* @param clerkId
* @param list
* @return
*/
List<TabHaobanInteractRecord> selectLastByMemberIds(@Param("clerkId") String clerkId, @Param("list") List<MemberLastInteractBO> list);
/**
* 根据时间查询会员最新互动列表
* @param clerkId
* @param lastAccessTime
* @return
*/
List<MemberLastInteractBO> selectMemberIdsByTime(@Param("clerkId") String clerkId, @Param("lastAccessTime") Date lastAccessTime);
/**
* 会员合并 * 会员合并
* @param mergeMemberId * @param mergeMemberId
* @param memberId * @param memberId
......
package com.gic.haoban.manage.service.entity.contact;
import java.util.Date;
import java.io.Serializable;
/**
* 跟进日志表(TabContactFollow)实体类
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public class TabContactFollow implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 主键id
*/
private Long followId;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 导购code
*/
private String clerkCode;
/**
* 跟进记录
*/
private String followRemark;
/**
* 跟进上传素材,数组格式
*/
private String followMaterial;
/**
* 关联商品信息
*/
private String goodsInfo;
/**
* 跟进时间
*/
private Date followTime;
/**
* 企业id
*/
private String enterpriseId;
/**
* 是否删除
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
public Long getFollowId() {
return followId;
}
public void setFollowId(Long followId) {
this.followId = followId;
}
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 String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getFollowRemark() {
return followRemark;
}
public void setFollowRemark(String followRemark) {
this.followRemark = followRemark;
}
public String getFollowMaterial() {
return followMaterial;
}
public void setFollowMaterial(String followMaterial) {
this.followMaterial = followMaterial;
}
public String getGoodsInfo() {
return goodsInfo;
}
public void setGoodsInfo(String goodsInfo) {
this.goodsInfo = goodsInfo;
}
public Date getFollowTime() {
return followTime;
}
public void setFollowTime(Date followTime) {
this.followTime = followTime;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
package com.gic.haoban.manage.service.entity.contact;
import java.util.Date;
import java.io.Serializable;
/**
* 建联日志表(TabContactLog)实体类
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public class TabContactLog implements Serializable {
private static final long serialVersionUID = 973688857967269973L;
/**
* 主键id
*/
private Long logId;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 导购code
*/
private String clerkCode;
/**
* 导购名称
*/
private String clerkName;
/**
* 门店id
*/
private String storeId;
/**
* 门店code
*/
private String storeCode;
/**
* 建联状态 1是0否
*/
private Integer contactStatus;
/**
* 建联时间
*/
private Date contactTime;
/**
* 建联周期
*/
private Integer contactCycle;
/**
* 是否周期内首次建联1是0否
*/
private Integer contactCycleFirst;
/**
* 成为潜客时间
*/
private Date potentialTime;
/**
* 企业id
*/
private String enterpriseId;
/**
* 是否删除
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
public Long getLogId() {
return logId;
}
public void setLogId(Long logId) {
this.logId = logId;
}
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 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 Integer getContactStatus() {
return contactStatus;
}
public void setContactStatus(Integer contactStatus) {
this.contactStatus = contactStatus;
}
public Date getContactTime() {
return contactTime;
}
public void setContactTime(Date contactTime) {
this.contactTime = contactTime;
}
public Integer getContactCycle() {
return contactCycle;
}
public void setContactCycle(Integer contactCycle) {
this.contactCycle = contactCycle;
}
public Integer getContactCycleFirst() {
return contactCycleFirst;
}
public void setContactCycleFirst(Integer contactCycleFirst) {
this.contactCycleFirst = contactCycleFirst;
}
public Date getPotentialTime() {
return potentialTime;
}
public void setPotentialTime(Date potentialTime) {
this.potentialTime = potentialTime;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
package com.gic.haoban.manage.service.entity.contact;
import java.math.BigDecimal;
import java.util.Date;
import java.io.Serializable;
/**
* 建联转化订单(TabContactOrder)实体类
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public class TabContactOrder implements Serializable {
private static final long serialVersionUID = 973688857967269975L;
/**
* 主键
*/
private Long id;
/**
* 订单id
*/
private String orderId;
/**
* 会员id
*/
private String memberId;
/**
* 订单编号
*/
private String orderNumber;
/**
* 实付金额
*/
private BigDecimal paidAmount;
/**
* 商品数量
*/
private Integer productCount;
/**
* 关联商品信息
*/
private String goodsInfo;
/**
* 付款时间
*/
private Date payTime;
/**
* 单据时间
*/
private Date receiptsDate;
/**
* 业务渠道
*/
private String channelCode;
/**
* 1 线上; 2 线下
*/
private Integer channelType;
/**
* 导购id
*/
private String clerkId;
/**
* 导购code
*/
private String clerkCode;
/**
* 门店id
*/
private String storeId;
/**
* 建联id
*/
private Long contactLogId;
/**
* 建联时间
*/
private Date contactTime;
/**
* 成为潜客时间
*/
private Date potentialTime;
/**
* 是否删除
*/
private Integer deleteFlag;
/**
* 企业id
*/
private String enterpriseId;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
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 BigDecimal getPaidAmount() {
return paidAmount;
}
public void setPaidAmount(BigDecimal paidAmount) {
this.paidAmount = paidAmount;
}
public Integer getProductCount() {
return productCount;
}
public void setProductCount(Integer productCount) {
this.productCount = productCount;
}
public String getGoodsInfo() {
return goodsInfo;
}
public void setGoodsInfo(String goodsInfo) {
this.goodsInfo = goodsInfo;
}
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 getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
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 Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
package com.gic.haoban.manage.service.pojo.bo.potential;
import java.util.Date;
/**
* Created by wangzubo on 2025/3/15.
*/
public class MemberLastInteractBO {
/**
* 会员id
*/
private String memberId;
/**
* 最新访问时间
*/
private Date lastAccessTime;
// Getters and Setters
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public Date getLastAccessTime() {
return lastAccessTime;
}
public void setLastAccessTime(Date lastAccessTime) {
this.lastAccessTime = lastAccessTime;
}
}
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.ContactFollowDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import java.util.List;
import java.util.Map;
public interface ContactFollowService {
/**
* 保存跟进记录
* @param qdto
*/
void saveFollow(ContactFollowQDTO qdto);
/**
* 批量保存跟进记录
* @param list
*/
void saveBatchFollow(List<ContactFollowQDTO> list);
/**
* 跟进记录列表查询
* @param enterpriseId
* @param searchQDTO
* @param pageInfo
* @return
*/
Page<ContactFollowDTO> pageFollow(String enterpriseId, ContactFollowSearchQDTO searchQDTO, BasePageInfo pageInfo);
/**
* 导购获取会员维度最新跟进记录
* @param enterpriseId
* @param clerkId
* @param memberIdList
* @return
*/
Map<String, ContactFollowDTO> mapMemberLastFollow(String enterpriseId, String clerkId,List<String> memberIdList);
}
package com.gic.haoban.manage.service.service.contact;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
public interface ContactLogService {
/**
* 保存建联记录
* @param qdto
*/
void saveContactLog(ContactLogQDTO qdto);
/**
* 清除建联状态
* @param memberId
* @param clearType 1 消费清除 2 换绑主导购
*/
void clearContactLog(String memberId,Integer clearType);
}
package com.gic.haoban.manage.service.service.contact.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.api.dto.contact.ContactFollowDTO;
import com.gic.haoban.manage.api.dto.contact.ContactFollowGoodsDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.service.dao.mapper.contact.TabContactFollowMapper;
import com.gic.haoban.manage.service.entity.contact.TabContactFollow;
import com.gic.haoban.manage.service.service.contact.ContactFollowService;
import com.gic.store.goods.service.StoreGoodsService;
import com.gic.store.goods.vo.StoreGoodsVO;
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.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service("contactFollowService")
public class ContactFollowServiceImpl implements ContactFollowService {
private static final Logger logger = LogManager.getLogger(ContactFollowService.class);
@Autowired
private TabContactFollowMapper contactFollowMapper;
@Autowired
private StoreGoodsService storeGoodsService;
@Autowired
private ClerkService clerkService;
@Override
public void saveFollow(ContactFollowQDTO qdto) {
saveBatchFollow(Lists.newArrayList(qdto));
}
@Override
public void saveBatchFollow(List<ContactFollowQDTO> list) {
if (CollectionUtils.isEmpty(list)) {
return;
}
Set<String> clerkSet = list.stream().map(ContactFollowQDTO::getClerkId).collect(Collectors.toSet());
List<ClerkDTO> clerks = clerkService.getClerkByClerkIds(clerkSet);
if (CollectionUtils.isEmpty(clerks)) {
return;
}
Map<String, ClerkDTO> clerkMap = clerks.stream().collect(Collectors.toMap(ClerkDTO::getClerkId, Function.identity(), (v1, v2) -> v1));
List<TabContactFollow> followList = list.stream().map(follow -> {
TabContactFollow contactFollow = EntityUtil.changeEntityNew(TabContactFollow.class, follow);
ClerkDTO clerkDTO = clerkMap.get(follow.getClerkId());
if (clerkDTO == null) {
return null;
}
contactFollow.setClerkCode(clerkDTO.getClerkCode());
contactFollow.setFollowId(UniqueIdUtils.uniqueLong());
if (CollectionUtils.isNotEmpty(follow.getFollowMaterialList())) {
contactFollow.setFollowMaterial(JSON.toJSONString(follow.getFollowMaterialList()));
}
if (CollectionUtils.isNotEmpty(follow.getGoodsInfoList())) {
contactFollow.setGoodsInfo(JSON.toJSONString(follow.getGoodsInfoList()));
}
return contactFollow;
}).filter(Objects::nonNull).collect(Collectors.toList());
contactFollowMapper.insertBatch(followList);
}
@Override
public Page<ContactFollowDTO> pageFollow(String enterpriseId, ContactFollowSearchQDTO searchQDTO, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo);
List<TabContactFollow> list = contactFollowMapper.pageFollow(enterpriseId, searchQDTO);
Page<ContactFollowDTO> page = PageHelperUtils.changePageHelperToCurrentPage(list,ContactFollowDTO.class);
List<ContactFollowDTO> pageList = convertExtInfo(list);
page.setResult(pageList);
return page;
}
@Override
public Map<String, ContactFollowDTO> mapMemberLastFollow(String enterpriseId, String clerkId,List<String> memberIdList) {
List<TabContactFollow> list = contactFollowMapper.lastFollowByMemberId(enterpriseId, clerkId, memberIdList);
List<ContactFollowDTO> followDTOList = convertExtInfo(list);
Map<String, ContactFollowDTO> map = followDTOList.stream().collect(Collectors.toMap(ContactFollowDTO::getMemberId, v -> v,
(v1, v2) -> v1));
return map;
}
private List<ContactFollowDTO> convertExtInfo(List<TabContactFollow> list) {
Map<String, StoreGoodsVO> goodsMap = new HashMap<>();
Set<String> goodsIdSet = list.stream().map(TabContactFollow::getGoodsInfo).filter(StringUtils::isNotBlank)
.flatMap(x -> JSONArray.parseArray(x,String.class).stream()).collect(Collectors.toSet());
// 组装商品信息
if (CollectionUtils.isNotEmpty(goodsIdSet)) {
ServiceResponse<List<StoreGoodsVO>> response = storeGoodsService.listByGoodsIds(Lists.newArrayList(goodsIdSet));
if (response.isSuccess() && CollectionUtils.isNotEmpty(response.getResult())) {
goodsMap = response.getResult().stream().collect(Collectors.toMap(StoreGoodsVO::getGoodsId, Function.identity(), (v1, v2) -> v1));
}
}
Map<String, StoreGoodsVO> finalGoodsMap = goodsMap;
List<ContactFollowDTO> pageList = list.stream().map(follow -> {
ContactFollowDTO contactFollowDTO = EntityUtil.changeEntityNew(ContactFollowDTO.class, follow);
String followMaterial = follow.getFollowMaterial();
if (StringUtils.isNotBlank(followMaterial)) {
contactFollowDTO.setFollowMaterialList(JSONArray.parseArray(followMaterial, String.class));
}
String goodsInfo = follow.getGoodsInfo();
if (StringUtils.isNotBlank(goodsInfo)) {
List<String> goodsIdList = JSONArray.parseArray(goodsInfo, String.class);
List<ContactFollowGoodsDTO> goodsInfoList = goodsIdList.stream().map(goodsId -> {
StoreGoodsVO storeGoodsVO = finalGoodsMap.get(goodsId);
if (storeGoodsVO == null) {
return null;
}
return EntityUtil.changeEntityNew(ContactFollowGoodsDTO.class, storeGoodsVO);
}).filter(Objects::nonNull).collect(Collectors.toList());
contactFollowDTO.setGoodsInfoList(goodsInfoList);
}
return contactFollowDTO;
}).collect(Collectors.toList());
return pageList;
}
}
package com.gic.haoban.manage.service.service.contact.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.Constant;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
import com.gic.haoban.manage.service.dao.mapper.contact.TabContactFollowMapper;
import com.gic.haoban.manage.service.dao.mapper.contact.TabContactLogMapper;
import com.gic.haoban.manage.service.entity.contact.TabContactLog;
import com.gic.haoban.manage.service.service.contact.ContactFollowService;
import com.gic.haoban.manage.service.service.contact.ContactLogService;
import com.gic.store.goods.service.StoreGoodsService;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Objects;
@Service("contactLogService")
public class ContactLogServiceImpl implements ContactLogService {
private static final Logger logger = LogManager.getLogger(ContactFollowService.class);
@Autowired
private TabContactLogMapper contactLogMapper;
@Autowired
private StoreGoodsService storeGoodsService;
@Autowired
private ClerkService clerkService;
@Autowired
private StoreService storeService;
@Override
public void saveContactLog(ContactLogQDTO qdto) {
logger.info("保存建联记录:{}", JSON.toJSONString(qdto));
String enterpriseId = qdto.getEnterpriseId();
String storeId = qdto.getStoreId();
String clerkId = qdto.getClerkId();
String memberId = qdto.getMemberId();
DateTime date = DateUtil.date();
// 是否周期内首次建联 同周期内是否有记录
Integer contactCycle = 1;
// 建联周期 14天内同周期/14天以上周期+1
Integer contactCycleFirst = Constant.FLAG_TRUE;
TabContactLog lastContactLog = contactLogMapper.queryLastLog(memberId, clerkId);
if (lastContactLog != null) {
Date contactTime = lastContactLog.getContactTime();
if (DateUtil.between(date, contactTime, DateUnit.SECOND) > 14 * 24 * 60 * 60) {
contactCycle = lastContactLog.getContactCycle() + 1;
}else {
contactCycle = lastContactLog.getContactCycle();
contactCycleFirst = Constant.FLAG_FALSE;
}
}
logger.info("建联周期:{},是否周期内首次:{}", contactCycle, contactCycleFirst);
TabContactLog contactLog = new TabContactLog();
ClerkDTO clerkDTO = clerkService.getClerkByClerkId(clerkId);
contactLog.setClerkId(clerkId);
contactLog.setStoreId(storeId);
if (clerkDTO != null) {
contactLog.setClerkCode(clerkDTO.getClerkCode());
contactLog.setClerkName(clerkDTO.getClerkName());
}
if (StringUtils.isNotBlank(storeId)) {
StoreDTO store = storeService.getStore(storeId);
if (store != null) {
contactLog.setStoreCode(store.getStoreCode());
}
}
contactLog.setLogId(UniqueIdUtils.uniqueLong());
contactLog.setMemberId(memberId);
contactLog.setContactStatus(Constant.FLAG_TRUE);
contactLog.setContactTime(date);
contactLog.setContactCycle(contactCycle);
contactLog.setContactCycleFirst(contactCycleFirst);
// todo 建联时间
contactLog.setPotentialTime(null);
contactLog.setEnterpriseId(enterpriseId);
contactLogMapper.insert(contactLog);
// todo 刷新es建联时间
}
@Override
public void clearContactLog(String memberId,Integer clearType) {
logger.info("清除建联状态:{},clearType:{}", memberId, clearType);
TabContactLog lastContactLog = contactLogMapper.queryLastLog(memberId, null);
if (lastContactLog == null) {
return;
}
// clearType 1 消费清除 2 换绑主导购(不清除表建联状态)
if (Objects.equals(clearType, 1)) {
TabContactLog update = new TabContactLog();
update.setLogId(lastContactLog.getLogId());
update.setContactStatus(Constant.FLAG_FALSE);
contactLogMapper.update(update);
}
// todo 清除es建联时间 -1
}
}
...@@ -3,9 +3,13 @@ package com.gic.haoban.manage.service.service.content; ...@@ -3,9 +3,13 @@ package com.gic.haoban.manage.service.service.content;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO;
import com.gic.haoban.manage.service.pojo.bo.potential.MemberLastInteractBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 互动记录明细(TabHaobanInteractRecord)表服务接口 * 互动记录明细(TabHaobanInteractRecord)表服务接口
...@@ -74,4 +78,21 @@ public interface InteractRecordService { ...@@ -74,4 +78,21 @@ public interface InteractRecordService {
*/ */
InteractRecordBO queryLeastRecord(String enterpriseId, String clerkId, String bizId, String memberId); InteractRecordBO queryLeastRecord(String enterpriseId, String clerkId, String bizId, String memberId);
/**
* 查询会员对应时间后最新的互动记录
* @param enterpriseId
* @param clerkId
* @param list
* @return
*/
Map<String,InteractRecordBO> mapInteractRecord(String enterpriseId, String clerkId, List<MemberLastInteractBO> list);
/**
* 查询对应时间后会员最新的互动记录
* @param clerkId
* @param lastAccessTime
* @return
*/
List<MemberLastInteractBO> queryMemberIdsByTime(String clerkId, Date lastAccessTime);
} }
...@@ -10,6 +10,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO; ...@@ -10,6 +10,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO;
import com.gic.haoban.manage.service.pojo.bo.potential.MemberLastInteractBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import com.gic.haoban.manage.service.service.content.InteractRecordService; import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService; import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
...@@ -23,11 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -23,11 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Comparator; import java.util.*;
import java.util.Date; import java.util.function.Function;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -262,4 +260,31 @@ public class InteractRecordServiceImpl implements InteractRecordService { ...@@ -262,4 +260,31 @@ public class InteractRecordServiceImpl implements InteractRecordService {
} }
return interactRecordBO; return interactRecordBO;
} }
@Override
public Map<String, InteractRecordBO> mapInteractRecord(String enterpriseId, String clerkId, List<MemberLastInteractBO> list) {
if (CollectionUtils.isEmpty(list)) {
return new HashMap<>();
}
List<TabHaobanInteractRecord> records = tabHaobanInteractRecordMapper.selectLastByMemberIds(clerkId, list);
List<InteractRecordBO> recordBOList = records.stream()
.map(item -> {
InteractRecordBO temp = new InteractRecordBO();
BeanUtils.copyProperties(item, temp);
temp.setRecordDesc(interactRecordBuilder.buildDesc(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item));
interactRecordBuilder.warpRelationGoodsNum(temp);
return temp;
})
.collect(Collectors.toList());
Map<String, InteractRecordBO> map = recordBOList.stream()
.collect(Collectors.toMap(InteractRecordBO::getMemberId, Function.identity(),
(e, x) -> e));
return map;
}
@Override
public List<MemberLastInteractBO> queryMemberIdsByTime(String clerkId, Date lastAccessTime) {
return tabHaobanInteractRecordMapper.selectMemberIdsByTime(clerkId, lastAccessTime);
}
} }
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.haoban.manage.api.dto.contact.ContactFollowDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.api.service.contact.ContactFollowApiService;
import com.gic.haoban.manage.service.service.contact.ContactFollowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* Created by wangzubo on 2022/11/1.
*/
@Service("contactFollowApiService")
public class ContactFollowApiServiceImpl implements ContactFollowApiService {
@Autowired
private ContactFollowService contactFollowService;
@Override
public ServiceResponse<Void> saveFollow(ContactFollowQDTO qdto) {
contactFollowService.saveFollow(qdto);
return ServiceResponse.success();
}
@Override
public ServiceResponse<Void> saveBatchFollow(List<ContactFollowQDTO> list) {
contactFollowService.saveBatchFollow(list);
return ServiceResponse.success();
}
@Override
public ServiceResponse<Page<ContactFollowDTO>> pageFollow(String enterpriseId, ContactFollowSearchQDTO searchQDTO, BasePageInfo pageInfo) {
Page<ContactFollowDTO> page = contactFollowService.pageFollow(enterpriseId, searchQDTO, pageInfo);
return ServiceResponse.success(page);
}
@Override
public ServiceResponse<Map<String, ContactFollowDTO>> mapMemberLastFollow(String enterpriseId, String clerkId, List<String> memberIdList) {
Map<String, ContactFollowDTO> map = contactFollowService.mapMemberLastFollow(enterpriseId, clerkId, memberIdList);
return ServiceResponse.success(map);
}
}
...@@ -143,6 +143,7 @@ ...@@ -143,6 +143,7 @@
<dubbo:reference interface="com.gic.enterprise.api.service.EnterpriseUseForbidService" id="enterpriseUseForbidService"/> <dubbo:reference interface="com.gic.enterprise.api.service.EnterpriseUseForbidService" id="enterpriseUseForbidService"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanMenuApiService" ref="haobanMenuApiServiceImpl"/> <dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanMenuApiService" ref="haobanMenuApiServiceImpl"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanRoleApiService" ref="haobanRoleApiServiceImpl"/> <dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanRoleApiService" ref="haobanRoleApiServiceImpl"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.contact.ContactFollowApiService" ref="contactFollowApiService"/>
<dubbo:reference interface="com.gic.enterprise.api.service.DepartmentService" id="gicDepartmentService"/> <dubbo:reference interface="com.gic.enterprise.api.service.DepartmentService" id="gicDepartmentService"/>
<dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxDepartmentApiService" <dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxDepartmentApiService"
...@@ -230,6 +231,7 @@ ...@@ -230,6 +231,7 @@
<dubbo:reference interface="com.gic.haoban.task.manage.api.service.OpenQwApiService" id="openQwApiService"/> <dubbo:reference interface="com.gic.haoban.task.manage.api.service.OpenQwApiService" id="openQwApiService"/>
<dubbo:reference interface="com.gic.store.goods.service.GoodsInfoOutApiService" id="goodsInfoOutApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference interface="com.gic.store.goods.service.GoodsInfoOutApiService" id="goodsInfoOutApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.store.goods.service.GoodsCenterApiService" id="goodsCenterApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference interface="com.gic.store.goods.service.GoodsCenterApiService" id="goodsCenterApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.store.goods.service.StoreGoodsService" id="storeGoodsService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.business.order.service.ordermanage.OrderInfoOutApiService" id="orderInfoOutApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference interface="com.gic.business.order.service.ordermanage.OrderInfoOutApiService" id="orderInfoOutApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.orderecommerce.api.service.EcommerceOrderOutputApiService" id="ecommerceOrderOutputApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference interface="com.gic.orderecommerce.api.service.EcommerceOrderOutputApiService" id="ecommerceOrderOutputApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.order.api.service.sharding.OrderApiService" id="orderApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference interface="com.gic.order.api.service.sharding.OrderApiService" id="orderApiService" timeout="10000" retries="0" check="false"/>
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gic.haoban.manage.service.dao.mapper.contact.TabContactFollowMapper">
<resultMap id="BaseResultMap" type="com.gic.haoban.manage.service.entity.contact.TabContactFollow">
<id column="follow_id" property="followId" />
<result column="member_id" property="memberId" />
<result column="clerk_id" property="clerkId" />
<result column="clerk_code" property="clerkCode" />
<result column="follow_remark" property="followRemark" />
<result column="follow_material" property="followMaterial" />
<result column="goods_info" property="goodsInfo" />
<result column="follow_time" property="followTime" />
<result column="enterprise_id" property="enterpriseId" />
<result column="delete_flag" property="deleteFlag" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
follow_id, member_id, clerk_id, clerk_code, follow_remark, follow_material, goods_info, follow_time, enterprise_id, delete_flag, create_time, update_time
</sql>
<sql id="Alias_Base_Column_List">
t.follow_id, t.member_id, t.clerk_id, t.clerk_code, t.follow_remark, t.follow_material, t.goods_info, t.follow_time, t.enterprise_id, t.delete_flag, t.create_time, t.update_time
</sql>
<select id="queryById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM tab_contact_follow
WHERE follow_id = #{followId}
</select>
<select id="queryByIds" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM tab_contact_follow
WHERE follow_id IN
<foreach item="item" index="index" collection="followIds" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="count" resultType="long">
SELECT COUNT(*)
FROM tab_contact_follow
<where>
<if test="memberId != null">
AND member_id = #{memberId}
</if>
<if test="clerkId != null">
AND clerk_id = #{clerkId}
</if>
<if test="enterpriseId != null">
AND enterprise_id = #{enterpriseId}
</if>
</where>
</select>
<select id="pageFollow" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM tab_contact_follow
<where>
enterprise_id = #{enterpriseId} and delete_flag = 0
<if test="search.clerkId != null and search.clerkId != ''">
AND clerk_id = #{search.clerkId}
</if>
<if test="search.memberId != null and search.memberId != ''">
AND member_id = #{search.memberId}
</if>
</where>
ORDER BY follow_time DESC,follow_id DESC
</select>
<select id="lastFollowByMemberId" resultMap="BaseResultMap">
SELECT
<include refid="Alias_Base_Column_List" />
FROM
tab_contact_follow t
INNER JOIN ( SELECT clerk_id, member_id, MAX( follow_time ) AS max_follow_time FROM tab_contact_follow WHERE
enterprise_id = #{enterpriseId}
and delete_flag = 0
and clerk_id = #{clerkId}
and member_id IN
<foreach item="item" index="index" collection="memberIdList" open="(" separator="," close=")">
#{item}
</foreach>
GROUP BY clerk_id, member_id )
latest ON t.clerk_id = latest.clerk_id
AND t.member_id = latest.member_id
AND t.follow_time = latest.max_follow_time
where t.enterprise_id = #{enterpriseId}
and t.delete_flag = 0
and t.clerk_id = #{clerkId}
and t.member_id IN
<foreach item="item" index="index" collection="memberIdList" open="(" separator="," close=")">
#{item}
</foreach>
order by t.follow_time DESC,t.follow_id DESC
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="followId">
INSERT INTO tab_contact_follow (member_id, clerk_id, clerk_code, follow_remark, follow_material, goods_info, follow_time, enterprise_id, delete_flag, create_time, update_time)
VALUES (#{memberId}, #{clerkId}, #{clerkCode}, #{followRemark}, #{followMaterial}, #{goodsInfo}, #{followTime}, #{enterpriseId}, #{deleteFlag}, #{createTime}, #{updateTime})
</insert>
<insert id="insertBatch">
INSERT INTO tab_contact_follow (follow_id,member_id, clerk_id, clerk_code, follow_remark, follow_material, goods_info, follow_time, enterprise_id)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.followId},#{item.memberId}, #{item.clerkId}, #{item.clerkCode}, #{item.followRemark}, #{item.followMaterial}, #{item.goodsInfo}, #{item.followTime}, #{item.enterpriseId})
</foreach>
</insert>
<update id="update">
UPDATE tab_contact_follow
<set>
<if test="memberId != null">member_id = #{memberId},</if>
<if test="clerkId != null">clerk_id = #{clerkId},</if>
<if test="clerkCode != null">clerk_code = #{clerkCode},</if>
<if test="followRemark != null">follow_remark = #{followRemark},</if>
<if test="followMaterial != null">follow_material = #{followMaterial},</if>
<if test="goodsInfo != null">goods_info = #{goodsInfo},</if>
<if test="followTime != null">follow_time = #{followTime},</if>
<if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if>
<if test="deleteFlag != null">delete_flag = #{deleteFlag},</if>
update_time = #{updateTime}
</set>
WHERE follow_id = #{followId}
</update>
<delete id="deleteById">
DELETE FROM tab_contact_follow
WHERE follow_id = #{followId}
</delete>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gic.haoban.manage.service.dao.mapper.contact.TabContactLogMapper">
<resultMap type="com.gic.haoban.manage.service.entity.contact.TabContactLog" id="TabContactLogMap">
<result property="logId" column="log_id" jdbcType="BIGINT"/>
<result property="memberId" column="member_id" jdbcType="VARCHAR"/>
<result property="clerkId" column="clerk_id" jdbcType="VARCHAR"/>
<result property="clerkCode" column="clerk_code" jdbcType="VARCHAR"/>
<result property="clerkName" column="clerk_name" jdbcType="VARCHAR"/>
<result property="storeId" column="store_id" jdbcType="VARCHAR"/>
<result property="storeCode" column="store_code" jdbcType="VARCHAR"/>
<result property="contactStatus" column="contact_status" jdbcType="INTEGER"/>
<result property="contactTime" column="contact_time" jdbcType="TIMESTAMP"/>
<result property="contactCycle" column="contact_cycle" jdbcType="INTEGER"/>
<result property="contactCycleFirst" column="contact_cycle_first" jdbcType="INTEGER"/>
<result property="potentialTime" column="potential_time" jdbcType="TIMESTAMP"/>
<result property="enterpriseId" column="enterprise_id" jdbcType="VARCHAR"/>
<result property="deleteFlag" column="delete_flag" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="TabContactLogMap">
select *
from tab_contact_log
where log_id = #{logId} and delete_flag = 0
</select>
<!--查询多个-->
<select id="queryByIds" resultMap="TabContactLogMap">
select *
from tab_contact_log
where delete_flag = 0 and log_id in
<foreach collection="logIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
order by create_time desc
</select>
<select id="queryLastLog" resultMap="TabContactLogMap">
select *
from tab_contact_log
where delete_flag = 0 and member_id = #{memberId}
<if test="clerkId!=null and clerkId!=''">
and clerk_id = #{clerkId}
</if>
order by contact_time desc,log_id desc limit 1
</select>
<!--查询列表-->
<select id="listContactLog" resultMap="TabContactLogMap">
select
a.*
from tab_contact_log a
where a.enterprise_id = #{enterpriseId} and a.delete_flag = 0
<if test="search.memberId != null and search.memberId != ''">
and a.member_id = #{search.memberId}
</if>
<if test="search.clerkId != null">
and a.clerk_id = #{search.clerkId}
</if>
<if test="search.contactStatus != null">
and a.contact_status = #{search.contactStatus}
</if>
<if test="search.beginDate != null">
and a.contact_time >= #{search.beginDate}
</if>
<if test="search.endDate != null">
and a.contact_time <![CDATA[<=]]> #{search.endDate}
</if>
order by a.create_time desc,a.log_id desc
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from tab_contact_log
<where>
<if test="logId != null">
and log_id = #{logId}
</if>
<if test="memberId != null and memberId != ''">
and member_id = #{memberId}
</if>
<if test="clerkId != null">
and clerk_id = #{clerkId}
</if>
<if test="contactStatus != null">
and contact_status = #{contactStatus}
</if>
<if test="contactTime != null">
and contact_time = #{contactTime}
</if>
<if test="contactCycle != null">
and contact_cycle = #{contactCycle}
</if>
<if test="contactCycleFirst != null">
and contact_cycle_first = #{contactCycleFirst}
</if>
<if test="potentialTime != null">
and potential_time = #{potentialTime}
</if>
<if test="enterpriseId != null and enterpriseId != ''">
and enterprise_id = #{enterpriseId}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="logId" useGeneratedKeys="true">
insert into tab_contact_log(
log_id,
member_id,
clerk_id,
clerk_code,
clerk_name,
store_id,
store_code,
contact_status,
contact_time,
contact_cycle,
contact_cycle_first,
potential_time,
enterprise_id
)
values (
#{logId},
#{memberId},
#{clerkId},
#{clerkCode},
#{clerkName},
#{storeId},
#{storeCode},
#{contactStatus},
#{contactTime},
#{contactCycle},
#{contactCycleFirst},
#{potentialTime},
#{enterpriseId})
</insert>
<!--通过主键修改数据-->
<update id="update">
update tab_contact_log
<set>
<if test="memberId != null and memberId != ''">
member_id = #{memberId},
</if>
<if test="clerkId != null">
clerk_id = #{clerkId},
</if>
<if test="clerkCode != null and clerkCode != ''">
clerk_code = #{clerkCode},
</if>
<if test="clerkName != null and clerkName != ''">
clerk_name = #{clerkName},
</if>
<if test="storeId != null">
store_id = #{storeId},
</if>
<if test="storeCode != null and storeCode != ''">
store_code = #{storeCode},
</if>
<if test="contactStatus != null">
contact_status = #{contactStatus},
</if>
<if test="contactTime != null">
contact_time = #{contactTime},
</if>
<if test="contactCycle != null">
contact_cycle = #{contactCycle},
</if>
<if test="contactCycleFirst != null">
contact_cycle_first = #{contactCycleFirst},
</if>
<if test="potentialTime != null">
potential_time = #{potentialTime},
</if>
<if test="enterpriseId != null and enterpriseId != ''">
enterprise_id = #{enterpriseId},
</if>
<if test="deleteFlag != null">
delete_flag = #{deleteFlag},
</if>
</set>
where log_id = #{logId}
</update>
<!--通过主键删除-->
<delete id="deleteById">
update tab_contact_log set delete_flag = 1
where enterprise_id = #{enterpriseId} and log_id = #{logId} and delete_flag = 0
</delete>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gic.haoban.manage.service.dao.mapper.contact.TabContactOrderMapper">
<resultMap id="BaseResultMap" type="com.gic.haoban.manage.service.entity.contact.TabContactOrder">
<id column="id" property="id" />
<result column="order_id" property="orderId" />
<result column="member_id" property="memberId" />
<result column="order_number" property="orderNumber" />
<result column="paid_amount" property="paidAmount" />
<result column="product_count" property="productCount" />
<result column="goods_info" property="goodsInfo" />
<result column="pay_time" property="payTime" />
<result column="receipts_date" property="receiptsDate" />
<result column="channel_code" property="channelCode" />
<result column="channel_type" property="channelType" />
<result column="clerk_id" property="clerkId" />
<result column="clerk_code" property="clerkCode" />
<result column="store_id" property="storeId" />
<result column="contact_log_id" property="contactLogId" />
<result column="contact_time" property="contactTime" />
<result column="potential_time" property="potentialTime" />
<result column="delete_flag" property="deleteFlag" />
<result column="enterprise_id" property="enterpriseId" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
</resultMap>
<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
</sql>
<select id="queryById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM tab_contact_order
WHERE id = #{id}
</select>
<select id="queryByIds" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM tab_contact_order
WHERE id IN
<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="count" resultType="long">
SELECT COUNT(*)
FROM tab_contact_order
<where>
<if test="orderId != null">
AND order_id = #{orderId}
</if>
<if test="memberId != null">
AND member_id = #{memberId}
</if>
<if test="enterpriseId != null">
AND enterprise_id = #{enterpriseId}
</if>
</where>
</select>
<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, delete_flag, enterprise_id, create_time, update_time)
VALUES (#{orderId}, #{memberId}, #{orderNumber}, #{paidAmount}, #{productCount}, #{goodsInfo}, #{payTime}, #{receiptsDate}, #{channelCode}, #{channelType}, #{clerkId}, #{clerkCode}, #{storeId}, #{contactLogId}, #{contactTime}, #{potentialTime}, #{deleteFlag}, #{enterpriseId}, #{createTime}, #{updateTime})
</insert>
<update id="update">
UPDATE tab_contact_order
<set>
<if test="orderId != null">order_id = #{orderId},</if>
<if test="memberId != null">member_id = #{memberId},</if>
<if test="orderNumber != null">order_number = #{orderNumber},</if>
<if test="paidAmount != null">paid_amount = #{paidAmount},</if>
<if test="productCount != null">product_count = #{productCount},</if>
<if test="goodsInfo != null">goods_info = #{goodsInfo},</if>
<if test="payTime != null">pay_time = #{payTime},</if>
<if test="receiptsDate != null">receipts_date = #{receiptsDate},</if>
<if test="channelCode != null">channel_code = #{channelCode},</if>
<if test="channelType != null">channel_type = #{channelType},</if>
<if test="clerkId != null">clerk_id = #{clerkId},</if>
<if test="clerkCode != null">clerk_code = #{clerkCode},</if>
<if test="storeId != null">store_id = #{storeId},</if>
<if test="contactLogId != null">contact_log_id = #{contactLogId},</if>
<if test="contactTime != null">contact_time = #{contactTime},</if>
<if test="potentialTime != null">potential_time = #{potentialTime},</if>
<if test="deleteFlag != null">delete_flag = #{deleteFlag},</if>
<if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if>
update_time = #{updateTime}
</set>
WHERE id = #{id}
</update>
<delete id="deleteById">
DELETE FROM tab_contact_order
WHERE id = #{id}
</delete>
</mapper>
\ No newline at end of file
...@@ -313,6 +313,31 @@ ...@@ -313,6 +313,31 @@
order by null order by null
</select> </select>
<select id="selectLastByMemberIds" resultMap="TabHaobanInteractRecordMap">
select t1.*
FROM tab_haoban_interact_record t1
JOIN (
SELECT member_id, MAX(last_access_time) AS max_last_access_time
FROM tab_haoban_interact_record
WHERE clerk_id = #{clerkId} AND delete_flag = 0 and
<foreach collection="list" item="item" separator=" OR ">
(member_id = #{item.memberId} AND last_access_time > #{item.lastAccessTime})
</foreach>
GROUP BY member_id
) t2
ON t1.member_id = t2.member_id AND t1.last_access_time = t2.max_last_access_time
order by t1.last_access_time desc,t1.id desc
</select>
<select id="selectMemberIdsByTime" resultType="com.gic.haoban.manage.service.pojo.bo.potential.MemberLastInteractBO">
select member_id as memberId, max(last_access_time) as lastAccessTime
FROM tab_haoban_interact_record
where clerk_id = #{clerkId} AND delete_flag = 0
and last_access_time >= #{lastAccessTime}
group by member_id
order by last_access_time desc,id desc
</select>
<update id="mergeMember"> <update id="mergeMember">
update tab_haoban_interact_record update tab_haoban_interact_record
set member_id = #{memberId} set member_id = #{memberId}
......
package contact;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.haoban.manage.api.dto.contact.ContactFollowDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.potential.MemberLastInteractBO;
import com.gic.haoban.manage.service.service.contact.ContactFollowService;
import com.gic.haoban.manage.service.service.contact.ContactLogService;
import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.google.common.collect.Lists;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
public class ContactTest {
@Autowired
private ContactFollowService contactFollowService;
@Autowired
private ContactLogService contactLogService;
@Autowired
private InteractRecordService interactRecordService;
String eid = "ff8080815dacd3a2015dacd3ef5c0000";
String clerkId = "3c01cef9159f4599abf600db1f9583ef";
String memberId = "ff8080818215878101821949a845003c";
String storeId = "ff8080816a11a716016a23d2f5a5000d";
@Test
public void saveBatchFollow() throws Exception {
List<ContactFollowQDTO> list = new ArrayList<>();
ContactFollowQDTO followQDTO = new ContactFollowQDTO();
followQDTO.setMemberId(memberId);
followQDTO.setClerkId(clerkId);
followQDTO.setFollowRemark("大逼斗向客户发送了2款喜好推荐商品");
followQDTO.setGoodsInfoList(Lists.newArrayList("8a80908c92dc2d690192dc408b6c0026","8a80908c943bcebb01944e1699c20810"));
followQDTO.setFollowTime(new Date());
followQDTO.setEnterpriseId(eid);
list.add(followQDTO);
followQDTO = new ContactFollowQDTO();
followQDTO.setMemberId(memberId);
followQDTO.setClerkId(clerkId);
followQDTO.setFollowRemark("大逼斗标记了建联。备注:啦啦啦");
followQDTO.setFollowMaterialList(Lists.newArrayList("https://jhdm-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-57dff778cdae48618d44b809b6ddbb45.jpg"));
followQDTO.setFollowTime(new Date());
followQDTO.setEnterpriseId(eid);
list.add(followQDTO);
contactFollowService.saveBatchFollow(list);
}
@Test
public void pageFollow() throws Exception {
ContactFollowSearchQDTO searchQDTO = new ContactFollowSearchQDTO();
searchQDTO.setMemberId(memberId);
searchQDTO.setClerkId(clerkId);
Page<ContactFollowDTO> page = contactFollowService.pageFollow(eid, searchQDTO, new BasePageInfo());
System.out.println(JSON.toJSONString(page));
}
@Test
public void mapMemberLastFollow() throws Exception {
List<String> memberIds = Lists.newArrayList(memberId);
Map<String, ContactFollowDTO> map = contactFollowService.mapMemberLastFollow(eid, clerkId, memberIds);
System.out.println(JSON.toJSONString(map));
}
@Test
public void saveContactLog() throws Exception {
ContactLogQDTO contactLogQDTO = new ContactLogQDTO();
contactLogQDTO.setMemberId(memberId);
contactLogQDTO.setClerkId(clerkId);
contactLogQDTO.setStoreId(storeId);
contactLogQDTO.setEnterpriseId(eid);
contactLogService.saveContactLog(contactLogQDTO);
}
@Test
public void clearContactLog() throws Exception {
contactLogService.clearContactLog(memberId, 1);
}
@Test
public void mapInteractRecord() throws Exception {
List<MemberLastInteractBO> list = new ArrayList<>();
MemberLastInteractBO memberLastInteractBO = new MemberLastInteractBO();
memberLastInteractBO.setMemberId(memberId);
memberLastInteractBO.setLastAccessTime(new Date("2024/01/01 00:00:00"));
list.add(memberLastInteractBO);
Map<String, InteractRecordBO> map = interactRecordService.mapInteractRecord(eid, "26efaa8144e14f60b2f4d48ffe9f708c", list);
System.out.println(JSON.toJSONString(map));
}
@Test
public void queryMemberIdsByTime() throws Exception {
List<MemberLastInteractBO> list = interactRecordService.queryMemberIdsByTime(
"26efaa8144e14f60b2f4d48ffe9f708c",
DateUtil.date().offset(DateField.DAY_OF_MONTH, -14));
System.out.println(JSON.toJSONString(list));
}
}
...@@ -9,7 +9,9 @@ import java.util.stream.Collectors; ...@@ -9,7 +9,9 @@ import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import com.gic.haoban.manage.web.vo.EnterpriseConfigVO; import com.gic.enterprise.api.dto.EnterpriseUsingPermissionDto;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.haoban.manage.web.vo.*;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -77,10 +79,6 @@ import com.gic.haoban.manage.web.qo.GetUserByMemberCodeQo; ...@@ -77,10 +79,6 @@ import com.gic.haoban.manage.web.qo.GetUserByMemberCodeQo;
import com.gic.haoban.manage.web.qo.MemberLoginQo; import com.gic.haoban.manage.web.qo.MemberLoginQo;
import com.gic.haoban.manage.web.qo.StaffLoginQO; import com.gic.haoban.manage.web.qo.StaffLoginQO;
import com.gic.haoban.manage.web.utils.IPAddressUtil; import com.gic.haoban.manage.web.utils.IPAddressUtil;
import com.gic.haoban.manage.web.vo.AppStaffVo;
import com.gic.haoban.manage.web.vo.MemberSendMessageVo;
import com.gic.haoban.manage.web.vo.StoreMemberVO;
import com.gic.haoban.manage.web.vo.WellDoneLoginInfoVO;
import com.gic.member.api.service.MemberOpenCardBusinessService; import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.membersource.api.dto.output.BusinessRefInfoDTO; import com.gic.membersource.api.dto.output.BusinessRefInfoDTO;
import com.gic.membersource.api.service.MemberOutsideApiService; import com.gic.membersource.api.service.MemberOutsideApiService;
...@@ -93,7 +91,7 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -93,7 +91,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
/** /**
* 企微配置 * 后台-企微配置
*/ */
@RestController @RestController
public class WxEnterpriseInfoController extends WebBaseController { public class WxEnterpriseInfoController extends WebBaseController {
...@@ -138,6 +136,8 @@ public class WxEnterpriseInfoController extends WebBaseController { ...@@ -138,6 +136,8 @@ public class WxEnterpriseInfoController extends WebBaseController {
private AccountService accountService ; private AccountService accountService ;
@Autowired @Autowired
MemberOutsideApiService memberOutsideApiService; MemberOutsideApiService memberOutsideApiService;
@Autowired
private EnterpriseUseForbidService enterpriseUseForbidService;
/** /**
...@@ -788,4 +788,19 @@ public class WxEnterpriseInfoController extends WebBaseController { ...@@ -788,4 +788,19 @@ public class WxEnterpriseInfoController extends WebBaseController {
.build(); .build();
return RestResponse.successResult(configVO); return RestResponse.successResult(configVO);
} }
/**
* 获取商户可用的服务
* @param enterpriseId
* @return
*/
@RequestMapping(path = "/enterprise/use-permission")
public RestResponse<List<EnterpriseUsingPermissionVO>> selectUsingEnterprisePermission(String enterpriseId) {
if (StringUtils.isBlank(enterpriseId)) {
return RestResponse.failure("-701", "参数缺失");
}
List<EnterpriseUsingPermissionDto> list = enterpriseUseForbidService.selectUsingEnterprisePermissionByEnterpriseId(enterpriseId);
List<EnterpriseUsingPermissionVO> voList = EntityUtil.changeEntityListByJSON(EnterpriseUsingPermissionVO.class, list);
return RestResponse.successResult(voList);
}
} }
package com.gic.haoban.manage.web.controller.contact;
import cn.hutool.core.date.DateUtil;
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.util.EntityUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.api.dto.contact.ContactFollowDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.api.service.contact.ContactFollowApiService;
import com.gic.haoban.manage.web.qo.contact.ContactFollowPageQO;
import com.gic.haoban.manage.web.qo.contact.ContactFollowQO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(path = "/contact")
public class ContactController {
@Autowired
private ContactFollowApiService contactFollowApiService;
/**
* 添加跟进记录
* @param contactFollowQO
* @return
*/
@RequestMapping(path = "/follow")
public RestResponse<Void> saveFollow(ContactFollowQO contactFollowQO) {
ContactFollowQDTO followQDTO = EntityUtil.changeEntityNew(ContactFollowQDTO.class, contactFollowQO);
followQDTO.setFollowTime(DateUtil.date());
ServiceResponse<Void> serviceResponse = contactFollowApiService.saveFollow(followQDTO);
if (!serviceResponse.isSuccess()) {
return RestResponse.failure(serviceResponse.getCode(), serviceResponse.getMessage());
}
return RestResponse.successResult();
}
/**
* 分页查询跟进记录
* @param contactFollowPageQO
* @return
*/
@RequestMapping(path = "/page-follow")
public RestResponse<Page<ContactFollowDTO>> pageFollow(ContactFollowPageQO contactFollowPageQO) {
String enterpriseId = contactFollowPageQO.getEnterpriseId();
String clerkId = contactFollowPageQO.getClerkId();
String memberId = contactFollowPageQO.getMemberId();
ContactFollowSearchQDTO searchQDTO = new ContactFollowSearchQDTO();
searchQDTO.setMemberId(memberId);
searchQDTO.setClerkId(clerkId);
BasePageInfo basePageInfo = contactFollowPageQO.getBasePageInfo();
ServiceResponse<Page<ContactFollowDTO>> serviceResponse = contactFollowApiService.pageFollow(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.gic.commons.web.qo.PageQo;
/**
* Created by wangzubo on 2025/3/15.
*/
public class ContactFollowPageQO extends PageQo {
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 企业id
*/
private String enterpriseId;
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 String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
package com.gic.haoban.manage.web.qo.contact;
import java.util.List;
/**
* Created by wangzubo on 2025/3/15.
*/
public class ContactFollowQO {
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 跟进记录
*/
private String followRemark;
/**
* 跟进上传素材,数组格式
*/
private List<String> followMaterialList;
/**
* 关联商品信息
*/
private List<String> goodsInfoList;
/**
* 企业id
*/
private String enterpriseId;
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 String getFollowRemark() {
return followRemark;
}
public void setFollowRemark(String followRemark) {
this.followRemark = followRemark;
}
public List<String> getFollowMaterialList() {
return followMaterialList;
}
public void setFollowMaterialList(List<String> followMaterialList) {
this.followMaterialList = followMaterialList;
}
public List<String> getGoodsInfoList() {
return goodsInfoList;
}
public void setGoodsInfoList(List<String> goodsInfoList) {
this.goodsInfoList = goodsInfoList;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
package com.gic.haoban.manage.web.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class EnterpriseUsingPermissionVO implements Serializable {
private static final long serialVersionUID = -5235522988932723506L;
private Integer id;
//模块名
private String moduleName;
//菜单code
private String rightMenuCode;
//商户功能状态
private Integer status;
//商户功能开始时间
private Date serviceStartDate;
//商户功能到期时间
private Date serviceEndDate;
//是否商户功能全部停用
private Integer EnterpriseForbid;
//版本号(1基础版 2高级版)
private Integer moduleVersion;
}
...@@ -137,6 +137,8 @@ ...@@ -137,6 +137,8 @@
<dubbo:reference interface="com.gic.haoban.manage.api.service.content.MaterialShareLogApiService" id="materialShareLogApiService" timeout="100000" retries="0" check="false" /> <dubbo:reference interface="com.gic.haoban.manage.api.service.content.MaterialShareLogApiService" id="materialShareLogApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.contact.ContactFollowApiService" id="contactFollowApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.content.PotentialCustomerApiService" id="potentialCustomerApiService" timeout="100000" retries="0" check="false" /> <dubbo:reference interface="com.gic.haoban.manage.api.service.content.PotentialCustomerApiService" id="potentialCustomerApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.content.InteractRecordApiService" id="interactRecordApiService" timeout="100000" retries="0" check="false" /> <dubbo:reference interface="com.gic.haoban.manage.api.service.content.InteractRecordApiService" id="interactRecordApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference id="orderVerificationRecordApiService" interface="com.gic.haoban.app.aggregation.api.service.evaluation.OrderVerificationRecordApiService" timeout="100000" retries="0" check="false" /> <dubbo:reference id="orderVerificationRecordApiService" interface="com.gic.haoban.app.aggregation.api.service.evaluation.OrderVerificationRecordApiService" timeout="100000" retries="0" check="false" />
......
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