重新分配逻辑

This commit is contained in:
苏竹红
2023-07-19 14:06:38 +08:00
parent a5a43d2708
commit 438c7f390c
10 changed files with 63 additions and 33 deletions

View File

@@ -0,0 +1,34 @@
package com.cool.store.enums;
/**
* @Author suzhuhong
* @Date 2023/7/18 17:01
* @Version 1.0
*/
public enum UserChannelEnum {
EXHIBITION("exhibition", 45000,"北京展会"),
RECOMMENDED("recommended", 45100,"李德龙推荐");
private final String code;
private final Integer channelId;
private final String desc;
UserChannelEnum(String code, Integer channelId, String desc) {
this.code = code;
this.channelId = channelId;
this.desc = desc;
}
public String getCode() {
return code;
}
public Integer getChannelId() {
return channelId;
}
public String getDesc() {
return desc;
}
}

View File

@@ -20,13 +20,12 @@
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="close_time" jdbcType="TIMESTAMP" property="closeTime" /> <result column="close_time" jdbcType="TIMESTAMP" property="closeTime" />
<result column="close_user_id" jdbcType="VARCHAR" property="closeUserId" /> <result column="close_user_id" jdbcType="VARCHAR" property="closeUserId" />
<result column="user_channel_id" jdbcType="BIGINT" property="userChannelId" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, partner_id, workflow_stage, workflow_status, line_status, investment_manager, id, partner_id, workflow_stage, workflow_status, line_status, investment_manager,
development_director, development_manager, deadline, pass_reason, reject_public_reason, development_director, development_manager, deadline, pass_reason, reject_public_reason,
reject_real_reason, certify_file, deleted, create_time, update_time, close_time, reject_real_reason, certify_file, deleted, create_time, update_time, close_time,
close_user_id,user_channel_id close_user_id
</sql> </sql>
<select id="selectByPrimaryKeySelective" resultMap="BaseResultMap"> <select id="selectByPrimaryKeySelective" resultMap="BaseResultMap">
@@ -45,8 +44,7 @@
workflow_stage, workflow_stage,
workflow_status, workflow_status,
line_status, line_status,
investment_manager, investment_manager
user_channel_id
) )
values values
<foreach collection="recordList" item="record" separator=","> <foreach collection="recordList" item="record" separator=",">
@@ -54,8 +52,7 @@
#{record.workflowStage}, #{record.workflowStage},
#{record.workflowStatus}, #{record.workflowStatus},
#{record.lineStatus}, #{record.lineStatus},
#{record.investmentManager}, #{record.investmentManager}
#{record.userChannelId})
</foreach> </foreach>
</insert> </insert>
@@ -127,9 +124,6 @@
<if test="record.closeUserId != null"> <if test="record.closeUserId != null">
close_user_id, close_user_id,
</if> </if>
<if test="record.userChannelId != null">
user_channel_id,
</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="record.partnerId != null"> <if test="record.partnerId != null">
@@ -183,9 +177,6 @@
<if test="record.closeUserId != null"> <if test="record.closeUserId != null">
#{record.closeUserId}, #{record.closeUserId},
</if> </if>
<if test="record.userChannelId != null">
#{record.userChannelId},
</if>
</trim> </trim>
</insert> </insert>
<update id="updateByPrimaryKeySelective"> <update id="updateByPrimaryKeySelective">
@@ -248,9 +239,6 @@
<if test="record.removeBlackReason != null"> <if test="record.removeBlackReason != null">
remove_black_reason = #{record.removeBlackReason}, remove_black_reason = #{record.removeBlackReason},
</if> </if>
<if test="record.userChannelId != null">
user_channel_id = #{record.userChannelId},
</if>
</set> </set>
where id = #{record.id} where id = #{record.id}
</update> </update>
@@ -273,8 +261,7 @@
close_time = #{record.closeTime}, close_time = #{record.closeTime},
close_user_id = #{record.closeUserId}, close_user_id = #{record.closeUserId},
join_black_reason = #{record.joinBlackReason}, join_black_reason = #{record.joinBlackReason},
remove_black_reason = #{record.removeBlackReason}, remove_black_reason = #{record.removeBlackReason}
user_channel_id = #{record.userChannelId}
where id = #{record.id} where id = #{record.id}
</update> </update>
@@ -346,7 +333,7 @@
left join hy_partner_base_info b on a.id = b.partner_line_id left join hy_partner_base_info b on a.id = b.partner_line_id
LEFT JOIN hy_partner_intent_info hpii ON a.id = hpii.partner_line_id LEFT JOIN hy_partner_intent_info hpii ON a.id = hpii.partner_line_id
LEFT JOIN hy_partner_user_info hpuinfo ON a.partner_id = hpuinfo.partner_id LEFT JOIN hy_partner_user_info hpuinfo ON a.partner_id = hpuinfo.partner_id
LEFT JOIN hy_partner_user_channel hpuc ON a.user_channel_id = hpuc.channel_id LEFT JOIN hy_partner_user_channel hpuc ON hpuinfo.user_channel_id = hpuc.channel_id
LEFT JOIN hy_phone_location hpl ON hpl.phone_number = hpuinfo.mobile LEFT JOIN hy_phone_location hpl ON hpl.phone_number = hpuinfo.mobile
<where> <where>
<if test="lineId!=null"> <if test="lineId!=null">
@@ -613,8 +600,9 @@
<select id="getLineFollowHistoryList" resultMap="BaseResultMap"> <select id="getLineFollowHistoryList" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"></include> SELECT <include refid="Base_Column_List"></include>
FROM hy_partner_line_info FROM hy_partner_line_info
where (deleted = 1 or (deleted=0 and line_status in (0,3) and close_time is not null)) where (deleted = 1 or (deleted=0 and line_status in (0,3) and close_time is not null and investment_manager is not null))
and partner_id = #{partner_id} and partner_id = #{partner_id}
order by id desc
</select> </select>
<!-- 根据面试计划 id 查询战区 id --> <!-- 根据面试计划 id 查询战区 id -->

