diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java index eb3b563d6..f461fb4e0 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java @@ -29,4 +29,6 @@ public class ExcelErrorConstants { public static final String COUNT_MORE = "每次数据最多导入500条,请分批上传"; + public static final String MOBILE_REPEAT = "手机号重复"; + } 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 3be33da95..24b08fba4 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 @@ -67,7 +67,9 @@ public enum ErrorCodeEnum { NO_TRANSFER_REQUIRED(500013, "招商经理现有私海线索无需转让,请检查后重试!", null), NO_BATCH_TRANSFER_REQUIRED(500014, "已选线索包含此招商经理现有私海线索,无需转让,请检查后重试!", null), PARTNER_MOBILE_EXIST(500010, "手机号码已存在,请核实!", null), - PARTNER_MOBILE_EXIST_0(500016, "手机号码已存在", null), + MOBILE_EXIST(500015, "此手机号码已存在,请修改后重试", null), + INVESTMENT_MANAGER_NOT_EXIST(500016, "当前招商经理不存在", null), + PARTNER_MOBILE_EXIST_0(500017, "手机号码已存在", null), INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null), DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), @@ -84,11 +86,16 @@ public enum ErrorCodeEnum { INTERVIEW_LINE_ID_IS_NULL(1021113, "线索id为空!", null), INTERVIEW_INTERVIEW_TIME_IS_UNUSABLE(1021114, "当前预约时间不可用,请和线索用户协商其他时间后确定预约时间\n面试人:{0} 手机号:{1}", null), INTERVIEW_PARTNER_NOT_EXIST(1021115, "线索下的加盟商不存在!", null), + INTERVIEW_STATUS_NOT_TRANSFER(1021116, "当前面试状态不允许转让! 面试状态:{0}", null), + MOBILE_WECHAT_EXIST(1021116, "此号码已绑定其他微信,请更换手机号码或微信后重试。", null), + ROOM_STATUS_ERROR(10211156, "当前面试房间状态不允许进行该操作!", null), MOBILE_APP_NOT_ONLINE_ERROR(10211157, "呼叫失败,请确认呼出号码正确并检查是否安装并打开呼叫插件", null), CALL_RECORD_NOT_EXIST_ERROR(10211158, "通话记录不存在!", null), CALL_UP_ERROR(10211159, "拨出电话异常!", null), CREATE_CALL_REQUEST_ERROR(10211160, "创建电话请求失败!", null), + + CREATE_APPOINTMENT_TIME_ERROR(10211161, "当前时间不可预约面试,请选择其他时间", null), CONTENT_DUPLICATED(10211200, "动态标题重复!", null), SIGN_FAIL(600000, "验签失败", null), GET_ACCESSTOKEN_ERROR(600001, "获取小程序TOKEN错误!", null), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java index 7c1111c66..2d4839273 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 @@ -15,7 +15,7 @@ public enum FeiShuNoticeMsgEnum { BATCH_TRANS_INVESTMENT_MANAGER("收到新线索", "有{0}条新线索于 {1} 转让给您,请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"), INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g"), FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g"), - INTERVIEW_APPOINTMENT("面试预约申请", "{0}","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g"), + INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g"), ; private String title; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java index 9903efe42..7c4526aae 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java @@ -119,6 +119,11 @@ public class HyOpenAreaInfoDAO { return hyOpenAreaInfoMapper.getAllOpenArea(); } + + public List selectAllCity(){ + return hyOpenAreaInfoMapper.selectAllCity(); + } + /** * 过滤叶子节点 * @param openAreaIds diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerInterviewPlanDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerInterviewPlanDAO.java index ffb93cf2e..1fe8eaf39 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerInterviewPlanDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerInterviewPlanDAO.java @@ -94,6 +94,13 @@ public class HyPartnerInterviewPlanDAO { return hyPartnerInterviewPlanMapper.selectInterviewIdByLineId(lineId); } + public HyPartnerInterviewPlanDO getInterviewPlanByLineId(Long lineId){ + if (lineId==null){ + return null; + } + return hyPartnerInterviewPlanMapper.getInterviewPlanByLineId(lineId); + } + /** * 根据线索表ID查询 * @param lindIds diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java index c373f479b..96eed9e89 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java @@ -123,4 +123,6 @@ public interface HyOpenAreaInfoMapper { List getProvinceAllCode(@Param("id") String id); HyOpenAreaInfoDO selectByAreaPath(@Param("areaPath") String areaPath); + + List selectAllCity(); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java index 712ea26d4..767803b35 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java @@ -1,6 +1,7 @@ package com.cool.store.mapper; import com.cool.store.entity.HyPartnerBaseInfoDO; +import com.cool.store.entity.SyncEcCustomerLabelDO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -63,4 +64,10 @@ public interface HyPartnerBaseInfoMapper { @Param("idCardPhotoBlack") String idCardPhotoBlack, @Param("partnerLineId") Long partnerLineId); + int selectAllList(); + + List selectListByLimit(@Param("limit1") Integer limit1, @Param("limit2") Integer limit2); + + void updateByMobile(HyPartnerBaseInfoDO record); + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java index 65609017d..5d71a9677 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java @@ -244,4 +244,10 @@ public interface HyPartnerLineInfoMapper { */ List getHyPartnerLineInfoList(@Param("lineIds") List lineIds,String investmentManager); + /** + * 获取线索转让次数 + * @param partnerLineId 线索 id + * @return 线索转让次数 + */ + Integer getTransferTimes(@Param("lineId") Long partnerLineId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml index 4ba49efba..d916c2b8a 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml @@ -310,4 +310,11 @@ WHERE area_path= concat('/',#{areaPath},'/') and deleted=0 and province_city_flag=0 + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml index 44a5e732d..a3ab15314 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml @@ -297,6 +297,12 @@ left join hy_partner_line_info b on a.partner_line_id = b.id where a.id_card = #{idCard} and ( b.line_status != 3 and b.deleted = 0 ) + + update hy_partner_base_info @@ -306,5 +312,15 @@ id_card_photo_black = #{idCardPhotoBlack} where partner_line_id = #{partnerLineId} + + update hy_partner_base_info + + update_time=now(), + + user_portrait = concat(",",#{userPortrait},","), + + + where mobile = #{mobile} + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml index 373c0185c..f71ef7694 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml @@ -25,12 +25,14 @@ + + id, partner_id, partner_line_id, live_area, want_shop_area, accept_adjust_type, is_have_want_shop, want_shop_info, max_budget, money_source, money_prove, education, work_year, is_have_work_exp, work_exp, is_consumer, other_band, brand_strength, need_improve, strength, weakness, - create_time, update_time + create_time, update_time,detailed_address,email + + + \ 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 0101fa549..a141021c2 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -53,63 +53,63 @@ - + @@ -162,7 +162,7 @@ recommend_partner_mobile, - + user_channel_id, diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java index d4d7a918e..996a9cecc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java @@ -121,6 +121,7 @@ public class EnterpriseUserDTO implements Serializable { enterpriseUserDO.setJobnumber(user.getJobnumber()); enterpriseUserDO.setUserStatus(UserStatusEnum.NORMAL.getCode()); enterpriseUserDO.setIsLeader(Boolean.FALSE); + enterpriseUserDO.setLeaderDeptIds("[]"); List departmentLists = user.getDepartmentLists(); List regionPaths = new ArrayList<>(); if(CollectionUtils.isNotEmpty(departmentLists)){ @@ -184,6 +185,7 @@ public class EnterpriseUserDTO implements Serializable { //创建的时候给个默认值 if(FSEventTypeEnum.USER_CREATED.equals(eventType)){ enterpriseUserDO.setIsLeader(Boolean.FALSE); + enterpriseUserDO.setLeaderDeptIds("[]"); } Collection deptIds = leaderDeptMap.get(user.getUserId()); if(CollectionUtils.isNotEmpty(deptIds)){ diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerLineInfoAndBaseInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerLineInfoAndBaseInfoDTO.java index c2c53eef2..e9f9b6b8e 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerLineInfoAndBaseInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerLineInfoAndBaseInfoDTO.java @@ -84,4 +84,10 @@ public class PartnerLineInfoAndBaseInfoDTO { private String education; private String developmentDirector; + + @ApiModelProperty("详细地址") + private String detailedAddress; + + @ApiModelProperty("邮箱") + private String email; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerIntentInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerIntentInfoDO.java index 60632d06e..5f87270bd 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerIntentInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerIntentInfoDO.java @@ -98,4 +98,10 @@ public class HyPartnerIntentInfoDO implements Serializable { @ApiModelProperty("通过证明") private String passCertifyFile; + + @ApiModelProperty("详细地址") + private String detailedAddress; + + @ApiModelProperty("邮箱地址") + private String email; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java index 4f0d4d383..6dc765b14 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.util.Date; @@ -16,6 +17,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@Accessors(chain = true) public class HyPartnerLabelDO { @ApiModelProperty("") private Long id; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java index 2ee131d72..b46f428f5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.util.Date; @@ -16,6 +17,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@Accessors(chain = true) public class HyPartnerLabelGroupDO { @ApiModelProperty("id") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SyncEcCustomerLabelDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SyncEcCustomerLabelDO.java new file mode 100644 index 000000000..05e5e6c24 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SyncEcCustomerLabelDO.java @@ -0,0 +1,16 @@ +package com.cool.store.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class SyncEcCustomerLabelDO { + + + private String mobile; + + private String userPortrait; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/CallRecordBackReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/CallRecordBackReq.java index dca1ba4a6..794bd9ab2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/CallRecordBackReq.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/CallRecordBackReq.java @@ -14,4 +14,16 @@ public class CallRecordBackReq { @ApiModelProperty(value = "录音上传地址", required = true) private String recordUrl; + @ApiModelProperty(value = "呼叫状态: 1-呼叫接听, 2-呼叫未接听, 3-呼叫失败", required = true) + private Integer callStatus; + + @ApiModelProperty(value = "呼叫失败的情况下必传,说明呼叫失败的原因") + private String failReason; + + @ApiModelProperty(value = "呼叫接听情况下必传,通话开始时间,格式:yyyy-MM-dd HH:mm:ss") + private String callStartTime; + + @ApiModelProperty(value = "呼叫接听情况下必传,通话结束时间,格式:yyyy-MM-dd HH:mm:ss") + private String callEndTime; + } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/GetTagRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/GetTagRequest.java new file mode 100644 index 000000000..d1dba4f3d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/GetTagRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author hxd + */ +@Data +@Accessors(chain = true) +public class GetTagRequest { + private Long groupId; + private String groupName; + private Integer sort; + private Integer type; + private List list; + + @Data + @Accessors(chain = true) + public static class GetTagItem{ + private Long classId; + private String className; + private int sort; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerIntentInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerIntentInfoRequest.java index e1bab4f83..082490abf 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerIntentInfoRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerIntentInfoRequest.java @@ -27,6 +27,12 @@ public class PartnerIntentInfoRequest { @ApiModelProperty("常驻区域") private String liveArea; + @ApiModelProperty("详细地址") + private String detailedAddress; + + @ApiModelProperty("邮箱地址") + private String email; + @ApiModelProperty("意向开店区域") private String wantShopArea; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/BatchTransferVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/BatchTransferVO.java new file mode 100644 index 000000000..9586fe670 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/BatchTransferVO.java @@ -0,0 +1,18 @@ +package com.cool.store.vo; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2023/8/30 15:16 + * @Version 1.0 + */ +@Data +public class BatchTransferVO { + + private String partnerUserName; + + private String partnerMobile; + + private String errorMessage; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentInfoVO.java index 101a58f66..ba3acf640 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentInfoVO.java @@ -39,6 +39,9 @@ public class PartnerIntentInfoVO { @ApiModelProperty("常驻区域") private String liveArea; + @ApiModelProperty("详细地址") + private String detailedAddress; + @ApiModelProperty("意向开店区域") private String wantShopArea; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerLineInfoAndBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerLineInfoAndBaseInfoVO.java index 8e86fd176..a62494424 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerLineInfoAndBaseInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerLineInfoAndBaseInfoVO.java @@ -76,6 +76,12 @@ public class PartnerLineInfoAndBaseInfoVO { @ApiModelProperty("常驻区域") private String liveArea; + @ApiModelProperty("详细地址") + private String detailedAddress; + + @ApiModelProperty("邮箱") + private String email; + @ApiModelProperty("意向开店区域") private String wantShopArea; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java index 6fc28b28d..052dcc2d2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.HashMap; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/job/SyncEcCustomerLabelJob.java b/coolstore-partner-service/src/main/java/com/cool/store/job/SyncEcCustomerLabelJob.java new file mode 100644 index 000000000..3ae52a0df --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/job/SyncEcCustomerLabelJob.java @@ -0,0 +1,91 @@ +package com.cool.store.job; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.cool.store.entity.HyPartnerBaseInfoDO; +import com.cool.store.entity.SyncEcCustomerDO; +import com.cool.store.entity.SyncEcCustomerLabelDO; +import com.cool.store.mapper.HyPartnerBaseInfoMapper; +import com.cool.store.sdk.ec.EcClient; +import com.cool.store.sdk.ec.request.SyncEcCustomerLabelRequest; +import com.cool.store.sdk.ec.request.SyncEcCustomerRequest; +import com.cool.store.sdk.ec.response.SyncEcCustomerLabelResponse; +import com.cool.store.service.HyPartnerBaseInfoService; +import com.cool.store.utils.MybatisBatchUtils; +import com.cool.store.utils.StringUtil; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author hxd + */ +@Slf4j +@Component +public class SyncEcCustomerLabelJob { + + @Value("${ec.baseUrl:null}") + private String baseUrl; + + @Resource + private HyPartnerBaseInfoMapper hyPartnerBaseInfoMapper; + + @XxlJob("SyncEcCustomerLabelJob") + public void execute() { + XxlJobHelper.log("-------------------------------同步ec客户标签数据到小程序开始-------------------------------"); + syncEcLabelExecute(); + XxlJobHelper.log("-------------------------------同步ec标签数据到小程序结束-------------------------------"); + XxlJobHelper.handleSuccess(); + } + + @Autowired + private MybatisBatchUtils mybatisBatchUtils; + + private final Integer count = 20; + + /** + * 同步ec标签到招商数据库中 + */ + private void syncEcLabelExecute() { + //获取总数 + int size = hyPartnerBaseInfoMapper.selectAllList(); + //执行数 + int counts = size / count; + //取余,如果大于1,就再加一 + int yu = size % count; + if (yu > 0) { + counts += 1; + } + for (int i = 1; i <= counts; i++) { + XxlJobHelper.log("执行limit1:" + count * (i - 1) + ",执行limit2:" + count); + List list = hyPartnerBaseInfoMapper.selectListByLimit(count * (i - 1), count); + SyncEcCustomerLabelRequest syncEcCustomerLabelRequest = new SyncEcCustomerLabelRequest(); + syncEcCustomerLabelRequest.setParameter(list); + EcClient ecClient = new EcClient(); + SyncEcCustomerLabelResponse exec = ecClient.exec(baseUrl, syncEcCustomerLabelRequest); + if (ObjectUtil.isNull(exec)) { + continue; + } + List execList = exec.getData(); + if (CollectionUtils.isEmpty(execList)) { + continue; + } + List collect = execList.stream().map((item) -> { + HyPartnerBaseInfoDO hyPartnerBaseInfoDO = new HyPartnerBaseInfoDO(); + BeanUtil.copyProperties(item, hyPartnerBaseInfoDO); + return hyPartnerBaseInfoDO; + }).collect(Collectors.toList()); + mybatisBatchUtils.batchInsertOrUpdate(collect, HyPartnerBaseInfoMapper.class, (record, mapper) -> mapper.updateByMobile(record)); + } + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java new file mode 100644 index 000000000..10ec923f0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.sdk.ec.request; + +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.response.SyncEcCustomerLabelResponse; + +/** + * @author hxd + */ +public class SyncEcCustomerLabelRequest extends EcRequest { + + @Override + public String getApiUrl() { + return "/ec/appletToEcLabel"; + } + + + @Override + public Class getResponseClass() { + return SyncEcCustomerLabelResponse.class; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java new file mode 100644 index 000000000..bff4190f0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java @@ -0,0 +1,22 @@ +package com.cool.store.sdk.ec.response; + + +import com.cool.store.entity.SyncEcCustomerLabelDO; +import com.cool.store.sdk.ec.core.EcResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author hxd + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +public class SyncEcCustomerLabelResponse extends EcResponse { + + private List data; + +} 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 1901fd924..050fd0eb0 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,6 +1,7 @@ package com.cool.store.service; import com.cool.store.request.CustomerInfoRequest; +import com.cool.store.request.GetTagRequest; import java.util.List; @@ -8,4 +9,7 @@ public interface EcSyncService { boolean ecToApplet(List queryListData); void getChannelSource(); + + Boolean labelInfo(List getTagRequestList); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java index f442fb768..c5603c112 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java @@ -58,7 +58,7 @@ public interface HyPartnerLineInfoService { */ Boolean transferInvestmentManager(LoginUserInfo user, TransferInvestmentManagerRequest request,Boolean sendFlag) throws ApiException; - Boolean batchTransferInvestmentManager(LoginUserInfo user, BatchTransferInvestmentManagerRequest request) throws ApiException; + List batchTransferInvestmentManager(LoginUserInfo user, BatchTransferInvestmentManagerRequest request) throws ApiException; /** * 分配招商经理 @@ -66,7 +66,7 @@ public interface HyPartnerLineInfoService { * @param lineIdList * @return */ - Boolean allocationInvestmentManager(LoginUserInfo user, List lineIdList); + Boolean allocationInvestmentManager(LoginUserInfo user, String userId,List lineIdList); /** diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java index 1e2b882c1..5f5bf2aef 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java @@ -4,6 +4,7 @@ import com.cool.store.dto.label.LabelGroupAddDTO; import com.cool.store.dto.label.LabelGroupDeleteDTO; import com.cool.store.dto.label.LabelGroupListDTO; import com.cool.store.dto.label.LabelGroupUpdateDTO; +import com.cool.store.entity.HyPartnerLabelGroupDO; import com.cool.store.exception.ApiException; import com.cool.store.vo.LabelGroupListVo; @@ -44,4 +45,12 @@ public interface LabelGroupService { */ List getAllLabelGroupList(); + /** + * 添加ec标签组 + * @param hyPartnerLabelGroupDO + */ + void addEcLabelGroup(HyPartnerLabelGroupDO hyPartnerLabelGroupDO); + + HyPartnerLabelGroupDO selectByPrimaryKey(Long id); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java index 898f71d03..16b3d3a1f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java @@ -4,6 +4,7 @@ import com.cool.store.dto.label.LabelAddDTO; import com.cool.store.dto.label.LabelDeleteDTO; import com.cool.store.dto.label.LabelListDTO; import com.cool.store.dto.label.LabelUpdateDTO; +import com.cool.store.entity.HyPartnerLabelDO; import com.cool.store.exception.ApiException; import com.cool.store.vo.LabelListVo; @@ -55,4 +56,9 @@ public interface LabelService { * @param dto */ void deleteLabel(LabelDeleteDTO dto); + + HyPartnerLabelDO selectByPrimaryKey(Long classId); + + void addEcLabel(HyPartnerLabelDO hyPartnerLabelDO); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java index 0f3179ee5..251d554a1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java @@ -64,5 +64,12 @@ public interface OpenAreaService { */ OpenProvinceVO getOpenProvince(); + /** + * V1.4 + * 意向区域添加不限 + * 每个市下面添加一个不限 + */ + Boolean addOpenArea(); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java index 7ad1c508d..08870d621 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java @@ -137,6 +137,12 @@ public class CallServiceImpl implements CallService { if(callRecordDO == null){ throw new ApiException(ErrorCodeEnum.CALL_RECORD_NOT_EXIST_ERROR); } + callRecordDO.setCallStatus(request.getCallStatus()); + callRecordDO.setFailReason(request.getFailReason()); + if(StringUtils.isNotEmpty(request.getCallStartTime())&&StringUtils.isNotEmpty(request.getCallEndTime())){ + callRecordDO.setCallStartTime(DateUtil.parse(request.getCallStartTime())); + callRecordDO.setCallEndTime(DateUtil.parse(request.getCallEndTime())); + } callRecordDO.setRecordUrl(request.getRecordUrl()); callRecordDO.setUpdater("system-app"); callRecordDO.setUpdateTime(new Date()); 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 df71f7a3d..e1d7cac4d 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 @@ -16,8 +16,11 @@ 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.HyPartnerUserChannelMapper; import com.cool.store.request.CustomerInfoRequest; +import com.cool.store.request.GetTagRequest; import com.cool.store.sdk.ec.EcClient; import com.cool.store.sdk.ec.bo.ChangeFollowUserBo; import com.cool.store.sdk.ec.bo.UpdateCustomerBo; @@ -26,6 +29,8 @@ import com.cool.store.sdk.ec.request.UpdateCustomerRequest; import com.cool.store.sdk.ec.response.ChangeFollowUserResponse; import com.cool.store.sdk.ec.response.UpdateCustomerResponse; import com.cool.store.service.EcSyncService; +import com.cool.store.service.LabelGroupService; +import com.cool.store.service.LabelService; import com.cool.store.utils.Post; import com.cool.store.utils.StringUtil; import com.cool.store.utils.UUIDUtils; @@ -48,10 +53,10 @@ import java.util.List; public class EcSyncServiceImpl implements EcSyncService { - @Value("${ec.baseUrl:null}") private String baseUrl; + @Resource private HyPartnerLineInfoDAO hyPartnerLineInfoDAO; @@ -68,6 +73,12 @@ public class EcSyncServiceImpl implements EcSyncService { @Resource private HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + @Resource + private LabelGroupService labelGroupService; + + @Resource + private LabelService labelService; + @Override public boolean ecToApplet(List queryListData) { @@ -76,7 +87,7 @@ public class EcSyncServiceImpl implements EcSyncService { insertSelectiveSync(customerInfoItem); } catch (Exception e) { e.printStackTrace(); - sendFeiShuRobotMessage("推送:"+JSONObject.toJSONString(e),"27243d49-97ca-4981-8aec-7c3bf84eb660"); + sendFeiShuRobotMessage("推送:" + JSONObject.toJSONString(e), "27243d49-97ca-4981-8aec-7c3bf84eb660"); } } return false; @@ -84,7 +95,7 @@ public class EcSyncServiceImpl implements EcSyncService { @Override public void getChannelSource() { - String s = HttpUtil.get(baseUrl+"/ec/getChannelSource"); + String s = HttpUtil.get(baseUrl + "/ec/getChannelSource"); UserSourceResponse userSourceResponse = JSONObject.parseObject(s, UserSourceResponse.class); for (UserSourceResponse.ChannelSource channelSource : userSourceResponse.getData()) { Long id = channelSource.getId(); @@ -95,13 +106,35 @@ public class EcSyncServiceImpl implements EcSyncService { if (ObjectUtil.isNotNull(selectByChannel)) { hyPartnerUserChannel.setUpdateTime(new Date()).setId(selectByChannel.getId()); hyPartnerUserChannelMapper.updateByPrimaryKeySelective(hyPartnerUserChannel); - }else { + } else { hyPartnerUserChannel.setCreateTime(new Date()); hyPartnerUserChannelMapper.insertSelective(hyPartnerUserChannel); } } } + @Override + public Boolean labelInfo(List getTagRequestList) { + for (GetTagRequest getTagRequest : getTagRequestList) { + Long groupId = getTagRequest.getGroupId(); + if (ObjectUtil.isNotNull(labelGroupService.selectByPrimaryKey(groupId))) { + continue; + } + HyPartnerLabelGroupDO hyPartnerLabelGroupDO = new HyPartnerLabelGroupDO(); + hyPartnerLabelGroupDO.setLabelGroupName(getTagRequest.getGroupName()).setId(groupId); + labelGroupService.addEcLabelGroup(hyPartnerLabelGroupDO); + for (GetTagRequest.GetTagItem item : getTagRequest.getList()) { + if (ObjectUtil.isNotNull(labelService.selectByPrimaryKey(item.getClassId()))) { + continue; + } + HyPartnerLabelDO hyPartnerLabelDO = new HyPartnerLabelDO(); + hyPartnerLabelDO.setLabelName(item.getClassName()).setId(item.getClassId()).setLabelGroupId(groupId); + labelService.addEcLabel(hyPartnerLabelDO); + } + } + return Boolean.TRUE; + } + /** * 同步ec数据到表中 同时将部分数据同步到ec * @@ -115,13 +148,13 @@ public class EcSyncServiceImpl implements EcSyncService { //获取客户来源id String channel = customerInfoItem.getChannel(); HyPartnerUserChannelDO hyPartnerUserChannelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); - Long channelId =null; + Long channelId = null; if (StringUtil.isNotEmpty(channel)) { - if (ObjectUtil.isNull(hyPartnerUserChannelDO)||ObjectUtil.isNull(hyPartnerUserChannelDO.getChannelId())) { + if (ObjectUtil.isNull(hyPartnerUserChannelDO) || ObjectUtil.isNull(hyPartnerUserChannelDO.getChannelId())) { getChannelSource(); } HyPartnerUserChannelDO channelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); - channelId=channelDO.getChannelId(); + channelId = channelDO.getChannelId(); } String newPartnerId = UUIDUtils.get32UUID(); HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO(); @@ -131,11 +164,11 @@ public class EcSyncServiceImpl implements EcSyncService { String followUserName = customerInfoItem.getFollowUserName(); String followUserMobile = customerInfoItem.getFollowUserMobile(); //传递过来有跟进人的情况下查询跟进人是否存在 - if (StringUtil.isNotEmpty(followUserMobile)&&StringUtil.isNotEmpty(followUserName)) { + if (StringUtil.isNotEmpty(followUserMobile) && StringUtil.isNotEmpty(followUserName)) { String userId = enterpriseUserDAO.selectByMobile(followUserMobile); if (StringUtil.isEmpty(userId)) { // 给飞书群发送消息 跟进人找不到 - sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile,"27243d49-97ca-4981-8aec-7c3bf84eb660"); + sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile, "27243d49-97ca-4981-8aec-7c3bf84eb660"); throw new ApiException("飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile); } resultLine.setInvestmentManager(userId); @@ -147,7 +180,7 @@ public class EcSyncServiceImpl implements EcSyncService { resultBase.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile()); HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(resultUser.getMobile()); - EcClient ecClient=new EcClient(); + EcClient ecClient = new EcClient(); //有就更新ec没有就插入 if (newUserInfo != null) { //招商客户姓名为空 @@ -157,11 +190,11 @@ public class EcSyncServiceImpl implements EcSyncService { } // EC与沪姨合伙人同时存在的线索用户,但用户姓名不同,将沪姨合伙人线索姓名同步至EC覆盖原EC线索姓名 if (!newUserInfo.getUsername().equals(resultUser.getUsername())) { - UpdateCustomerRequest updateUserRequest=new UpdateCustomerRequest(); + 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); + UpdateCustomerResponse updateUserExec = ecClient.exec(baseUrl, updateUserRequest); } String oldPartnerId = newUserInfo.getPartnerId(); //线索表 @@ -169,14 +202,14 @@ public class EcSyncServiceImpl implements EcSyncService { if (partnerLine != null) { // EC与沪姨合伙人同时存在的线索用户,但存在不同的跟进人,将沪姨合伙人跟进人信息同步至EC覆盖原EC跟进人信息 if (StringUtil.isEmpty(partnerLine.getInvestmentManager())) { - if (StringUtil.isNotEmpty(resultLine.getInvestmentManager())) { + if (StringUtil.isNotEmpty(resultLine.getInvestmentManager())&&!getFollowLineStatus(partnerLine)) { resultLine.setId(partnerLine.getId()).setUpdateTime(new Date()); //沪姨合伙人线索存在黑名单,EC该线索分配跟进人同步到沪姨合伙人但线索状态不变,还存在黑名单中 - resultLine.setLineStatus(partnerLine.getLineStatus().intValue()==LineStatusEnum.BLACKLIST.getCode().intValue() - ?LineStatusEnum.BLACKLIST.getCode():resultLine.getLineStatus()); + resultLine.setLineStatus(partnerLine.getLineStatus().intValue() == LineStatusEnum.BLACKLIST.getCode().intValue() + ? LineStatusEnum.BLACKLIST.getCode() : resultLine.getLineStatus()); hyPartnerLineInfoDAO.updateByPrimaryKeySelective(resultLine); } - }else { + } else { if (!getFollowLineStatus(partnerLine)) { //私海 EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(partnerLine.getInvestmentManager()); @@ -232,7 +265,7 @@ public class EcSyncServiceImpl implements EcSyncService { /** *招商公海内跟进次数大于等于1的用户EC同步该用户进去公海,假若跟进次数为0的同步到EC跟进人就是唐佑玉 - * @param partnerLine + * @param partnerLine * @return true为公海 false:私海 */ public Boolean getFollowLineStatus(HyPartnerLineInfoDO partnerLine){ @@ -248,7 +281,6 @@ public class EcSyncServiceImpl implements EcSyncService { return Boolean.FALSE; } - /** * 得到不带86开头的号码 * diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java index dd29cf569..3986f152b 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java @@ -267,6 +267,9 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { if(CollectionUtils.isNotEmpty(existDeptIds)){ existDeptIds.remove(departmentDetail.getId()); } + if(CollectionUtils.isEmpty(existDeptIds)){ + enterpriseUser.setIsLeader(Boolean.FALSE); + } enterpriseUser.setLeaderDeptIds(JSONObject.toJSONString(existDeptIds)); } enterpriseUserDAO.batchInsertOrUpdate(leaderUserList); @@ -319,5 +322,4 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { } enterpriseUserDAO.batchInsertOrUpdate(userList); } - } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java index 27ca372a5..2ba862486 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java @@ -185,6 +185,7 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic partnerIntentInfoVO.setPartnerUserName(hyPartnerUserInfoDO.getUsername()); partnerIntentInfoVO.setWorkflowStage(hyPartnerLineInfoDO.getWorkflowStage()); partnerIntentInfoVO.setWorkflowStatus(hyPartnerLineInfoDO.getWorkflowStatus()); + partnerIntentInfoVO.setDetailedAddress(hyPartnerIntentInfoDO.getDetailedAddress()); partnerIntentInfoVO.setPartnerUserPhone(hyPartnerUserInfoDO.getMobile()); HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(Long.valueOf(hyPartnerUserInfoDO.getWantShopArea())); partnerIntentInfoVO.setWantShopAreaName(hyOpenAreaInfoDO.getAreaPath().replace("/"," ")); @@ -442,6 +443,8 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic intentInfoDO.setPartnerLineId(request.getPartnerLineId()); intentInfoDO.setLiveArea(request.getLiveArea()); intentInfoDO.setWantShopArea(request.getWantShopArea()); + intentInfoDO.setDetailedAddress(request.getDetailedAddress()); + intentInfoDO.setEmail(request.getEmail()); intentInfoDO.setAcceptAdjustType(request.getAcceptAdjustType()); intentInfoDO.setIsHaveWantShop(request.getIsHaveWantShop()); intentInfoDO.setWantShopInfo(""); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java index e103b6deb..5b6c3e1e5 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java @@ -225,7 +225,7 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan //更新会议开始时间为5分钟之内的房间状态为开启,会议状态变为已开始 Date startTime = new Date(); - List waitForOpenInterviewLineList = hyPartnerLineInfoMapper.getWaitForOpenInterviewLineList(DateUtil.offsetDay(startTime,-2), DateUtil.offsetMinute(startTime, 5)); + List waitForOpenInterviewLineList = hyPartnerLineInfoMapper.getWaitForOpenInterviewLineList(DateUtil.offsetDay(startTime,-1), DateUtil.offsetMinute(startTime, 5)); if(CollectionUtils.isEmpty(waitForOpenInterviewLineList)){ return; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java index 469346863..1e734ab6c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java @@ -169,6 +169,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { } @Override + @Transactional public Boolean transferInvestmentManager(LoginUserInfo user, TransferInvestmentManagerRequest request,Boolean sendFlag) throws ApiException { if (StringUtil.isBlank(request.getUserId())||request.getLineId()==null){ throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); @@ -178,8 +179,10 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { if (request.getUserId().equals(hyPartnerLineInfoDO.getInvestmentManager())){ throw new ServiceException(ErrorCodeEnum.NO_TRANSFER_REQUIRED); } - hyPartnerLineInfoDAO.updateInvestmentManager(request.getUserId(), Arrays.asList(request.getLineId())); - + //校验 合格资格面试阶段 面试状态已开始 不允许转让 + if(WorkflowStageEnum.INTERVIEW.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage())&&WorkflowStatusEnum.INTERVIEW_3.getCode().equals(hyPartnerLineInfoDO.getWorkflowStatus())){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_STATUS_NOT_TRANSFER,WorkflowStatusEnum.INTERVIEW_3.getMessage()); + } List userIdList = new ArrayList<>(); userIdList.add(request.getUserId()); if (StringUtils.isNotEmpty(hyPartnerLineInfoDO.getInvestmentManager())){ @@ -188,17 +191,28 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { List userList = enterpriseUserDAO.getUserInfoByUserIds(userIdList); Map userDOMap = userList.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, data -> data)); - //更新面试官 - if (WorkflowStageEnum.INTERVIEW.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage()) - && WorkflowStatusEnum.INTERVIEW_2.getCode().equals(hyPartnerLineInfoDO.getWorkflowStatus())){ + //更新面试官(预约面试全阶段和合作资格面试待面试阶段都需要变更面试官) + //待预约状态及之前还未生成面试信息,因此不做变更面试官操作 + if ( (WorkflowStageEnum.INTERVIEW.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage()) && WorkflowStatusEnum.INTERVIEW_2.getCode().equals(hyPartnerLineInfoDO.getWorkflowStatus())) + || (WorkflowStageEnum.RESERVATION.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage())) && !WorkflowStatusEnum.RESERVATION_0.getCode().equals(hyPartnerLineInfoDO.getWorkflowStatus())) { workFlowService.transferInvestmentManager(WorkflowStageEnum.getWorkflowStageByCode(hyPartnerLineInfoDO.getWorkflowStage()),request); } + //转让招商经理 + hyPartnerLineInfoDAO.updateInvestmentManager(request.getUserId(), Arrays.asList(request.getLineId())); + String dateTime = DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_7); + HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(hyPartnerLineInfoDO.getPartnerId()); //发送飞书工作通知 if (sendFlag){ - String dateTime = DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_7); - HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(hyPartnerLineInfoDO.getPartnerId()); noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),dateTime,hyPartnerUserInfoDO.getUsername(),hyPartnerUserInfoDO.getMobile()); } + //如果是面试预约待审批阶段还要发送面试预约申请通知 + if (WorkflowStageEnum.RESERVATION.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage()) && WorkflowStatusEnum.RESERVATION_1.getCode().equals(hyPartnerLineInfoDO.getWorkflowStatus())) { + HyPartnerInterviewPlanDO interviewPlanByLine = hyPartnerInterviewPlanDAO.getInterviewPlanByLineId(request.getLineId()); + if (interviewPlanByLine!=null && interviewPlanByLine.getStartTime()!=null ){ + String startTime = DateUtil.format(interviewPlanByLine.getStartTime(), CoolDateUtils.DATE_FORMAT_SEC_7); + noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.INTERVIEW_APPOINTMENT, Arrays.asList(request.getUserId()),hyPartnerUserInfoDO.getUsername(),hyPartnerUserInfoDO.getMobile(),startTime); + } + } //作废待完成&已逾期的任务 hyFollowTaskDAO.cancelUndoFollowTask(request.getLineId()); @@ -220,37 +234,61 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { } @Override - public Boolean batchTransferInvestmentManager(LoginUserInfo user, BatchTransferInvestmentManagerRequest request) throws ApiException { + public List batchTransferInvestmentManager(LoginUserInfo user, BatchTransferInvestmentManagerRequest request) throws ApiException { if (CollectionUtils.isEmpty(request.getLineIds())||StringUtils.isEmpty(request.getUserId())){ throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); } - int num = request.getLineIds().size(); - List hyPartnerLineInfoList = hyPartnerLineInfoDAO.getHyPartnerLineInfoList(request.getLineIds(), request.getUserId()); - //如果选中的线索中有线索招商经理已经是被装让的招商经理,则不允许批量操作 - if (CollectionUtils.isNotEmpty(hyPartnerLineInfoList)){ - throw new ServiceException(ErrorCodeEnum.NO_BATCH_TRANSFER_REQUIRED); - } + List result = new ArrayList<>(); + List hyPartnerLineInfoList = hyPartnerLineInfoDAO.getHyPartnerLineInfoList(request.getLineIds(), null); + Map partnerMap = hyPartnerLineInfoList.stream().collect(Collectors.toMap(HyPartnerLineInfoDO::getId, HyPartnerLineInfoDO::getPartnerId)); + List partnerIdList = hyPartnerLineInfoList.stream().filter(x->StringUtils.isNotEmpty(x.getPartnerId())) + .map(HyPartnerLineInfoDO::getPartnerId).distinct().collect(Collectors.toList()); + List hyPartnerUserInfoDOS = hyPartnerUserInfoDAO.selectByPartnerIds(partnerIdList); + Map partnerUserInfoDOMap = hyPartnerUserInfoDOS.stream().collect(Collectors.toMap(HyPartnerUserInfoDO::getPartnerId, x -> x)); + List successLineIds = new ArrayList<>(); for (Long lineId:request.getLineIds()) { TransferInvestmentManagerRequest transferInvestmentManagerRequest = new TransferInvestmentManagerRequest(); transferInvestmentManagerRequest.setUserId(request.getUserId()); transferInvestmentManagerRequest.setLineId(lineId); try { - this.transferInvestmentManager(user,transferInvestmentManagerRequest,num<=1?true:false); - } catch (ApiException e) { - log.info("transferInvestmentManager_success Transfer_interview_management_failed,lineId:{}",lineId); + this.transferInvestmentManager(user,transferInvestmentManagerRequest,Boolean.FALSE); + successLineIds.add(lineId); + } catch (Exception e) { + log.info("transferInvestmentManager_success Transfer_interview_management_failed,lineId:{},e:{}",lineId,e.getMessage()); + HyPartnerUserInfoDO hyPartnerUserInfoDO = partnerUserInfoDOMap.get(partnerMap.get(lineId)); + BatchTransferVO batchTransferVO = new BatchTransferVO(); + batchTransferVO.setErrorMessage(e.getMessage()); + if (e instanceof ServiceException){ + batchTransferVO.setErrorMessage(((ServiceException)e).getErrorMessage()); + } + batchTransferVO.setPartnerMobile(hyPartnerUserInfoDO.getMobile()); + batchTransferVO.setPartnerUserName(hyPartnerUserInfoDO.getUsername()); + result.add(batchTransferVO); } } - if (num>1){ - noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.BATCH_TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),num,DateUtil.format(new Date(),CoolDateUtils.DATE_FORMAT_SEC_7)); + try { + if (successLineIds.size()>1){ + noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.BATCH_TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),successLineIds.size(),DateUtil.format(new Date(),CoolDateUtils.DATE_FORMAT_SEC_7)); + }else if (successLineIds.size()==1){ + String dateTime = DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_7); + HyPartnerUserInfoDO hyPartnerUserInfoDO = partnerUserInfoDOMap.get(partnerMap.get(successLineIds.get(0))); + noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),dateTime,hyPartnerUserInfoDO.getUsername(),hyPartnerUserInfoDO.getMobile()); + } + } catch (Exception e) { + log.info("batchTransferInvestmentManager_error:{}",e.getMessage()); } - return Boolean.TRUE; + return result; } @Override - public Boolean allocationInvestmentManager(LoginUserInfo user, List lineIdList) { - if (user==null|| CollectionUtils.isEmpty(lineIdList)){ + public Boolean allocationInvestmentManager(LoginUserInfo operateUser,String userId, List lineIdList) { + if (StringUtils.isEmpty(userId)|| CollectionUtils.isEmpty(lineIdList)){ throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); } + EnterpriseUserDO user = enterpriseUserDAO.getUserInfoById(userId); + if (user==null){ + throw new ServiceException(ErrorCodeEnum.INVESTMENT_MANAGER_NOT_EXIST); + } //加盟上线索集合 List partnerLineInfoList= hyPartnerLineInfoDAO.getLineListByLineIds(lineIdList); //过滤出已结束的线索 这块线索需要重新生成新的线索 @@ -262,7 +300,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { closeLineList.stream().forEach(x->{ HyPartnerLineInfoDO hyPartnerLineInfoDO = new HyPartnerLineInfoDO(); hyPartnerLineInfoDO.setPartnerId(x.getPartnerId()); - hyPartnerLineInfoDO.setInvestmentManager(user.getUserId()); + hyPartnerLineInfoDO.setInvestmentManager(userId); hyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode()); hyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.INTENT_0.getCode()); hyPartnerLineInfoDO.setLineStatus(1); @@ -282,22 +320,22 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { //没有结束的线索直接分配招商经理 List otherLineList = partnerLineInfoList.stream().filter(x -> x.getCloseTime() == null).collect(Collectors.toList()); List otherLineIdList = otherLineList.stream().map(HyPartnerLineInfoDO::getId).collect(Collectors.toList()); - hyPartnerLineInfoDAO.updateInvestmentManager(user.getUserId(), otherLineIdList); + hyPartnerLineInfoDAO.updateInvestmentManager(userId, otherLineIdList); //添加日志 partnerLineInfoList.forEach(x->{ //给招商经理发送飞书工作通知 List userIdList = new ArrayList<>(); - userIdList.add(user.getUserId()); + userIdList.add(userId); HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(x.getPartnerId()); String dateTime = DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_7); noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.ALLOCATION_INVESTMENT_MANAGER,userIdList,dateTime,hyPartnerUserInfoDO.getUsername(),hyPartnerUserInfoDO.getMobile()); - LineLogInfo lineLogInfo = new LineLogInfo(x.getPartnerId(), x.getId(), user.getUserId(), - user.getName(), OperateTypeEnum.ALLOCATION_INVESTMENT_MANAGER, + LineLogInfo lineLogInfo = new LineLogInfo(x.getPartnerId(), x.getId(), operateUser.getUserId(), + operateUser.getName(), OperateTypeEnum.ALLOCATION_INVESTMENT_MANAGER, WorkflowStageEnum.getWorkflowStageByCode(x.getWorkflowStage()), x.getWorkflowStatus(), ""); - AllocationInvestmentManagerLogDTO logDTO = AllocationInvestmentManagerLogDTO.builder().allocationUserId(user.getUserId()).allocationUsername(user.getName()) - .mobile(user.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).build(); + AllocationInvestmentManagerLogDTO logDTO = AllocationInvestmentManagerLogDTO.builder().allocationUserId(operateUser.getUserId()).allocationUsername(operateUser.getName()) + .mobile(operateUser.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).build(); lineLogInfo.setData(logDTO); hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo); }); @@ -485,9 +523,9 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { //通过 拒绝添加日志 - if ("pass".equals(closeFollowRequest.getType())||"reject".equals(closeFollowRequest.getType())){ + if (WorkflowStageEnum.INTENT.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage())&&"reject".equals(closeFollowRequest.getType())){ LineLogInfo lineLogInfo = new LineLogInfo(hyPartnerLineInfoDO.getPartnerId(), hyPartnerLineInfoDO.getId(), user.getUserId(), - user.getName(), OperateTypeEnum.REMOVE_BLACKLIST, + user.getName(), OperateTypeEnum.CLOSE_FOLLOW, WorkflowStageEnum.getWorkflowStageByCode(oldWorkflowStage), oldWorkflowStatus, ""); CloseOrPassFollowLogDTO log = CloseOrPassFollowLogDTO.builder().operateUserId(user.getUserId()).passReason(closeFollowRequest.getPassReason()).rejectRealReason(closeFollowRequest.getRejectRealReason()) @@ -957,6 +995,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { partnerLineInfoAndBaseInfoVO.setAcceptAdjustType(partnerLineInfoAndBaseInfoDTO.getAcceptAdjustType()); partnerLineInfoAndBaseInfoVO.setWantShopArea(partnerLineInfoAndBaseInfoDTO.getWantShopArea()); partnerLineInfoAndBaseInfoVO.setLiveArea(partnerLineInfoAndBaseInfoDTO.getLiveArea()); + partnerLineInfoAndBaseInfoVO.setDetailedAddress(partnerLineInfoAndBaseInfoDTO.getDetailedAddress()); + partnerLineInfoAndBaseInfoVO.setEmail(partnerLineInfoAndBaseInfoDTO.getEmail()); partnerLineInfoAndBaseInfoVO.setIdCard(partnerLineInfoAndBaseInfoDTO.getIdCard()); partnerLineInfoAndBaseInfoVO.setChannelName(partnerLineInfoAndBaseInfoDTO.getChannelName()); partnerLineInfoAndBaseInfoVO.setDevelopmentDirector(partnerLineInfoAndBaseInfoDTO.getDevelopmentDirector()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 8700cfcb4..ea8d4bf2c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -13,10 +13,7 @@ import com.cool.store.context.PartnerUserHolder; import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.HyIntendDevMappingDAO; import com.cool.store.dao.HyInterviewDAO; -import com.cool.store.dto.calendar.CreateCalendarEventDTO; -import com.cool.store.dto.calendar.DeleteCalendarEventDTO; -import com.cool.store.dto.calendar.UserCalendarsEventDTO; -import com.cool.store.dto.calendar.UserFreeBusyInfoDTO; +import com.cool.store.dto.calendar.*; import com.cool.store.dto.log.*; import com.cool.store.dto.message.SendCardMessageDTO; import com.cool.store.dto.partner.EnterInterviewDto; @@ -156,38 +153,66 @@ public class InterviewServiceImpl implements InterviewService { @Override @Transactional public void entrustOthers(EntrustOthersReq request) throws ApiException { - //只有房间状态是待开放才可以委托他人 - Integer roomStatus = hyPartnerInterviewPlanMapper.getRoomStatus(request.getInterviewPlanId()); - if (!roomStatus.equals(RoomStatus.WAIT_FOR_OPEN.getCode())) { - throw new ApiException(ErrorCodeEnum.ROOM_STATUS_ERROR); - } InterviewVO interviewInfo = hyPartnerInterviewPlanMapper.getInterviewInfo(request.getInterviewPlanId()); + HyPartnerLineInfoDO lineInfo = hyPartnerLineInfoMapper.selectByPrimaryKeySelective(request.getPartnerLineId()); //如果面试信息为空,抛出异常 if (interviewInfo == null) { throw new ApiException(ErrorCodeEnum.INTERVIEW_PLAN_NOT_EXIST); } - if(RoomStatus.WAIT_FOR_OPEN.getCode() != Integer.parseInt(interviewInfo.getRoomStatus())){ - throw new ApiException(ErrorCodeEnum.ROOM_STATUS_ERROR); + //只有预约面试阶段和合作资格面试待面试阶段才能变更面试官 + if ( !WorkflowStatusEnum.INTERVIEW_2.getCode().equals(lineInfo.getWorkflowStatus()) + && !WorkflowStageEnum.RESERVATION.getCode().equals(lineInfo.getWorkflowStage())) { + throw new ApiException(ErrorCodeEnum.INTERVIEW_STATUS_ERROR); } - //1.新面试官日程新增 - CreateCalendarEventDTO createCalendarEventDTO = new CreateCalendarEventDTO(); - createCalendarEventDTO.setStartTime(DateUtil.parse(interviewInfo.getStartTime()).getTime()); - createCalendarEventDTO.setEndTime(DateUtil.parse(interviewInfo.getEndTime()).getTime()); - createCalendarEventDTO.setUserId(request.getNewInterviewerId()); - createCalendarEventDTO.setJoinUserIds(Arrays.asList(request.getNewInterviewerId())); - createCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); - UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); - if(userCalendarEvent == null ){ - throw new ApiException(ErrorCodeEnum.CREATE_CALENDAR_EVENT_FAIL); - } - //2.原面试官日程删除 - DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); - deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); - deleteCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); - deleteCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); - UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.deleteUserCalendarEvent(deleteCalendarEventDTO); - if(userCalendarsEventDTO == null ){ - throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); +// //1.新面试官日程新增 +// CreateCalendarEventDTO createCalendarEventDTO = new CreateCalendarEventDTO(); +// createCalendarEventDTO.setStartTime(DateUtil.parse(interviewInfo.getStartTime()).getTime()); +// createCalendarEventDTO.setEndTime(DateUtil.parse(interviewInfo.getEndTime()).getTime()); +// createCalendarEventDTO.setUserId(request.getNewInterviewerId()); +// createCalendarEventDTO.setJoinUserIds(Arrays.asList(request.getNewInterviewerId())); +// createCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); +// UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); +// if(userCalendarEvent == null ){ +// throw new ApiException(ErrorCodeEnum.CREATE_CALENDAR_EVENT_FAIL); +// } +// //2.原面试官日程删除 +// DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); +// deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); +// deleteCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); +// deleteCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); +// UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.deleteUserCalendarEvent(deleteCalendarEventDTO); +// if(userCalendarsEventDTO == null ){ +// throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); +// } + + //有可能还未同意面试预约,这时候没有建立日程,只需要修改面试官 + //1.4 优化多次转让,线索转让次数 >= 1 无需添加日程,只转让线索的招商经理及面试官 + Integer transferTimes = hyPartnerLineInfoMapper.getTransferTimes(request.getPartnerLineId()); + if (interviewInfo.getFeishuCalendarId() != null && interviewInfo.getFeishuScheduleId() != null + && transferTimes < 1) { + //V1.3 需求变更为将新面试官拉入原面试官日程,而非删除和新增日程 + //1. 原面试官面试日程信息 + String oldInterviewerId = CurrentUserHolder.getUserId(); + UpdateCalendarEventDTO updateCalendarEventDTO = new UpdateCalendarEventDTO(); + updateCalendarEventDTO.setUserId(oldInterviewerId); + updateCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); + updateCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); + updateCalendarEventDTO.setStartTime(DateUtil.parse(interviewInfo.getStartTime()).getTime()); + updateCalendarEventDTO.setEndTime(DateUtil.parse(interviewInfo.getEndTime()).getTime()); + updateCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); + + //2. 邀请新面试官加入日程 + List list = new ArrayList(); + list.add(request.getNewInterviewerId()); + //当前招商经理不是面试官,但是日程在招商经理这里 + if (!oldInterviewerId.equals(list.get(0))) { + list.add(oldInterviewerId); + } + updateCalendarEventDTO.setJoinUserIds(list); + UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.updateUserCalendarEvent(updateCalendarEventDTO); + if(userCalendarsEventDTO == null ){ + throw new ApiException(ErrorCodeEnum.FEISHU_UPDATE_SCHEDULE_ERROR); + } } // 3.面试信息计划变更 @@ -195,8 +220,8 @@ public class InterviewServiceImpl implements InterviewService { record.setId(Long.valueOf(request.getInterviewPlanId())); record.setInterviewer(request.getNewInterviewerId()); record.setUpdateTime(new Date()); - record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); - record.setFeishuScheduleId(userCalendarEvent.getEventId()); +// record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); +// record.setFeishuScheduleId(userCalendarEvent.getEventId()); hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(record); //更新面试信息 @@ -254,7 +279,13 @@ public class InterviewServiceImpl implements InterviewService { createCalendarEventDTO.setStartTime(DateUtil.parse(request.getNewStartBookingTime()).getTime()); createCalendarEventDTO.setEndTime(DateUtil.parse(request.getNewEndBookingTime()).getTime()); createCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); - createCalendarEventDTO.setJoinUserIds(Arrays.asList(interviewInfo.getInterviewerId())); + List list = Arrays.asList(interviewInfo.getInterviewerId()); + //可能当前招商经理不是面试官,但是日程在招商经理这里 + String userId = CurrentUserHolder.getUserId(); + if (!userId.equals(list.get(0))) { + list.add(userId); + } + createCalendarEventDTO.setJoinUserIds(list); createCalendarEventDTO.setSummary(generateInterviewTitle(interviewInfo.getPartnerLineId())); UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); if (userCalendarEvent == null) { @@ -391,6 +422,10 @@ public class InterviewServiceImpl implements InterviewService { if(request.getPartnerLineId() == null || request.getPartnerLineId()<=0){ throw new ApiException(ErrorCodeEnum.INTERVIEW_LINE_ID_IS_NULL); } + //如果开始时间小于当前时间需要报错 + if(DateUtil.date().isAfter(DateUtil.parse(request.getStartBookingTime()))){ + throw new ApiException(ErrorCodeEnum.CREATE_APPOINTMENT_TIME_ERROR); + } HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO(); hyPartnerInterviewPlanDO.setPartnerLineId(request.getPartnerLineId()); hyPartnerInterviewPlanDO.setDeleted(false); @@ -505,6 +540,13 @@ public class InterviewServiceImpl implements InterviewService { record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); record.setFeishuScheduleId(userCalendarEvent.getEventId()); record.setApplicationApproved(1); + //如果同意的时候已经超过预约的时间前 5 分钟,直接进入面试已开始阶段 + DateTime interviewStartTime = DateUtil.offsetMinute(DateUtil.parseDateTime(interviewVO.getStartTime()), -5); + Date now = new Date(); + if (interviewStartTime.isBeforeOrEquals(now)) { + record.setRoomStatus(RoomStatus.OPEN.getCode()); + record.setActualEndTime(new Date()); + } record.setUpdateTime(new Date()); hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(record); @@ -512,7 +554,11 @@ public class InterviewServiceImpl implements InterviewService { HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO(); hyPartnerInterviewDO.setId(Long.valueOf(interviewVO.getInterviewId())); //更新面试状态和线索子流程状态 - interviewDAO.updateInterviewWorkflowStatus(request.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_2); + if (interviewStartTime.isBeforeOrEquals(now)) { + interviewDAO.updateInterviewWorkflowStatus(request.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_3); + } else { + interviewDAO.updateInterviewWorkflowStatus(request.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_2); + } // hyPartnerInterviewDO.setStatus(Integer.valueOf(WorkflowStatusEnum.INTERVIEW_2.getCode())); hyPartnerInterviewDO.setUpdateTime(new Date()); hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java index e220b230d..ebb8cef06 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java @@ -14,6 +14,7 @@ import com.cool.store.mapper.HyPartnerLabelMapper; import com.cool.store.service.LabelGroupService; import com.cool.store.vo.LabelGroupListVo; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,6 +34,10 @@ public class LabelGroupServiceImpl implements LabelGroupService { @Autowired private HyPartnerLabelMapper labelMapper; + + @Value("${ec.sync.createUserId:null}") + private String createUserId; + /** * 查询标签组信息列表 * @param dto 查询条件 @@ -110,6 +115,18 @@ public class LabelGroupServiceImpl implements LabelGroupService { return labelGroupMapper.getLabelGroupList(labelGroupDO); } + @Override + public HyPartnerLabelGroupDO selectByPrimaryKey(Long id){ + return labelGroupMapper.selectByPrimaryKey(id); + } + + @Override + public void addEcLabelGroup(HyPartnerLabelGroupDO hyPartnerLabelGroupDO) { + hyPartnerLabelGroupDO.setCreateTime(new Date()).setCreateUserId(createUserId).setEditDate(new Date()) + .setEditUserId(createUserId); + labelGroupMapper.insertSelective(hyPartnerLabelGroupDO); + } + /** * 某个标签组内是否有未删除的标签 * @param id 标签组 id diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java index 09075ca25..dcdf395b8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -32,6 +33,11 @@ public class LabelServiceImpl implements LabelService { @Autowired private HyPartnerLabelMapper labelMapper; + + + @Value("${ec.sync.createUserId:null}") + private String createUserId; + /** * 获取数组列表 * @@ -98,6 +104,18 @@ public class LabelServiceImpl implements LabelService { labelMapper.updateByPrimaryKeySelective(labelDO); } + @Override + public HyPartnerLabelDO selectByPrimaryKey(Long classId) { + return labelMapper.selectByPrimaryKey(classId); + } + + @Override + public void addEcLabel(HyPartnerLabelDO hyPartnerLabelDO) { + hyPartnerLabelDO.setEditDate(new Date()).setCreateTime(new Date()).setEditUserId(createUserId).setCreateUserId(createUserId) + .setUpdateUserId(createUserId); + labelMapper.insertSelective(hyPartnerLabelDO); + } + private Boolean whetherLabelRepeat(HyPartnerLabelDO label) throws ApiException { Long id = label.getId(); label.setId(null); 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 3de180c12..f70a855b9 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 @@ -36,6 +36,7 @@ import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; @Service public class LineHighSeasServiceImpl implements LineHighSeasService { @@ -145,6 +146,10 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { 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())) + .entrySet().stream().filter(e -> e.getValue() > 1) + .map(Map.Entry::getKey).collect(Collectors.toList()); for (int i = 0; i < lineDOList.size(); i++) { HyPartnerLineDO hyPartnerLineDO = lineDOList.get(i); String partnerName = hyPartnerLineDO.getPartnerName(); @@ -174,6 +179,11 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_EXIST : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_EXIST)); ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); } + //手机号重复 + if (uniqueList.contains(mobile)) { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_REPEAT : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_REPEAT)); + ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); + } } //常驻区域为空 String liveArea = hyPartnerLineDO.getLiveAreaReplace().trim(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java index 353afeed5..3c4799195 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java @@ -6,6 +6,7 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.dao.HyOpenAreaInfoDAO; import com.cool.store.dto.partner.ApplyReservationProvinceDTO; import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.mapper.HyOpenAreaInfoMapper; import com.cool.store.request.OpenAreaRequest; import com.cool.store.service.OpenAreaService; import com.cool.store.utils.RedisUtilPool; @@ -36,6 +37,8 @@ public class OpenAreaServiceImpl implements OpenAreaService { @Resource private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; @Resource + private HyOpenAreaInfoMapper hyOpenAreaInfoMapper; + @Resource private RedisUtilPool redisUtilPool; @@ -190,6 +193,25 @@ public class OpenAreaServiceImpl implements OpenAreaService { return openProvinceVO; } + @Override + public Boolean addOpenArea() { + //查询出所有的市 + List openArea = hyOpenAreaInfoDAO.selectAllCity(); + if (CollectionUtils.isNotEmpty(openArea)){ + //在每个市下面添加名称为不限的区 + openArea.forEach(x->{ + Long id = x.getId(); + HyOpenAreaInfoDO hyOpenAreaInfoDO = new HyOpenAreaInfoDO(); + hyOpenAreaInfoDO.setAreaStatus("open"); + hyOpenAreaInfoDO.setAreaName("不限"); + hyOpenAreaInfoDO.setParentId(id); + hyOpenAreaInfoDO.setAreaPath(x.getAreaPath()+"不限/"); + hyOpenAreaInfoMapper.insertSelective(hyOpenAreaInfoDO); + }); + } + return true; + } + private OpenAreaVO convertDoToVo(HyOpenAreaInfoDO hyOpenAreaInfoDO){ OpenAreaVO openAreaVO = new OpenAreaVO(); openAreaVO.setId(hyOpenAreaInfoDO.getId()); @@ -259,6 +281,7 @@ public class OpenAreaServiceImpl implements OpenAreaService { } } return jsonArray; - } + + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java index 0ed14ebcd..1d43cc19c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java @@ -184,6 +184,10 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { if(RoomStatus.WAIT_FOR_OPEN.getCode() != Integer.parseInt(interviewInfo.getRoomStatus())){ throw new ApiException(ErrorCodeEnum.ROOM_STATUS_ERROR); } + //如果开始时间小于当前时间需要报错 + if(DateUtil.date().isAfter(DateUtil.parse(request.getNewStartBookingTime()))){ + throw new ApiException(ErrorCodeEnum.CREATE_APPOINTMENT_TIME_ERROR); + } HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO(); record.setId(Long.valueOf(request.getInterviewPlanId())); record.setStartTime(Convert.toDate(request.getNewStartBookingTime())); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerUserInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerUserInfoServiceImpl.java index 23eb1dea2..73d3c079a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerUserInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerUserInfoServiceImpl.java @@ -104,6 +104,13 @@ public class PartnerUserInfoServiceImpl implements PartnerUserInfoService { UserInfoUpdateDTO.UserInfoUpdate beforeUserinfoUpdate = new UserInfoUpdateDTO.UserInfoUpdate(hyPartnerUserInfoDO.getUsername(), hyPartnerUserInfoDO.getMobile(), hyPartnerUserInfoDO.getLiveArea(), hyPartnerUserInfoDO.getWantShopArea(), hyPartnerUserInfoDO.getAcceptAdjustType()); UserInfoUpdateDTO.UserInfoUpdate afterUserinfoUpdate = new UserInfoUpdateDTO.UserInfoUpdate(partnerUserInfoRequest.getUsername(), partnerUserInfoRequest.getMobile(), partnerUserInfoRequest.getLiveArea(), partnerUserInfoRequest.getWantShopArea(), partnerUserInfoRequest.getAcceptAdjustType()); + //如果手机号不相同 校验手机号 + if (StringUtils.isNotEmpty(hyPartnerUserInfoDO.getMobile()) && !hyPartnerUserInfoDO.getMobile().equals(partnerUserInfoRequest.getMobile())){ + HyPartnerUserInfoDO userInfo = hyPartnerUserInfoDAO.selectByMobile(partnerUserInfoRequest.getMobile()); + if (userInfo != null){ + throw new ServiceException(ErrorCodeEnum.MOBILE_EXIST); + } + } ApplyBaseInfoVO applyBaseInfoVO = new ApplyBaseInfoVO(); fillUserInfoDOByRequest(hyPartnerUserInfoDO, partnerUserInfoRequest); hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java index 0c418a371..b6caf8823 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java @@ -1,6 +1,7 @@ package com.cool.store.service.impl; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; import com.cool.store.utils.StringUtil; import com.cool.store.vo.interview.CalendarInfo; import com.cool.store.vo.interview.FreeBusyInfo; @@ -17,7 +18,7 @@ public class TimeSlotGenerator { List daySlots = generateDaySlots(startDate, endDate); for (CalendarInfo daySlot : daySlots) { - System.out.println(daySlot); + System.out.println(JSON.toJSON(daySlot)); } } @@ -36,7 +37,7 @@ public class TimeSlotGenerator { int day = startCal.get(Calendar.DAY_OF_MONTH); int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK); - List hourSlots = generateHourSlots(); + List hourSlots = generateHalfHourSlots(); CalendarInfo daySlot = new CalendarInfo(transDayOfWeek(dayOfWeek), String.valueOf(year), StringUtil.addZeroForNum(String.valueOf(month),2), @@ -65,6 +66,29 @@ public class TimeSlotGenerator { return hourSlots; } + private static List generateHalfHourSlots() { + List hourSlots = new ArrayList<>(); + + //循环打印半小时的时间段 + for (int hour = 10; hour < 17; hour++) { + if(hour == 12){ + continue; + } + String startTime = String.format("%02d:00", hour); + String endTime = String.format("%02d:30", hour); + //默认空闲 + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true); + hourSlots.add(hourSlot); + + String startTime2 = String.format("%02d:30", hour); + String endTime2 = String.format("%02d:00", hour + 1); + //默认空闲 + FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true); + hourSlots.add(hourSlot2); + } + return hourSlots; + } + public static int transDayOfWeek(int dayOfWeek) { switch (dayOfWeek) { case 1: diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java index 0408c753f..ac4aba48a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java @@ -106,6 +106,12 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService { // 微信未授权过 if(hyPartnerUserPlatformBindDO == null){ hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(phoneInfoDTO.getPhoneInfo().getPhoneNumber()); + if(hyPartnerUserInfoDO != null){ + HyPartnerUserPlatformBindDO hy = hyPartnerUserPlatformBindDAO.getByPartnerId(hyPartnerUserInfoDO.getPartnerId()); + if (hy!=null){ + throw new ServiceException(ErrorCodeEnum.MOBILE_WECHAT_EXIST); + } + } if(hyPartnerUserInfoDO == null){ hyPartnerUserInfoDO = new HyPartnerUserInfoDO(); hyPartnerUserInfoDO.setMobile(phoneInfoDTO.getPhoneInfo().getPhoneNumber()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/IntentWorkFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/IntentWorkFlowService.java index c74d8fa47..ace04cbcd 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/IntentWorkFlowService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/IntentWorkFlowService.java @@ -1,11 +1,29 @@ package com.cool.store.service.impl.workflow; +import cn.hutool.core.date.DateUtil; +import com.cool.store.entity.HyPartnerInterviewDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.RoomStatus; import com.cool.store.enums.WorkflowStageEnum; +import com.cool.store.enums.WorkflowStatusEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.HyPartnerInterviewMapper; +import com.cool.store.mapper.HyPartnerInterviewPlanMapper; import com.cool.store.request.CloseFollowRequest; +import com.cool.store.request.EntrustOthersReq; import com.cool.store.request.TransferInvestmentManagerRequest; +import com.cool.store.service.InterviewService; +import com.cool.store.vo.interview.InterviewVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + /** * @author zhangchenbiao * @FileName: IntentWorkFlowService diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java index b6b6ff3c0..1c4e59fd2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java @@ -74,13 +74,15 @@ public class InterviewWorkFlowService extends WorkFlowBaseService { if (CollectionUtils.isEmpty(interviewBaseInfos)) { throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); } + LoginUserInfo operator = CurrentUserHolder.getUser(); HyPartnerInterviewDO interviewBaseInfo = interviewBaseInfos.get(0); InterviewVO interviewInfo = hyPartnerInterviewPlanMapper.getInterviewInfo(String.valueOf(interviewBaseInfo.getInterviewPlanId())); if(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_2.getCode()) == interviewBaseInfo.getStatus() && StringUtils.isNotEmpty(interviewInfo.getRoomStatus()) && String.valueOf(RoomStatus.WAIT_FOR_OPEN.getCode()).equals(interviewInfo.getRoomStatus()) && StringUtils.isNotEmpty(interviewInfo.getFeishuCalendarId()) - && StringUtils.isNotEmpty(interviewInfo.getFeishuScheduleId())){ + && StringUtils.isNotEmpty(interviewInfo.getFeishuScheduleId()) + && interviewInfo.getInterviewerId().equals(operator.getUserId())){ // 原面试官日程删除 DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); @@ -100,7 +102,6 @@ public class InterviewWorkFlowService extends WorkFlowBaseService { } interviewService.rejectInterviewAndSuspendLine(interviewBaseInfo.getId(),interviewBaseInfo.getInterviewPlanId(),null); //记录日志 - LoginUserInfo operator = CurrentUserHolder.getUser(); RejectInterviewDTO log = RejectInterviewDTO.builder().mobile(operator.getMobile()).operateUserId(operator.getUserId()).operateUsername(operator.getName()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC)) .rejectRealReason(request.getRejectRealReason()).rejectPublicReason(request.getRejectPublicReason()).certifyFile(request.getCertifyFile()).build(); logService.recordBizLog(operator,request.getLineId(), OperateTypeEnum.REJECT_INTERVIEW,log); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/ReservationWorkFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/ReservationWorkFlowService.java index a3e62033a..5ced3e9e6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/ReservationWorkFlowService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/ReservationWorkFlowService.java @@ -1,11 +1,26 @@ package com.cool.store.service.impl.workflow; +import com.cool.store.entity.HyPartnerInterviewDO; +import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.WorkflowStageEnum; +import com.cool.store.enums.WorkflowStatusEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.HyPartnerInterviewMapper; +import com.cool.store.mapper.HyPartnerInterviewPlanMapper; import com.cool.store.request.CloseFollowRequest; +import com.cool.store.request.EntrustOthersReq; import com.cool.store.request.TransferInvestmentManagerRequest; +import com.cool.store.service.InterviewService; +import com.cool.store.vo.interview.InterviewVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.List; + /** * @author zhangchenbiao * @FileName: ReservationWorkFlowService @@ -16,6 +31,15 @@ import org.springframework.stereotype.Service; @Service public class ReservationWorkFlowService extends WorkFlowBaseService { + @Autowired + private HyPartnerInterviewMapper hyPartnerInterviewMapper; + + @Autowired + private HyPartnerInterviewPlanMapper hyPartnerInterviewPlanMapper; + + @Autowired + private InterviewService interviewService; + @Override public WorkflowStageEnum getWorkFlowStage() { return WorkflowStageEnum.RESERVATION; @@ -27,7 +51,25 @@ public class ReservationWorkFlowService extends WorkFlowBaseService { } @Override - public void transferInvestmentManager(TransferInvestmentManagerRequest request) { - log.info("转让招商经理~"); + public void transferInvestmentManager(TransferInvestmentManagerRequest request) throws ApiException { + Long lineId = request.getLineId(); + //根据线索id查询面试信息 + List interviewBaseInfos = hyPartnerInterviewMapper.getInterviewBaseInfoListByLineIds(Arrays.asList(lineId)); + if (CollectionUtils.isEmpty(interviewBaseInfos)) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + HyPartnerInterviewDO interviewBaseInfo = interviewBaseInfos.get(0); + InterviewVO interviewInfo = hyPartnerInterviewPlanMapper.getInterviewInfo(String.valueOf(interviewBaseInfo.getInterviewPlanId())); + if (null == interviewInfo) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + //还未提交面试预约就未创建面试信息,自然不存在转让面试官操作 + if (!WorkflowStatusEnum.RESERVATION_0.getCode().equals(interviewBaseInfo.getStatus().toString())) { + EntrustOthersReq entrustOthersReq = new EntrustOthersReq(); + entrustOthersReq.setInterviewPlanId(interviewInfo.getInterviewPlanId()); + entrustOthersReq.setNewInterviewerId(request.getUserId()); + entrustOthersReq.setPartnerLineId(interviewInfo.getPartnerLineId()); + interviewService.entrustOthers(entrustOthersReq); + } } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/WorkFlowBaseService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/WorkFlowBaseService.java index 4b60a7017..64c56f29c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/WorkFlowBaseService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/WorkFlowBaseService.java @@ -26,7 +26,7 @@ public abstract class WorkFlowBaseService { public abstract void endProcess(CloseFollowRequest request) throws ApiException; /** - * 转让招商经理 + * 转让招商经理(实际是转让面试官,转让招商经理的操作在前置已进行) * @param request */ public abstract void transferInvestmentManager(TransferInvestmentManagerRequest request) throws ApiException; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java new file mode 100644 index 000000000..90dba4d4c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java @@ -0,0 +1,56 @@ +package com.cool.store.utils; + +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.function.BiConsumer; + +@Component +@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) +public class MybatisBatchUtils { + + /** + * 每次处理500条 + */ + private static final int BATCH_SIZE = 500; + + @Resource + private SqlSessionFactory sqlSessionFactory; + + /** + * 批量处理修改或者插入 + * + * @param data 需要被处理的数据 + * @param mapperClass Mybatis的Mapper类 + * @param consumer 自定义处理逻辑 + * @return int 影响的总行数 + * @author renwd + */ + public int batchInsertOrUpdate(List data, Class mapperClass, BiConsumer consumer) { + int i = 1; + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); + try { + U mapper = sqlSession.getMapper(mapperClass); + int size = data.size(); + for (T element : data) { + consumer.accept(element, mapper); + if ((i % BATCH_SIZE == 0) || i == size) { + sqlSession.flushStatements(); + } + i++; + } + sqlSession.commit(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + sqlSession.close(); + } + return i - 1; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java index ac71cb4f0..6daa90dad 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java @@ -604,14 +604,15 @@ public class ExcelUtil { Map> columnListMap = styleMap.get(row); if (columnListMap.containsKey(sort)) { List list = columnListMap.get(sort); - list.addAll(Arrays.asList(styles)); + List arrList = new ArrayList(Arrays.asList(styles)); + list.addAll(arrList); columnListMap.put(sort, list); }else { - columnListMap.put(sort, Arrays.asList(styles)); + columnListMap.put(sort, new ArrayList(Arrays.asList(styles))); } } else { styleMap.put(row, new HashMap>() {{ - put(sort, Arrays.asList(styles)); + put(sort, new ArrayList(Arrays.asList(styles))); }}); } } 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 431e1feb6..4ddcbc071 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 @@ -51,6 +51,7 @@ public class TokenValidateFilter implements Filter { //TODO 800回调地址暂时不做验证 "/partner/pc/flow/qualificationReview/callback", "/**/ecSync/ecToApplet/**", + "/**/ecSync/labelInfo/**", "/partner/pc/websocket/**", "/partner/pc/call/**"); diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/config/swagger/Swagger2Config.java b/coolstore-partner-webb/src/main/java/com/cool/store/config/swagger/Swagger2Config.java index c548a3935..05e83b144 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/config/swagger/Swagger2Config.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/config/swagger/Swagger2Config.java @@ -52,7 +52,7 @@ public class Swagger2Config { .groupName(groupName) .select() .apis(this.scanBasePackage(packages)) - .paths(PathSelectors.regex(".*/getPartnerIntentInfo|.*/queryPartnerClerkInfoList|.*/queryPartnerBaseInfo")) + //.paths(PathSelectors.regex(".*/getPartnerIntentInfo|.*/queryPartnerClerkInfoList|.*/queryPartnerBaseInfo")) .build() .globalOperationParameters(pars); } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java index 50e2b9975..9b1b8c213 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java @@ -37,12 +37,12 @@ public class CallController { return ResponseResult.success(res); } - @PostMapping("/finish/callback") - @ApiOperation("通话结束回调") - public ResponseResult callFinishBack(@RequestBody CallFinishBackReq request) throws ApiException { - callService.callFinishBack(request); - return ResponseResult.success(); - } +// @PostMapping("/finish/callback") +// @ApiOperation("通话结束回调") +// public ResponseResult callFinishBack(@RequestBody CallFinishBackReq request) throws ApiException { +// callService.callFinishBack(request); +// return ResponseResult.success(); +// } @PostMapping("/record/callback") @ApiOperation("录音上传回调") diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java index eb430598f..e1d573864 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java @@ -190,7 +190,7 @@ public class DeskController { @ApiOperation("分配招商经理/批量分配招商经理") public ResponseResult allocationInvestmentManager(@RequestBody AllocationInvestmentManagerRequest request){ - return ResponseResult.success(hyPartnerLineInfoService.allocationInvestmentManager(CurrentUserHolder.getUser(),request.getLineIdList())); + return ResponseResult.success(hyPartnerLineInfoService.allocationInvestmentManager(CurrentUserHolder.getUser(),request.getUserId(),request.getLineIdList())); } @@ -202,7 +202,7 @@ public class DeskController { @PostMapping(path = "/batchTransferInvestmentManager") @ApiOperation("批量转让招商经理") - public ResponseResult batchTransferInvestmentManager(@RequestBody BatchTransferInvestmentManagerRequest request) throws ApiException { + public ResponseResult> batchTransferInvestmentManager(@RequestBody BatchTransferInvestmentManagerRequest request) throws ApiException { return ResponseResult.success(hyPartnerLineInfoService.batchTransferInvestmentManager(CurrentUserHolder.getUser(),request )); } 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 4cebd591d..78978078d 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 @@ -2,6 +2,7 @@ package com.cool.store.controller; 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; @@ -28,4 +29,10 @@ public class EcSyncController { return ResponseResult.success(ecSyncService.ecToApplet(queryListData)); } + @PostMapping(path = "/labelInfo") + @ApiOperation("ec同步标签数据到小程序") + public ResponseResult labelInfo(@RequestBody List getTagRequestList){ + return ResponseResult.success(ecSyncService.labelInfo(getTagRequestList)); + } + } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java index 6480035cb..8c0bf238e 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java @@ -280,4 +280,9 @@ public class TestController { followTaskService.followTaskAnHourAgoRemind(); return ResponseResult.success(); } + + @GetMapping("/initOpenArea") + public ResponseResult initOpenArea() { + return ResponseResult.success(openAreaService.addOpenArea()); + } } diff --git a/coolstore-partner-webb/src/main/resources/bootstrap.properties b/coolstore-partner-webb/src/main/resources/bootstrap.properties index ed2256673..e8cb5a145 100644 --- a/coolstore-partner-webb/src/main/resources/bootstrap.properties +++ b/coolstore-partner-webb/src/main/resources/bootstrap.properties @@ -1,5 +1,5 @@ spring.application.name=hsay-partner-webb -spring.profiles.active=@profileActive@ +spring.profiles.active=dev server.port=31000 server.servlet.context-path=/partner/pc diff --git a/coolstore-partner-webc/src/main/resources/bootstrap.properties b/coolstore-partner-webc/src/main/resources/bootstrap.properties index e54d1e5b3..4317ac307 100644 --- a/coolstore-partner-webc/src/main/resources/bootstrap.properties +++ b/coolstore-partner-webc/src/main/resources/bootstrap.properties @@ -1,5 +1,5 @@ spring.application.name=hsay-partner-webc -spring.profiles.active=@profileActive@ +spring.profiles.active=dev server.port=30900 server.servlet.context-path=/partner/mini/program