Merge branch 'master' into hxd/feat/ecSyncLabel

This commit is contained in:
xiaodong.hu
2023-08-29 18:04:59 +08:00
20 changed files with 267 additions and 49 deletions

View File

@@ -13,7 +13,7 @@ public enum FeiShuNoticeMsgEnum {
ALLOCATION_INVESTMENT_MANAGER("分配招商经理", "有新的线索于 {0} 分配给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"),
TRANS_INVESTMENT_MANAGER("转让招商经理", "有新的线索于 {0} 转让给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"),
BATCH_TRANS_INVESTMENT_MANAGER("收到新线索", "有{0}条新线索于 {1} 转让给您,请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"),
INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_69eb6e5f-bf12-4a02-a47f-b17ce24fcfeg"),
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"),
;

View File

@@ -0,0 +1,96 @@
package com.cool.store.utils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Repository;
/**
**/
@Repository
public class SpringUtils implements BeanFactoryPostProcessor {
//Spring应用上下文环境
private static ConfigurableListableBeanFactory beanFactory;
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
SpringUtils.beanFactory = beanFactory;
}
public static ConfigurableListableBeanFactory getBeanFactory() {
return beanFactory;
}
/**
* 获取对象
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws org.springframework.beans.BeansException
*
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T) getBeanFactory().getBean(name);
}
/**
* 获取类型为requiredType的对象
*
* @param clz
* @return
* @throws org.springframework.beans.BeansException
*
*/
public static <T> T getBean(Class<T> clz) throws BeansException {
T result = (T) getBeanFactory().getBean(clz);
return result;
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义则返回true
*
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return getBeanFactory().containsBean(name);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到将会抛出一个异常NoSuchBeanDefinitionException
*
* @param name
* @return boolean
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().isSingleton(name);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().getType(name);
}
/**
* 如果给定的bean名字在bean定义中有别名则返回这些别名
*
* @param name
* @return
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().getAliases(name);
}
}

View File

@@ -1,6 +1,7 @@
package com.cool.store.dao;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dto.log.LineLogInfo;
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
import com.cool.store.enums.OperateTypeEnum;
@@ -50,6 +51,19 @@ public class HyPartnerTaskInfoLogDAO {
insertSelective(logInfo);
}
/**
* 删除日志
* @param lineId
* @param message
* @return
*/
public int deleteByLineId(Long lineId, String message){
if(Objects.isNull(lineId)){
return CommonConstants.ZERO;
}
return hyPartnerTaskInfoLogMapper.deleteByLineId(lineId, message);
}
public int updateLineId(String newPartnerId,Long newLineId,Long oldLineId){
if (newLineId==null || Objects.isNull(oldLineId)){
return 0;

View File

@@ -39,4 +39,12 @@ public interface HyPartnerTaskInfoLogMapper {
* @return
*/
Page<HyPartnerTaskInfoLogDO> getLogPageByLineId(@Param("partnerLineId")Long partnerLineId, @Param("operateTypes")List<String> operateTypes);
/**
* 删除线索
* @param partnerLineId
* @param message
* @return
*/
int deleteByLineId(@Param("partnerLineId") Long partnerLineId, @Param("message") String message);
}

View File

@@ -169,7 +169,13 @@
<if test="deadlineEndTime != null">
<![CDATA[ and a.deadline <= #{deadlineEndTime}]]>
</if>
order by a.deadline desc, a.id desc
<if test="taskStatus == 0">
order by a.deadline asc, a.id desc
</if>
<if test="taskStatus == 2">
order by a.deadline desc, a.id desc
</if>
</select>
<select id="getFollowTask" resultMap="BaseResultMap">
@@ -186,7 +192,12 @@
</update>
<update id="cancelUndoFollowTask">
update hy_follow_task set task_status = '3' where partner_line_id = #{partnerLineId} and task_status in ('0', '2')
update
hy_follow_task
set
task_status = if(deadline >= now(), 3, 5)
where
partner_line_id = #{partnerLineId} and task_status in ('0', '2')
</update>
<select id="getRemindFollowUserIds" resultType="string">

View File

@@ -127,6 +127,7 @@
from hy_intend_dev_zone_info
where type = #{type}
and deleted = 0
order by create_time desc , id desc
</select>
<select id="getZoneInfoByRegionIds" resultMap="BaseResultMap">

View File

@@ -240,6 +240,7 @@
nation = #{record.nation},
birthdate = #{record.birthdate},
id_card = #{record.idCard},
user_portrait = #{record.userPortrait},
id_card_photo_front = #{record.idCardPhotoFront},
id_card_photo_black = #{record.idCardPhotoBlack},
live_address = #{record.liveAddress},

View File

@@ -317,18 +317,15 @@
b.id as id,
hpci.intention_contract_no as intentionContractNo
from hy_partner_line_info hpli
left join hy_partner_interview a on hpli.id = a.partner_line_id
left join hy_partner_interview a on hpli.id = a.partner_line_id and a.deleted = 0
left join hy_partner_base_info bi on hpli.id = bi.partner_line_id
left join hy_partner_interview_plan b on a.interview_plan_id = b.id
left join hy_partner_interview_plan b on a.interview_plan_id = b.id and b.deleted = 0
left join hy_partner_certification_info hpci on hpci.partner_interview_id = a.id
LEFT join call_record cr on hpli.id = cr.partner_line_id
where hpli.deleted = 0 and hpli.line_status!=3
and (cr.id in (
select max(id) maxId
from call_record group by partner_line_id) or cr.id is null)
<if test="filter">
and b.deleted = 0
</if>
<if test="workflowStage!=null and workflowStage!=''">
and hpli.workflow_stage = #{workflowStage}
</if>

View File

@@ -139,7 +139,7 @@
<include refid="Blob_Column_List"/>
from hy_partner_task_info_log
where partner_line_id = #{partnerLineId}
and operate_type = #{operateType}
and operate_type = #{operateType} and deleted = '0'
order by create_time desc
</select>
@@ -156,8 +156,12 @@
from
hy_partner_task_info_log
where
partner_line_id= #{partnerLineId} and operate_type in <foreach collection="operateTypes" open="(" close=")" separator="," item="operateType">#{operateType}</foreach>
deleted = '0' and partner_line_id= #{partnerLineId} and operate_type in <foreach collection="operateTypes" open="(" close=")" separator="," item="operateType">#{operateType}</foreach>
order by create_time desc
</select>
<update id="deleteByLineId">
update hy_partner_task_info_log set deleted = '1', message = #{message} where partner_line_id= #{partnerLineId}
</update>
</mapper>

View File

@@ -43,7 +43,7 @@ public class HyFollowTaskDO implements Serializable {
@ApiModelProperty("任务状态:0:待完成、1:已完成、2:已逾期、3:作废、4逾期完成、5逾期作废")
private Integer taskStatus;
@ApiModelProperty("任务截止时间")
@ApiModelProperty("完成时间")
private Date finishTime;
@ApiModelProperty("删除标识")

View File

@@ -45,10 +45,11 @@ public class UpdateFollowTaskRequest {
@ApiModelProperty("任务截止时间")
private Date deadline;
public static HyFollowTaskDO convertDO(Long partnerLineId, UpdateFollowTaskRequest request){
public static HyFollowTaskDO convertDO(Long partnerLineId, String followUserId, UpdateFollowTaskRequest request){
HyFollowTaskDO result = new HyFollowTaskDO();
result.setId(request.getFollowTaskId());
result.setPartnerLineId(partnerLineId);
result.setFollowUserId(followUserId);
result.setTaskTitle(request.getTaskTitle());
result.setCommunicationType(request.getCommunicationType());
result.setDeadline(request.getDeadline());

View File

@@ -0,0 +1,42 @@
package com.cool.store.config.websocket;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
import java.util.List;
import java.util.Map;
@Configuration
public class WebSocketConfig extends ServerEndpointConfig.Configurator {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
/**
* 建立握手时,连接前的操作
*/
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
// 这个userProperties 可以通过 session.getUserProperties()获取
final Map<String, Object> userProperties = sec.getUserProperties();
Map<String, List<String>> headers = request.getHeaders();
List<String> mobiles = headers.get("mobiles");
userProperties.put("mobiles", mobiles.get(0));
}
/**
* 初始化端点对象,也就是被@ServerEndpoint所标注的对象
*/
@Override
public <T> T getEndpointInstance(Class<T> clazz) throws InstantiationException {
return super.getEndpointInstance(clazz);
}
}

View File

@@ -1,20 +1,30 @@
package com.cool.store.handler;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.config.websocket.WebSocketConfig;
import com.cool.store.utils.RedisUtil;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@Component
@Slf4j
@ServerEndpoint("/websocket/{tenantId}")
@ServerEndpoint(value="/websocket/{tenantId}",configurator = WebSocketConfig.class)
public class WebSocketServer {
/**
@@ -34,12 +44,24 @@ public class WebSocketServer {
*/
private String tenantId = "";
/**
* 手机号
*/
private List<String> mobiles;
private static RedisUtilPool redisUtilPool = SpringUtils.getBean(RedisUtilPool.class);
/**
* 连接建立成
* 功调用的方法
*/
@OnOpen
public void onOpen(Session session, @PathParam("tenantId") String tenantId) {
String mobiles = getHeader(session, "mobiles");
if(StringUtils.isEmpty(mobiles)){
return;
}
this.mobiles = Arrays.asList(mobiles.split(","));
this.session = session;
this.tenantId = tenantId;
if (webSocketMap.containsKey(tenantId)) {
@@ -52,6 +74,9 @@ public class WebSocketServer {
//在线数加1
addOnlineCount();
}
for (String mobile : this.mobiles) {
redisUtilPool.setString(mobile, tenantId, 3600);
}
log.info("用户连接:" + tenantId + ",当前在线人数为:" + getOnlineCount());
sendMessage("连接成功");
}
@@ -63,6 +88,7 @@ public class WebSocketServer {
@OnClose
public void onClose() {
if (webSocketMap.containsKey(tenantId)) {
webSocketMap.get(tenantId).mobiles.forEach(mobile -> redisUtilPool.delKey(mobile));
webSocketMap.remove(tenantId);
//从set中删除
subOnlineCount();
@@ -177,6 +203,39 @@ public class WebSocketServer {
* @return
*/
public static boolean isOnline(String tenantId) {
if(StringUtils.isEmpty(tenantId)) {
return false;
}
return webSocketMap.containsKey(tenantId);
}
public static String getHeader(Session session, String headerName) {
final String header = (String) session.getUserProperties().get(headerName);
if (StrUtil.isBlank(header)) {
log.error("获取header失败不安全的链接即将关闭");
try {
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return header;
}
public static String getTenantIdByMobile(String mobile){
String jsonStr = redisUtilPool.getString(mobile);
if (StringUtils.isNotEmpty(jsonStr)){
return jsonStr;
}
//如果redis中没有循环webSocketMap找到对应的tenantId
for (String key : webSocketMap.keySet()) {
WebSocketServer webSocketServer = webSocketMap.get(key);
if (webSocketServer.mobiles.contains(mobile)){
return webSocketServer.tenantId;
}
}
return null;
}
}

View File

@@ -27,6 +27,7 @@ import com.cool.store.request.CallUpReq;
import com.cool.store.service.CallService;
import com.cool.store.service.LogService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.RedisUtilPool;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -60,8 +61,9 @@ public class CallServiceImpl implements CallService {
private LogService logService;
@Override
public String callUp(CallUpReq request) throws ApiException {
String tenantId = WebSocketServer.getTenantIdByMobile(request.getOutgoingMobile());
//校验拨出手机号APP是否在线
boolean isOnline = WebSocketServer.isOnline(request.getOutgoingMobile());
boolean isOnline = WebSocketServer.isOnline(tenantId);
if (!isOnline) {
throw new ApiException(ErrorCodeEnum.MOBILE_APP_NOT_ONLINE_ERROR);
}
@@ -85,7 +87,7 @@ public class CallServiceImpl implements CallService {
callUpDTO.setTransNo(transNo);
callUpDTO.setOutgoingMobile(request.getOutgoingMobile());
callUpDTO.setIncomingMobile(request.getIncomingMobile());
boolean sendFlag = WebSocketServer.sendInfo(JSON.toJSONString(callUpDTO), callRecordDO.getOutgoingMobile());
boolean sendFlag = WebSocketServer.sendInfo(JSON.toJSONString(callUpDTO), tenantId);
if (!sendFlag) {
throw new ApiException(ErrorCodeEnum.CREATE_CALL_REQUEST_ERROR);
}

View File

@@ -73,7 +73,7 @@ public class FollowTaskServiceImpl implements FollowTaskService {
private RedisUtilPool redisUtilPool;
@Resource
private NoticeService noticeService;
@Value("${feishu.notice.link.url:null}")
@Value("${feishu.notice.link.url}")
private String linkUrl;
@Override
@@ -156,7 +156,7 @@ public class FollowTaskServiceImpl implements FollowTaskService {
throw new ServiceException(ErrorCodeEnum.DATELINE_BEFORE_NOW);
}
checkLine(followTask.getPartnerLineId());
HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(followTask.getPartnerLineId(), request);
HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(followTask.getPartnerLineId(),followTask.getFollowUserId(), request);
if(!request.getDeadline().equals(followTask.getDeadline()) && (request.getDeadline().getTime() - System.currentTimeMillis()) / CommonConstants.ONE_THOUSAND < CommonConstants.AN_HOUR_SECONDS){
//一小时内的任务立即发送通知
sendMessage(task);
@@ -274,12 +274,6 @@ public class FollowTaskServiceImpl implements FollowTaskService {
if(Objects.isNull(partnerInfo)){
return;
}
/*String lockKey = MessageFormat.format(CommonConstants.FOLLOW_TASK_NOTICE_KEY, task.getFollowUserId(), task.getId());
boolean result = redisUtilPool.setNxExpire(lockKey, DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC), CommonConstants.FOLLOW_TASK_NOTICE_LOCK_TIMES);
if(!result){
//一小时内发送过不再发送通知
return;
}*/
String dateline = DateUtil.format(task.getDeadline(), CoolDateUtils.DATE_FORMAT_SEC_7);
String content = MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT, dateline, partnerInfo.getUsername(), partnerInfo.getMobile());
noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.FOLLOW_TASK, Arrays.asList(task.getFollowUserId()), content);

View File

@@ -239,7 +239,7 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
// 新线索绑定身份证号
HyPartnerBaseInfoDO newBaseInfo = hyPartnerBaseInfoDAO.getByPartnerIdAndLineId(currentUser.getPartnerId(), lineId);
fillBaseInfoIdCard(newBaseInfo, oldBaseInfo.getIdCard(), oldBaseInfo.getIdCardPhotoFront(), oldBaseInfo.getIdCardPhotoBlack(), oldBaseInfo.getUsername(),
oldBaseInfo.getSex(), oldBaseInfo.getBirthdate(), oldBaseInfo.getNation(), oldBaseInfo.getLiveAddress(), oldBaseInfo.getStatus());
oldBaseInfo.getSex(), oldBaseInfo.getBirthdate(), oldBaseInfo.getNation(), oldBaseInfo.getLiveAddress(), oldBaseInfo.getStatus(),oldBaseInfo.getUserPortrait());
newBaseInfo.setStatus(oldBaseInfo.getStatus());
hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(newBaseInfo);
//修改名称
@@ -260,7 +260,7 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
hyPartnerUserInfoDO.setShopId(oldPartnerUser.getShopId());
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO);
// 老的身份证信息置空
fillBaseInfoIdCard(oldBaseInfo, null, null, null, null, null, null, null, null, null);
fillBaseInfoIdCard(oldBaseInfo, null, null, null, null, null, null, null, null, null,null);
oldBaseInfo.setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode()));
hyPartnerBaseInfoDAO.updateByPrimaryKey(oldBaseInfo);
hyPartnerIntentInfoDAO.updateLineId(newPartnerId,newLindId,oldLineInfo.getId());
@@ -268,7 +268,11 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
hyPartnerInterviewPlanDAO.updateLineId(newPartnerId,newLindId,oldLineInfo.getId());
hyInterviewDAO.updateLineId(newPartnerId,newLindId,oldLineInfo.getId());
hyPartnerCertificationInfoMapper.updateLineId(newPartnerId,newLindId,oldLineInfo.getId());
//软删新线索操作日志
hyPartnerTaskInfoLogDAO.deleteByLineId(newLindId, "换绑");
hyPartnerTaskInfoLogDAO.updateLineId(newPartnerId,newLindId,oldLineInfo.getId());
//先作废新的线索跟进任务
hyFollowTaskDAO.cancelUndoFollowTask(newLindId);
hyFollowTaskDAO.changeLineId(oldLineInfo.getId(), newLindId);
String cacheKeyBaseInfo = MessageFormat.format(RedisConstant.PARTNER_BASEINFO_CACHE_KEY, newPartnerId, newLindId);
String cacheKeyClerkInfo = MessageFormat.format(RedisConstant.PARTNER_CLERKINFO_CACHE_KEY,newPartnerId, newLindId);
@@ -317,12 +321,13 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
}
private void fillBaseInfoIdCard(HyPartnerBaseInfoDO newBaseInfo, String idCard, String idCardPhotoFront, String idCardPhotoBlack,
String username, Integer sex, Date birthdate, String nation, String liveAddress, Integer status) {
String username, Integer sex, Date birthdate, String nation, String liveAddress, Integer status,String userPortrait) {
newBaseInfo.setIdCard(idCard);
newBaseInfo.setIdCardPhotoBlack(idCardPhotoFront);
newBaseInfo.setIdCardPhotoFront(idCardPhotoBlack);
newBaseInfo.setUsername(username);
newBaseInfo.setSex(sex);
newBaseInfo.setUserPortrait(userPortrait);
newBaseInfo.setBirthdate(birthdate);
newBaseInfo.setNation(nation);
newBaseInfo.setLiveAddress(liveAddress);

View File

@@ -86,7 +86,7 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan
HyPartnerUserChannelDAO hyPartnerUserChannelDAO;
@Value("${feishu.notice.link.url:null}")
@Value("${feishu.notice.link.url}")
private String linkUrl;
@Autowired

View File

@@ -194,8 +194,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
//发送飞书工作通知
if (sendFlag){
String dateTime = DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_7);
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(request.getLineId());
noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),dateTime,hyPartnerBaseInfoDO.getUsername(),hyPartnerBaseInfoDO.getMobile());
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(hyPartnerLineInfoDO.getPartnerId());
noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),dateTime,hyPartnerUserInfoDO.getUsername(),hyPartnerUserInfoDO.getMobile());
}
//作废待完成&已逾期的任务
@@ -286,9 +286,9 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
//给招商经理发送飞书工作通知
List<String> userIdList = new ArrayList<>();
userIdList.add(user.getUserId());
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(x.getId());
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,hyPartnerBaseInfoDO.getUsername(),hyPartnerBaseInfoDO.getMobile());
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,

View File

@@ -71,7 +71,7 @@ public class InterviewServiceImpl implements InterviewService {
@Value("${hs.sms.templateCode:null}")
private String templateCode;
@Value("${feishu.notice.link.url:null}")
@Value("${feishu.notice.link.url}")
private String linkUrl;
@Autowired

View File

@@ -1,17 +0,0 @@
package com.cool.store.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* WebSocket的配置信息
*/
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}