Commit ad359422 by songyinghui

feat: 销售线索

parent e8344bb9
package com.gic.haoban.manage.api.dto.content;
import java.io.Serializable;
import java.util.Date;
/**
* @Author MUSI
* @Date 2023/3/29 9:47 AM
* @Description
* @Version
* 销售线索
**/
public class PotentialCustomerDTO implements Serializable {
private static final long serialVersionUID = -8058807467674069679L;
private Long potentialCustomerId;
/**
* 会员昵称
*/
private String memberName;
/**
* 会员头像
*/
private String memberImageUrl;
/**
* 会员id
*/
private String memberId;
/**
* 最后访问时间
*/
private Date lastAccessTime;
/**
* 会员手机号
*/
private String memberPhone;
/**
* 是否导购星标客户
* 1 是; 0否
*/
private Integer starFlag;
/**
* 导购是否查看
* 1 已查看 0 未查看;
*/
private Integer seeFlag;
/**
* 销售线索描述
* 通过XXX访问XXX
*/
private String desc;
/**
* 最近30天访问次数
*/
private Integer visitNum;
/**
* 导购与会员是否有好友
* 1 是好友; 0不是
*/
private Integer hasMemberRelation;
/**
* 会员全渠道成交
* 1 有过成交; 0 没有成交
*/
private Integer dealRecord;
/**
* 第几次访问
*/
private Integer times;
/**
* 停留时长 单位秒
*/
private Integer durationTime;
public Long getPotentialCustomerId() {
return potentialCustomerId;
}
public void setPotentialCustomerId(Long potentialCustomerId) {
this.potentialCustomerId = potentialCustomerId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberImageUrl() {
return memberImageUrl;
}
public void setMemberImageUrl(String memberImageUrl) {
this.memberImageUrl = memberImageUrl;
}
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;
}
public String getMemberPhone() {
return memberPhone;
}
public void setMemberPhone(String memberPhone) {
this.memberPhone = memberPhone;
}
public Integer getStarFlag() {
return starFlag;
}
public void setStarFlag(Integer starFlag) {
this.starFlag = starFlag;
}
public Integer getSeeFlag() {
return seeFlag;
}
public void setSeeFlag(Integer seeFlag) {
this.seeFlag = seeFlag;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getVisitNum() {
return visitNum;
}
public void setVisitNum(Integer visitNum) {
this.visitNum = visitNum;
}
public Integer getHasMemberRelation() {
return hasMemberRelation;
}
public void setHasMemberRelation(Integer hasMemberRelation) {
this.hasMemberRelation = hasMemberRelation;
}
public Integer getDealRecord() {
return dealRecord;
}
public void setDealRecord(Integer dealRecord) {
this.dealRecord = dealRecord;
}
public Integer getTimes() {
return times;
}
public void setTimes(Integer times) {
this.times = times;
}
public Integer getDurationTime() {
return durationTime;
}
public void setDurationTime(Integer durationTime) {
this.durationTime = durationTime;
}
}
package com.gic.haoban.manage.api.dto.qdto.content;
import java.io.Serializable;
/**
* @Author MUSI
* @Date 2023/3/29 9:58 AM
* @Description
* @Version
**/
public class PotentialCustomerMarkRecordDTO implements Serializable {
private static final long serialVersionUID = -5408267247555124255L;
/**
* 线索id
*/
private Long potentialCustomerId;
/**
* 企业id
*/
private String enterpriseId;
/**
* 微信企业id
*/
private String wxEnterpriseId;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 导购是否看过
* 1已看过
* 0未看过
*/
private Integer seeFlag;
/**
* 是否导购星标客户
* 1 与导购是星标 0 取消星标
*/
private Integer starFlag;
public Long getPotentialCustomerId() {
return potentialCustomerId;
}
public void setPotentialCustomerId(Long potentialCustomerId) {
this.potentialCustomerId = potentialCustomerId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
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 Integer getSeeFlag() {
return seeFlag;
}
public void setSeeFlag(Integer seeFlag) {
this.seeFlag = seeFlag;
}
public Integer getStarFlag() {
return starFlag;
}
public void setStarFlag(Integer starFlag) {
this.starFlag = starFlag;
}
}
package com.gic.haoban.manage.api.dto.qdto.content;
import com.gic.api.base.commons.BasePageInfo;
/**
* @Author MUSI
* @Date 2023/3/29 9:55 AM
* @Description
* @Version
**/
public class PotentialCustomerQDTO extends BasePageInfo {
private static final long serialVersionUID = 1854515840082825892L;
/**
* 企业id
*/
private String enterpriseId;
/**
* 微信企业id
*/
private String wxEnterpriseId;
/**
* 导购id
*/
private String clerkId;
/**
* 搜索字段
*/
private String search;
/**
* 导购是否看过
* 1已看过
* 0未看过
*/
private Integer seeFlag;
/**
* 是否导购星标客户
* 1 与导购是星标
*/
private Integer starFlag;
/**
* 导购与会员是否 企微好友
* 1 是好友; 0不是
*/
private Integer hasMemberRelation;
/**
* 会员是否有过成交
* 1 有过成交
*/
private Integer dealRecord;
/**
* 1 会员有手机号
*/
private Integer hasMemberPhone;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public Integer getSeeFlag() {
return seeFlag;
}
public void setSeeFlag(Integer seeFlag) {
this.seeFlag = seeFlag;
}
public Integer getStarFlag() {
return starFlag;
}
public void setStarFlag(Integer starFlag) {
this.starFlag = starFlag;
}
public Integer getHasMemberRelation() {
return hasMemberRelation;
}
public void setHasMemberRelation(Integer hasMemberRelation) {
this.hasMemberRelation = hasMemberRelation;
}
public Integer getDealRecord() {
return dealRecord;
}
public void setDealRecord(Integer dealRecord) {
this.dealRecord = dealRecord;
}
public Integer getHasMemberPhone() {
return hasMemberPhone;
}
public void setHasMemberPhone(Integer hasMemberPhone) {
this.hasMemberPhone = hasMemberPhone;
}
}
package com.gic.haoban.manage.api.service.content;
import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.content.PotentialCustomerDTO;
import com.gic.haoban.manage.api.dto.qdto.content.PotentialCustomerMarkRecordDTO;
import com.gic.haoban.manage.api.dto.qdto.content.PotentialCustomerQDTO;
/**
* @Author MUSI
* @Date 2023/3/29 9:47 AM
* @Description
* @Version
* 销售线索
**/
public interface PotentialCustomerApiService {
/**
* 查询销售线索记录
* @param potentialCustomerQDTO
* @return
*/
ServiceResponse<Page<PotentialCustomerDTO>> queryPotentialCustomer(PotentialCustomerQDTO potentialCustomerQDTO);
/**
* 标记销售线索 已看、星标
* @param potentialCustomerMarkRecordDTO
* @return
*/
ServiceResponse<Long> markPotentialCustomer(PotentialCustomerMarkRecordDTO potentialCustomerMarkRecordDTO);
}
package com.gic.haoban.manage.service.dao.mapper.content; package com.gic.haoban.manage.service.dao.mapper.content;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord; import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
...@@ -80,5 +81,13 @@ public interface TabHaobanInteractRecordMapper { ...@@ -80,5 +81,13 @@ public interface TabHaobanInteractRecordMapper {
*/ */
int deleteById(Long id); int deleteById(Long id);
/**
* 查询互动明细
* @param enterpriseId
* @param traceId
* @return
*/
TabHaobanInteractRecord queryWithEnterpriseIdAndTraceId(@Param("enterpriseId") String enterpriseId, @Param("traceId") String traceId);
} }
package com.gic.haoban.manage.service.dao.mapper.content; package com.gic.haoban.manage.service.dao.mapper.content;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer; import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
import com.gic.haoban.manage.service.pojo.qo.content.PotentialCustomerQO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
...@@ -80,5 +81,14 @@ public interface TabHaobanPotentialCustomerMapper { ...@@ -80,5 +81,14 @@ public interface TabHaobanPotentialCustomerMapper {
*/ */
int deleteById(Long id); int deleteById(Long id);
/**
* 查询明细
* @param potentialCustomerQO
* @return
*/
TabHaobanPotentialCustomer queryPotentialCustomerList(PotentialCustomerQO potentialCustomerQO);
} }
package com.gic.haoban.manage.service.pojo.bo.content;
import lombok.Data;
import java.util.Date;
/**
* @Author MUSI
* @Date 2023/3/28 11:25 PM
* @Description
* @Version
* 互动记录
**/
@Data
public class InteractRecordBO {
private Long id;
/**
* 企业id
*/
private String enterpriseId;
/**
* 会员id
*/
private String memberId;
/**
* 会员微信公众号id
*/
private String unionId;
/**
* 导购id
*/
private String clerkId;
/**
* 销售线索-业务id
*/
private String bizId;
/**
* 业务类型 1 素材
*/
private Integer bizType;
/**
* 门店id
*/
private String storeId;
/**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
*/
private Integer channelSource;
/**
* 事件类型 1访问素材;2访问商品; 3购买商品;
*/
private Integer eventType;
/**
* 停留时长 单位秒
*/
private Integer durationTime;
/**
* 访问次数
*/
private Integer times;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNickName;
/**
* 会员手机号
*/
private String memberPhone;
/**
* 成交数量
*/
private Integer dealRecordNum;
/**
* 是否导购星标客户 1是; 0否
*/
private Integer starFlag;
/**
* 是否看过 1 看过; 0未看过
*/
private Integer seeFlag;
/**
* 最新访问时间
*/
private Date lastAccessTime;
/**
* 状态 1 删除; 0正常
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
package com.gic.haoban.manage.service.pojo.bo.content;
import lombok.Data;
import java.util.Date;
/**
* @Author MUSI
* @Date 2023/3/29 10:02 AM
* @Description
* @Version
**/
@Data
public class PotentialCustomerBO {
private Long id;
/**
* 企业id
*/
private String enterpriseId;
/**
* 会员id
*/
private String memberId;
/**
* 会员微信公众号id
*/
private String unionId;
/**
* 导购id
*/
private String clerkId;
/**
* 销售线索-业务id
*/
private String bizId;
/**
* 业务类型 1 素材
*/
private Integer bizType;
/**
* 门店id
*/
private String storeId;
/**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
*/
private Integer channelSource;
/**
* 事件类型 1访问素材;2访问商品; 3购买商品;
*/
private Integer eventType;
/**
* 停留时长 单位秒
*/
private Integer durationTime;
/**
* 访问次数
*/
private Integer times;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNickName;
/**
* 会员手机号
*/
private String memberPhone;
/**
* 成交数量
*/
private Integer dealRecordNum;
/**
* 是否导购星标客户 1是; 0否
*/
private Integer starFlag;
/**
* 是否看过 1 看过; 0未看过
*/
private Integer seeFlag;
/**
* 最新访问时间
*/
private Date lastAccessTime;
/**
* 状态 1 删除; 0正常
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
package com.gic.haoban.manage.service.pojo.bo.content.context;
import lombok.Data;
/**
* @Author MUSI
* @Date 2023/3/28 8:40 PM
* @Description
* @Version
* 销售线索上下文
**/
@Data
public class InteractRecordContext {
}
...@@ -36,6 +36,10 @@ public class InteractRecordBO implements Serializable { ...@@ -36,6 +36,10 @@ public class InteractRecordBO implements Serializable {
*/ */
private String storeId; private String storeId;
/** /**
* 素材id
*/
private String materialId;
/**
* 来源渠道 * 来源渠道
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他 * 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
*/ */
......
package com.gic.haoban.manage.service.pojo.bo.content.message;
import lombok.Data;
import java.util.Date;
/**
* @Author MUSI
* @Date 2023/3/28 11:13 PM
* @Description
* @Version
**/
@Data
public class PotentialCustomerMessageBO {
private static final long serialVersionUID = -28370046858269747L;
private Long id;
/**
* 企业id
*/
private String enterpriseId;
/**
* 会员id
*/
private String memberId;
/**
* 会员微信公众号id
*/
private String unionId;
/**
* 导购id
*/
private String clerkId;
/**
* 销售线索-业务id
*/
private String bizId;
/**
* 业务类型 1 素材
*/
private Integer bizType;
/**
* 门店id
*/
private String storeId;
/**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
*/
private Integer channelSource;
/**
* 事件类型 1访问素材;2访问商品; 3购买商品;
*/
private Integer eventType;
/**
* 停留时长 单位秒
*/
private Integer durationTime;
/**
* 访问次数
*/
private Integer times;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNickName;
/**
* 会员手机号
*/
private String memberPhone;
/**
* 成交数量
*/
private Integer dealRecordNum;
/**
* 是否导购星标客户 1是; 0否
*/
private Integer starFlag;
/**
* 是否看过 1 看过; 0未看过
*/
private Integer seeFlag;
/**
* 最新访问时间
*/
private Date lastAccessTime;
/**
* 状态 1 删除; 0正常
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
package com.gic.haoban.manage.service.pojo.qo.content;
import com.gic.api.base.commons.BasePageInfo;
import lombok.Data;
/**
* @Author MUSI
* @Date 2023/3/29 10:03 AM
* @Description
* @Version
**/
@Data
public class PotentialCustomerQO extends BasePageInfo {
private static final long serialVersionUID = 5117301447654788339L;
/**
* 企业id
*/
private String enterpriseId;
/**
* 微信企业id
*/
private String wxEnterpriseId;
/**
* 导购id
*/
private String clerkId;
/**
* 搜索字段
*/
private String search;
/**
* 导购是否看过
* 1已看过
* 0未看过
*/
private Integer seeFlag;
/**
* 是否导购星标客户
* 1 与导购是星标
*/
private Integer starFlag;
/**
* 导购与会员是否 企微好友
* 1 是好友; 0不是
*/
private Integer hasMemberRelation;
/**
* 会员是否有过成交
* 1 有过成交
*/
private Integer dealRecord;
/**
* 1 会员有手机号
*/
private Integer hasMemberPhone;
}
package com.gic.haoban.manage.service.service.content;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
/**
* 互动记录明细(TabHaobanInteractRecord)表服务接口
*
* @author makejava
* @since 2023-03-28 10:32:48
*/
public interface InteractRecordService {
/**
* 查询互动记录
* @param enterpriseId
* @param traceId
* @return
*/
InteractRecordBO queryInteractInfo(String enterpriseId, String traceId);
}
package com.gic.haoban.manage.service.service.content;
import com.gic.api.base.commons.Page;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.qo.content.PotentialCustomerQO;
/**
* 销售线索(TabHaobanPotentialCustomer)表服务接口
*
* @author makejava
* @since 2023-03-28 09:48:08
*/
public interface PotentialCustomerService {
/**
* 查询销售线索
* @param potentialCustomerQO
* @return
*/
Page<PotentialCustomerBO> queryPotentialCustomerPage(PotentialCustomerQO potentialCustomerQO);
}
package com.gic.haoban.manage.service.service.content;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
/**
* 互动记录明细(TabHaobanInteractRecord)表服务接口
*
* @author makejava
* @since 2023-03-28 10:32:48
*/
public interface TabHaobanInteractRecordService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
TabHaobanInteractRecord queryById(Long id);
/**
* 分页查询
*
* @param tabHaobanInteractRecord 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
Page<TabHaobanInteractRecord> queryByPage(TabHaobanInteractRecord tabHaobanInteractRecord, PageRequest pageRequest);
/**
* 新增数据
*
* @param tabHaobanInteractRecord 实例对象
* @return 实例对象
*/
TabHaobanInteractRecord insert(TabHaobanInteractRecord tabHaobanInteractRecord);
/**
* 修改数据
*
* @param tabHaobanInteractRecord 实例对象
* @return 实例对象
*/
TabHaobanInteractRecord update(TabHaobanInteractRecord tabHaobanInteractRecord);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
}
package com.gic.haoban.manage.service.service.content;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
/**
* 销售线索(TabHaobanPotentialCustomer)表服务接口
*
* @author makejava
* @since 2023-03-28 09:48:08
*/
public interface TabHaobanPotentialCustomerService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
TabHaobanPotentialCustomer queryById(Long id);
/**
* 分页查询
*
* @param tabHaobanPotentialCustomer 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
Page<TabHaobanPotentialCustomer> queryByPage(TabHaobanPotentialCustomer tabHaobanPotentialCustomer, PageRequest pageRequest);
/**
* 新增数据
*
* @param tabHaobanPotentialCustomer 实例对象
* @return 实例对象
*/
TabHaobanPotentialCustomer insert(TabHaobanPotentialCustomer tabHaobanPotentialCustomer);
/**
* 修改数据
*
* @param tabHaobanPotentialCustomer 实例对象
* @return 实例对象
*/
TabHaobanPotentialCustomer update(TabHaobanPotentialCustomer tabHaobanPotentialCustomer);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
}
package com.gic.haoban.manage.service.service.content.impl;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.service.content.InteractRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 互动记录明细(TabHaobanInteractRecord)表服务实现类
*
* @author makejava
* @since 2023-03-28 10:32:48
*/
@Slf4j
@Component
public class InteractRecordServiceImpl implements InteractRecordService {
@Resource
private TabHaobanInteractRecordMapper tabHaobanInteractRecordMapper;
/**
* 查询互动记录
*
* @param enterpriseId
* @param traceId
* @return
*/
@Override
public InteractRecordBO queryInteractInfo(String enterpriseId, String traceId) {
if (StringUtils.isAnyBlank(enterpriseId, traceId)) {
return null;
}
TabHaobanInteractRecord interactRecord = tabHaobanInteractRecordMapper.queryWithEnterpriseIdAndTraceId(enterpriseId, traceId);
if (interactRecord == null) {
return null;
}
InteractRecordBO temp = new InteractRecordBO();
BeanUtils.copyProperties(interactRecord, temp);
return temp;
}
}
package com.gic.haoban.manage.service.service.content.impl;
import com.gic.api.base.commons.Page;
import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanPotentialCustomerMapper;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.qo.content.PotentialCustomerQO;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 销售线索(TabHaobanPotentialCustomer)表服务实现类
*
* @author makejava
* @since 2023-03-28 09:48:08
*/
@Slf4j
@Component
public class PotentialCustomerServiceImpl implements PotentialCustomerService {
@Resource
private TabHaobanPotentialCustomerMapper tabHaobanPotentialCustomerMapper;
/**
* 查询销售线索
*
* @param potentialCustomerQO
* @return
*/
@Override
public Page<PotentialCustomerBO> queryPotentialCustomerPage(PotentialCustomerQO potentialCustomerQO) {
if (StringUtils.isBlank(potentialCustomerQO.getClerkId())) {
log.info("参数缺失 {}", potentialCustomerQO.getClerkId());
return new Page<>();
}
return null;
}
}
package com.gic.haoban.manage.service.service.content.impl;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper;
import com.gic.haoban.manage.service.service.content.TabHaobanInteractRecordService;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import javax.annotation.Resource;
/**
* 互动记录明细(TabHaobanInteractRecord)表服务实现类
*
* @author makejava
* @since 2023-03-28 10:32:48
*/
@Service("tabHaobanInteractRecordService")
public class TabHaobanInteractRecordServiceImpl implements TabHaobanInteractRecordService {
@Resource
private TabHaobanInteractRecordMapper tabHaobanInteractRecordMapper;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public TabHaobanInteractRecord queryById(Long id) {
return this.tabHaobanInteractRecordMapper.queryById(id);
}
/**
* 分页查询
*
* @param tabHaobanInteractRecord 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
@Override
public Page<TabHaobanInteractRecord> queryByPage(TabHaobanInteractRecord tabHaobanInteractRecord, PageRequest pageRequest) {
long total = this.tabHaobanInteractRecordMapper.count(tabHaobanInteractRecord);
return new PageImpl<>(this.tabHaobanInteractRecordMapper.queryAllByLimit(tabHaobanInteractRecord), pageRequest, total);
}
/**
* 新增数据
*
* @param tabHaobanInteractRecord 实例对象
* @return 实例对象
*/
@Override
public TabHaobanInteractRecord insert(TabHaobanInteractRecord tabHaobanInteractRecord) {
this.tabHaobanInteractRecordMapper.insert(tabHaobanInteractRecord);
return tabHaobanInteractRecord;
}
/**
* 修改数据
*
* @param tabHaobanInteractRecord 实例对象
* @return 实例对象
*/
@Override
public TabHaobanInteractRecord update(TabHaobanInteractRecord tabHaobanInteractRecord) {
this.tabHaobanInteractRecordMapper.update(tabHaobanInteractRecord);
return this.queryById(tabHaobanInteractRecord.getId());
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.tabHaobanInteractRecordMapper.deleteById(id) > 0;
}
}
package com.gic.haoban.manage.service.service.content.impl;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanPotentialCustomerMapper;
import com.gic.haoban.manage.service.service.content.TabHaobanPotentialCustomerService;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import javax.annotation.Resource;
/**
* 销售线索(TabHaobanPotentialCustomer)表服务实现类
*
* @author makejava
* @since 2023-03-28 09:48:08
*/
@Service("tabHaobanPotentialCustomerService")
public class TabHaobanPotentialCustomerServiceImpl implements TabHaobanPotentialCustomerService {
@Resource
private TabHaobanPotentialCustomerMapper tabHaobanPotentialCustomerMapper;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public TabHaobanPotentialCustomer queryById(Long id) {
return this.tabHaobanPotentialCustomerMapper.queryById(id);
}
/**
* 分页查询
*
* @param tabHaobanPotentialCustomer 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
@Override
public Page<TabHaobanPotentialCustomer> queryByPage(TabHaobanPotentialCustomer tabHaobanPotentialCustomer, PageRequest pageRequest) {
long total = this.tabHaobanPotentialCustomerMapper.count(tabHaobanPotentialCustomer);
return new PageImpl<>(this.tabHaobanPotentialCustomerMapper.queryAllByLimit(tabHaobanPotentialCustomer, pageRequest), pageRequest, total);
}
/**
* 新增数据
*
* @param tabHaobanPotentialCustomer 实例对象
* @return 实例对象
*/
@Override
public TabHaobanPotentialCustomer insert(TabHaobanPotentialCustomer tabHaobanPotentialCustomer) {
this.tabHaobanPotentialCustomerMapper.insert(tabHaobanPotentialCustomer);
return tabHaobanPotentialCustomer;
}
/**
* 修改数据
*
* @param tabHaobanPotentialCustomer 实例对象
* @return 实例对象
*/
@Override
public TabHaobanPotentialCustomer update(TabHaobanPotentialCustomer tabHaobanPotentialCustomer) {
this.tabHaobanPotentialCustomerMapper.update(tabHaobanPotentialCustomer);
return this.queryById(tabHaobanPotentialCustomer.getId());
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.tabHaobanPotentialCustomerMapper.deleteById(id) > 0;
}
}
...@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.service.content.message; ...@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.service.content.message;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordBO; import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordBO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
...@@ -15,6 +16,7 @@ import org.springframework.stereotype.Component; ...@@ -15,6 +16,7 @@ import org.springframework.stereotype.Component;
@Component @Component
public class InteractRecordMessageService { public class InteractRecordMessageService {
/** /**
* 处理互动记录 * 处理互动记录
* @param interactRecordBO * @param interactRecordBO
...@@ -25,12 +27,24 @@ public class InteractRecordMessageService { ...@@ -25,12 +27,24 @@ public class InteractRecordMessageService {
// 根据businessId clerkId memberId materialId 构建唯一标识key // 根据businessId clerkId memberId materialId 构建唯一标识key
// 根据key 查询是否存在记录 // 根据key 查询是否存在记录
String key = this.buildRecordKey(interactRecordBO);
// 新增 // 新增
// 通过clerkId、memberId、materialId 查询之前存在的记录总数,本次是第几次访问 在之前的记录总数上加1 // 通过clerkId、memberId、materialId 查询之前存在的记录总数,本次是第几次访问 在之前的记录总数上加1
// 编辑 // 编辑
// 合并时间类型 // 合并时间类型
// //
}
/**
* 构建唯一key
* @param interactRecordBO
* @return
*/
private String buildRecordKey(InteractRecordBO interactRecordBO) {
String customerId = StringUtils.isNotBlank(interactRecordBO.getMemberId()) ? interactRecordBO.getMemberId() : interactRecordBO.getUnionId();
return interactRecordBO.getBusinessUUId() + interactRecordBO.getClerkId() + interactRecordBO.getMaterialId() + customerId;
} }
} }
package com.gic.haoban.manage.service.service.out.impl.content;
import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.content.PotentialCustomerDTO;
import com.gic.haoban.manage.api.dto.qdto.content.PotentialCustomerMarkRecordDTO;
import com.gic.haoban.manage.api.dto.qdto.content.PotentialCustomerQDTO;
import com.gic.haoban.manage.api.service.content.PotentialCustomerApiService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author MUSI
* @Date 2023/3/29 10:00 AM
* @Description
* @Version
**/
@Component("potentialCustomerApiService")
public class PotentialCustomerApiServiceImpl implements PotentialCustomerApiService {
@Autowired
PotentialCustomerService potentialCustomerService;
/**
* 查询销售线索记录
*
* @param potentialCustomerQDTO
* @return
*/
@Override
public ServiceResponse<Page<PotentialCustomerDTO>> queryPotentialCustomer(PotentialCustomerQDTO potentialCustomerQDTO) {
return null;
}
/**
* 标记销售线索 已看、星标
*
* @param potentialCustomerMarkRecordDTO
* @return
*/
@Override
public ServiceResponse<Long> markPotentialCustomer(PotentialCustomerMarkRecordDTO potentialCustomerMarkRecordDTO) {
return null;
}
}
...@@ -12,6 +12,7 @@ import java.awt.*; ...@@ -12,6 +12,7 @@ import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.util.Random;
/** /**
* @Author MUSI * @Author MUSI
...@@ -66,8 +67,9 @@ public class DrawImageUtils { ...@@ -66,8 +67,9 @@ public class DrawImageUtils {
public static void main(String[] args) { public static void main(String[] args) {
System.setProperty("gic.module.name", "haoban-manage3-service"); System.setProperty("gic.module.name", "haoban-manage3-service");
Random random = new Random();
for (int i = 0; i < 50; i++) { for (int i = 0; i < 50; i++) {
String url = DrawImageUtils.drawImage("jhdm", "102", "3.1万", "template/week_bkg.png"); String url = DrawImageUtils.drawImage("jhdm", Math.abs(random.nextInt(1000)) + "", Math.abs(random.nextInt(1000)) + "万", "template/week_bkg.png");
System.out.println(url); System.out.println(url);
} }
} }
......
...@@ -208,5 +208,7 @@ ...@@ -208,5 +208,7 @@
ref="materialShareLogApiServiceImpl" timeout="10000" /> ref="materialShareLogApiServiceImpl" timeout="10000" />
<dubbo:service interface="com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService" <dubbo:service interface="com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService"
ref="qywxGroupMsgTaskApiServiceImpl" timeout="10000" /> ref="qywxGroupMsgTaskApiServiceImpl" timeout="10000" />
<dubbo:service interface="com.gic.haoban.manage.api.service.content.PotentialCustomerApiService"
ref="potentialCustomerApiService" timeout="10000" />
</beans> </beans>
\ No newline at end of file
...@@ -22,6 +22,26 @@ ...@@ -22,6 +22,26 @@
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap> </resultMap>
<sql id="baseSql">
id,
enterprise_id,
member_id,
union_id,
clerk_id,
trace_id,
biz_id,
biz_type,
store_id,
channel_source,
event_type,
duration_time,
times,
delete_flag,
extend_info,
create_time,
update_time
</sql>
<!--查询单个--> <!--查询单个-->
<select id="queryById" resultMap="TabHaobanInteractRecordMap"> <select id="queryById" resultMap="TabHaobanInteractRecordMap">
select id, select id,
...@@ -231,5 +251,11 @@ ...@@ -231,5 +251,11 @@
where id = #{id} where id = #{id}
</delete> </delete>
<select id="queryWithEnterpriseIdAndTraceId" resultMap="TabHaobanInteractRecordMap">
select <include refid="baseSql"/>
from tab_haoban_interact_record
where enterprise_id = #{enterpriseId} and trace_id = #{traceId}
</select>
</mapper> </mapper>
...@@ -362,5 +362,44 @@ ...@@ -362,5 +362,44 @@
where id = #{id} where id = #{id}
</delete> </delete>
<sql id="queryPotentialCustomerSql">
select customer.*
from tab_haoban_potential_customer customer
<if test="hasMemberRelation != null">
left join tab_haoban_external_clerk_related related on customer.clerk_id = related.clerk_id and related.status_flag in (1, 3, 4) and customer.member_id = related.member_id
</if>
<where>
customer.clerk_id = #{clerkId} and customer.delete_flag = 0
<if test="enterpriseId != null and enterpriseId != ''">
and customer.enterprise_id = #{enterpriseId}
</if>
<if test="search != null and search != ''">
<!-- 姓名、昵称、手机号 -->
and ( customer.member_name like concat('%', #{search}, '%') or customer.member_nick_name like concat('%', #{search}, '%') or customer.member_phone like concat('%', #{search}, '%') )
</if>
<if test="seeFlag != null">
and customer.see_flag = #{seeFlag}
</if>
<if test="starFlag != null">
and customer.star_flag = #{starFlag}
</if>
<if test="hasMemberRelation != null">
<!-- 企微好友 -->
and related.clerk_id is not null
</if>
<if test="dealRecord != null">
and customer.deal_record_num > 0
</if>
<if test="hasMemberPhone != null">
and customer.member_phone is not null
</if>
</where>
</sql>
<select id="queryPotentialCustomerList" resultMap="TabHaobanPotentialCustomerMap">
</select>
</mapper> </mapper>
...@@ -20,30 +20,33 @@ public class PotentialCustomerController { ...@@ -20,30 +20,33 @@ public class PotentialCustomerController {
/** /**
* 销售线索列表 * 销售线索列表
*
* @param potentialCustomerQO * @param potentialCustomerQO
* @return * @return
*/ */
@RequestMapping(path = "/list") @RequestMapping(path = "/list")
public RestResponse<Page<PotentialCustomerVO>> queryPotentialCustomerList(@RequestBody PotentialCustomerQO potentialCustomerQO){ public RestResponse<Page<PotentialCustomerVO>> queryPotentialCustomerList(@RequestBody PotentialCustomerQO potentialCustomerQO) {
return RestResponse.successResult(); return RestResponse.successResult();
} }
/** /**
* 标记销售线索为已看 * 标记销售线索为已看
*
* @return * @return
*/ */
@RequestMapping(path = "/mark/record/see") @RequestMapping(path = "/mark/record/see")
public RestResponse<?> markRecordSee(@RequestBody PotentialCustomerMarkRecordVO potentialCustomerMarkRecordVO){ public RestResponse<?> markRecordSee(@RequestBody PotentialCustomerMarkRecordVO potentialCustomerMarkRecordVO) {
return RestResponse.successResult(); return RestResponse.successResult();
} }
/** /**
* 标记客户为星标客户 * 标记客户为星标客户
*
* @return * @return
*/ */
@RequestMapping(path = "/mark/member/star") @RequestMapping(path = "/mark/member/star")
public RestResponse<?> markMemberStar(@RequestBody PotentialCustomerMarkRecordVO potentialCustomerMarkRecordVO){ public RestResponse<?> markMemberStar(@RequestBody PotentialCustomerMarkRecordVO potentialCustomerMarkRecordVO) {
return RestResponse.successResult(); return RestResponse.successResult();
} }
} }
...@@ -15,6 +15,11 @@ public class PotentialCustomerMarkRecordVO extends BasePageInfo { ...@@ -15,6 +15,11 @@ public class PotentialCustomerMarkRecordVO extends BasePageInfo {
private static final long serialVersionUID = -5811402077258900090L; private static final long serialVersionUID = -5811402077258900090L;
/** /**
* 线索id
*/
private Long potentialCustomerId;
/**
* 企业id * 企业id
*/ */
private String enterpriseId; private String enterpriseId;
......
package com.gic.haoban.manage.web.vo.content.potential; package com.gic.haoban.manage.web.vo.content.potential;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO; import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO;
import lombok.Data; import lombok.Data;
...@@ -17,6 +19,12 @@ import java.util.List; ...@@ -17,6 +19,12 @@ import java.util.List;
public class PotentialCustomerVO implements Serializable { public class PotentialCustomerVO implements Serializable {
/** /**
* 销售线索id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long potentialCustomerId;
/**
* 会员昵称 * 会员昵称
*/ */
private String memberName; private String memberName;
......
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