diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 26d5173b8..db36a99e8 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -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), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java index bbcb200a3..612969de3 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java @@ -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"), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java index 1c57efba3..b5f46e902 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java @@ -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)), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java new file mode 100644 index 000000000..54170e08b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java @@ -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 ""; + } + + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java index 169d765e8..28119d2af 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java @@ -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); } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java index 45bff81e6..6afa8a0bb 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java @@ -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); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java index 948ff8e5a..c2e2b70f4 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java @@ -101,7 +101,7 @@ public interface EnterpriseUserMapper { */ List getUserListByRegionIds(@Param("regionIds") List regionIds); - String selectByMobile(@Param("mobile") String mobile); + EnterpriseUserDO selectByMobile(@Param("mobile") String mobile); EnterpriseUserDO selectByInvestmentManager(@Param("investmentManager") String investmentManager); diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerEcTrackLogMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerEcTrackLogMapper.java new file mode 100644 index 000000000..1666be0f3 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerEcTrackLogMapper.java @@ -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 getEcLogPageByPartnerId(@Param("partnerId") String partnerId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java index 1257fc124..eb95a698b 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java @@ -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); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml index 912b7fb62..16cf19ea8 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml @@ -332,13 +332,13 @@ SUBSTR(jobnumber,1,1), CAST(SUBSTR(jobnumber,2) AS UNSIGNED) ASC - + SELECT FROM enterprise_user WHERE mobile =#{mobile} and deleted=0 LIMIT 1 + select + + from hy_partner_ec_track_log + where id = #{id,jdbcType=BIGINT} + + + + delete from hy_partner_ec_track_log + where id = #{id,jdbcType=BIGINT} + + + 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 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, + + + + + #{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}, + + + 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 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, + + + + + #{record.trajectoryId,jdbcType=VARCHAR}, + + + #{record.userId,jdbcType=VARCHAR}, + + + #{record.userName,jdbcType=VARCHAR}, + + + #{record.mobile,jdbcType=VARCHAR}, + + + #{record.crmId,jdbcType=VARCHAR}, + + + #{record.partnerId,jdbcType=VARCHAR}, + + + #{record.receiveUserIds,jdbcType=VARCHAR}, + + + #{record.receiveUser,jdbcType=VARCHAR}, + + + #{record.trajectoryType,jdbcType=INTEGER}, + + + #{record.trajectoryTypeContent,jdbcType=VARCHAR}, + + + #{record.content,jdbcType=VARCHAR}, + + + #{record.operateTime,jdbcType=TIMESTAMP}, + + + #{record.createTime,jdbcType=TIMESTAMP}, + + + #{record.remark,jdbcType=VARCHAR}, + + + 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) + + + + update hy_partner_ec_track_log + + + trajectory_id = #{trajectoryId,jdbcType=VARCHAR}, + + + user_id = #{userId,jdbcType=VARCHAR}, + + + mobile = #{mobile,jdbcType=VARCHAR}, + + + user_name = #{userName,jdbcType=VARCHAR}, + + + crm_id = #{crmId,jdbcType=VARCHAR}, + + + partner_id = #{partnerId,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 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} + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml index 5438bbf0b..abd2f22dd 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -20,6 +20,7 @@ + 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 + + insert into hy_partner_user_info @@ -169,6 +176,9 @@ ec_want_shop_area, + + crm_create_time, + @@ -225,6 +235,9 @@ #{record.ecWantShopArea}, + + #{record.crmCreateTime}, + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/MobileCheckDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/MobileCheckDTO.java new file mode 100644 index 000000000..df6fffe99 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/MobileCheckDTO.java @@ -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; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerEcTrackLogDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerEcTrackLogDO.java new file mode 100644 index 000000000..3e5335a1f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerEcTrackLogDO.java @@ -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; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java index 431c4d5ba..265345a71 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java @@ -80,4 +80,7 @@ public class HyPartnerUserInfoDO implements Serializable { @ApiModelProperty("ec意向区域") private String ecWantShopArea; + @ApiModelProperty("ec创建时间") + private Date crmCreateTime; + } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/CustomerInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/CustomerInfoRequest.java index 157037dcd..0d3cd8871 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/CustomerInfoRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/CustomerInfoRequest.java @@ -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; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java index 050fd0eb0..28e06eca8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java @@ -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 getTagRequestList); + String getLastCrmCreateTime(); + + Boolean historyLine(List resultCustomerInfoList); + + Integer historyLineTrajectory(List resultTrajectoryList); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java index 7f6c7e908..e82cd0fb1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java @@ -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 getEcFollowLogPage(Integer pageNum, Integer pageSize, String partnerId); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LineHighSeasService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LineHighSeasService.java index d7cc60132..ca9ae2782 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LineHighSeasService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LineHighSeasService.java @@ -9,4 +9,6 @@ public interface LineHighSeasService { Boolean addLine(AddLineRequest request); ResponseResult importLine(MultipartFile file); + + ResponseResult addCheckout(String mobile); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java index ee75ee843..040daafee 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java @@ -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 queryListData) { + Map> 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 feishuUserIdsByUserIds = enterpriseUserDAO.getFeishuUserIdsByUserIds(new ArrayList() {{ + add(k); + }}); + List 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 resultCustomerInfoList) { + for (CustomerInfoRequest customerInfoRequest : resultCustomerInfoList) { + customerInfoRequest.setUpdateTime(DateUtil.parse(customerInfoRequest.getCrmCreateTime(), DatePattern.NORM_DATETIME_PATTERN)); + Map> sendUserMap = new HashMap<>(); + insertSelectiveSync(customerInfoRequest, true, sendUserMap); + } + return Boolean.TRUE; + } + + @Override + public Integer historyLineTrajectory(List 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> 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 feishuUserIdsByUserIds = enterpriseUserDAO.getFeishuUserIdsByUserIds(new ArrayList() {{ + add(resultLine.getInvestmentManager()); + }}); + List 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> 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> sendUserMap, String key, HyPartnerUserInfoDO element) { + if (StringUtil.isEmpty(key)) { + return; + } + List list = sendUserMap.get(key); + if (CollectionUtils.isEmpty(list)) { + ArrayList 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 oldList = new ArrayList<>(Arrays.asList(oldUserPortrait.split(Constants.COMMA))).stream().filter(item->StringUtil.isNotEmpty(item)).collect(Collectors.toList()); + List 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 list = new ArrayList<>(); list.add(partnerLine.getPartnerId()); List followCountList = hyPartnerLineInfoDAO.getFollowCountList(list); if (!CollectionUtils.isEmpty(followCountList)) { - return followCountList.get(0).getFollowCount()>0; + return followCountList.get(0).getFollowCount() > 0; } return Boolean.FALSE; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java index 45c727577..d27363eda 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java @@ -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); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java index 3050e238b..45a922dff 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java @@ -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 getEcFollowLogPage(Integer pageNum, Integer pageSize, String partnerId) { + if(Objects.isNull(partnerId)){ + return new PageInfo<>(); + } + PageHelper.startPage(pageNum, pageSize); + Page logPage = hyPartnerEcTrackLogMapper.getEcLogPageByPartnerId(partnerId); + for (HyPartnerEcTrackLogDO hyPartnerEcTrackLogDO : logPage) { + hyPartnerEcTrackLogDO.setDetailContent(HyPartnerEcTrackLogDO.getDetailContentJoint(hyPartnerEcTrackLogDO)); + } + return new PageInfo(logPage); + } + /** * 线索校验 * @param partnerLineId diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java index f70a855b9..d6dce1fa3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java @@ -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>> 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 uniqueList = lineDOList.stream().filter(item->StringUtil.isNotEmpty(item.getMobile())).collect(Collectors.groupingBy(HyPartnerLineDO::getMobile, Collectors.counting())) + List 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); } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java b/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java index 4ddcbc071..bc43c03e5 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java @@ -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/**"); diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java index 78978078d..1e7bfa878 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java @@ -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 ecToApplet(@RequestBody List queryListData){ return ResponseResult.success(ecSyncService.ecToApplet(queryListData)); } @PostMapping(path = "/labelInfo") - @ApiOperation("ec同步标签数据到小程序") + @ApiOperation("ec同步标签数据到招商系统") public ResponseResult labelInfo(@RequestBody List getTagRequestList){ return ResponseResult.success(ecSyncService.labelInfo(getTagRequestList)); } + + @GetMapping(path = "/getCrmCreateTime") + @ApiOperation("ec同步标签数据到招商系统") + public ResponseResult getCrmCreateTime(){ + return ResponseResult.success(ecSyncService.getLastCrmCreateTime()); + } + + + @PostMapping(path = "/historyLine") + @ApiOperation("ec同步线索到招商系统") + public ResponseResult historyLine(@RequestBody List resultCustomerInfoList){ + return ResponseResult.success(ecSyncService.historyLine(resultCustomerInfoList)); + } + + + @PostMapping(path = "/historyLineTrajectory") + @ApiOperation("ec同步跟进记录到招商系统") + public ResponseResult historyLineTrajectory(@RequestBody List resultTrajectoryList){ + return ResponseResult.success(ecSyncService.historyLineTrajectory(resultTrajectoryList)); + } } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java index 7a0dca6e6..94ba6c93b 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java @@ -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> 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 addFollowLog(@RequestBody @Validated AddFollowLogRequest request){ diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java index f8e55fea2..c92e6b5a7 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java @@ -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); + } }