View File

@@ -19,10 +19,12 @@
<result column="recommend_partner_id" jdbcType="VARCHAR" property="recommendPartnerId" /> <result column="recommend_partner_id" jdbcType="VARCHAR" property="recommendPartnerId" />
<result column="recommend_partner_name" jdbcType="VARCHAR" property="recommendPartnerName" /> <result column="recommend_partner_name" jdbcType="VARCHAR" property="recommendPartnerName" />
<result column="recommend_partner_mobile" jdbcType="VARCHAR" property="recommendPartnerMobile" /> <result column="recommend_partner_mobile" jdbcType="VARCHAR" property="recommendPartnerMobile" />
<result column="user_channel_id" jdbcType="BIGINT" property="userChannelId" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, partner_id, mobile, username, live_area, want_shop_area, accept_adjust_type, id, partner_id, mobile, username, live_area, want_shop_area, accept_adjust_type,
invite_code, is_write_partner_know, create_time, update_time, shop_code, shop_name, shop_id, recommend_partner_id, recommend_partner_name, recommend_partner_mobile invite_code, is_write_partner_know, create_time, update_time, shop_code, shop_name, shop_id,
recommend_partner_id, recommend_partner_name, recommend_partner_mobile,user_channel_id
</sql> </sql>
<select id="selectByPartnerId" resultMap="BaseResultMap" > <select id="selectByPartnerId" resultMap="BaseResultMap" >
select select
@@ -53,13 +55,13 @@
</select> </select>
<select id="selectByHourDate" resultType="com.cool.store.entity.SyncEcCustomerDO" > <select id="selectByHourDate" resultType="com.cool.store.entity.SyncEcCustomerDO" >
SELECT a.id as id, a.username as customername,a.mobile as customermobile,d.`name` as followname,d.mobile as followmobile ,c.channel_id as channelId FROM hy_partner_user_info a LEFT join hy_partner_line_info b on SELECT a.id as id, a.username as customername,a.mobile as customermobile,d.`name` as followname,d.mobile as followmobile ,c.channel_id as channelId FROM hy_partner_user_info a LEFT join hy_partner_line_info b on
a.partner_id=b.partner_id LEFT join hy_partner_user_channel c on b.user_channel_id=c.channel_id left join enterprise_user d on b.investment_manager=d.user_id a.partner_id=b.partner_id LEFT join hy_partner_user_channel c on a.user_channel_id=c.channel_id left join enterprise_user d on b.investment_manager=d.user_id
WHERE ( a.create_time BETWEEN #{selectTime} and #{now} or WHERE ( a.create_time BETWEEN #{selectTime} and #{now} or
a.update_time BETWEEN #{selectTime} and #{now} ) order by a.id Limit #{limit1},#{limit2} a.update_time BETWEEN #{selectTime} and #{now} ) order by a.id Limit #{limit1},#{limit2}
</select> </select>
<select id="selectByHourDateCount" resultType="java.lang.Integer"> <select id="selectByHourDateCount" resultType="java.lang.Integer">
SELECT count(*) FROM hy_partner_user_info a LEFT join hy_partner_line_info b on SELECT count(*) FROM hy_partner_user_info a LEFT join hy_partner_line_info b on
a.partner_id=b.partner_id LEFT join hy_partner_user_channel c on b.user_channel_id=c.channel_id left join enterprise_user d on b.investment_manager=d.user_id a.partner_id=b.partner_id LEFT join hy_partner_user_channel c on a.user_channel_id=c.channel_id left join enterprise_user d on b.investment_manager=d.user_id
WHERE (a.create_time BETWEEN #{selectTime} and #{now} or WHERE (a.create_time BETWEEN #{selectTime} and #{now} or
a.update_time BETWEEN #{selectTime} and #{now} ) a.update_time BETWEEN #{selectTime} and #{now} )
</select> </select>

View File

@@ -1,5 +1,6 @@
package com.cool.store.dto.wx; package com.cool.store.dto.wx;
import com.cool.store.enums.UserChannelEnum;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@@ -24,4 +25,6 @@ public class MiniProgramLoginDTO {
@NotBlank(message = "ivStr不能为空") @NotBlank(message = "ivStr不能为空")
private String ivStr; private String ivStr;
private UserChannelEnum userChannelEnum;
} }

View File

@@ -80,6 +80,4 @@ public class HyPartnerLineInfoDO implements Serializable {
@ApiModelProperty("移除黑名单原因") @ApiModelProperty("移除黑名单原因")
private String removeBlackReason; private String removeBlackReason;
@ApiModelProperty("hy_partner_user_channel.id")
private Integer userChannelId;
} }

