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] =?UTF-8?q?=E6=8F=90=E4=BA=A4ec=E5=90=8C=E6=AD=A5=E5=8E=86?= =?UTF-8?q?=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)); + } }