From 107bfe9d3518fa651366a838ef928da5d80f1357 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Thu, 26 Oct 2023 18:59:38 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=8F=90=E4=BA=A4ec=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E7=BA=BF=E7=B4=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ErrorCodeEnum.java | 3 + .../cool/store/enums/TrajectoryTypeEnum.java | 130 +++++++ .../cool/store/dao/HyPartnerUserInfoDAO.java | 11 + .../mapper/HyPartnerEcTrackLogMapper.java | 31 ++ .../store/mapper/HyPartnerUserInfoMapper.java | 5 + .../mapper/HyPartnerEcTrackLogMapper.xml | 345 ++++++++++++++++++ .../mapper/HyPartnerUserInfoMapper.xml | 6 + .../store/dto/partner/MobileCheckDTO.java | 19 + .../store/entity/HyPartnerEcTrackLogDO.java | 133 +++++++ .../store/entity/HyPartnerUserInfoDO.java | 3 + .../store/request/CustomerInfoRequest.java | 9 + .../com/cool/store/service/EcSyncService.java | 7 + .../cool/store/service/FollowTaskService.java | 3 + .../store/service/LineHighSeasService.java | 2 + .../store/service/impl/EcSyncServiceImpl.java | 81 +++- .../service/impl/FollowTaskServiceImpl.java | 29 +- .../service/impl/LineHighSeasServiceImpl.java | 52 ++- .../store/config/TokenValidateFilter.java | 3 + .../store/controller/EcSyncController.java | 26 +- .../controller/FollowTaskController.java | 8 +- .../controller/LineHighSeasController.java | 9 +- 21 files changed, 865 insertions(+), 50 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerEcTrackLogMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/HyPartnerEcTrackLogMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/partner/MobileCheckDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerEcTrackLogDO.java 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 e1ab1bf6d..c9cd3b175 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 @@ -70,6 +70,9 @@ public enum ErrorCodeEnum { MOBILE_EXIST(500015, "此手机号码已存在,请修改后重试", null), INVESTMENT_MANAGER_NOT_EXIST(500016, "当前招商经理不存在", null), PARTNER_MOBILE_EXIST_0(500017, "手机号码已存在", null), + PARTNER_MOBILE_INCORRECT(500018, "请输入正确的手机号", null), + PUBLIC_LINE_NOT_FOLLOW(500019, "该线索已存在公海,无跟进人", null), + LINE_EXIST_FOLLOW(500020, "该线索已存在,跟进人为{0}", null), INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null), DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), 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..5bea73197 --- /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/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/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/HyPartnerEcTrackLogMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerEcTrackLogMapper.xml new file mode 100644 index 000000000..57d5d7422 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerEcTrackLogMapper.xml @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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..e951814e7 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -111,6 +111,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 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..638764305 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/MobileCheckDTO.java @@ -0,0 +1,19 @@ +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; + +} 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..c4229cf35 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerEcTrackLogDO.java @@ -0,0 +1,133 @@ +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())) { + return ecLogVo.getContent(); + } + 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.getReceiveUser()).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 ab8b0cb2f..6a61e86fb 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.request.follow.AddFollowLogRequest; import com.cool.store.request.follow.AddFollowTaskRequest; import com.cool.store.request.follow.FollowTaskIdRequest; @@ -88,4 +89,6 @@ public interface FollowTaskService { * @return */ void followTaskDailyRemind(); + + 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..ac5931c8e 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); + + Boolean 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..0ff38aa89 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,6 +1,8 @@ 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; @@ -16,8 +18,7 @@ import com.cool.store.enums.WorkflowStageEnum; import com.cool.store.enums.WorkflowStatusEnum; import com.cool.store.exception.ApiException; 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,11 @@ 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.MybatisBatchUtils; import com.cool.store.utils.Post; import com.cool.store.utils.StringUtil; import com.cool.store.utils.UUIDUtils; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; @@ -56,7 +59,6 @@ public class EcSyncServiceImpl implements EcSyncService { @Value("${ec.baseUrl:null}") private String baseUrl; - @Resource private HyPartnerLineInfoDAO hyPartnerLineInfoDAO; @@ -70,6 +72,9 @@ public class EcSyncServiceImpl implements EcSyncService { private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private MybatisBatchUtils mybatisBatchUtils; + @Resource private HyPartnerUserChannelMapper hyPartnerUserChannelMapper; @@ -79,15 +84,14 @@ public class EcSyncServiceImpl implements EcSyncService { @Resource private LabelService labelService; - @Override public boolean ecToApplet(List queryListData) { for (CustomerInfoRequest customerInfoItem : queryListData) { try { insertSelectiveSync(customerInfoItem); } 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"); } } return false; @@ -135,6 +139,33 @@ 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)); + insertSelectiveSync(customerInfoRequest); + } + 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 * @@ -157,8 +188,17 @@ public class EcSyncServiceImpl implements EcSyncService { channelId = channelDO.getChannelId(); } String newPartnerId = UUIDUtils.get32UUID(); + HyPartnerBaseInfoDO resultBase = new HyPartnerBaseInfoDO(); HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO(); resultUser.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile()).setUserChannelId(Convert.toInt(channelId)).setEcWantShopArea(customerInfoItem.getEcWantShopArea()); + Date time = new Date(); + if (ObjectUtil.isNotNull(customerInfoItem.getUpdateTime())) { + time = customerInfoItem.getUpdateTime(); + resultUser.setCrmCreateTime(time); + if (StringUtil.isNotEmpty(customerInfoItem.getLabelIds())) { + resultBase.setUserPortrait(","+customerInfoItem.getLabelIds()+","); + } + } HyPartnerLineInfoDO resultLine = new HyPartnerLineInfoDO(); String followUserName = customerInfoItem.getFollowUserName(); String followUserMobile = customerInfoItem.getFollowUserMobile(); @@ -175,7 +215,7 @@ public class EcSyncServiceImpl implements EcSyncService { 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()); @@ -183,7 +223,7 @@ public class EcSyncServiceImpl implements EcSyncService { //有就更新ec没有就插入 if (newUserInfo != null) { //招商客户姓名为空 - if (ObjectUtil.isNull(newUserInfo.getUsername())||StringUtil.isEmpty(newUserInfo.getUsername())) { + if (ObjectUtil.isNull(newUserInfo.getUsername()) || StringUtil.isEmpty(newUserInfo.getUsername())) { newUserInfo.setUsername(resultUser.getUsername()); hyPartnerUserInfoDAO.updateByPrimaryKeySelective(newUserInfo); } @@ -201,7 +241,7 @@ public class EcSyncServiceImpl implements EcSyncService { if (partnerLine != null) { // EC与沪姨合伙人同时存在的线索用户,但存在不同的跟进人,将沪姨合伙人跟进人信息同步至EC覆盖原EC跟进人信息 if (StringUtil.isEmpty(partnerLine.getInvestmentManager())) { - if (StringUtil.isNotEmpty(resultLine.getInvestmentManager())&&!getFollowLineStatus(partnerLine)) { + if (StringUtil.isNotEmpty(resultLine.getInvestmentManager()) && !getFollowLineStatus(partnerLine)) { resultLine.setId(partnerLine.getId()).setUpdateTime(new Date()); //沪姨合伙人线索存在黑名单,EC该线索分配跟进人同步到沪姨合伙人但线索状态不变,还存在黑名单中 resultLine.setLineStatus(partnerLine.getLineStatus().intValue() == LineStatusEnum.BLACKLIST.getCode().intValue() @@ -237,48 +277,49 @@ public class EcSyncServiceImpl implements EcSyncService { 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()); + setCreateTime(time).setUpdateTime(time); hyPartnerBaseInfoDAO.insertSelective(resultBase); } } else { - resultLine.setPartnerId(newPartnerId).setCreateTime(new Date()); + resultLine.setPartnerId(newPartnerId).setCreateTime(time).setUpdateTime(time); hyPartnerLineInfoDAO.insertSelective(resultLine); resultBase.setPartnerId(newPartnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())). - setCreateTime(new Date()); + setCreateTime(time).setUpdateTime(time); hyPartnerBaseInfoDAO.insertSelective(resultBase); } newUserInfo.setEcWantShopArea(resultUser.getEcWantShopArea()); //添加ec意向区域同步 hyPartnerUserInfoDAO.updateByPrimaryKeySelective(newUserInfo); } else { - resultUser.setPartnerId(newPartnerId).setCreateTime(new Date()); + resultUser.setPartnerId(newPartnerId).setCreateTime(time).setUpdateTime(time); hyPartnerUserInfoDAO.insertSelective(resultUser); - resultLine.setPartnerId(newPartnerId).setCreateTime(new Date()); + resultLine.setPartnerId(newPartnerId).setCreateTime(time).setUpdateTime(time); hyPartnerLineInfoDAO.insertSelective(resultLine); resultBase.setPartnerId(newPartnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())). - setCreateTime(new Date()); + setCreateTime(time).setUpdateTime(time); hyPartnerBaseInfoDAO.insertSelective(resultBase); } } /** - *招商公海内跟进次数大于等于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/FollowTaskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java index a173b41fa..b261eeae4 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 @@ -1,5 +1,6 @@ package com.cool.store.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; @@ -10,18 +11,12 @@ 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.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; @@ -34,6 +29,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; @@ -73,6 +69,10 @@ public class FollowTaskServiceImpl implements FollowTaskService { private RedisUtilPool redisUtilPool; @Resource private NoticeService noticeService; + + @Resource + private HyPartnerEcTrackLogMapper hyPartnerEcTrackLogMapper; + @Value("${feishu.notice.link.url}") private String linkUrl; @@ -252,6 +252,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..df8579ecb 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 @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import com.cool.store.constants.ExcelErrorConstants; import com.cool.store.context.CurrentUserHolder; import com.cool.store.dao.*; +import com.cool.store.dto.partner.MobileCheckDTO; import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.exception.ServiceException; @@ -30,6 +31,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; @@ -79,7 +81,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 +90,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 +106,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"); @@ -136,18 +138,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 +158,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 +221,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 +253,32 @@ 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 Boolean 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 { + throw new ServiceException(MessageFormat.format(ErrorCodeEnum.LINE_EXIST_FOLLOW.getMessage(),mobileCheckDTO.getInvestmentManager())); + } + } + return Boolean.TRUE; + } + /** * @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 +295,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 5a1ad08cd..b415b9ff3 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 @@ -1,6 +1,7 @@ package com.cool.store.controller; import com.cool.store.context.CurrentUserHolder; +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; @@ -17,7 +18,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.Date; /** * @author zhangchenbiao @@ -46,6 +46,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..273ce727f 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 ResponseResult.success(lineHighSeasService.addCheckout(partnerMobile)); + } } From 19993c9ce86c9231ecd51c5ba98b5f0375bcc40c Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Thu, 26 Oct 2023 19:11:28 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E8=A1=A5=E5=85=85ApiException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/service/impl/FollowTaskServiceImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 098bb7041..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 @@ -1,6 +1,5 @@ package com.cool.store.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; @@ -15,9 +14,9 @@ import com.cool.store.dto.log.LogFieldDTO; import com.cool.store.dto.partner.PartnerSimpleInfoDTO; 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; From 5498832bd4d58cf49296f73e086cd7d3ad9696c2 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Fri, 27 Oct 2023 13:55:38 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E6=A0=A1=E9=AA=8Ccode=E7=A0=81=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E6=9E=84ec=E5=90=8C=E6=AD=A5=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ErrorCodeEnum.java | 9 +- .../mapper/HyPartnerUserInfoMapper.xml | 2 +- .../store/dto/partner/MobileCheckDTO.java | 2 + .../store/service/LineHighSeasService.java | 2 +- .../store/service/impl/EcSyncServiceImpl.java | 208 ++++++++++++------ .../service/impl/LineHighSeasServiceImpl.java | 7 +- .../controller/LineHighSeasController.java | 2 +- 7 files changed, 157 insertions(+), 75 deletions(-) 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 351412bfa..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 未知错误 */ @@ -70,9 +75,7 @@ public enum ErrorCodeEnum { MOBILE_EXIST(500015, "此手机号码已存在,请修改后重试", null), INVESTMENT_MANAGER_NOT_EXIST(500016, "当前招商经理不存在", null), PARTNER_MOBILE_EXIST_0(500017, "手机号码已存在", null), - PARTNER_MOBILE_INCORRECT(500018, "请输入正确的手机号", null), - PUBLIC_LINE_NOT_FOLLOW(500019, "该线索已存在公海,无跟进人", null), - LINE_EXIST_FOLLOW(500020, "该线索已存在,跟进人为{0}", null), + INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null), DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml index e951814e7..b20e34cd6 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -115,7 +115,7 @@ SELECT crm_create_time as crmCreateTime FROM hy_partner_user_info ORDER BY crm_create_time desc limit 1 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 index 638764305..df6fffe99 100644 --- 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 @@ -16,4 +16,6 @@ public class MobileCheckDTO { private Integer lineStatus; private String investmentManager; + private String investmentManagerMobile; + } 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 ac5931c8e..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 @@ -10,5 +10,5 @@ public interface LineHighSeasService { ResponseResult importLine(MultipartFile file); - Boolean addCheckout(String mobile); + 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 0ff38aa89..a8d390e2d 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 @@ -7,6 +7,7 @@ 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.constants.CommonConstants; import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.HyPartnerBaseInfoDAO; import com.cool.store.dao.HyPartnerLineInfoDAO; @@ -17,6 +18,7 @@ import com.cool.store.enums.LineStatusEnum; import com.cool.store.enums.WorkflowStageEnum; import com.cool.store.enums.WorkflowStatusEnum; import com.cool.store.exception.ApiException; +import com.cool.store.http.EventCenterHttpRequest; import com.cool.store.http.UserSourceResponse; import com.cool.store.mapper.HyPartnerEcTrackLogMapper; import com.cool.store.mapper.HyPartnerUserChannelMapper; @@ -36,6 +38,7 @@ import com.cool.store.utils.MybatisBatchUtils; import com.cool.store.utils.Post; import com.cool.store.utils.StringUtil; import com.cool.store.utils.UUIDUtils; +import com.cool.store.utils.poi.constant.Constants; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -46,10 +49,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 @@ -84,11 +85,16 @@ public class EcSyncServiceImpl implements EcSyncService { @Resource private LabelService labelService; + + @Resource + private EventCenterHttpRequest eventCenterHttpRequest; + @Override public boolean ecToApplet(List queryListData) { for (CustomerInfoRequest customerInfoItem : queryListData) { try { - insertSelectiveSync(customerInfoItem); + Map> sendUserMap = new HashMap<>(); + insertSelectiveSync(customerInfoItem, false, sendUserMap); } catch (Exception e) { log.error("ec同步至招商小程序报错" + JSONObject.toJSONString(e)); sendFeiShuRobotMessage("推送:" + JSONObject.toJSONString(e), "27243d49-97ca-4981-8aec-7c3bf84eb660"); @@ -150,7 +156,8 @@ public class EcSyncServiceImpl implements EcSyncService { public Boolean historyLine(List resultCustomerInfoList) { for (CustomerInfoRequest customerInfoRequest : resultCustomerInfoList) { customerInfoRequest.setUpdateTime(DateUtil.parse(customerInfoRequest.getCrmCreateTime(), DatePattern.NORM_DATETIME_PATTERN)); - insertSelectiveSync(customerInfoRequest); + Map> sendUserMap = new HashMap<>(); + insertSelectiveSync(customerInfoRequest, true, sendUserMap); } return Boolean.TRUE; } @@ -163,7 +170,7 @@ public class EcSyncServiceImpl implements EcSyncService { hyPartnerEcTrackLogDO.setPartnerId(hyPartnerUserInfoDO.getPartnerId()); } } - return mybatisBatchUtils.batchInsertOrUpdate(resultTrajectoryList, HyPartnerEcTrackLogMapper.class, (record, mapper) -> mapper.insertSelective(record)) ; + return mybatisBatchUtils.batchInsertOrUpdate(resultTrajectoryList, HyPartnerEcTrackLogMapper.class, (record, mapper) -> mapper.insertSelective(record)); } /** @@ -172,50 +179,30 @@ public class EcSyncServiceImpl implements EcSyncService { * @param customerInfoItem */ @Transactional(rollbackFor = Exception.class) - public void insertSelectiveSync(CustomerInfoRequest customerInfoItem) throws ApiException { - if (StringUtil.isNotEmpty(customerInfoItem.getMobile())) { - customerInfoItem.setMobile(customerInfoItem.getMobile().split(" ")[1]); - } - //获取客户来源id - String channel = customerInfoItem.getChannel(); - HyPartnerUserChannelDO hyPartnerUserChannelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); - Long channelId = null; - if (StringUtil.isNotEmpty(channel)) { - if (ObjectUtil.isNull(hyPartnerUserChannelDO) || ObjectUtil.isNull(hyPartnerUserChannelDO.getChannelId())) { - getChannelSource(); - } - HyPartnerUserChannelDO channelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); - channelId = channelDO.getChannelId(); - } + 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(channelId)).setEcWantShopArea(customerInfoItem.getEcWantShopArea()); + 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())) { + if (ObjectUtil.isNotNull(customerInfoItem.getUpdateTime()) && pan) { + //历史线索创建时间与更新时间设置为ec同步过来的时间 time = customerInfoItem.getUpdateTime(); resultUser.setCrmCreateTime(time); + //放入历史标签id if (StringUtil.isNotEmpty(customerInfoItem.getLabelIds())) { - resultBase.setUserPortrait(","+customerInfoItem.getLabelIds()+","); + resultBase.setUserPortrait(CommonConstants.COMMA.concat(customerInfoItem.getLabelIds()).concat(CommonConstants.COMMA)); } } 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.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()); @@ -229,11 +216,7 @@ public class EcSyncServiceImpl implements EcSyncService { } // 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); + updateEcCustomer(customerInfoItem, newUserInfo, ecClient); } String oldPartnerId = newUserInfo.getPartnerId(); //线索表 @@ -255,21 +238,11 @@ public class EcSyncServiceImpl implements EcSyncService { 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); + changeEcFollowUser(customerInfoItem, ecClient, enterpriseUser, 1); } //电话不同 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); + changeEcFollowUser(customerInfoItem, ecClient, enterpriseUser, 2); } } } @@ -279,14 +252,12 @@ public class EcSyncServiceImpl implements EcSyncService { 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 { - 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); + insertUserInfo(sendUserMap, newPartnerId, resultBase, resultUser, time, resultLine); } newUserInfo.setEcWantShopArea(resultUser.getEcWantShopArea()); //添加ec意向区域同步 @@ -295,15 +266,120 @@ public class EcSyncServiceImpl implements EcSyncService { resultUser.setPartnerId(newPartnerId).setCreateTime(time).setUpdateTime(time); hyPartnerUserInfoDAO.insertSelective(resultUser); - 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); + 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); + } + + 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, newPartnerId, resultUser); + } + + + private void putElement(Map> sendUserMap, String key, HyPartnerUserInfoDO element) { + 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.isNotEmpty(newUserPortrait) && !oldUserPortrait.equals(newUserPortrait)) { + List oldList = Arrays.asList(oldUserPortrait.split(Constants.COMMA)); + List newList = Arrays.asList(newUserPortrait.split(Constants.COMMA)); + 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)) { + String userId = enterpriseUserDAO.selectByMobile(followUserMobile); + if (StringUtil.isEmpty(userId)) { + // 给飞书群发送消息 跟进人找不到 + sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile, "27243d49-97ca-4981-8aec-7c3bf84eb660"); + throw new ApiException("飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile); + } + return userId; + } + return ""; + } + + /** + * @param channel + * @return + */ + private Long getChannelId(String channel) { + //获取客户来源id + HyPartnerUserChannelDO hyPartnerUserChannelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); + Long channelId = null; + if (StringUtil.isNotEmpty(channel)) { + if (ObjectUtil.isNull(hyPartnerUserChannelDO) || ObjectUtil.isNull(hyPartnerUserChannelDO.getChannelId())) { + getChannelSource(); + } + HyPartnerUserChannelDO channelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); + channelId = channelDO.getChannelId(); + } + return channelId; + } + /** * 招商公海内跟进次数大于等于1的用户EC同步该用户进去公海,假若跟进次数为0的同步到EC跟进人就是唐佑玉 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 df8579ecb..883b72253 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 @@ -259,7 +259,7 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { } @Override - public Boolean addCheckout(String mobile) { + public ResponseResult addCheckout(String mobile) { if (!isPhone(mobile)) { throw new ServiceException(ErrorCodeEnum.PARTNER_MOBILE_INCORRECT); } @@ -268,10 +268,11 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { if (mobileCheckDTO.getLineStatus().equals(LineStatusEnum.PUBLIC_SEAS.getCode())) { throw new ServiceException(ErrorCodeEnum.PUBLIC_LINE_NOT_FOLLOW); } else { - throw new ServiceException(MessageFormat.format(ErrorCodeEnum.LINE_EXIST_FOLLOW.getMessage(),mobileCheckDTO.getInvestmentManager())); + String message = MessageFormat.format(ErrorCodeEnum.LINE_EXIST_FOLLOW.getMessage(), mobileCheckDTO.getInvestmentManager(), mobileCheckDTO.getInvestmentManagerMobile()); + return new ResponseResult(ErrorCodeEnum.LINE_EXIST_FOLLOW.getCode(),message); } } - return Boolean.TRUE; + return ResponseResult.success() ; } /** 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 273ce727f..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 @@ -44,6 +44,6 @@ public class LineHighSeasController { @GetMapping("/addCheckout") @ApiOperation("线索手机号校验") public ResponseResult addCheckout(@Param("partnerMobile")String partnerMobile) throws ApiException { - return ResponseResult.success(lineHighSeasService.addCheckout(partnerMobile)); + return lineHighSeasService.addCheckout(partnerMobile); } } From 5e3672a6742c47c13d4c9e8b4e18fd48dde59f56 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Fri, 27 Oct 2023 17:24:29 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ec=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=90=8E=E5=91=98=E5=B7=A5=E7=AB=AF=E6=8E=A5=E6=94=B6=E9=A3=9E?= =?UTF-8?q?=E4=B9=A6=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/enums/FeiShuNoticeMsgEnum.java | 1 + .../com/cool/store/enums/OperateTypeEnum.java | 1 + .../store/service/impl/EcSyncServiceImpl.java | 75 +++++++++++++++---- 3 files changed, 64 insertions(+), 13 deletions(-) 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..2929276be 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,7 @@ 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)), 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-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 a8d390e2d..7f2a89b4c 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 @@ -8,15 +8,13 @@ import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; -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.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; @@ -34,10 +32,7 @@ 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.MybatisBatchUtils; -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; @@ -73,6 +68,9 @@ public class EcSyncServiceImpl implements EcSyncService { private EnterpriseUserDAO enterpriseUserDAO; + @Resource + HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO; + @Resource private MybatisBatchUtils mybatisBatchUtils; @@ -89,17 +87,37 @@ public class EcSyncServiceImpl implements EcSyncService { @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 { - Map> sendUserMap = new HashMap<>(); insertSelectiveSync(customerInfoItem, false, sendUserMap); } catch (Exception e) { 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::getKey).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; } @@ -272,6 +290,7 @@ public class EcSyncServiceImpl implements EcSyncService { /** * 发送请求更改ec线索跟进人 + * * @param customerInfoItem * @param ecClient * @param enterpriseUser @@ -288,6 +307,7 @@ public class EcSyncServiceImpl implements EcSyncService { /** * 发送请求更改ec客户 + * * @param customerInfoItem * @param newUserInfo * @param ecClient @@ -300,6 +320,15 @@ public class EcSyncServiceImpl implements EcSyncService { 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); @@ -307,11 +336,31 @@ public class EcSyncServiceImpl implements EcSyncService { resultBase.setPartnerId(newPartnerId).setPartnerLineId(resultLine.getId()).setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode())). setCreateTime(time).setUpdateTime(time); hyPartnerBaseInfoDAO.insertSelective(resultBase); - putElement(sendUserMap, newPartnerId, resultUser); + //存放待发送飞书通知消息 + 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<>(); From 0d99364862d69ffb7bfa0868e5faf2931b753802 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Fri, 27 Oct 2023 19:12:23 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=A3=9E=E4=B9=A6id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/service/impl/EcSyncServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7f2a89b4c..6fe815d20 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 @@ -111,7 +111,7 @@ public class EcSyncServiceImpl implements EcSyncService { Map feishuUserIdsByUserIds = enterpriseUserDAO.getFeishuUserIdsByUserIds(new ArrayList() {{ add(k); }}); - List feishuIds = feishuUserIdsByUserIds.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList()); + 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) { From bb63eee4fadbaef205bd7dac5f2c326e8fc53545 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Mon, 30 Oct 2023 18:02:57 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E6=9B=B4=E6=94=B9ec=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/TrajectoryTypeEnum.java | 2 +- .../cool/store/entity/HyPartnerEcTrackLogDO.java | 8 ++++++-- .../cool/store/service/impl/EcSyncServiceImpl.java | 14 +++++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) 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 index 5bea73197..54170e08b 100644 --- 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 @@ -45,7 +45,7 @@ public enum TrajectoryTypeEnum { TRANSFER_CUSTOMER(3009, "转让客户","将此客户转换了给"), MERGE_CUSTOMER(3010, "合并客户",""), ALLOCATION_CUSTOMER(3011, "分配客户","分配此客户给"), - GET_CUSTOMER(3012, "领取客户",""), + GET_CUSTOMER(3012, "领取客户","领取了此客户"), ABANDON_CUSTOMER(3013, "放弃客户",""), ADD_MARKER_PLAN(3014, "添加销售计划",""), UPDATE_MARKER_PLAN(3015, "修改销售计划",""), 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 index c4229cf35..3e5335a1f 100644 --- 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 @@ -109,7 +109,11 @@ public class HyPartnerEcTrackLogDO implements Serializable { */ public static String getDetailContentJoint(HyPartnerEcTrackLogDO ecLogVo){ if (StringUtils.isNotEmpty(ecLogVo.getContent())) { - return 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(); @@ -120,7 +124,7 @@ public class HyPartnerEcTrackLogDO implements Serializable { detailContent.append(TrajectoryTypeEnum.ALLOCATION_CUSTOMER.getJointText()).append(ecLogVo.getReceiveUser()); } if (trajectoryType.equals(TrajectoryTypeEnum.GET_CUSTOMER.getValue())) { - detailContent.append(ecLogVo.getReceiveUser()).append(TrajectoryTypeEnum.GET_CUSTOMER.getJointText()); + detailContent.append(ecLogVo.getUserName()).append(TrajectoryTypeEnum.GET_CUSTOMER.getJointText()); } if (StringUtils.isEmpty(detailContent)) { detailContent.append(TrajectoryTypeEnum.getShowText(trajectoryType)); 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 6fe815d20..dbac9d13a 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 @@ -380,9 +380,17 @@ public class EcSyncServiceImpl implements EcSyncService { * @param newUserPortrait */ private void updateUserPortrait(HyPartnerBaseInfoDO partnerIdAndLine, String oldUserPortrait, String newUserPortrait) { - if (StringUtil.isNotEmpty(newUserPortrait) && !oldUserPortrait.equals(newUserPortrait)) { - List oldList = Arrays.asList(oldUserPortrait.split(Constants.COMMA)); - List newList = Arrays.asList(newUserPortrait.split(Constants.COMMA)); + 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); From 01c2ce6b074cd756d80f5bddf8fd1f42b5717ac6 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Tue, 31 Oct 2023 14:15:35 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ec=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BB=A5=E5=8F=8A=E9=A3=9E=E4=B9=A6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=BF=AE=E5=A4=8D=E7=A6=BB?= =?UTF-8?q?=E8=81=8C=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/EnterpriseUserMapper.xml | 4 ++-- .../store/service/impl/EcSyncServiceImpl.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml index 912b7fb62..2cd5366f1 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml @@ -333,12 +333,12 @@ CAST(SUBSTR(jobnumber,2) AS UNSIGNED) ASC - + SELECT FROM enterprise_user WHERE mobile =#{mobile} and deleted=0 LIMIT 1