View File

@@ -70,4 +70,6 @@ public class HyPartnerUserInfoDO implements Serializable {
@ApiModelProperty("推荐加盟商手机号") @ApiModelProperty("推荐加盟商手机号")
private String recommendPartnerMobile; private String recommendPartnerMobile;
private Integer userChannelId;
} }

View File

@@ -140,7 +140,7 @@ public class EcSyncServiceImpl implements EcSyncService {
} }
resultLine.setInvestmentManager(userId); resultLine.setInvestmentManager(userId);
} }
resultLine.setWorkflowStage(WorkflowStageEnum.INTENT.getCode()).setUserChannelId(Convert.toInt(channelId)) resultLine.setWorkflowStage(WorkflowStageEnum.INTENT.getCode())
.setLineStatus(StringUtil.isEmpty(customerInfoItem.getFollowUserName()) ? LineStatusEnum.PUBLIC_SEAS.getCode() : LineStatusEnum.PRIVATE_SEAS.getCode()); .setLineStatus(StringUtil.isEmpty(customerInfoItem.getFollowUserName()) ? LineStatusEnum.PUBLIC_SEAS.getCode() : LineStatusEnum.PRIVATE_SEAS.getCode());
HyPartnerBaseInfoDO resultBase = new HyPartnerBaseInfoDO(); HyPartnerBaseInfoDO resultBase = new HyPartnerBaseInfoDO();

View File

