Merge branch 'master' into dev/feat/partner1.5.2_20231121

This commit is contained in:
feng.li
2023-11-08 14:28:16 +08:00
27 changed files with 1186 additions and 169 deletions

View File

@@ -17,6 +17,11 @@ import java.util.stream.Collectors;
*/
public enum ErrorCodeEnum {
PARTNER_MOBILE_INCORRECT(418, "请输入正确的手机号", null),
PUBLIC_LINE_NOT_FOLLOW(419, "该线索已存在公海,无跟进人", null),
LINE_EXIST_FOLLOW(420, "该线索已存在,跟进人为【{0}{1}】", null),
/**
* 000000 未知错误
*/
@@ -71,6 +76,7 @@ public enum ErrorCodeEnum {
INVESTMENT_MANAGER_NOT_EXIST(500016, "当前招商经理不存在", null),
PARTNER_MOBILE_EXIST_0(500017, "手机号码已存在", null),
INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null),
DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null),
INTERVIEW_NOT_EXIST(1021103, "面试信息不存在!", null),

View File

@@ -13,6 +13,7 @@ public enum FeiShuNoticeMsgEnum {
ALLOCATION_INVESTMENT_MANAGER("分配招商经理", "有新的线索于 {0} 分配给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"),
TRANS_INVESTMENT_MANAGER("转让招商经理", "有新的线索于 {0} 转让给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"),
BATCH_TRANS_INVESTMENT_MANAGER("收到新线索", "有{0}条新线索于 {1} 转让给您,请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"),
EC_RECEIVE_LINE("收到EC新线索", "有{0}条新线索于EC同步给您线索信息 {1},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"),
INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g", "1567d83b966f2d312fd7fcd2e72dbce9"),
FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g", "1567d83b966f2d312fd7fcd2e72dbce9"),
INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g", "1567d83b966f2d312fd7fcd2e72dbce9"),

View File

@@ -13,6 +13,8 @@ import static com.cool.store.enums.OperateLogFieldValueEnum.*;
*/
public enum OperateTypeEnum {
EC_SYNC_ADD_LINE("ec_sync_add_line", "ec同步新增线索", Arrays.asList(MOBILE,OPERATE_TIME, OPERATE_USER_ID, OPERATE_USER_NAME)),
ADD_LINE("add_line", "新增线索", Arrays.asList(MOBILE,OPERATE_TIME, OPERATE_USER_ID, OPERATE_USER_NAME)),
ALLOCATION_INVESTMENT_MANAGER("allocation_investment_manager", "分配招商经理", Arrays.asList(ALLOCATION_USERID,ALLOCATION_USERNAME, MOBILE, OPERATE_TIME)),
ADD_BLACKLIST("add_blacklist", "加入黑名单", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REASON)),
REMOVE_BLACKLIST("remove_blacklist", "移除黑名单", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REASON)),

View File

@@ -0,0 +1,130 @@
package com.cool.store.enums;
/**
* @author hxd
*/
public enum TrajectoryTypeEnum {
/**
* 联系轨迹类型*
*/
SEND_NOTE(1001, "发送短信",""),
DIAL_MOBILE(1002, "拨打对方电话",""),
WEBSITE_CUSTOMER_MOBILE(1003, "网站客服会话",""),
EC_SESSION(1004, "EC会话",""),
QQ_SESSION(1005, "QQ会话",""),
SEND_EMAIL(1006, "发送邮件",""),
ANSWER_MOBILE(1007, "接听对方电话",""),
ANSWER_EMAIL(1008, "接收邮件",""),
CALL_MEETING(1009, "电话会议",""),
DIAL_CLOUD_MOBILE(1010, "拨打云总机电话",""),
ANSWER_CLOUD_MOBILE(1011, "接听云总机电话",""),
/**
* 提醒类
*/
REGULARLY_REMIND(2001, "定时提醒",""),
REMINDER_SALES_PROGRAM(2002, "提醒销售计划",""),
CALENDAR_REMINDER(2003, "日历提醒",""),
/**
* 文本类型
*/
ADD_CUSTOMER(3001, "新增客户",""),
ADD_CUSTOMER_DATA(3002, "新增客户资料",""),
UPDATE_CUSTOMER_DATA(3003, "更新客户资料",""),
UPDATE_CUSTOMER_LABEL(3004, "更新客户标签",""),
RELEVANCE_EC(3005, "关联EC",""),
CANCEL_RELEVANCE_EC(3006, "取消EC关联",""),
RELEVANCE_QQ(3007, "关联QQ",""),
CANCEL_RELEVANCE_QQ(3008, "取消QQ关联",""),
TRANSFER_CUSTOMER(3009, "转让客户","将此客户转换了给"),
MERGE_CUSTOMER(3010, "合并客户",""),
ALLOCATION_CUSTOMER(3011, "分配客户","分配此客户给"),
GET_CUSTOMER(3012, "领取客户","领取了此客户"),
ABANDON_CUSTOMER(3013, "放弃客户",""),
ADD_MARKER_PLAN(3014, "添加销售计划",""),
UPDATE_MARKER_PLAN(3015, "修改销售计划",""),
USE_MARKER_TEMPLATE(3016, "使用销售模板",""),
UPDATE_CUSTOMER_STAGE(3017, "更新客户阶段",""),
RELEVANCE_COMPANY(3018, "关联公司",""),
CANCEL_RELEVANCE_COMPANY(3019, "取消公司关联",""),
UPLOAD_PHOTO_AVATAR(3020, "上传头像",""),
ADD_SHARE_COLLEAGUE(3021, "新增共享同事",""),
CANCEL_SHARE_COLLEAGUE(3022, "取消共享同事",""),
CANCEL_RELEVANCE(3023, "退出共享关系",""),
TRANSFER_COMPANY_IMPORT(3024, "转为公司导入",""),
ADD_CONTACT_DATA(3036, "新增联系人资料",""),
UPDATE_CONTACT_DATA(3037, "更新联系人资料",""),
ADD_CONTACT(3038, "新增联系人",""),
DELETE_CONTACT(3039, "删除联系人",""),
DELETE_ORDERS(3040, "删除订单",""),
DELETE_CUSTOMER(3041, "删除客户",""),
TRANSFER_CUSTOMER_TYPE(3042, "转换客户类型",""),
/**
* 跟进记录类
*/
ADD_FOLLOW_RECORD(4000, "添加跟进记录",""),
/**
* 微信类
*/
WECHAT_ACTIVITY(6000, "微信活动",""),
/**
* 拜访客户类
*/
VISITING_CLIENTS(7000, "拜访客户类","");
private final Integer value;
private final String showText;
private final String jointText;
TrajectoryTypeEnum(Integer value, String showText,String jointText) {
this.value = value;
this.showText = showText;
this.jointText = jointText;
}
public Integer getValue() {
return value;
}
public String getShowText() {
return showText;
}
public String getJointText() {
return jointText;
}
public static String getShowText(Integer value) {
for (TrajectoryTypeEnum trajectoryTypeEnum : TrajectoryTypeEnum.values()) {
if (trajectoryTypeEnum.getValue().equals(value)) {
return trajectoryTypeEnum.getShowText();
}
}
return "";
}
public static String getJointText(Integer value) {
for (TrajectoryTypeEnum trajectoryTypeEnum : TrajectoryTypeEnum.values()) {
if (trajectoryTypeEnum.getValue().equals(value)) {
return trajectoryTypeEnum.getJointText();
}
}
return "";
}
}

View File

