Commit ca42192c by 王祖波

Merge branch 'feature-recommend'

# Conflicts:
#	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/content/InteractRecordService.java
#	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/content/impl/InteractRecordServiceImpl.java
#	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/content/PotentialCustomerApiServiceImpl.java
parents ba9f4c80 2a0b2c7f
......@@ -67,6 +67,11 @@ public class ClerkShareGoodsLogDTO implements Serializable {
*/
private String extend;
/**
* 中转页id
*/
private String wxaLinkId;
public String getEnterpriseId() {
return enterpriseId;
}
......@@ -154,4 +159,12 @@ public class ClerkShareGoodsLogDTO implements Serializable {
public void setExtend(String extend) {
this.extend = extend;
}
public String getWxaLinkId() {
return wxaLinkId;
}
public void setWxaLinkId(String wxaLinkId) {
this.wxaLinkId = wxaLinkId;
}
}
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.dto.contact;
import java.io.Serializable;
import java.util.Date;
/**
* 建联日志表(TabContactLog)实体类
*
* @author TONGYI Lingma
* @since 2024-09-27 16:09:38
*/
public class ContactLogDTO 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;
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;
}
}
\ 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 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;
/**
* 老订单类型
*/
private Integer orderType;
/**
* 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 getOrderType() {
return orderType;
}
public void setOrderType(Integer orderType) {
this.orderType = orderType;
}
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 cn.hutool.core.util.NumberUtil;
import java.io.Serializable;
import java.math.RoundingMode;
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 Double unitPrice;
/**
* 折扣 = 实付/吊牌价
*
*/
private Double discount;
/**
* 商品名称
*/
private String proName;
/**
* 商品编号
*/
private String proNo;
/**
* 商品类型
*/
private Integer proType;
/**
* 商品规格编码
*/
private String skuCode;
/**
* 商品规格属性
*/
private String attrbute;
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 Double getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(Double unitPrice) {
this.unitPrice = unitPrice;
}
public Double getDiscount() {
if (unitPrice != null && payAmount != null) {
if (unitPrice == 0) {
return 1.0;
}
return NumberUtil.div(payAmount * 1.0, unitPrice.doubleValue(), 2, RoundingMode.HALF_UP);
}
return discount;
}
public void setDiscount(Double discount) {
this.discount = discount;
}
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 String getAttrbute() {
return attrbute;
}
public void setAttrbute(String attrbute) {
this.attrbute = attrbute;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.dto.content;
import java.io.Serializable;
import java.util.Date;
/**
* Created by wangzubo on 2025/3/15.
*/
public class MemberLastInteractDTO implements Serializable {
/**
* 会员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.api.dto.content;
import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import java.io.Serializable;
import java.util.Date;
......@@ -100,6 +102,11 @@ public class PotentialCustomerDTO implements Serializable {
*/
private Integer durationTime;
/**
* 扩展信息
*/
private InteractRecordExtendInfoDTO extendInfo;
public Long getPotentialCustomerId() {
return potentialCustomerId;
}
......@@ -235,4 +242,12 @@ public class PotentialCustomerDTO implements Serializable {
public void setMemberNickName(String memberNickName) {
this.memberNickName = memberNickName;
}
public InteractRecordExtendInfoDTO getExtendInfo() {
return extendInfo;
}
public void setExtendInfo(InteractRecordExtendInfoDTO extendInfo) {
this.extendInfo = extendInfo;
}
}
package com.gic.haoban.manage.api.dto.content.report;
import java.io.Serializable;
import java.util.List;
/**
* @Author MUSI
......@@ -28,6 +29,11 @@ public class MaterialReportDTO implements Serializable {
*/
private Integer reportType;
/**
* 周报内容
*/
private List<String> rightMenuCodeList;
public String getEnterpriseId() {
return enterpriseId;
}
......@@ -51,4 +57,12 @@ public class MaterialReportDTO implements Serializable {
public void setReportType(Integer reportType) {
this.reportType = reportType;
}
public List<String> getRightMenuCodeList() {
return rightMenuCodeList;
}
public void setRightMenuCodeList(List<String> rightMenuCodeList) {
this.rightMenuCodeList = rightMenuCodeList;
}
}
package com.gic.haoban.manage.api.dto.send;
import java.io.Serializable;
import java.util.Date;
/**
* Created by wangzubo on 2025/3/25.
*/
public class DealQwSendDTO implements Serializable {
/**
* 企业id
*/
private String enterpriseId;
/**
* 处理类型 1 获取msgId 2 刷新发送结果
*/
private Integer refreshType;
/**
* 重试次数
*/
private Integer tryCount;
/**
* 获取msgId数据
*/
private FinishQwSendBO finishQwSend;
/**
* 刷新发送结果数据
*/
private QwSendMsgBO qwSendMsg;
public static class FinishQwSendBO implements Serializable{
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* 发送时间
*/
private Date sendTime;
/**
* 业务类型 1素材分享 2商品推荐
*/
private Integer bizType;
/**
* 好办企业id
*/
private String wxEnterpriseId;
/**
* 企业id
*/
private String enterpriseId;
public FinishQwSendBO() {
}
public FinishQwSendBO(String clerkId, String staffId, Date sendTime, Integer bizType, String wxEnterpriseId, String enterpriseId) {
this.clerkId = clerkId;
this.staffId = staffId;
this.sendTime = sendTime;
this.bizType = bizType;
this.wxEnterpriseId = wxEnterpriseId;
this.enterpriseId = enterpriseId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
public static class QwSendMsgBO implements Serializable {
/**
* 主键id
*/
private Long id;
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* msgId
*/
private String msgId;
/**
* 发送时间
*/
private Date sendTime;
/**
* 业务类型 1素材分享 2商品推荐
*/
private Integer bizType;
/**
* 好办企业id
*/
private String wxEnterpriseId;
/**
* 企业id
*/
private String enterpriseId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getRefreshType() {
return refreshType;
}
public void setRefreshType(Integer refreshType) {
this.refreshType = refreshType;
}
public Integer getTryCount() {
return tryCount;
}
public void setTryCount(Integer tryCount) {
this.tryCount = tryCount;
}
public FinishQwSendBO getFinishQwSend() {
return finishQwSend;
}
public void setFinishQwSend(FinishQwSendBO finishQwSend) {
this.finishQwSend = finishQwSend;
}
public QwSendMsgBO getQwSendMsg() {
return qwSendMsg;
}
public void setQwSendMsg(QwSendMsgBO qwSendMsg) {
this.qwSendMsg = qwSendMsg;
}
}
......@@ -15,6 +15,7 @@ public enum NoticeMessageCategoryTypeEnum {
MATERIAL(6, "素材相关"),
POTENTIAL_CUSTOMER(7, "销售线索"),
AUTHORIZED(8, "授权登陆"),
WEEK_MONTH(9, "周报月报"),
OTHER(3, "其它"),;
private int type;
private String name;
......
......@@ -92,9 +92,9 @@ public enum NoticeMessageTypeEnum {
//
MATERIAL_NEW_NOTIFY(6001, "素材上新通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_new_notify", "/pages/route/index?pageType=", "hbapp_material_center", "materialsNotice", "clerkMaterialsNotice"),
MATERIAL_REPORT_NOTIFY_WEEK(6002, "素材周报通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_week_notify", "/pages/route/index?pageType=", "hbapp_mate_report", "materialWeek", "clerkMaterialsReport"),
MATERIAL_REPORT_NOTIFY_WEEK(6002, "周报通知", NoticeMessageCategoryTypeEnum.WEEK_MONTH.getType(), "material_week_notify", "/pages/route/index?pageType=", "hbapp_mate_report", "materialWeek", "clerkMaterialsReport"),
POTENTIAL_CUSTOMER_NOTIFY(6003, "销售线索通知", NoticeMessageCategoryTypeEnum.POTENTIAL_CUSTOMER.getType(), "potential_customer_notify", "/pages/route/index?pageType=", "hbapp_sales_clue_center", "salesLeadNotice", "haobanNotice"),
MATERIAL_REPORT_NOTIFY_MONTH(6004, "素材月报通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_month_notify", "/pages/route/index?pageType=", "hbapp_mate_report", "materialMonth", "clerkMaterialsReport"),
MATERIAL_REPORT_NOTIFY_MONTH(6004, "月报通知", NoticeMessageCategoryTypeEnum.WEEK_MONTH.getType(), "material_month_notify", "/pages/route/index?pageType=", "hbapp_mate_report", "materialMonth", "clerkMaterialsReport"),
CLERK_COMMISSION_NOTIFY(6005, "客户下单通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "clerk_commission_notify", "/pages/route/index?pageType=", "hbapp_withdraw_list", "clerkCommissionNotify", "haobanNotice"),
MATERIAL_AUDIT_NOTIFY(6006, "素材审核通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_audit_notify", "/pages/route/index?pageType=", "hbapp_create_center", "materialAuditNotify", "haobanNotice"),
KNOWLEDGE_NEW_NOTIFY(6007, "知识库上新通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "knowledge_new_notify", "/pages/route/index?pageType=", "hbapp_guide_knowledge", "knowledgeNewNotify", "clerkMaterialsNotice"),
......
......@@ -30,9 +30,24 @@ public class InteractRecordExtendInfoDTO implements Serializable {
*/
private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 按组分享素材扩展商品信息
*/
private List<List<ExtendGoodsInfo>> groupExtendGoodsInfos;
/**
* 按组分享失效商品数量
*/
private Integer groupInvalidGoodsNum;
public static class ExtendGoodsInfo implements Serializable {
/**
* 商品id
*/
private String goodsId;
/**
* 商品名称
*/
private String goodsName;
......@@ -61,6 +76,14 @@ public class InteractRecordExtendInfoDTO implements Serializable {
*/
private BigDecimal salePrice;
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
......@@ -216,4 +239,20 @@ public class InteractRecordExtendInfoDTO implements Serializable {
public void setExtendGoodsInfos(List<ExtendGoodsInfo> extendGoodsInfos) {
this.extendGoodsInfos = extendGoodsInfos;
}
public List<List<ExtendGoodsInfo>> getGroupExtendGoodsInfos() {
return groupExtendGoodsInfos;
}
public void setGroupExtendGoodsInfos(List<List<ExtendGoodsInfo>> groupExtendGoodsInfos) {
this.groupExtendGoodsInfos = groupExtendGoodsInfos;
}
public Integer getGroupInvalidGoodsNum() {
return groupInvalidGoodsNum;
}
public void setGroupInvalidGoodsNum(Integer groupInvalidGoodsNum) {
this.groupInvalidGoodsNum = groupInvalidGoodsNum;
}
}
......@@ -14,6 +14,10 @@ public class InteractRecordInfoDTO implements Serializable {
private static final long serialVersionUID = -170525928535773136L;
/**
* 会员id
*/
private String memberId;
/**
* 互动记录id
*/
private Long interactRecordId;
......@@ -45,6 +49,11 @@ public class InteractRecordInfoDTO implements Serializable {
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
*/
private Integer shareSource;
/**
* 记录事件类型
* 1浏览素材;2 查看商品; 3 购买商品
* 通过此类型区分 弹窗提示
......@@ -78,6 +87,14 @@ public class InteractRecordInfoDTO implements Serializable {
*/
private InteractRecordExtendInfoDTO extendInfo;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public Long getInteractRecordId() {
return interactRecordId;
}
......@@ -150,6 +167,14 @@ public class InteractRecordInfoDTO implements Serializable {
this.channelSource = channelSource;
}
public Integer getShareSource() {
return shareSource;
}
public void setShareSource(Integer shareSource) {
this.shareSource = shareSource;
}
public Integer getVisitGoodsNum() {
return visitGoodsNum;
}
......
......@@ -9,10 +9,10 @@ package com.gic.haoban.manage.api.enums.content;
**/
public enum MaterialInteractRecordEventType {
VISIT_MATERIAL(1, "浏览了你分享的%s"),
VISIT_PRODUCT(2, "浏览了你分享的%s,并查看了关联商品"),
ORDER(3, "浏览了你分享的%s,并购买了商品"),
ADD_SHOPPING_CART(4, "浏览你分享的%s,并加入了购物车");
VISIT_MATERIAL(1, "浏览了你%s分享的%s"),
VISIT_PRODUCT(2, "浏览了你%s分享的%s,并查看了%s商品"),
ORDER(3, "浏览了你%s分享的%s,并购买了商品"),
ADD_SHOPPING_CART(4, "浏览你%s分享的%s,并加入了购物车");
MaterialInteractRecordEventType(Integer code, String desc) {
this.code = code;
......
......@@ -9,14 +9,21 @@ package com.gic.haoban.manage.api.enums.content;
**/
public enum ShareBizType {
MATERIAL(1, "素材"),
GOODS(2, "商品");
ShareBizType(Integer code, String desc) {
MATERIAL(1, "素材","关联"),
GOODS(2, "商品",""),
MULTIPLE_GOODS(3, "多商品页面","页面中的");
ShareBizType(Integer code, String desc,String goodsText) {
this.code = code;
this.desc = desc;
this.goodsText = goodsText;
}
private Integer code;
private String desc;
/**
* @see MaterialInteractRecordEventType VISIT_PRODUCT 第三个变量
*/
private String goodsText;
public Integer getCode() {
return code;
......@@ -26,6 +33,10 @@ public enum ShareBizType {
return desc;
}
public String getGoodsText() {
return goodsText;
}
public static String getDescWithCode(Integer code) {
for (ShareBizType value : values()) {
if (value.code.equals(code)) {
......@@ -34,4 +45,13 @@ public enum ShareBizType {
}
return "";
}
public static String getGoodsTextWithCode(Integer code) {
for (ShareBizType value : values()) {
if (value.code.equals(code)) {
return value.goodsText;
}
}
return "";
}
}
package com.gic.haoban.manage.api.enums.content;
import java.util.Objects;
public enum ShareCustomerSourceType {
OTHER(-1, "其他"),
INTENT_CUSTOMER(1, "意向客户"),
SMART_SELECTION(2, "智能选款"),
LINKED_ORDER_RECOMMENDATION(3, "连单推荐");
public static ShareCustomerSourceType getInstance(Integer code) {
for (ShareCustomerSourceType shareCustomerSourceType : values()) {
if (shareCustomerSourceType.code.equals(code)) {
return shareCustomerSourceType;
}
}
return null;
}
public static String getDesc(Integer code) {
for (ShareCustomerSourceType shareCustomerSourceType : values()) {
if (Objects.equals(code, ShareCustomerSourceType.OTHER.code)) {
return "";
}
if (shareCustomerSourceType.code.equals(code)) {
return shareCustomerSourceType.getDesc();
}
}
return "";
}
ShareCustomerSourceType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
private Integer code;
private String desc;
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
......@@ -17,6 +17,7 @@ public enum TriggerCustomerChannelType {
DIALOG_BOX(3, "对话框"),
CONTENT_COPY(4, "复制文案"),
CONTENT_DOWNLOAD(5, "下载素材"),
@Deprecated
RECOMMEND(6, "发送给潜客")
;
......
package com.gic.haoban.manage.api.qdto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactFollowBatchQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 企业id
*/
private String enterpriseId;
/**
* 会员id
*/
private List<MemberFollow> memberList;
/**
* 导购id
*/
private String clerkId;
/**
* 跟进记录
*/
private String followRemark;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public List<MemberFollow> getMemberList() {
return memberList;
}
public void setMemberList(List<MemberFollow> memberList) {
this.memberList = memberList;
}
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 static class MemberFollow implements Serializable{
/**
* 会员id
*/
private String memberId;
/**
* 跟进时间
*/
private Date followTime;
public MemberFollow() {
}
public MemberFollow(String memberId, Date followTime) {
this.memberId = memberId;
this.followTime = followTime;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public Date getFollowTime() {
return followTime;
}
public void setFollowTime(Date followTime) {
this.followTime = followTime;
}
}
}
\ 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;
/**
* 开始时间
*/
private Date beginTime;
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 Date getBeginTime() {
return beginTime;
}
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
}
}
\ 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.qdto.contact;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ContactOrderQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 会员id
*/
private String memberId;
/**
* 企业id
*/
private String enterpriseId;
/**
* 订单id
*/
private String orderId;
/**
* 是否线上订单
*/
private boolean isOnlineOrder;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public boolean isOnlineOrder() {
return isOnlineOrder;
}
public void setOnlineOrder(boolean onlineOrder) {
isOnlineOrder = onlineOrder;
}
}
\ 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;
/**
* 1 线上; 2 线下
*/
private Integer channelType;
/**
* 导购搜索
*/
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 Integer getChannelType() {
return channelType;
}
public void setChannelType(Integer channelType) {
this.channelType = channelType;
}
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
......@@ -372,4 +372,10 @@ public interface ExternalClerkRelatedApiService {
*/
int getFriendNum(String memberId , String storeId , String clerkId) ;
/**
* 查询和导购有好友关系的列表
*/
List<ExternalClerkRelatedDTO> listClerkFriend(String clerkId , List<String> memberIdList);
}
package com.gic.haoban.manage.api.service.common;
import com.gic.api.base.commons.ServiceResponse;
/**
* @author: YuZhi
* @date: 2022/3/16 13:32
*/
public interface RouterApiService {
/**
* 会员导购通用事件订阅
* @param params
* @return
*/
ServiceResponse<Void> memberClerkEvent(String params);
}
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 message
* @return
*/
ServiceResponse<Void> saveBatchFollowForMQ(String message);
/**
* 跟进记录列表查询
* @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.api.service.contact;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.contact.ContactLogDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
public interface ContactLogApiService {
/**
* 获取最近一条有效建联记录
* @param memberId
* @return
*/
ServiceResponse<ContactLogDTO> getClerkContactTime(String memberId);
/**
* 保存建联记录
* @param qdto
* @return
*/
ServiceResponse<Void> saveContactLog(ContactLogQDTO qdto);
}
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.ContactOrderDetailDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactOrderSearchQDTO;
public interface ContactOrderApiService {
/**
* 保存建联转化订单
* @param contactOrderQDTO
*/
ServiceResponse<Void> saveContactOrder(ContactOrderQDTO contactOrderQDTO);
/**
* 分页查询订单转化
* @param enterpriseId
* @param searchQDTO
* @param pageInfo
* @return
*/
ServiceResponse<Page<ContactOrderDetailDTO>> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo);
}
......@@ -2,9 +2,14 @@ package com.gic.haoban.manage.api.service.content;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.content.MemberLastInteractDTO;
import com.gic.haoban.manage.api.dto.qdto.content.InteractRecordQDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Author MUSI
* @Date 2023/3/29 12:45 PM
......@@ -22,6 +27,24 @@ public interface InteractRecordApiService {
ServiceResponse<Page<InteractRecordInfoDTO>> queryInteractRecordList(InteractRecordQDTO interactRecordQDTO);
/**
* 查询会员对应时间后最新的互动记录
* @param enterpriseId
* @param clerkId
* @param list
* @return
*/
ServiceResponse<Map<String,InteractRecordInfoDTO>> mapInteractRecord(String enterpriseId, String clerkId, List<MemberLastInteractDTO> list);
/**
* 查询对应时间后会员最新的互动记录
* @param clerkId
* @param lastAccessTime
* @return
*/
ServiceResponse<List<MemberLastInteractDTO>> queryMemberIdsByTime(String clerkId, Date lastAccessTime);
/**
* 处理member信息变化的MQ
* routeName: memberIdChangeNotify
* @param params
......
package com.gic.haoban.manage.api.service.send;
import com.gic.api.base.commons.ServiceResponse;
public interface QwSendApiService {
/**
* 刷新企微发送记录
* @param message
* @return
*/
ServiceResponse<Void> qwSendRefreshByMQ(String message);
}
......@@ -112,7 +112,6 @@ public interface TabHaobanExternalClerkRelatedMapper {
* 获取企业下的关联关系列表
*
* @param wxEnterpriseId
* @param wxUserId
* @param enterpriseId
* @param externalUserId
* @return
......@@ -142,7 +141,6 @@ public interface TabHaobanExternalClerkRelatedMapper {
/**
* 查询会员在企业下的好友关系
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
* @return
......@@ -155,7 +153,6 @@ public interface TabHaobanExternalClerkRelatedMapper {
* 获取最新的最近的外部联系人
*
* @param externalUserid
* @param wxUserId
* @return
*/
TabHaobanExternalClerkRelated getLastByExTernalUseridAndWxUserIdNoStatus(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserid") String externalUserid, @Param("staffId") String staffId);
......@@ -460,5 +457,21 @@ public interface TabHaobanExternalClerkRelatedMapper {
* @param memberId
*/
TabHaobanExternalClerkRelated isClerkFriend(@Param("enterpriseId")String enterpriseId, @Param("clerkId")String clerkId, @Param("memberId")String memberId);
/**
* 查询导购的好友
* @param clerkId
* @param memberIdList
* @return
*/
List<TabHaobanExternalClerkRelated> listClerkFriend(@Param("clerkId") String clerkId , @Param("memberIdList") List<String> memberIdList);
int getFriendNum(@Param("memberId")String memberId, @Param("storeId")String storeId, @Param("clerkId")String clerkId);
/**
* 通过外部联系人人查member
*/
List<TabHaobanExternalClerkRelated> listByExternalUserIdList(@Param("staffId") String staffId, @Param("enterpriseId") String enterpriseId, @Param("externalUserIdList") List<String> externalUserIdList);
}
\ No newline at end of file
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.Date;
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("beginTime")Date beginTime, @Param("endTime")Date endTime);
/**
* 统计总行数
*
* @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.api.qdto.contact.ContactOrderSearchQDTO;
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 orderId
* @return
*/
TabContactOrder queryByOrderId(String orderId);
/**
* 通过ID列表查询多条数据
* @param ids
* @return
*/
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 查询条件
* @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;
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.potential.MemberLastInteractBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.Date;
import java.util.List;
/**
......@@ -106,6 +106,21 @@ public interface TabHaobanInteractRecordMapper {
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 memberId
......
package com.gic.haoban.manage.service.dao.mapper.send;
import com.gic.haoban.manage.service.entity.send.TabQwSendLog;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.List;
/**
* 企微群发明细表(TabQwSendLog)表数据库访问层
*
* @author makejava
* @since 2025-03-25 13:48:01
*/
public interface QwSendLogMapper {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
TabQwSendLog queryById(Long id);
/**
* 查询指定行数据
*
* @param tabQwSendLog 查询条件
* @param pageable 分页对象
* @return 对象列表
*/
List<TabQwSendLog> queryAllByLimit(TabQwSendLog tabQwSendLog, @Param("pageable") Pageable pageable);
/**
* 统计总行数
*
* @param tabQwSendLog 查询条件
* @return 总行数
*/
long count(TabQwSendLog tabQwSendLog);
/**
* 新增数据
*
* @param tabQwSendLog 实例对象
* @return 影响行数
*/
int insert(TabQwSendLog tabQwSendLog);
/**
* 批量新增数据(MyBatis原生foreach方法)
*
* @param entities List<TabQwSendLog> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<TabQwSendLog> entities);
/**
* 批量新增或按主键更新数据(MyBatis原生foreach方法)
*
* @param entities List<TabQwSendLog> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<TabQwSendLog> entities);
/**
* 修改数据
*
* @param tabQwSendLog 实例对象
* @return 影响行数
*/
int update(TabQwSendLog tabQwSendLog);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
}
package com.gic.haoban.manage.service.dao.mapper.send;
import com.gic.haoban.manage.service.entity.send.TabQwSendMsg;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.List;
/**
* 企微群发msgid表(TabQwSendMsg)表数据库访问层
*
* @author makejava
* @since 2025-03-25 13:48:05
*/
public interface QwSendMsgMapper {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
TabQwSendMsg queryById(Long id);
TabQwSendMsg queryByMsgId(String msgId);
/**
* 查询指定行数据
*
* @param tabQwSendMsg 查询条件
* @param pageable 分页对象
* @return 对象列表
*/
List<TabQwSendMsg> queryAllByLimit(TabQwSendMsg tabQwSendMsg, @Param("pageable") Pageable pageable);
/**
* 统计总行数
*
* @param tabQwSendMsg 查询条件
* @return 总行数
*/
long count(TabQwSendMsg tabQwSendMsg);
/**
* 新增数据
*
* @param tabQwSendMsg 实例对象
* @return 影响行数
*/
int insert(TabQwSendMsg tabQwSendMsg);
/**
* 批量新增数据(MyBatis原生foreach方法)
*
* @param entities List<TabQwSendMsg> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<TabQwSendMsg> entities);
/**
* 批量新增或按主键更新数据(MyBatis原生foreach方法)
*
* @param entities List<TabQwSendMsg> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<TabQwSendMsg> entities);
/**
* 修改数据
*
* @param tabQwSendMsg 实例对象
* @return 影响行数
*/
int update(TabQwSendMsg tabQwSendMsg);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
}
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.io.Serializable;
import java.util.Date;
/**
* 建联转化订单(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 Double 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;
/**
* 导购名称
*/
private String clerkName;
/**
* 门店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 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 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 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 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
......@@ -51,6 +51,11 @@ public class TabHaobanInteractRecord implements Serializable {
*/
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
* @see com.gic.haoban.manage.api.enums.content.ShareCustomerSourceType
*/
private Integer shareSource;
/**
* 事件类型 1浏览素材;2浏览商品; 3 购买商品
* @see com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType
*/
......@@ -164,6 +169,14 @@ public class TabHaobanInteractRecord implements Serializable {
this.channelSource = channelSource;
}
public Integer getShareSource() {
return shareSource;
}
public void setShareSource(Integer shareSource) {
this.shareSource = shareSource;
}
public Integer getEventType() {
return eventType;
}
......
......@@ -49,6 +49,11 @@ public class TabHaobanPotentialCustomer implements Serializable {
*/
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
* @see com.gic.haoban.manage.api.enums.content.ShareCustomerSourceType
*/
private Integer shareSource;
/**
* 事件类型 1访问素材;2访问商品; 3购买商品;
*/
private Integer eventType;
......
package com.gic.haoban.manage.service.entity.send;
import java.util.Date;
import java.io.Serializable;
/**
* 企微群发明细表(TabQwSendLog)实体类
*
* @author makejava
* @since 2025-03-25 13:48:03
*/
public class TabQwSendLog implements Serializable {
private static final long serialVersionUID = -43606899312408812L;
/**
* 主键id
*/
private Long id;
/**
* 会员id
*/
private String memberId;
/**
* 会员外部联系人id
*/
private String externalUserId;
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* msgId
*/
private String msgId;
/**
* 发送状态, 0 : 待发送, 1 : 发送成功, 2 : 发送失败
*/
private Integer sendStatus;
/**
* 发送时间
*/
private Date sendTime;
/**
* 2 : 因客户不是好友导致发送失败 3 : 因客户已经收到其他群发消息导致发送失败
*/
private Integer failReasonType;
/**
* 好办企业id
*/
private String wxEnterpriseId;
/**
* 企业id
*/
private String enterpriseId;
/**
* 是否删除
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public Integer getSendStatus() {
return sendStatus;
}
public void setSendStatus(Integer sendStatus) {
this.sendStatus = sendStatus;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public Integer getFailReasonType() {
return failReasonType;
}
public void setFailReasonType(Integer failReasonType) {
this.failReasonType = failReasonType;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
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;
}
}
package com.gic.haoban.manage.service.entity.send;
import java.util.Date;
import java.io.Serializable;
/**
* 企微群发msgid表(TabQwSendMsg)实体类
*
* @author makejava
* @since 2025-03-25 13:48:06
*/
public class TabQwSendMsg implements Serializable {
private static final long serialVersionUID = -62451866180002438L;
/**
* 主键id
*/
private Long id;
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* msgId
*/
private String msgId;
/**
* 发送时间
*/
private Date sendTime;
/**
* 业务类型 1素材分享 2商品推荐
*/
private Integer bizType;
/**
* 好办企业id
*/
private String wxEnterpriseId;
/**
* 企业id
*/
private String enterpriseId;
/**
* 是否删除
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
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;
}
}
......@@ -61,6 +61,11 @@ public class ProTriggerCustomerDetailBO {
private String memberId;
/**
* 中转页id
*/
private String wxaLinkId;
/**
* 创建时间
*/
private Date createTime;
......@@ -163,6 +168,14 @@ public class ProTriggerCustomerDetailBO {
this.memberId = memberId;
}
public String getWxaLinkId() {
return wxaLinkId;
}
public void setWxaLinkId(String wxaLinkId) {
this.wxaLinkId = wxaLinkId;
}
public Date getCreateTime() {
return createTime;
}
......
......@@ -50,6 +50,10 @@ public class InteractRecordBO {
*/
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
*/
private Integer shareSource;
/**
* 事件类型 1浏览商品;2浏览并点击; 3浏览并查看; 4 浏览并购买; 5查看并购买
*/
private Integer eventType;
......
......@@ -37,11 +37,31 @@ public class InteractRecordExtendInfoBO implements Serializable {
*/
private List<String> goodsIds;
/**
* 分享的商品组id
*/
private List<List<String>> groupGoodsIds;
/**
* 按组分享素材扩展商品信息
*/
private List<List<ExtendGoodsInfo>> groupExtendGoodsInfos;
/**
* 按组分享失效商品数量
*/
private Integer groupInvalidGoodsNum;
@Data
public static class ExtendGoodsInfo implements Serializable {
/**
* 商品id
*/
private String goodsId;
/**
* 商品名称
*/
private String goodsName;
......
......@@ -47,6 +47,11 @@ public class PotentialCustomerBO {
*/
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
* @see com.gic.haoban.manage.api.enums.content.ShareCustomerSourceType
*/
private Integer shareSource;
/**
* 事件类型 1访问素材;2访问商品; 3购买商品;
*/
private Integer eventType;
......
......@@ -6,6 +6,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.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.service.content.adaptor.MessageConvertHelper;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
......@@ -13,7 +14,9 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.BeanUtils;
import java.util.Date;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
/**
* @Author MUSI
......@@ -49,6 +52,9 @@ public class InteractRecordMessageContext {
if (StringUtils.isNotBlank(interactRecordMessageBO.getMaterialId())
&& NumberUtils.isDigits(interactRecordMessageBO.getMaterialId())) {
return ShareBizType.MATERIAL.getCode();
} else if (StringUtils.isNotBlank(interactRecordMessageBO.getWxaLinkId()) &&
interactRecordMessageBO.getGoodsCount() > 1) {
return ShareBizType.MULTIPLE_GOODS.getCode();
}
return ShareBizType.GOODS.getCode();
}
......@@ -61,6 +67,9 @@ public class InteractRecordMessageContext {
if (ShareBizType.GOODS.getCode().equals(bizType)) {
return interactRecordMessageBO.getGoodsId();
}
if (ShareBizType.MULTIPLE_GOODS.getCode().equals(bizType)) {
return interactRecordMessageBO.getWxaLinkId();
}
return StringUtils.EMPTY;
}
......@@ -116,6 +125,7 @@ public class InteractRecordMessageContext {
temp.setClerkId(this.interactRecordMessageBO.getClerkId());
temp.setStoreId(this.interactRecordMessageBO.getStoreId());
temp.setChannelSource(this.interactRecordMessageBO.getChannelSource());
temp.setShareSource(this.interactRecordMessageBO.getShareSource());
temp.setEventType(this.interactRecordMessageBO.getEventType());
Integer durationTime = Optional.ofNullable(this.interactRecordMessageBO.getDurationTime()).orElse(0);
temp.setDurationTime(durationTime / 1000);
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.enums.content.MaterialReportType;
......@@ -32,11 +33,11 @@ import java.util.stream.Collectors;
@Builder
public class MaterialReportContext {
private static final String week_title = "素材使用周报";
private static final String month_title = "素材使用月报";
private static final String week_title = "%s周报";
private static final String month_title = "%s月报";
private static final String week_desc = "%s~%s的素材使用周报已生成,请查收";
private static final String month_desc = "%s~%s的素材使用月报已生成,请查收";
private static final String week_desc = "%s~%s的%s已生成,请查收";
private static final String month_desc = "%s~%s的%s已生成,请查收";
private String enterpriseId;
......@@ -48,6 +49,11 @@ public class MaterialReportContext {
private Integer reportType;
/**
* 周报内容
*/
private List<String> rightMenuCodeList;
/**
* 成员id
*/
private String staffId;
......@@ -134,10 +140,18 @@ public class MaterialReportContext {
}
public String getMessageTitle() {
String title = "素材使用";
if (CollectionUtils.isNotEmpty(rightMenuCodeList)) {
if (rightMenuCodeList.size() > 1) {
title = "门店增长";
}else if (rightMenuCodeList.contains(EnterpriseServiceEnum.POTENTIAL.getRightMenuCode())){
title = "潜客雷达";
}
}
if (MaterialReportType.WEEK.getCode().equals(this.reportType)) {
return week_title;
return String.format(week_title, title);
}
return month_title;
return String.format(month_title, title);
}
public String getMessageDesc() {
......@@ -148,7 +162,7 @@ public class MaterialReportContext {
.toString("MM月dd日");
String weekEndStr = DateUtil.endOfWeek(lastWeek)
.toString("MM月dd日");
return String.format(week_desc, weekBeginStr, weekEndStr);
return String.format(week_desc, weekBeginStr, weekEndStr, getMessageTitle());
}
DateTime lastMonth = DateUtil.lastMonth();
......@@ -156,7 +170,7 @@ public class MaterialReportContext {
.toString("MM月dd日");
String monthEndStr = DateUtil.endOfMonth(lastMonth)
.toString("MM月dd日");
return String.format(month_desc, monthBeginStr, monthEndStr);
return String.format(month_desc, monthBeginStr, monthEndStr, getMessageTitle());
}
public String extendParams(String storeId) {
......
......@@ -3,7 +3,6 @@ package com.gic.haoban.manage.service.pojo.bo.content.message;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author MUSI
......@@ -45,10 +44,19 @@ public class InteractRecordMessageBO implements Serializable {
*/
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
* @see com.gic.haoban.manage.api.enums.content.ShareCustomerSourceType
*/
private Integer shareSource;
/**
* 事件类型 1浏览素材;2查看商品; 3购买商品 4 加入购物车
*/
private Integer eventType;
/**
* 事件编码
*/
private String eventCode;
/**
* 停留时长
* 单位ms
*/
......@@ -69,6 +77,11 @@ public class InteractRecordMessageBO implements Serializable {
private String goodsId;
/**
* 中转页id
*/
private String wxaLinkId;
/**
* 是否是微盟商品
* true 是
* false 否
......@@ -125,4 +138,9 @@ public class InteractRecordMessageBO implements Serializable {
* 商品类型 微盟、达摩
*/
private String goodsChannel;
/**
* 商品数量
*/
private Integer goodsCount = 1;
}
......@@ -48,6 +48,11 @@ public class PotentialCustomerMessageBO {
*/
private Integer channelSource;
/**
* 分享使用的业务来源 -1其他1意向客户2智能选款3连单推荐
* @see com.gic.haoban.manage.api.enums.content.ShareCustomerSourceType
*/
private Integer shareSource;
/**
* 事件类型 1访问素材;2访问商品; 3购买商品;
*/
private Integer eventType;
......
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.pojo.bo.send;
import lombok.Data;
import java.util.Date;
/**
* Created by wangzubo on 2025/3/25.
*/
@Data
public class FinishQwSendBO {
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* 发送时间
*/
private Date sendTime;
/**
* 业务类型 1素材分享 2商品推荐
*/
private Integer bizType;
/**
* 好办企业id
*/
private String wxEnterpriseId;
/**
* 企业id
*/
private String enterpriseId;
}
package com.gic.haoban.manage.service.pojo.bo.send;
import java.io.Serializable;
import java.util.Date;
/**
* @author : lingfeng
* @time : 2021-05-18
* @description : 群发发送结果
*/
public class GroupSendResultBO implements Serializable {
private static final long serialVersionUID = 1953943358823216399L;
/**
* 外部联系人id
*/
private String externalUserid;
/**
* 企业服务人员的userid
*/
private String userId;
/**
* 发送状态:0-未发送 1-已发送 2-因客户不是好友导致发送失败 3-因客户已经收到其他群发消息导致发送失败
*/
private Integer status;
/**
* 发送时间,未发送时不返回
*/
private Date sendTime;
public String getExternalUserid() {
return externalUserid;
}
public void setExternalUserid(String externalUserid) {
this.externalUserid = externalUserid;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
@Override
public String toString() {
return "GroupSendResultDTO{" +
"externalUserid='" + externalUserid + '\'' +
", userId='" + userId + '\'' +
", status=" + status +
", sendTime=" + sendTime +
'}';
}
}
......@@ -47,4 +47,14 @@ public interface ESMemberInfoService {
* @throws
*/
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;
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.api.base.commons.BusinessException;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
import com.gic.haoban.manage.service.entity.contact.TabContactLog;
import java.util.Date;
public interface ContactLogService {
/**
* 保存建联记录
*
* @param qdto
*/
void saveContactLog(ContactLogQDTO qdto) throws BusinessException;
/**
* 清除建联状态
*
* @param memberId
* @param clearType 1 消费清除 2 换绑主导购
*/
void clearContactLog(String memberId, Integer clearType);
/**
* 获取最近一条有效建联记录
*
* @param memberId
* @return
*/
TabContactLog getClerkContactTime(String memberId);
/**
* 根据时间获取最近一条建联记录
* @param memberId
* @param beginTime
* @return
*/
TabContactLog getLastByTime(String memberId, Date beginTime,Date endTime);
}
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;
public interface ContactOrderService {
/**
* 保存建联转化订单
*
* @param orderInfoResp
*/
boolean saveContactOrder(OrderInfoResp orderInfoResp);
/**
* 分页查询建联转化信息
* @param enterpriseId
* @param searchQDTO
* @param pageInfo
* @return
*/
Page<ContactOrderDetailDTO> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo);
}
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) {
if (CollectionUtils.isEmpty(memberIdList)) {
return new HashMap<>();
}
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) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
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.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.BusinessException;
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.member.api.dto.MemberStoreClerkDTO;
import com.gic.member.api.dto.MemberStoreDTO;
import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.member.api.service.MemberService;
import com.gic.search.engine.api.dto.ESResponse;
import com.gic.search.engine.api.dto.dynamic.DynamicDocDTO;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
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;
@Autowired
private MemberService memberService;
@Autowired
private ESDataDynamicOperationApiService esDataDynamicOperationApiService;
@Override
public void saveContactLog(ContactLogQDTO qdto) throws BusinessException {
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();
MemberStoreClerkDTO memberStoreClerk = memberService.getMemberStoreClerk(memberId);
if (memberStoreClerk == null) {
logger.info("无专属导购无法建联");
throw new BusinessException("-1", "无专属导购无法建联");
}
String mainClerkId = memberStoreClerk.getClerkId();
if (!Objects.equals(mainClerkId, clerkId)) {
logger.info("非专属导购无法建联");
throw new BusinessException("-1", "非专属导购无法建联");
}
// 是否周期内首次建联 同周期内是否有记录
Integer contactCycle = 1;
// 建联周期 14天内同周期/14天以上周期+1
Integer contactCycleFirst = Constant.FLAG_TRUE;
TabContactLog lastContactLog = contactLogMapper.queryLastLog(memberId, clerkId,null,null);
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);
// 成为潜客时间 无用暂不写
contactLog.setPotentialTime(null);
contactLog.setEnterpriseId(enterpriseId);
contactLogMapper.insert(contactLog);
// 刷新es建联时间
Long clerkContactTime = Long.parseLong(DateUtil.format(date, DatePattern.PURE_DATETIME_PATTERN));
refreshContactTime(enterpriseId, memberId, clerkContactTime);
}
@Override
public void clearContactLog(String memberId,Integer clearType) {
logger.info("清除建联状态:{},clearType:{}", memberId, clearType);
TabContactLog lastContactLog = contactLogMapper.queryLastLog(memberId, null,null,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);
}
// 清除es建联时间 -1
refreshContactTime(lastContactLog.getEnterpriseId(), memberId, -1L);
}
private void refreshContactTime(String enterpriseId,String memberId, Long contactTime) {
DynamicDocDTO dynamicDocDTO = new DynamicDocDTO();
dynamicDocDTO.setEnterpriseId(enterpriseId);
dynamicDocDTO.setColumnCategoryCode("member");
MemberDataDTO memberDataDTO = new MemberDataDTO();
memberDataDTO.setMemberId(memberId);
memberDataDTO.setId(memberId);
memberDataDTO.setClerkContactTime(contactTime);
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(memberDataDTO));
dynamicDocDTO.setDocJson(jsonObject);
dynamicDocDTO.setRefresh(Constant.FLAG_TRUE);
ESResponse res = esDataDynamicOperationApiService.updateDataSingle(dynamicDocDTO, false);
logger.info("刷新建联时间返回:{}", res.getErrCode());
}
@Override
public TabContactLog getClerkContactTime(String memberId) {
TabContactLog lastContactLog = contactLogMapper.queryLastLog(memberId, null,null,null);
if (lastContactLog == null) {
return null;
}
Integer contactStatus = lastContactLog.getContactStatus();
if (Objects.equals(contactStatus, Constant.FLAG_FALSE)) {
return null;
}
String clerkId = lastContactLog.getClerkId();
Date contactTime = lastContactLog.getContactTime();
MemberStoreClerkDTO memberStoreClerk = memberService.getMemberStoreClerk(memberId);
if (memberStoreClerk == null) {
return null;
}
logger.info("建联导购id:{},专属导购id:{}", clerkId, memberStoreClerk.getClerkId());
if (!Objects.equals(clerkId, memberStoreClerk.getClerkId())) {
return null;
}
if (DateUtil.compare(contactTime, DateUtil.date().offset(DateField.DAY_OF_MONTH, -14)) < 0) {
return null;
}
return lastContactLog;
}
@Override
public TabContactLog getLastByTime(String memberId, Date beginTime,Date endTime) {
return contactLogMapper.queryLastLog(memberId, null,beginTime,endTime);
}
}
package com.gic.haoban.manage.service.service.content;
import com.gic.haoban.manage.service.pojo.bo.content.GroupMessageInfoBo;
import com.gic.haoban.manage.service.service.content.adaptor.MaterialEnterpriseAdaptor;
import com.gic.haoban.manage.service.service.content.adaptor.EnterpriseAdaptor;
import java.util.List;
import java.util.Map;
/**
* @Author MUSI
......@@ -23,9 +24,15 @@ public interface GroupMessageService {
/***
* 查询有素材权限的企业
* @see MaterialEnterpriseAdaptor.MaterialLevel
* @see EnterpriseAdaptor.MaterialLevel
* @param level
* @return
*/
List<String> hasMaterialRightEnterprise(Integer level);
/**
* 查询发送周报月报企业
* @return
*/
Map<String,List<String>> weekMonthEnterprise();
}
......@@ -3,8 +3,10 @@ package com.gic.haoban.manage.service.service.content;
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.PotentialCustomerStaticsBO;
import com.gic.haoban.manage.service.pojo.bo.potential.MemberLastInteractBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import java.util.Date;
import java.util.List;
/**
......@@ -82,4 +84,21 @@ public interface InteractRecordService {
*/
void modifyUnionId(String enterpriseId, String oldUnionId, String newUnionId);
/**
* 查询会员对应时间后最新的互动记录
* @param enterpriseId
* @param clerkId
* @param list
* @return
*/
List<InteractRecordBO> lastInteractRecord(String enterpriseId, String clerkId, List<MemberLastInteractBO> list);
/**
* 查询对应时间后会员最新的互动记录
* @param clerkId
* @param lastAccessTime
* @return
*/
List<MemberLastInteractBO> queryMemberIdsByTime(String clerkId, Date lastAccessTime);
}
package com.gic.haoban.manage.service.service.content;
import com.gic.haoban.manage.api.dto.content.report.MaterialReportDTO;
/**
* @Author MUSI
* @Date 2023/3/24 3:58 PM
......@@ -17,5 +19,5 @@ public interface MaterialReportService {
* @see com.gic.haoban.manage.api.enums.content.MaterialReportType
* @param reportType
*/
void handlerMaterialReport(String enterpriseId, String staffId, Integer reportType);
void handlerMaterialReport(MaterialReportDTO materialReportDTO);
}
......@@ -3,9 +3,11 @@ package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.enterprise.api.dto.EnterpriseUsingPermissionDto;
import com.gic.enterprise.api.dto.enterprise.EnterpriseUsingStatusDTO;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.redis.data.util.RedisUtil;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
......@@ -14,9 +16,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
......@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
**/
@Slf4j
@Component
public class MaterialEnterpriseAdaptor {
public class EnterpriseAdaptor {
@Getter
@AllArgsConstructor
......@@ -65,6 +65,38 @@ public class MaterialEnterpriseAdaptor {
.collect(Collectors.toList());
}
public Map<String, List<String>> getWeekMonthEid() {
ServiceResponse<List<EnterpriseUsingStatusDTO>> serviceResponse1 =
enterpriseUseForbidService.getUseEnterpriseByCode(EnterpriseServiceEnum.CONTENT.getRightMenuCode(), null);
ServiceResponse<List<EnterpriseUsingStatusDTO>> serviceResponse2 =
enterpriseUseForbidService.getUseEnterpriseByCode(EnterpriseServiceEnum.POTENTIAL.getRightMenuCode(), null);
if (!serviceResponse1.isSuccess() || !serviceResponse2.isSuccess()) {
return Collections.emptyMap();
}
Map<String, List<String>> map = new HashMap<>();
// 处理内容相关企业ID
Optional.ofNullable(serviceResponse1.getResult()).orElse(Collections.emptyList())
.stream()
.filter(item -> item.getVersion() != null && item.getVersion() >= EnterpriseAdaptor.MaterialLevel.LOW.getCode())
.filter(item -> Boolean.TRUE.equals(item.getVaild()))
.map(EnterpriseUsingStatusDTO::getEnterpriseId)
.forEach(eid -> map.computeIfAbsent(eid, k -> new ArrayList<>())
.add(EnterpriseServiceEnum.CONTENT.getRightMenuCode()));
// 处理潜客相关企业ID
Optional.ofNullable(serviceResponse2.getResult()).orElse(Collections.emptyList())
.stream()
.filter(item -> Boolean.TRUE.equals(item.getVaild()))
.map(EnterpriseUsingStatusDTO::getEnterpriseId)
.forEach(eid -> map.computeIfAbsent(eid, k -> new ArrayList<>())
.add(EnterpriseServiceEnum.POTENTIAL.getRightMenuCode()));
return map;
}
/**
* 校验企业是否有内容权限
* @param enterpriseId
......@@ -92,4 +124,28 @@ public class MaterialEnterpriseAdaptor {
}
return StringUtils.equals(cache, "1");
}
public boolean checkEnterpriseHasRight(String enterpriseId,String rightMenuCode) {
return checkEnterpriseHasRights(enterpriseId,Lists.newArrayList(rightMenuCode));
}
public boolean checkEnterpriseHasRights(String enterpriseId,List<String> rightMenuCodes) {
String key = "haoban_enterprise_menuCode:" + enterpriseId + ":" + String.join(":", rightMenuCodes);
String cache = RedisUtil.getCache(key, String.class);
if (StringUtils.isBlank(cache)) {
List<EnterpriseUsingPermissionDto> list = enterpriseUseForbidService.selectUsingEnterprisePermissionByEnterpriseId(enterpriseId);
if (CollectionUtils.isEmpty(list)) {
return false;
}
List<String> hasList = list.stream().map(EnterpriseUsingPermissionDto::getRightMenuCode).collect(Collectors.toList());
hasList = hasList.stream().filter(rightMenuCodes::contains).collect(Collectors.toList());
if (CollectionUtils.isEmpty(hasList)) {
cache = "0";
}else {
cache = "1";
}
RedisUtil.setCache(key, cache, cache_hour_sec, TimeUnit.SECONDS);
}
return StringUtils.equals(cache, "1");
}
}
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