@@ -275,7 +275,6 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
oldLineInfo.setCloseUserId(null); oldLineInfo.setCloseUserId(null);
oldLineInfo.setJoinBlackReason(null); oldLineInfo.setJoinBlackReason(null);
oldLineInfo.setRemoveBlackReason(null); oldLineInfo.setRemoveBlackReason(null);
oldLineInfo.setUserChannelId(null);
} }
@Override @Override

View File

@@ -198,7 +198,6 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
hyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode()); hyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode());
hyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.INTENT_0.getCode()); hyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.INTENT_0.getCode());
hyPartnerLineInfoDO.setLineStatus(1); hyPartnerLineInfoDO.setLineStatus(1);
hyPartnerLineInfoDO.setUserChannelId(x.getUserChannelId());
list.add(hyPartnerLineInfoDO); list.add(hyPartnerLineInfoDO);
}); });
hyPartnerLineInfoDAO.batchInsert(list); hyPartnerLineInfoDAO.batchInsert(list);
@@ -307,7 +306,6 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
newHyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode()); newHyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode());
newHyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.INTENT_0.getCode()); newHyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.INTENT_0.getCode());
newHyPartnerLineInfoDO.setLineStatus(status); newHyPartnerLineInfoDO.setLineStatus(status);
newHyPartnerLineInfoDO.setUserChannelId(hyPartnerLineInfo.getUserChannelId());
hyPartnerLineInfoDAO.insertSelective(newHyPartnerLineInfoDO); hyPartnerLineInfoDAO.insertSelective(newHyPartnerLineInfoDO);
HyPartnerBaseInfoDO oldHyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(lineId); HyPartnerBaseInfoDO oldHyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(lineId);
@@ -555,7 +553,6 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
@Override @Override
public Boolean assignFollowUser(String partnerId, String wantShopArea, Integer acceptAdjustType) { public Boolean assignFollowUser(String partnerId, String wantShopArea, Integer acceptAdjustType) {
log.info("assignFollowUser partnerId:{}wantShopArea{}acceptAdjustType{}",partnerId,wantShopArea,acceptAdjustType); log.info("assignFollowUser partnerId:{}wantShopArea{}acceptAdjustType{}",partnerId,wantShopArea,acceptAdjustType);
List<HyPartnerLineInfoDO> lineFollowHistoryList = hyPartnerLineInfoDAO.getLineFollowHistoryList(partnerId);
//当前加盟商线索 //当前加盟商线索
HyPartnerLineInfoDO HyPartnerLineInfo = hyPartnerLineInfoDAO.getByPartnerId(partnerId); HyPartnerLineInfoDO HyPartnerLineInfo = hyPartnerLineInfoDAO.getByPartnerId(partnerId);
//如果意向区域没有绑定战区 不分配招商经理 //如果意向区域没有绑定战区 不分配招商经理
@@ -578,9 +575,9 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
return Boolean.FALSE; return Boolean.FALSE;
} }
//如果是私海线索 不需要重新分配招商经理 或者跟进次数大于等于1 //如果是私海线索 不需要重新分配招商经理
if ((HyPartnerLineInfo != null && HyPartnerLineInfo.getLineStatus()==1) || CollectionUtils.isNotEmpty(lineFollowHistoryList)){ if ((HyPartnerLineInfo != null && HyPartnerLineInfo.getLineStatus()==1)){
log.info("如果是私海线索 不需要重新分配招商经理 或者跟进次数大于等于1 lineStatus:{},lineFollowHistoryList:{}",HyPartnerLineInfo.getLineStatus(),lineFollowHistoryList.size()); log.info("如果是私海线索 不需要重新分配招商经理 或者跟进次数大于等于1 lineStatus:{}",HyPartnerLineInfo.getLineStatus());
return Boolean.FALSE; return Boolean.FALSE;
} }
@@ -642,6 +639,11 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
public String getAssignFollowUser(String partnerId,String type) { public String getAssignFollowUser(String partnerId,String type) {
//查询意向区域 //查询意向区域
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(partnerId); HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(partnerId);
List<HyPartnerLineInfoDO> lineFollowHistoryList = hyPartnerLineInfoDAO.getLineFollowHistoryList(partnerId);
//如果跟进次数大于1 直接使用上一次的招商经理
if (CollectionUtils.isNotEmpty(lineFollowHistoryList)){
return lineFollowHistoryList.get(0).getInvestmentManager();
}
//意向区域 //意向区域
String wantShopArea = hyPartnerUserInfoDO.getWantShopArea(); String wantShopArea = hyPartnerUserInfoDO.getWantShopArea();
//查询意向区域绑定的组织架构 没有绑定战区 分配空 //查询意向区域绑定的组织架构 没有绑定战区 分配空
@@ -723,7 +725,6 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(hyPartnerLineInfoDO.getPartnerId()); HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(hyPartnerLineInfoDO.getPartnerId());
// 生成一条新线索 // 生成一条新线索
HyPartnerLineInfoDO newLineInfoDO = this.generateDefaultLineInfo(hyPartnerLineInfoDO.getPartnerId(), hyPartnerUserInfoDO.getWantShopArea(), hyPartnerUserInfoDO.getAcceptAdjustType()); HyPartnerLineInfoDO newLineInfoDO = this.generateDefaultLineInfo(hyPartnerLineInfoDO.getPartnerId(), hyPartnerUserInfoDO.getWantShopArea(), hyPartnerUserInfoDO.getAcceptAdjustType());
newLineInfoDO.setUserChannelId(hyPartnerLineInfoDO.getUserChannelId());
// 生成一条意向基本信息 // 生成一条意向基本信息
HyPartnerBaseInfoDO oldBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerIdAndLineId(hyPartnerUserInfoDO.getPartnerId(), lineId); HyPartnerBaseInfoDO oldBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerIdAndLineId(hyPartnerUserInfoDO.getPartnerId(), lineId);
hyPartnerBaseInfoService.generateBaseInfo(hyPartnerUserInfoDO, newLineInfoDO.getId(), oldBaseInfoDO.getUserPortrait()); hyPartnerBaseInfoService.generateBaseInfo(hyPartnerUserInfoDO, newLineInfoDO.getId(), oldBaseInfoDO.getUserPortrait());

View File

@@ -13,6 +13,7 @@ import com.cool.store.entity.HyPartnerLineInfoDO;
import com.cool.store.entity.HyPartnerUserInfoDO; import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.entity.HyPartnerUserPlatformBindDO; import com.cool.store.entity.HyPartnerUserPlatformBindDO;
import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.UserChannelEnum;
import com.cool.store.enums.UserPlatformTypeEnum; import com.cool.store.enums.UserPlatformTypeEnum;
import com.cool.store.exception.ServiceException; import com.cool.store.exception.ServiceException;
import com.cool.store.http.WechatRest; import com.cool.store.http.WechatRest;
@@ -108,6 +109,8 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService {
// hyPartnerUserInfoDO.setUsername(phoneInfoDTO.getPhoneInfo().getPhoneNumber()); // hyPartnerUserInfoDO.setUsername(phoneInfoDTO.getPhoneInfo().getPhoneNumber());
hyPartnerUserInfoDO.setPartnerId(UUIDUtils.get32UUID()); hyPartnerUserInfoDO.setPartnerId(UUIDUtils.get32UUID());
hyPartnerUserInfoDO.setIsWritePartnerKnow(0); hyPartnerUserInfoDO.setIsWritePartnerKnow(0);
Integer channelId = param.getUserChannelEnum() != null ? param.getUserChannelEnum().getChannelId() : null;
hyPartnerUserInfoDO.setUserChannelId(channelId);
hyPartnerUserInfoDAO.insertSelective(hyPartnerUserInfoDO); hyPartnerUserInfoDAO.insertSelective(hyPartnerUserInfoDO);
} }
hyPartnerUserPlatformBindDO = new HyPartnerUserPlatformBindDO(); hyPartnerUserPlatformBindDO = new HyPartnerUserPlatformBindDO();