@@ -147,7 +147,7 @@ public class EnterpriseUserDAO {
return userList.stream().filter(o->!StringUtils.isAnyBlank(o.getMobile(), o.getName())).collect(Collectors.toMap(k -> k.getUserId(), Function.identity()));
}
public String selectByMobile(String mobile) {
public EnterpriseUserDO selectByMobile(String mobile) {
return enterpriseUserMapper.selectByMobile(mobile);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.dao;
import com.cool.store.dto.partner.MobileCheckDTO;
import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.mapper.HyPartnerUserInfoMapper;
import com.google.common.collect.Lists;
@@ -83,4 +84,14 @@ public class HyPartnerUserInfoDAO {
}
public String selectLastCrmCreateTime() {
return hyPartnerUserInfoMapper.selectLastCrmCreateTime();
}
public MobileCheckDTO selectByCheckMobile(String mobile) {
if (StringUtils.isEmpty(mobile)){
return null;
}
return hyPartnerUserInfoMapper.selectByCheckMobile(mobile);
}
}

View File

@@ -101,7 +101,7 @@ public interface EnterpriseUserMapper {
*/
List<EnterpriseUserDO> getUserListByRegionIds(@Param("regionIds") List<String> regionIds);
String selectByMobile(@Param("mobile") String mobile);
EnterpriseUserDO selectByMobile(@Param("mobile") String mobile);
EnterpriseUserDO selectByInvestmentManager(@Param("investmentManager") String investmentManager);

View File

@@ -0,0 +1,31 @@
package com.cool.store.mapper;
import com.cool.store.entity.HyPartnerEcTrackLogDO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author hxd
*/
@Mapper
public interface HyPartnerEcTrackLogMapper {
int deleteByPrimaryKey(Long id);
int insert(HyPartnerEcTrackLogDO record);
int insertSelective(HyPartnerEcTrackLogDO record);
HyPartnerEcTrackLogDO selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(HyPartnerEcTrackLogDO record);
int updateByPrimaryKey(HyPartnerEcTrackLogDO record);
int batchInsertOrUpdate(@Param("recordList") HyPartnerEcTrackLogDO resultTrajectoryList);
Page<HyPartnerEcTrackLogDO> getEcLogPageByPartnerId(@Param("partnerId") String partnerId);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.mapper;
import com.cool.store.dto.partner.MobileCheckDTO;
import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.entity.SyncEcCustomerDO;
import org.apache.ibatis.annotations.Param;
@@ -49,4 +50,8 @@ public interface HyPartnerUserInfoMapper {
int selectByHourDateCount(@Param("selectTime") String hourDayDate, @Param("now") String now);
int updateByPartnerId(@Param("record") HyPartnerUserInfoDO record);
String selectLastCrmCreateTime();
MobileCheckDTO selectByCheckMobile(@Param("mobile") String mobile);
}

View File

@@ -332,13 +332,13 @@
SUBSTR(jobnumber,1,1),
CAST(SUBSTR(jobnumber,2) AS UNSIGNED) ASC
</select>
<select id="selectByMobile" resultType="java.lang.String">
SELECT user_id FROM enterprise_user WHERE mobile =#{mobile} LIMIT 1
<select id="selectByMobile" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/> FROM enterprise_user WHERE mobile =#{mobile} and deleted=0 LIMIT 1
</select>
<select id="selectByInvestmentManager" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM enterprise_user WHERE mobile like #{investmentManager} or `name` like #{investmentManager} LIMIT 1
FROM enterprise_user WHERE ( mobile = #{investmentManager} or `name` = #{investmentManager} ) and deleted=0 LIMIT 1
</select>
<select id="getFeishuUserIdsByUserIds" resultMap="BaseResultMap">

View File

@@ -0,0 +1,345 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cool.store.mapper.HyPartnerEcTrackLogMapper">
<resultMap id="BaseResultMap" type="com.cool.store.entity.HyPartnerEcTrackLogDO">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="trajectory_id" jdbcType="VARCHAR" property="trajectoryId" />
<result column="user_id" jdbcType="VARCHAR" property="userId" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="crm_id" jdbcType="VARCHAR" property="crmId" />
<result column="partner_id" jdbcType="VARCHAR" property="partnerId" />
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
<result column="receive_user_ids" jdbcType="VARCHAR" property="receiveUserIds" />
<result column="receive_user" jdbcType="VARCHAR" property="receiveUser" />
<result column="trajectory_type" jdbcType="INTEGER" property="trajectoryType" />
<result column="trajectory_type_content" jdbcType="VARCHAR" property="trajectoryTypeContent" />
<result column="content" jdbcType="VARCHAR" property="content" />
<result column="operate_time" jdbcType="TIMESTAMP" property="operateTime" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
</resultMap>
<sql id="Base_Column_List">
id, trajectory_id, user_id, user_name, crm_id,mobile, receive_user_ids, receive_user, trajectory_type,partner_id,
trajectory_type_content, content, operate_time, create_time, update_time, remark
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from hy_partner_ec_track_log
where id = #{id,jdbcType=BIGINT}
</select>
<select id="getEcLogPageByPartnerId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from hy_partner_ec_track_log
where partner_id = #{partnerId} order by operate_time desc
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from hy_partner_ec_track_log
where id = #{id,jdbcType=BIGINT}
</delete>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.cool.store.entity.HyPartnerEcTrackLogDO" useGeneratedKeys="true">
insert into hy_partner_ec_track_log (trajectory_id, user_id, user_name, mobile,
crm_id,partner_id, receive_user_ids, receive_user,
trajectory_type, trajectory_type_content,
content, operate_time, create_time,
update_time, remark)
values (#{trajectoryId,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR},
#{crmId,jdbcType=VARCHAR},#{partnerId,jdbcType=VARCHAR}, #{receiveUserIds,jdbcType=VARCHAR}, #{receiveUser,jdbcType=VARCHAR},
#{trajectoryType,jdbcType=INTEGER}, #{trajectoryTypeContent,jdbcType=VARCHAR},
#{content,jdbcType=VARCHAR}, #{operateTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP},
#{updateTime,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.cool.store.entity.HyPartnerEcTrackLogDO" useGeneratedKeys="true">
insert into hy_partner_ec_track_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="trajectoryId != null">
trajectory_id,
</if>
<if test="userId != null">
user_id,
</if>
<if test="userName != null">
user_name,
</if>
<if test="mobile != null">
mobile,
</if>
<if test="crmId != null">
crm_id,
</if>
<if test="partnerId != null">
partner_id,
</if>
<if test="receiveUserIds != null">
receive_user_ids,
</if>
<if test="receiveUser != null">
receive_user,
</if>
<if test="trajectoryType != null">
trajectory_type,
</if>
<if test="trajectoryTypeContent != null">
trajectory_type_content,
</if>
<if test="content != null">
content,
</if>
<if test="operateTime != null">
operate_time,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="remark != null">
remark,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="trajectoryId != null">
#{trajectoryId,jdbcType=VARCHAR},
</if>
<if test="userId != null">
#{userId,jdbcType=VARCHAR},
</if>
<if test="userName != null">
#{userName,jdbcType=VARCHAR},
</if>
<if test="mobile != null">
#{mobile,jdbcType=VARCHAR},
</if>
<if test="crmId != null">
#{crmId,jdbcType=VARCHAR},
</if>
<if test="partnerId != null">
#{partnerId,jdbcType=VARCHAR},
</if>
<if test="receiveUserIds != null">
#{receiveUserIds,jdbcType=VARCHAR},
</if>
<if test="receiveUser != null">
#{receiveUser,jdbcType=VARCHAR},
</if>
<if test="trajectoryType != null">
#{trajectoryType,jdbcType=INTEGER},
</if>
<if test="trajectoryTypeContent != null">
#{trajectoryTypeContent,jdbcType=VARCHAR},
</if>
<if test="content != null">
#{content,jdbcType=VARCHAR},
</if>
<if test="operateTime != null">
#{operateTime,jdbcType=TIMESTAMP},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="remark != null">
#{remark,jdbcType=VARCHAR},
</if>
</trim>
ON DUPLICATE KEY UPDATE trajectory_id=values(trajectory_id)
,user_id=values(user_id)
,user_name=values(user_name)
,crm_id=values(crm_id)
,partner_id=values(partner_id)
,mobile=values(mobile)
,receive_user_ids=values(receive_user_ids)
,receive_user=values(receive_user)
,trajectory_type=values(trajectory_type)
,trajectory_type_content=values(trajectory_type_content)
,content=values(content)
,operate_time=values(operate_time)
,create_time=values(create_time)
,remark=values(remark)
</insert>
<insert id="batchInsertOrUpdate">
<foreach collection="recordList" item="record" separator=";">
insert into hy_partner_ec_track_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="trajectoryId != null">
trajectory_id,
</if>
<if test="userId != null">
user_id,
</if>
<if test="userName != null">
user_name,
</if>
<if test="mobile != null">
mobile,
</if>
<if test="crmId != null">
crm_id,
</if>
<if test="partnerId != null">
partner_id,
</if>
<if test="receiveUserIds != null">
receive_user_ids,
</if>
<if test="receiveUser != null">
receive_user,
</if>
<if test="trajectoryType != null">
trajectory_type,
</if>
<if test="trajectoryTypeContent != null">
trajectory_type_content,
</if>
<if test="content != null">
content,
</if>
<if test="operateTime != null">
operate_time,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="remark != null">
remark,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="record.trajectoryId != null">
#{record.trajectoryId,jdbcType=VARCHAR},
</if>
<if test="record.userId != null">
#{record.userId,jdbcType=VARCHAR},
</if>
<if test="record.userName != null">
#{record.userName,jdbcType=VARCHAR},
</if>
<if test="record.mobile != null">
#{record.mobile,jdbcType=VARCHAR},
</if>
<if test="record.crmId != null">
#{record.crmId,jdbcType=VARCHAR},
</if>
<if test="record.partnerId != null">
#{record.partnerId,jdbcType=VARCHAR},
</if>
<if test="record.receiveUserIds != null">
#{record.receiveUserIds,jdbcType=VARCHAR},
</if>
<if test="record.receiveUser != null">
#{record.receiveUser,jdbcType=VARCHAR},
</if>
<if test="record.trajectoryType != null">
#{record.trajectoryType,jdbcType=INTEGER},
</if>
<if test="record.trajectoryTypeContent != null">
#{record.trajectoryTypeContent,jdbcType=VARCHAR},
</if>
<if test="record.content != null">
#{record.content,jdbcType=VARCHAR},
</if>
<if test="record.operateTime != null">
#{record.operateTime,jdbcType=TIMESTAMP},
</if>
<if test="record.createTime != null">
#{record.createTime,jdbcType=TIMESTAMP},
</if>
<if test="record.remark != null">
#{record.remark,jdbcType=VARCHAR},
</if>
</trim>
ON DUPLICATE KEY UPDATE trajectory_id=values(trajectory_id)
,user_id=values(user_id)
,user_name=values(user_name)
,crm_id=values(crm_id)
,partner_id=values(partner_id)
,mobile=values(mobile)
,receive_user_ids=values(receive_user_ids)
,receive_user=values(receive_user)
,trajectory_type=values(trajectory_type)
,trajectory_type_content=values(trajectory_type_content)
,content=values(content)
,operate_time=values(operate_time)
,create_time=values(create_time)
,remark=values(remark)
</foreach>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.cool.store.entity.HyPartnerEcTrackLogDO">
update hy_partner_ec_track_log
<set>
<if test="trajectoryId != null">
trajectory_id = #{trajectoryId,jdbcType=VARCHAR},
</if>
<if test="userId != null">
user_id = #{userId,jdbcType=VARCHAR},
</if>
<if test="mobile != null">
mobile = #{mobile,jdbcType=VARCHAR},
</if>
<if test="userName != null">
user_name = #{userName,jdbcType=VARCHAR},
</if>
<if test="crmId != null">
crm_id = #{crmId,jdbcType=VARCHAR},
</if>
<if test="partnerId != null">
partner_id = #{partnerId,jdbcType=VARCHAR},
</if>
<if test="receiveUserIds != null">
receive_user_ids = #{receiveUserIds,jdbcType=VARCHAR},
</if>
<if test="receiveUser != null">
receive_user = #{receiveUser,jdbcType=VARCHAR},
</if>
<if test="trajectoryType != null">
trajectory_type = #{trajectoryType,jdbcType=INTEGER},
</if>
<if test="trajectoryTypeContent != null">
trajectory_type_content = #{trajectoryTypeContent,jdbcType=VARCHAR},
</if>
<if test="content != null">
content = #{content,jdbcType=VARCHAR},
</if>
<if test="operateTime != null">
operate_time = #{operateTime,jdbcType=TIMESTAMP},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="remark != null">
remark = #{remark,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.cool.store.entity.HyPartnerEcTrackLogDO">
update hy_partner_ec_track_log
set trajectory_id = #{trajectoryId,jdbcType=VARCHAR},
user_id = #{userId,jdbcType=VARCHAR},
user_name = #{userName,jdbcType=VARCHAR},
crm_id = #{crmId,jdbcType=VARCHAR},
partner_id = #{partnerId,jdbcType=VARCHAR},
mobile = #{mobile,jdbcType=VARCHAR},
receive_user_ids = #{receiveUserIds,jdbcType=VARCHAR},
receive_user = #{receiveUser,jdbcType=VARCHAR},
trajectory_type = #{trajectoryType,jdbcType=INTEGER},
trajectory_type_content = #{trajectoryTypeContent,jdbcType=VARCHAR},
content = #{content,jdbcType=VARCHAR},
operate_time = #{operateTime,jdbcType=TIMESTAMP},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP},
remark = #{remark,jdbcType=VARCHAR}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

View File

@@ -20,6 +20,7 @@
<result column="recommend_partner_name" jdbcType="VARCHAR" property="recommendPartnerName" />
<result column="recommend_partner_mobile" jdbcType="VARCHAR" property="recommendPartnerMobile" />
<result column="user_channel_id" jdbcType="BIGINT" property="userChannelId" />
<result column="crm_create_time" jdbcType="TIMESTAMP" property="crmCreateTime" />
</resultMap>
<sql id="Base_Column_List">
id, partner_id, mobile, username, live_area, want_shop_area, accept_adjust_type,
@@ -111,6 +112,12 @@
WHERE (b.update_time BETWEEN #{selectTime} and #{now} or
a.update_time BETWEEN #{selectTime} and #{now} ) and b.partner_id is not null
</select>
<select id="selectLastCrmCreateTime" resultType="java.lang.String">
SELECT crm_create_time as crmCreateTime FROM hy_partner_user_info ORDER BY crm_create_time desc limit 1
</select>
<select id="selectByCheckMobile" resultType="com.cool.store.dto.partner.MobileCheckDTO">
select a.partner_id as partnerId,a.mobile,line_status as lineStatus ,c.`name`as investmentManager,c.mobile as investmentManagerMobile FROM hy_partner_user_info a left join hy_partner_line_info b on a.partner_id=b.partner_id and b.deleted=0 left join enterprise_user c on b.investment_manager=c.user_id and c.deleted=0 WHERE a.mobile=#{mobile}
</select>
<insert id="insertSelective" keyColumn="id" keyProperty="record.id" useGeneratedKeys="true">
insert into hy_partner_user_info
@@ -169,6 +176,9 @@
<if test="record.ecWantShopArea!=null">
ec_want_shop_area,
</if>
<if test="record.crmCreateTime!=null">
crm_create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="record.partnerId != null">
@@ -225,6 +235,9 @@
<if test="record.ecWantShopArea != null">
#{record.ecWantShopArea},
</if>
<if test="record.crmCreateTime != null">
#{record.crmCreateTime},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective">

View File

@@ -0,0 +1,21 @@
package com.cool.store.dto.partner;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author hxd
*/
@Data
@Accessors(chain = true)
public class MobileCheckDTO {
private String partnerId;
private String mobile;
private Integer lineStatus;
private String investmentManager;
private String investmentManagerMobile;
}

View File

@@ -0,0 +1,137 @@
package com.cool.store.entity;
import java.io.Serializable;
import java.util.Date;
import com.cool.store.enums.TrajectoryTypeEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
/**
* hy_partner_ec_track_log
* @author
*/
@Data
@Accessors(chain = true)
public class HyPartnerEcTrackLogDO implements Serializable {
private Long id;
/**
* 跟进ID
*/
private String trajectoryId;
/**
* 操作人id
*/
private String userId;
/**
* 操作人姓名
*/
private String userName;
/**
* 客户id
*/
private String crmId;
private String partnerId;
/**
* 客户手机号
*/
private String mobile;
/**
* 接收人id
*/
private String receiveUserIds;
/**
* 接收人姓名
*/
private String receiveUser;
/**
* 跟进类型
*/
private Integer trajectoryType;
/**
* 跟进类型名称
*/
private String trajectoryTypeContent;
/**
* 轨迹内容
*/
private String content;
/**
* 轨迹内容(拼接)
*/
private String detailContent;
/**
* 操作时间
*/
@JsonFormat(pattern = "yyyy.MM.dd HH:mm:ss", timezone = "GMT+8")
private Date operateTime;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy.MM.dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy.MM.dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
/**
* 备注
*/
private String remark;
/**
* 获取拼接好的内容
* @param ecLogVo
* @return
*/
public static String getDetailContentJoint(HyPartnerEcTrackLogDO ecLogVo){
if (StringUtils.isNotEmpty(ecLogVo.getContent())) {
String str = ecLogVo.getContent();
if (str.contains("[mobile]")||str.contains("[/mobile]")) {
str = str.replaceAll("\\[mobile]", "").replaceAll("\\[/mobile]", "");
}
return str;
}
StringBuilder detailContent = new StringBuilder();
Integer trajectoryType = ecLogVo.getTrajectoryType();
if (trajectoryType.equals(TrajectoryTypeEnum.TRANSFER_CUSTOMER.getValue())) {
detailContent.append(TrajectoryTypeEnum.TRANSFER_CUSTOMER.getJointText()).append(ecLogVo.getReceiveUser());
}
if (trajectoryType.equals(TrajectoryTypeEnum.ALLOCATION_CUSTOMER.getValue())) {
detailContent.append(TrajectoryTypeEnum.ALLOCATION_CUSTOMER.getJointText()).append(ecLogVo.getReceiveUser());
}
if (trajectoryType.equals(TrajectoryTypeEnum.GET_CUSTOMER.getValue())) {
detailContent.append(ecLogVo.getUserName()).append(TrajectoryTypeEnum.GET_CUSTOMER.getJointText());
}
if (StringUtils.isEmpty(detailContent)) {
detailContent.append(TrajectoryTypeEnum.getShowText(trajectoryType));
}
return detailContent.toString();
}
private static final long serialVersionUID = 1L;
}

View File

@@ -80,4 +80,7 @@ public class HyPartnerUserInfoDO implements Serializable {
@ApiModelProperty("ec意向区域")
private String ecWantShopArea;
@ApiModelProperty("ec创建时间")
private Date crmCreateTime;
}

View File

@@ -2,6 +2,8 @@ package com.cool.store.request;
import lombok.Data;
import java.util.Date;
/**
* @author hxd
* @since 2023/2/28
@@ -25,5 +27,12 @@ public class CustomerInfoRequest {
private String followUserName;
private String labelIds;
private String ecWantShopArea;
private String crmCreateTime;
private Date updateTime;
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.service;
import com.cool.store.entity.HyPartnerEcTrackLogDO;
import com.cool.store.request.CustomerInfoRequest;
import com.cool.store.request.GetTagRequest;
@@ -12,4 +13,10 @@ public interface EcSyncService {
Boolean labelInfo(List<GetTagRequest> getTagRequestList);
String getLastCrmCreateTime();
Boolean historyLine(List<CustomerInfoRequest> resultCustomerInfoList);
Integer historyLineTrajectory(List<HyPartnerEcTrackLogDO> resultTrajectoryList);
}

View File

@@ -1,6 +1,7 @@
package com.cool.store.service;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.entity.HyPartnerEcTrackLogDO;
import com.cool.store.exception.ApiException;
import com.cool.store.request.follow.AddFollowLogRequest;
import com.cool.store.request.follow.AddFollowTaskRequest;
@@ -89,4 +90,7 @@ public interface FollowTaskService {
* @return
*/
void followTaskDailyRemind() throws ApiException;
PageInfo<HyPartnerEcTrackLogDO> getEcFollowLogPage(Integer pageNum, Integer pageSize, String partnerId);
}

View File

@@ -9,4 +9,6 @@ public interface LineHighSeasService {
Boolean addLine(AddLineRequest request);
ResponseResult importLine(MultipartFile file);
ResponseResult addCheckout(String mobile);
}

View File

@@ -1,23 +1,24 @@
package com.cool.store.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dao.EnterpriseUserDAO;
import com.cool.store.dao.HyPartnerBaseInfoDAO;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
import com.cool.store.constants.CommonConstants;
import com.cool.store.constants.MessageConstants;
import com.cool.store.dao.*;
import com.cool.store.dto.log.BlackListLogDTO;
import com.cool.store.dto.log.LineLogInfo;
import com.cool.store.dto.partner.LineCountDTO;
import com.cool.store.entity.*;
import com.cool.store.enums.LineStatusEnum;
import com.cool.store.enums.WorkflowStageEnum;
import com.cool.store.enums.WorkflowStatusEnum;
import com.cool.store.enums.*;
import com.cool.store.exception.ApiException;
import com.cool.store.http.EventCenterHttpRequest;
import com.cool.store.http.UserSourceResponse;
import com.cool.store.mapper.HyPartnerLabelGroupMapper;
import com.cool.store.mapper.HyPartnerLabelMapper;
import com.cool.store.mapper.HyPartnerEcTrackLogMapper;
import com.cool.store.mapper.HyPartnerUserChannelMapper;
import com.cool.store.request.CustomerInfoRequest;
import com.cool.store.request.GetTagRequest;
@@ -31,9 +32,9 @@ import com.cool.store.sdk.ec.response.UpdateCustomerResponse;
import com.cool.store.service.EcSyncService;
import com.cool.store.service.LabelGroupService;
import com.cool.store.service.LabelService;
import com.cool.store.utils.Post;
import com.cool.store.utils.StringUtil;
import com.cool.store.utils.UUIDUtils;
import com.cool.store.utils.*;
import com.cool.store.utils.poi.constant.Constants;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
@@ -43,10 +44,8 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -56,7 +55,6 @@ public class EcSyncServiceImpl implements EcSyncService {
@Value("${ec.baseUrl:null}")
private String baseUrl;
@Resource
private HyPartnerLineInfoDAO hyPartnerLineInfoDAO;
@@ -70,6 +68,12 @@ public class EcSyncServiceImpl implements EcSyncService {
private EnterpriseUserDAO enterpriseUserDAO;
@Resource
HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO;
@Resource
private MybatisBatchUtils mybatisBatchUtils;
@Resource
private HyPartnerUserChannelMapper hyPartnerUserChannelMapper;
@@ -80,16 +84,40 @@ public class EcSyncServiceImpl implements EcSyncService {
private LabelService labelService;
@Resource
private EventCenterHttpRequest eventCenterHttpRequest;
@Value("${ec.sync.createUserId:null}")
private String operateId;
private final String operateName="EC系统";
@Override
public boolean ecToApplet(List<CustomerInfoRequest> queryListData) {
Map<String, List<HyPartnerUserInfoDO>> sendUserMap = new HashMap<>();
for (CustomerInfoRequest customerInfoItem : queryListData) {
try {
insertSelectiveSync(customerInfoItem);
insertSelectiveSync(customerInfoItem, false, sendUserMap);
} catch (Exception e) {
log.error("ec同步至招商小程序报错"+JSONObject.toJSONString(e));
sendFeiShuRobotMessage("推送:"+JSONObject.toJSONString(e),"27243d49-97ca-4981-8aec-7c3bf84eb660");
log.error("ec同步至招商小程序报错" + JSONObject.toJSONString(e));
sendFeiShuRobotMessage("推送:" + JSONObject.toJSONString(e), "27243d49-97ca-4981-8aec-7c3bf84eb660");
}
}
sendUserMap.forEach((k, v) -> {
//将多个电话与姓名拼接在一块
String str = v.stream().map(item -> item.getUsername().concat(item.getMobile())).collect(Collectors.joining(Constants.COMMA));
Map<String, String> feishuUserIdsByUserIds = enterpriseUserDAO.getFeishuUserIdsByUserIds(new ArrayList<String>() {{
add(k);
}});
List<String> feishuIds = feishuUserIdsByUserIds.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
try {
eventCenterHttpRequest.sendFeiShuNotice(FeiShuNoticeMsgEnum.EC_RECEIVE_LINE,feishuIds,v.size(),str);
} catch (ApiException e) {
log.error("ec同步至招商发送飞书通知错误" + JSONObject.toJSONString(e));
}
});
return false;
}
@@ -135,18 +163,289 @@ public class EcSyncServiceImpl implements EcSyncService {
return Boolean.TRUE;
}
@Override
public String getLastCrmCreateTime() {
return hyPartnerUserInfoDAO.selectLastCrmCreateTime();
}
@SneakyThrows
@Override
public Boolean historyLine(List<CustomerInfoRequest> resultCustomerInfoList) {
for (CustomerInfoRequest customerInfoRequest : resultCustomerInfoList) {
customerInfoRequest.setUpdateTime(DateUtil.parse(customerInfoRequest.getCrmCreateTime(), DatePattern.NORM_DATETIME_PATTERN));
Map<String, List<HyPartnerUserInfoDO>> sendUserMap = new HashMap<>();
insertSelectiveSync(customerInfoRequest, true, sendUserMap);
}
return Boolean.TRUE;
}
@Override
public Integer historyLineTrajectory(List<HyPartnerEcTrackLogDO> resultTrajectoryList) {
for (HyPartnerEcTrackLogDO hyPartnerEcTrackLogDO : resultTrajectoryList) {
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(hyPartnerEcTrackLogDO.getMobile());
if (ObjectUtil.isNotNull(hyPartnerUserInfoDO)) {
hyPartnerEcTrackLogDO.setPartnerId(hyPartnerUserInfoDO.getPartnerId());
}
}
return mybatisBatchUtils.batchInsertOrUpdate(resultTrajectoryList, HyPartnerEcTrackLogMapper.class, (record, mapper) -> mapper.insertSelective(record));
}
/**
* 同步ec数据到表中 同时将部分数据同步到ec
*
* @param customerInfoItem
*/
@Transactional(rollbackFor = Exception.class)
public void insertSelectiveSync(CustomerInfoRequest customerInfoItem) throws ApiException {
if (StringUtil.isNotEmpty(customerInfoItem.getMobile())) {
customerInfoItem.setMobile(customerInfoItem.getMobile().split(" ")[1]);
public void insertSelectiveSync(CustomerInfoRequest customerInfoItem, Boolean pan, Map<String, List<HyPartnerUserInfoDO>> sendUserMap) throws ApiException {
//发送消息
customerInfoItem.setMobile(customerInfoItem.getMobile().split(" ")[1]);
String newPartnerId = UUIDUtils.get32UUID();
HyPartnerBaseInfoDO resultBase = new HyPartnerBaseInfoDO();
HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO();
resultUser.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile()).setUserChannelId(Convert.toInt(getChannelId(customerInfoItem.getChannel()))).setEcWantShopArea(customerInfoItem.getEcWantShopArea());
Date time = new Date();
if (ObjectUtil.isNotNull(customerInfoItem.getUpdateTime()) && pan) {
//历史线索创建时间与更新时间设置为ec同步过来的时间
time = customerInfoItem.getUpdateTime();
resultUser.setCrmCreateTime(time);
//放入历史标签id
if (StringUtil.isNotEmpty(customerInfoItem.getLabelIds())) {
resultBase.setUserPortrait(CommonConstants.COMMA.concat(customerInfoItem.getLabelIds()).concat(CommonConstants.COMMA));
}
}
HyPartnerLineInfoDO resultLine = new HyPartnerLineInfoDO();
String followUserName = customerInfoItem.getFollowUserName();
String followUserMobile = customerInfoItem.getFollowUserMobile();
//获取招商经理
resultLine.setInvestmentManager(getInvestmentManager(followUserName, followUserMobile));
resultLine.setWorkflowStage(WorkflowStageEnum.INTENT.getCode())
.setLineStatus(StringUtil.isEmpty(customerInfoItem.getFollowUserName()) ? LineStatusEnum.PUBLIC_SEAS.getCode() : LineStatusEnum.PRIVATE_SEAS.getCode());
resultBase.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile());
HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(resultUser.getMobile());
EcClient ecClient = new EcClient();
//有就更新ec没有就插入
if (newUserInfo != null) {
//招商客户姓名为空
if (ObjectUtil.isNull(newUserInfo.getUsername()) || StringUtil.isEmpty(newUserInfo.getUsername())) {
newUserInfo.setUsername(resultUser.getUsername());
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(newUserInfo);
}
// EC与沪姨合伙人同时存在的线索用户但用户姓名不同将沪姨合伙人线索姓名同步至EC覆盖原EC线索姓名
if (!newUserInfo.getUsername().equals(resultUser.getUsername())) {
updateEcCustomer(customerInfoItem, newUserInfo, ecClient);
}
String oldPartnerId = newUserInfo.getPartnerId();
//线索表
HyPartnerLineInfoDO partnerLine = hyPartnerLineInfoDAO.getByPartnerId(oldPartnerId);
if (partnerLine != null) {
// EC与沪姨合伙人同时存在的线索用户但存在不同的跟进人将沪姨合伙人跟进人信息同步至EC覆盖原EC跟进人信息
if (StringUtil.isEmpty(partnerLine.getInvestmentManager())) {
if (StringUtil.isNotEmpty(resultLine.getInvestmentManager()) && !getFollowLineStatus(partnerLine)) {
resultLine.setId(partnerLine.getId()).setUpdateTime(new Date());
//沪姨合伙人线索存在黑名单EC该线索分配跟进人同步到沪姨合伙人但线索状态不变还存在黑名单中
resultLine.setLineStatus(partnerLine.getLineStatus().intValue() == LineStatusEnum.BLACKLIST.getCode().intValue()
? LineStatusEnum.BLACKLIST.getCode() : resultLine.getLineStatus());
hyPartnerLineInfoDAO.updateByPrimaryKeySelective(resultLine);
//分配招商经理发送消息通知
Map<String, String> feishuUserIdsByUserIds = enterpriseUserDAO.getFeishuUserIdsByUserIds(new ArrayList<String>() {{
add(resultLine.getInvestmentManager());
}});
List<String> feishuIds = feishuUserIdsByUserIds.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
try {
eventCenterHttpRequest.sendFeiShuNotice(FeiShuNoticeMsgEnum.ALLOCATION_INVESTMENT_MANAGER,feishuIds,operateName,newUserInfo.getUsername(),newUserInfo.getMobile());
} catch (ApiException e) {
log.error("ec同步至招商发送飞书通知错误" + JSONObject.toJSONString(e));
}
//添加新增线索的ec操作日志
LineLogInfo lineLogInfo = new LineLogInfo(partnerLine.getPartnerId(), resultLine.getId(), operateId,
operateName, OperateTypeEnum.ALLOCATION_INVESTMENT_MANAGER,
WorkflowStageEnum.getWorkflowStageByCode(partnerLine.getWorkflowStage()),
partnerLine.getWorkflowStatus(), "");
BlackListLogDTO logDTO = BlackListLogDTO.builder().operateUserId(operateId).operateUsername(operateName)
.mobile(resultBase.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).build();
lineLogInfo.setData(logDTO);
hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo);
}
} else {
if (!getFollowLineStatus(partnerLine)) {
//私海
EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(partnerLine.getInvestmentManager());
enterpriseUser.setMobile(getNoWith86Number(enterpriseUser.getMobile()));
//电话相同但是名字不同
if (enterpriseUser.getMobile().equals(followUserMobile) && !enterpriseUser.getName().equals(followUserName)) {
changeEcFollowUser(customerInfoItem, ecClient, enterpriseUser, 1);
}
//电话不同
if (!enterpriseUser.getMobile().equals(followUserMobile)) {
changeEcFollowUser(customerInfoItem, ecClient, enterpriseUser, 2);
}
}
}
//base表
HyPartnerBaseInfoDO partnerIdAndLine = hyPartnerBaseInfoDAO.getByPartnerIdAndLineId(partnerLine.getPartnerId(), partnerLine.getId());
if (partnerIdAndLine == null) {
resultBase.setPartnerId(newPartnerId).setPartnerLineId(partnerLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())).
setCreateTime(time).setUpdateTime(time);
hyPartnerBaseInfoDAO.insertSelective(resultBase);
} else {
//标签共有 取并集 更改用户画像
updateUserPortrait(partnerIdAndLine, partnerIdAndLine.getUserPortrait(), resultBase.getUserPortrait());
}
} else {
insertUserInfo(sendUserMap, newPartnerId, resultBase, resultUser, time, resultLine);
}
newUserInfo.setEcWantShopArea(resultUser.getEcWantShopArea());
//添加ec意向区域同步
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(newUserInfo);
} else {
resultUser.setPartnerId(newPartnerId).setCreateTime(time).setUpdateTime(time);
hyPartnerUserInfoDAO.insertSelective(resultUser);
insertUserInfo(sendUserMap, newPartnerId, resultBase, resultUser, time, resultLine);
}
}
/**
* 发送请求更改ec线索跟进人
*
* @param customerInfoItem
* @param ecClient
* @param enterpriseUser
* @param i
*/
private void changeEcFollowUser(CustomerInfoRequest customerInfoItem, EcClient ecClient, EnterpriseUserDO enterpriseUser, int i) {
ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest();
ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo();
changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId())
.setType(i).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile());
changeFollowUserRequest.setParameter(changeFollowUserBo);
ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl, changeFollowUserRequest);
}
/**
* 发送请求更改ec客户
*
* @param customerInfoItem
* @param newUserInfo
* @param ecClient
*/
private void updateEcCustomer(CustomerInfoRequest customerInfoItem, HyPartnerUserInfoDO newUserInfo, EcClient ecClient) {
UpdateCustomerRequest updateUserRequest = new UpdateCustomerRequest();
UpdateCustomerBo updateCustomerBo = new UpdateCustomerBo();
updateCustomerBo.setUsername(newUserInfo.getUsername()).setMobile(newUserInfo.getMobile()).setCrmId(customerInfoItem.getCrmId());
updateUserRequest.setParameter(updateCustomerBo);
UpdateCustomerResponse updateUserExec = ecClient.exec(baseUrl, updateUserRequest);
}
/**
* 添加线索信息
* @param sendUserMap
* @param newPartnerId
* @param resultBase
* @param resultUser
* @param time
* @param resultLine
*/
private void insertUserInfo(Map<String, List<HyPartnerUserInfoDO>> sendUserMap, String newPartnerId, HyPartnerBaseInfoDO resultBase, HyPartnerUserInfoDO resultUser, Date time, HyPartnerLineInfoDO resultLine) {
resultLine.setPartnerId(newPartnerId).setCreateTime(time).setUpdateTime(time);
hyPartnerLineInfoDAO.insertSelective(resultLine);
resultBase.setPartnerId(newPartnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())).
setCreateTime(time).setUpdateTime(time);
hyPartnerBaseInfoDAO.insertSelective(resultBase);
//存放待发送飞书通知消息
putElement(sendUserMap, resultLine.getInvestmentManager(), resultUser);
//添加新增线索的ec操作日志
LineLogInfo lineLogInfo = new LineLogInfo(newPartnerId, resultLine.getId(), operateId,
operateName, OperateTypeEnum.EC_SYNC_ADD_LINE,
WorkflowStageEnum.getWorkflowStageByCode(resultLine.getWorkflowStage()),
WorkflowStatusEnum.INTENT_0.getCode(), "");
BlackListLogDTO logDTO = BlackListLogDTO.builder().operateUserId(operateId).operateUsername(operateName)
.mobile(resultBase.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).build();
lineLogInfo.setData(logDTO);
hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo);
}
/**
* 存放待发送飞书通知消息
*
* @param sendUserMap
* @param key
* @param element
*/
private void putElement(Map<String, List<HyPartnerUserInfoDO>> sendUserMap, String key, HyPartnerUserInfoDO element) {
if (StringUtil.isEmpty(key)) {
return;
}
List<HyPartnerUserInfoDO> list = sendUserMap.get(key);
if (CollectionUtils.isEmpty(list)) {
ArrayList<HyPartnerUserInfoDO> hyPartnerUserInfoDOS = new ArrayList<>();
hyPartnerUserInfoDOS.add(element);
sendUserMap.put(key, hyPartnerUserInfoDOS);
} else {
list.add(element);
}
}
/**
* 更改用户画像取并集
*
* @param partnerIdAndLine
* @param oldUserPortrait
* @param newUserPortrait
*/
private void updateUserPortrait(HyPartnerBaseInfoDO partnerIdAndLine, String oldUserPortrait, String newUserPortrait) {
if (StringUtil.isEmpty(newUserPortrait)||ObjectUtil.isNull(partnerIdAndLine)) {
return;
}
if (StringUtil.isEmpty(oldUserPortrait)) {
partnerIdAndLine.setUserPortrait(newUserPortrait);
hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(partnerIdAndLine);
return;
}
if (!newUserPortrait.equals(oldUserPortrait)) {
List<String> oldList = new ArrayList<>(Arrays.asList(oldUserPortrait.split(Constants.COMMA))).stream().filter(item->StringUtil.isNotEmpty(item)).collect(Collectors.toList());
List<String> newList = new ArrayList<>(Arrays.asList(newUserPortrait.split(Constants.COMMA))).stream().filter(item->StringUtil.isNotEmpty(item)).collect(Collectors.toList());
oldList.addAll(newList);
String userPortrait = Constants.COMMA.concat(oldList.stream().distinct().collect(Collectors.joining(Constants.COMMA))).concat(Constants.COMMA);
partnerIdAndLine.setUserPortrait(userPortrait);
hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(partnerIdAndLine);
}
}
/***
* 获取跟进人id
* @param followUserName
* @param followUserMobile
* @return
* @throws ApiException
*/
private String getInvestmentManager(String followUserName, String followUserMobile) throws ApiException {
//传递过来有跟进人的情况下查询跟进人是否存在
if (StringUtil.isNotEmpty(followUserMobile) && StringUtil.isNotEmpty(followUserName)) {
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(followUserMobile);
if (enterpriseUserDO==null) {
// 给飞书群发送消息 跟进人找不到
sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile, "27243d49-97ca-4981-8aec-7c3bf84eb660");
throw new ApiException("飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile);
}
return enterpriseUserDO.getUserId();
}
return "";
}
/**
* @param channel
* @return
*/
private Long getChannelId(String channel) {
//获取客户来源id
String channel = customerInfoItem.getChannel();
HyPartnerUserChannelDO hyPartnerUserChannelDO = hyPartnerUserChannelMapper.selectByChannelName(channel);
Long channelId = null;
if (StringUtil.isNotEmpty(channel)) {
@@ -156,129 +455,25 @@ public class EcSyncServiceImpl implements EcSyncService {
HyPartnerUserChannelDO channelDO = hyPartnerUserChannelMapper.selectByChannelName(channel);
channelId = channelDO.getChannelId();
}
String newPartnerId = UUIDUtils.get32UUID();
HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO();
resultUser.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile()).setUserChannelId(Convert.toInt(channelId)).setEcWantShopArea(customerInfoItem.getEcWantShopArea());
HyPartnerLineInfoDO resultLine = new HyPartnerLineInfoDO();
String followUserName = customerInfoItem.getFollowUserName();
String followUserMobile = customerInfoItem.getFollowUserMobile();
//传递过来有跟进人的情况下查询跟进人是否存在
if (StringUtil.isNotEmpty(followUserMobile) && StringUtil.isNotEmpty(followUserName)) {
String userId = enterpriseUserDAO.selectByMobile(followUserMobile);
if (StringUtil.isEmpty(userId)) {
// 给飞书群发送消息 跟进人找不到
sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile, "27243d49-97ca-4981-8aec-7c3bf84eb660");
throw new ApiException("飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile);
}
resultLine.setInvestmentManager(userId);
}
resultLine.setWorkflowStage(WorkflowStageEnum.INTENT.getCode())
.setLineStatus(StringUtil.isEmpty(customerInfoItem.getFollowUserName()) ? LineStatusEnum.PUBLIC_SEAS.getCode() : LineStatusEnum.PRIVATE_SEAS.getCode());
HyPartnerBaseInfoDO resultBase = new HyPartnerBaseInfoDO();
resultBase.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile());
HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(resultUser.getMobile());
EcClient ecClient = new EcClient();
//有就更新ec没有就插入
if (newUserInfo != null) {
//招商客户姓名为空
if (ObjectUtil.isNull(newUserInfo.getUsername())||StringUtil.isEmpty(newUserInfo.getUsername())) {
newUserInfo.setUsername(resultUser.getUsername());
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(newUserInfo);
}
// EC与沪姨合伙人同时存在的线索用户但用户姓名不同将沪姨合伙人线索姓名同步至EC覆盖原EC线索姓名
if (!newUserInfo.getUsername().equals(resultUser.getUsername())) {
UpdateCustomerRequest updateUserRequest = new UpdateCustomerRequest();
UpdateCustomerBo updateCustomerBo = new UpdateCustomerBo();
updateCustomerBo.setUsername(newUserInfo.getUsername()).setMobile(newUserInfo.getMobile()).setCrmId(customerInfoItem.getCrmId());
updateUserRequest.setParameter(updateCustomerBo);
UpdateCustomerResponse updateUserExec = ecClient.exec(baseUrl, updateUserRequest);
}
String oldPartnerId = newUserInfo.getPartnerId();
//线索表
HyPartnerLineInfoDO partnerLine = hyPartnerLineInfoDAO.getByPartnerId(oldPartnerId);
if (partnerLine != null) {
// EC与沪姨合伙人同时存在的线索用户但存在不同的跟进人将沪姨合伙人跟进人信息同步至EC覆盖原EC跟进人信息
if (StringUtil.isEmpty(partnerLine.getInvestmentManager())) {
if (StringUtil.isNotEmpty(resultLine.getInvestmentManager())&&!getFollowLineStatus(partnerLine)) {
resultLine.setId(partnerLine.getId()).setUpdateTime(new Date());
//沪姨合伙人线索存在黑名单EC该线索分配跟进人同步到沪姨合伙人但线索状态不变还存在黑名单中
resultLine.setLineStatus(partnerLine.getLineStatus().intValue() == LineStatusEnum.BLACKLIST.getCode().intValue()
? LineStatusEnum.BLACKLIST.getCode() : resultLine.getLineStatus());
hyPartnerLineInfoDAO.updateByPrimaryKeySelective(resultLine);
}
} else {
if (!getFollowLineStatus(partnerLine)) {
//私海
EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(partnerLine.getInvestmentManager());
enterpriseUser.setMobile(getNoWith86Number(enterpriseUser.getMobile()));
//电话相同但是名字不同
if (enterpriseUser.getMobile().equals(followUserMobile) && !enterpriseUser.getName().equals(followUserName)) {
ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest();
ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo();
changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId())
.setType(1).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile());
changeFollowUserRequest.setParameter(changeFollowUserBo);
ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl, changeFollowUserRequest);
}
//电话不同
if (!enterpriseUser.getMobile().equals(followUserMobile)) {
ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest();
ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo();
changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId())
.setType(2).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile());
changeFollowUserRequest.setParameter(changeFollowUserBo);
ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl, changeFollowUserRequest);
}
}
}
//base表
HyPartnerBaseInfoDO partnerIdAndLine = hyPartnerBaseInfoDAO.getByPartnerIdAndLineId(partnerLine.getPartnerId(), partnerLine.getId());
if (partnerIdAndLine == null) {
resultBase.setPartnerId(newPartnerId).setPartnerLineId(partnerLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())).
setCreateTime(new Date());
hyPartnerBaseInfoDAO.insertSelective(resultBase);
}
} else {
resultLine.setPartnerId(newPartnerId).setCreateTime(new Date());
hyPartnerLineInfoDAO.insertSelective(resultLine);
resultBase.setPartnerId(newPartnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())).
setCreateTime(new Date());
hyPartnerBaseInfoDAO.insertSelective(resultBase);
}
newUserInfo.setEcWantShopArea(resultUser.getEcWantShopArea());
//添加ec意向区域同步
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(newUserInfo);
} else {
resultUser.setPartnerId(newPartnerId).setCreateTime(new Date());
hyPartnerUserInfoDAO.insertSelective(resultUser);
resultLine.setPartnerId(newPartnerId).setCreateTime(new Date());
hyPartnerLineInfoDAO.insertSelective(resultLine);
resultBase.setPartnerId(newPartnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())).
setCreateTime(new Date());
hyPartnerBaseInfoDAO.insertSelective(resultBase);
}
return channelId;
}
/**
*招商公海内跟进次数大于等于1的用户EC同步该用户进去公海,假若跟进次数为0的同步到EC跟进人就是唐佑玉
* @param partnerLine
* 招商公海内跟进次数大于等于1的用户EC同步该用户进去公海,假若跟进次数为0的同步到EC跟进人就是唐佑玉
*
* @param partnerLine
* @return true为公海 false:私海
*/
public Boolean getFollowLineStatus(HyPartnerLineInfoDO partnerLine){
if(partnerLine.getLineStatus()!=0){
public Boolean getFollowLineStatus(HyPartnerLineInfoDO partnerLine) {
if (partnerLine.getLineStatus() != 0) {
return Boolean.FALSE;
}
ArrayList<String> list = new ArrayList<>();
list.add(partnerLine.getPartnerId());
List<LineCountDTO> followCountList = hyPartnerLineInfoDAO.getFollowCountList(list);
if (!CollectionUtils.isEmpty(followCountList)) {
return followCountList.get(0).getFollowCount()>0;
return followCountList.get(0).getFollowCount() > 0;
}
return Boolean.FALSE;
}

View File

@@ -211,6 +211,15 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
enterpriseUserRoleDAO.deleteUserRole(userDetail.getUserId());
}
EnterpriseUserDO enterpriseUser = EnterpriseUserDTO.transUserDtoToDo(userDetail, regionPathMap, leaderDeptMap, eventType);
if(StringUtils.isNotBlank(enterpriseUser.getMobile())){
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(enterpriseUser.getMobile());
//如果没有用户信息 但是飞书推的是更新的事件
if (enterpriseUserDO==null&&enterpriseUser.getIsLeader()==null){
log.info("没有用户信息 但是飞书推的是更新的事件");
enterpriseUser.setIsLeader(Boolean.FALSE);
enterpriseUser.setLeaderDeptIds("[]");
}
}
enterpriseUserDAO.batchInsertOrUpdate(new ArrayList<>(Arrays.asList(enterpriseUser)));
userRegionMappingDAO.batchInsertOrUpdateUserRegion(UserRegionMappingDO.convertSyncDO(Arrays.asList(enterpriseUser)));
userRegionMappingDAO.deleteUserRegionByUserId(userDetail.getUserId(), DataSourceEnum.SYNC, departmentLists);

View File

@@ -10,19 +10,14 @@ import com.cool.store.dao.HyFollowTaskDAO;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerTaskInfoLogDAO;
import com.cool.store.dto.follow.FollowTaskNumDTO;
import com.cool.store.dto.log.LineLogInfo;
import com.cool.store.dto.log.LogFieldDTO;
import com.cool.store.dto.message.SendCardMessageDTO;
import com.cool.store.dto.partner.PartnerSimpleInfoDTO;
import com.cool.store.entity.CallRecordDO;
import com.cool.store.entity.HyFollowTaskDO;
import com.cool.store.entity.HyPartnerLineInfoDO;
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
import com.cool.store.entity.*;
import com.cool.store.enums.*;
import com.cool.store.exception.ApiException;
import com.cool.store.exception.ServiceException;
import com.cool.store.http.EventCenterHttpRequest;
import com.cool.store.http.ISVHttpRequest;
import com.cool.store.mapper.HyPartnerEcTrackLogMapper;
import com.cool.store.request.follow.AddFollowLogRequest;
import com.cool.store.request.follow.AddFollowTaskRequest;
import com.cool.store.request.follow.FollowTaskIdRequest;
@@ -35,6 +30,7 @@ import com.cool.store.utils.RedisUtilPool;
import com.cool.store.vo.follow.FollowTaskLogVO;
import com.cool.store.vo.follow.FollowTaskPageVO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -76,6 +72,10 @@ public class FollowTaskServiceImpl implements FollowTaskService {
private NoticeService noticeService;
@Resource
private EventCenterHttpRequest eventCenterHttpRequest;
@Resource
private HyPartnerEcTrackLogMapper hyPartnerEcTrackLogMapper;
@Value("${feishu.notice.link.url}")
private String linkUrl;
@@ -257,6 +257,19 @@ public class FollowTaskServiceImpl implements FollowTaskService {
}
}
@Override
public PageInfo<HyPartnerEcTrackLogDO> getEcFollowLogPage(Integer pageNum, Integer pageSize, String partnerId) {
if(Objects.isNull(partnerId)){
return new PageInfo<>();
}
PageHelper.startPage(pageNum, pageSize);
Page<HyPartnerEcTrackLogDO> logPage = hyPartnerEcTrackLogMapper.getEcLogPageByPartnerId(partnerId);
for (HyPartnerEcTrackLogDO hyPartnerEcTrackLogDO : logPage) {
hyPartnerEcTrackLogDO.setDetailContent(HyPartnerEcTrackLogDO.getDetailContentJoint(hyPartnerEcTrackLogDO));
}
return new PageInfo(logPage);
}
/**
* 线索校验
* @param partnerLineId

View File

@@ -6,7 +6,11 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.cool.store.constants.ExcelErrorConstants;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.*;
import com.cool.store.dto.log.BlackListLogDTO;
import com.cool.store.dto.log.LineLogInfo;
import com.cool.store.dto.partner.MobileCheckDTO;
import com.cool.store.entity.*;
import com.cool.store.enums.*;
import com.cool.store.exception.ServiceException;
@@ -16,6 +20,7 @@ import com.cool.store.response.ResponseResult;
import com.cool.store.response.error.ErrorExcelResponse;
import com.cool.store.service.HyPartnerLineInfoService;
import com.cool.store.service.LineHighSeasService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.StringUtil;
import com.cool.store.utils.UUIDUtils;
import com.cool.store.utils.poi.ExcelUtil;
@@ -30,6 +35,7 @@ import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -49,6 +55,9 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
private Integer manual;
@Resource
HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO;
@Resource
private HyPartnerUserInfoDAO hyPartnerUserInfoDAO;
@@ -79,7 +88,7 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
if (ObjectUtil.isNotNull(hyPartnerUserInfoDO)) {
throw new ServiceException(ErrorCodeEnum.PARTNER_MOBILE_EXIST);
}
return add(request,"add");
return add(request, "add");
}
@@ -88,8 +97,8 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
*
* @param request
*/
public boolean add(AddLineRequest request,String type) {
Boolean flag =false;
public boolean add(AddLineRequest request, String type) {
Boolean flag = false;
String partnerId = UUIDUtils.get32UUID();
HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO();
resultUser.setUsername(request.getPartnerName()).setMobile(request.getMobile()).setPartnerId(partnerId).setCreateTime(new Date()).setAcceptAdjustType(request.getAcceptAdjustType())
@@ -104,10 +113,10 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
//判断招商经理是否为空
if (StringUtil.isNotEmpty(request.getInvestmentManager())) {
resultLine.setInvestmentManager(request.getInvestmentManager()).setLineStatus(LineStatusEnum.PRIVATE_SEAS.getCode());
flag=true;
flag = true;
} else {
//是否分配跟进人
flag = hyPartnerLineInfoService.assignFollowUser(partnerId, request.getWantShopArea(), request.getAcceptAdjustType(), Boolean.TRUE);
flag = hyPartnerLineInfoService.assignFollowUser(partnerId, request.getWantShopArea(), request.getAcceptAdjustType(), Boolean.TRUE);
if (flag) {
//查询跟进人
String investmentManager = hyPartnerLineInfoService.getAssignFollowUser(partnerId, "intent");
@@ -123,6 +132,17 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
resultBase.setPartnerId(partnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())).
setCreateTime(new Date()).setUsername(request.getPartnerName()).setMobile(request.getMobile());
hyPartnerBaseInfoDAO.insertSelective(resultBase);
LoginUserInfo user = CurrentUserHolder.getUser();
//添加日志
LineLogInfo lineLogInfo = new LineLogInfo(resultLine.getPartnerId(), resultLine.getId(), user.getUserId(),
user.getName(), OperateTypeEnum.ADD_LINE,
WorkflowStageEnum.getWorkflowStageByCode(resultLine.getWorkflowStage()),
WorkflowStatusEnum.INTENT_0.getCode(), "");
BlackListLogDTO logDTO = BlackListLogDTO.builder().operateUserId(user.getUserId()).operateUsername(user.getName())
.mobile(resultBase.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).build();
lineLogInfo.setData(logDTO);
hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo);
return flag;
}
@@ -136,18 +156,18 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
Map<Integer, Map<Integer, List<String>>> styleCells = new HashMap<>(4);
if (lineDOList.size() > excelMaxSize) {
//超出五百条的excel都标红
for (int i = excelMaxSize; i < lineDOList.size() ; i++) {
for (int i = excelMaxSize; i < lineDOList.size(); i++) {
lineDOList.get(i).setErrorInfo(ExcelErrorConstants.COUNT_MORE);
styleCells.put(i,new HashMap<>(4));
styleCells.put(i, new HashMap<>(4));
}
ExcelUtil.setRowStyle(styleCells,ExcelUtil.FONT_RED,7);
ExcelUtil.setRowStyle(styleCells, ExcelUtil.FONT_RED, 7);
util.exportExcel(outputStream, lineDOList, "", styleCells);
InputStream stream = new ByteArrayInputStream(outputStream.toByteArray());
String fileStr = ossServer.uploadFileServer(stream, dir + getExcelName());
return new ResponseResult(500, "共上传" + lineDOList.size() + "条线索,其中" + styleCells.size() + "条存在异常", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr));
}
//获取重复手机号集合
List<String> uniqueList = lineDOList.stream().filter(item->StringUtil.isNotEmpty(item.getMobile())).collect(Collectors.groupingBy(HyPartnerLineDO::getMobile, Collectors.counting()))
List<String> uniqueList = lineDOList.stream().filter(item -> StringUtil.isNotEmpty(item.getMobile())).collect(Collectors.groupingBy(HyPartnerLineDO::getMobile, Collectors.counting()))
.entrySet().stream().filter(e -> e.getValue() > 1)
.map(Map.Entry::getKey).collect(Collectors.toList());
for (int i = 0; i < lineDOList.size(); i++) {
@@ -156,8 +176,8 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
if (StringUtil.isEmpty(partnerName)) {
hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.NAME_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.NAME_LOSE));
ExcelUtil.setStyleMap(styleCells, i, 0, new String[]{ExcelUtil.FONT_RED});
}else {
if (partnerName.length()>10) {
} else {
if (partnerName.length() > 10) {
hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.NAME_OVER_LENGTH : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.NAME_OVER_LENGTH));
ExcelUtil.setStyleMap(styleCells, i, 0, new String[]{ExcelUtil.FONT_RED});
}
@@ -219,7 +239,7 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
if (StringUtil.isEmpty(acceptAdjustType)) {
hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE));
ExcelUtil.setStyleMap(styleCells, i, 4, new String[]{ExcelUtil.FONT_RED});
}else {
} else {
Integer enumByName = AcceptAdjustTypeEnum.findEnumByName(acceptAdjustType);
if (ObjectUtil.isNull(enumByName)) {
hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE));
@@ -251,16 +271,33 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
AddLineRequest addLineRequest = new AddLineRequest();
BeanUtil.copyProperties(hyPartnerLineDO, addLineRequest);
addLineRequest.setWantShopArea(hyPartnerLineDO.getWantShopArea().toString());
add(addLineRequest,"import");
add(addLineRequest, "import");
}
return new ResponseResult(ResponseCodeEnum.SUCCESS.getCode(), "共上传" + lineDOList.size() + "条线索", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr));
}
@Override
public ResponseResult addCheckout(String mobile) {
if (!isPhone(mobile)) {
throw new ServiceException(ErrorCodeEnum.PARTNER_MOBILE_INCORRECT);
}
MobileCheckDTO mobileCheckDTO = hyPartnerUserInfoDAO.selectByCheckMobile(mobile);
if (ObjectUtil.isNotNull(mobileCheckDTO)) {
if (mobileCheckDTO.getLineStatus().equals(LineStatusEnum.PUBLIC_SEAS.getCode())) {
throw new ServiceException(ErrorCodeEnum.PUBLIC_LINE_NOT_FOLLOW);
} else {
String message = MessageFormat.format(ErrorCodeEnum.LINE_EXIST_FOLLOW.getMessage(), mobileCheckDTO.getInvestmentManager(), mobileCheckDTO.getInvestmentManagerMobile());
return new ResponseResult(ErrorCodeEnum.LINE_EXIST_FOLLOW.getCode(),message);
}
}
return ResponseResult.success() ;
}
/**
* @param phone 字符串类型的手机号
* 传入手机号,判断后返回
* true为手机号,false相反
* */
* 传入手机号,判断后返回
* true为手机号,false相反
*/
public static boolean isPhone(String phone) {
String regex = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$";
if (phone.length() != 11) {
@@ -277,7 +314,7 @@ public class LineHighSeasServiceImpl implements LineHighSeasService {
*
* @return
*/
private String getExcelName() {
private String getExcelName() {
String format = DateUtil.format(new Date(), "yyyyMMdd").concat(Constants.D_LINE).concat(IdUtil.simpleUUID().substring(0, 10));
return format.concat(Constants.POMINT).concat(Constants.EXCEL_XLSX);
}

View File

@@ -52,6 +52,9 @@ public class TokenValidateFilter implements Filter {
"/partner/pc/flow/qualificationReview/callback",
"/**/ecSync/ecToApplet/**",
"/**/ecSync/labelInfo/**",
"/**/ecSync/getCrmCreateTime/**",
"/**/ecSync/historyLine/**",
"/**/ecSync/historyLineTrajectory/**",
"/partner/pc/websocket/**",
"/partner/pc/call/**");

View File

@@ -1,11 +1,11 @@
package com.cool.store.controller;
import com.cool.store.entity.HyPartnerEcTrackLogDO;
import com.cool.store.request.CustomerInfoRequest;
import com.cool.store.request.GetTagRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.EcSyncService;
import com.cool.store.vo.InterviewScheduleInfoVO;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -24,15 +24,35 @@ public class EcSyncController {
private EcSyncService ecSyncService;
@PostMapping(path = "/ecToApplet")
@ApiOperation("ec同步数据到小程序")
@ApiOperation("ec同步数据到招商系统")
public ResponseResult<Boolean> ecToApplet(@RequestBody List<CustomerInfoRequest> queryListData){
return ResponseResult.success(ecSyncService.ecToApplet(queryListData));
}
@PostMapping(path = "/labelInfo")
@ApiOperation("ec同步标签数据到小程序")
@ApiOperation("ec同步标签数据到招商系统")
public ResponseResult<Boolean> labelInfo(@RequestBody List<GetTagRequest> getTagRequestList){
return ResponseResult.success(ecSyncService.labelInfo(getTagRequestList));
}
@GetMapping(path = "/getCrmCreateTime")
@ApiOperation("ec同步标签数据到招商系统")
public ResponseResult<String> getCrmCreateTime(){
return ResponseResult.success(ecSyncService.getLastCrmCreateTime());
}
@PostMapping(path = "/historyLine")
@ApiOperation("ec同步线索到招商系统")
public ResponseResult<Boolean> historyLine(@RequestBody List<CustomerInfoRequest> resultCustomerInfoList){
return ResponseResult.success(ecSyncService.historyLine(resultCustomerInfoList));
}
@PostMapping(path = "/historyLineTrajectory")
@ApiOperation("ec同步跟进记录到招商系统")
public ResponseResult<Integer> historyLineTrajectory(@RequestBody List<HyPartnerEcTrackLogDO> resultTrajectoryList){
return ResponseResult.success(ecSyncService.historyLineTrajectory(resultTrajectoryList));
}
}

View File

@@ -2,6 +2,7 @@ package com.cool.store.controller;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.exception.ApiException;
import com.cool.store.entity.HyPartnerEcTrackLogDO;
import com.cool.store.request.follow.AddFollowLogRequest;
import com.cool.store.request.follow.AddFollowTaskRequest;
import com.cool.store.request.follow.FollowTaskIdRequest;
@@ -18,7 +19,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Date;
/**
* @author zhangchenbiao
@@ -47,6 +47,12 @@ public class FollowTaskController {
return ResponseResult.success(followTaskService.getFollowLogPage(pageNum, pageSize, partnerLineId));
}
@ApiOperation("获取线索ec跟进日志")
@GetMapping("/follow/ecLog/page")
public ResponseResult<PageInfo<HyPartnerEcTrackLogDO>> getEcFollowLogPage(@RequestParam("pageNum")Integer pageNum, @RequestParam("pageSize")Integer pageSize, @RequestParam("partnerId")String partnerId){
return ResponseResult.success(followTaskService.getEcFollowLogPage(pageNum, pageSize, partnerId));
}
@ApiOperation("添加跟进日志")
@PostMapping("/follow/log/add")
public ResponseResult<Integer> addFollowLog(@RequestBody @Validated AddFollowLogRequest request){

View File

@@ -6,11 +6,11 @@ import com.cool.store.request.AddLineRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.LineHighSeasService;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.validation.Valid;
/**
@@ -39,4 +39,11 @@ public class LineHighSeasController {
public ResponseResult importLine(@RequestParam(value = "file") MultipartFile file) throws Exception {
return lineHighSeasService.importLine(file);
}
@GetMapping("/addCheckout")
@ApiOperation("线索手机号校验")
public ResponseResult addCheckout(@Param("partnerMobile")String partnerMobile) throws ApiException {
return lineHighSeasService.addCheckout(partnerMobile);
}
}