Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner

This commit is contained in:
pserimal
2023-06-30 14:55:00 +08:00
14 changed files with 155 additions and 32 deletions

View File

@@ -34,6 +34,12 @@ public enum OperateLogFieldValueEnum {
SUMMARY("summary", "面试总结"),
QUALI_VERIFY_CONTENT("qualiVerifyContent", "资质审核内容"),
BEFORE_USERINFO_UPDATE("beforeUserinfoUpdate", "修改前的用户信息"),
AFTER_USERINFO_UPDATE("afterUserinfoUpdate", "修改后的用户信息"),
BEFORE_INTENT_INFO_UPDATE("beforeIntentInfoUpdate", "修改前的意向申请"),
AFTER_INTENT_INFO_UPDATE("afterIntentInfoUpdate", "修改后的意向申请"),
;

View File

@@ -28,6 +28,9 @@ public enum OperateTypeEnum {
REJECT_INTERVIEW("reject_interview", "合作资格面试-拒绝并结束跟进", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REJECT_PUBLIC_REASON,REJECT_REAL_REASON, CERTIFY_FILE)),
CREATE_QUALIFYVERIFY("create_qualifyverify", "合作资格面试-创建资格审核", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME,SUMMARY,QUALI_VERIFY_CONTENT)),
USERINFO_UPDATE("userinfo_update", "修改(修改意向信息)", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_USERINFO_UPDATE, AFTER_USERINFO_UPDATE)),
INTENT_INFO_SUBMIT("intent_info_submit", "提交意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)),
INTENT_INFO_UPDATE("intent_info_update", "修改意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)),
;
private String code;

View File

@@ -1,5 +1,6 @@
package com.cool.store.mapper;
import com.cool.store.dto.message.RemindInterviewMsgDTO;
import com.cool.store.dto.partner.PartnerInterviewInfoDTO;
import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO;
import com.cool.store.entity.HyPartnerInterviewPlanDO;
@@ -157,4 +158,9 @@ public interface HyPartnerInterviewPlanMapper {
HyPartnerInterviewPlanDO getInterviewPlanByLineId(Long lineId);
List<RemindInterviewMsgDTO> selectRemindInterviewPlan(@Param("startTime") Date startTime,
@Param("endTime") Date endTime,
@Param("workflowStage") String workflowStage,
@Param("workflowStatus") String workflowStatus);
}

View File

@@ -495,4 +495,24 @@
from hy_partner_interview_plan
where partner_line_id = #{lineId} and deleted = 0
</select>
<select id="selectRemindInterviewPlan" resultType="com.cool.store.dto.message.RemindInterviewMsgDTO">
select hpip.partner_id as partnerId,
hpip.interviewer as interviewerId,
hpui.username as partnerName,
hpui.mobile as partnerMobile,
hpip.start_time as startTime
from hy_partner_interview_plan hpip
left join hy_partner_line_info hpll on hpip.partner_line_id = hpll.id
left join hy_partner_interview hpi on hpip.id = hpi.interview_plan_id
left join hy_partner_user_info hpui on hpui.partner_id = hpip.partner_id
where hpip.deleted = 0
and hpi.deleted = 0
and hpll.deleted = 0
and hpip.start_time &gt;= #{startTime}
and hpip.start_time &lt;= #{endTime}
and hpll.workflow_stage = #{workflowStage}
and hpll.workflow_status = #{workflowStatus}
</select>
</mapper>

View File

@@ -335,14 +335,13 @@
select
<include refid="Base_Column_List"></include>
from hy_partner_line_info
<where>
<if test="userId != null">
and investment_manager = #{userId}
</if>
<if test="lastMonthTodayDate!=null">
and close_time > #{lastMonthTodayDate} and close_time <![CDATA[<]]> now()
</if>
</where>
where deleted = 0 and line_status = 0 and close_time is not null
<if test="userId != null">
and investment_manager = #{userId}
</if>
<if test="lastMonthTodayDate!=null">
and close_time > #{lastMonthTodayDate} and close_time <![CDATA[<]]> now()
</if>
</select>
<update id="updateInvestmentManager">

View File

@@ -0,0 +1,30 @@
package com.cool.store.dto.log;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Author: wxp
* @Date: 2023-06-30 10:23
* @Description:
*/
@Data
@SuperBuilder
public class UserInfoUpdateDTO extends LogBasicDTO{
private UserInfoUpdate beforeUserinfoUpdate;
private UserInfoUpdate afterUserinfoUpdate;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class UserInfoUpdate{
private String username;
private String mobile;
private String liveArea;
private String wantShopArea;
private Integer acceptAdjustType;
}
}

View File

@@ -0,0 +1,17 @@
package com.cool.store.dto.message;
import lombok.Data;
/**
* @Author: young.yu
* @Date: 2023-06-30 11:02
* @Description:
*/
@Data
public class RemindInterviewMsgDTO {
private String partnerId;
private String interviewerId;
private String partnerName;
private String partnerMobile;
private String startTime;
}

View File

@@ -63,19 +63,6 @@ public class JobHandler {
}
}
// @XxlJob("updateAbsentInterview")
// public void updateAbsentInterview(){
// try {
// log.info("面试缺席定时任务开始");
// hyPartnerInterviewPlanService.updateAbsentInterview();
// log.info("面试缺席定时任务结束");
// XxlJobHelper.handleSuccess();
// }catch (Exception e){
// log.error("面试缺席定时任务异常",e);
// XxlJobHelper.log("面试缺席定时任务异常"+e.getMessage());
// }
// }
@XxlJob("approvalReminder")
public void approvalReminder(){
try {

View File

@@ -69,4 +69,6 @@ public interface InterviewService {
public void rejectInterviewAndSuspendLine(Long iterviewId,Long interviewPlanId,String certifyFile);
public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime);
}

View File

@@ -55,7 +55,8 @@ public class CommonServiceImpl implements CommonService {
String workflowStage = hyPartnerLineInfoDO.getWorkflowStage();
String workflowStatus = hyPartnerLineInfoDO.getWorkflowStatus();
Long partnerLineId = hyPartnerLineInfoDO.getId();
if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode())) {
if ((workflowStage.equals(WorkflowStageEnum.RESERVATION.getCode()) && workflowStatus.equals(WorkflowStatusEnum.RESERVATION_1.getCode()))||
(workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode()))) {
return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间");
} else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) {
String tips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, "");

View File

@@ -3,12 +3,16 @@ package com.cool.store.service.impl;
import cn.hutool.core.date.DateUtil;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.*;
import com.cool.store.dto.message.RemindInterviewMsgDTO;
import com.cool.store.dto.message.SendCardMessageDTO;
import com.cool.store.dto.partner.PartnerInterviewInfoDTO;
import com.cool.store.entity.*;
import com.cool.store.enums.MessageTypeEnum;
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.http.ISVHttpRequest;
import com.cool.store.mapper.HyPartnerInterviewMapper;
import com.cool.store.mapper.HyPartnerInterviewPlanMapper;
import com.cool.store.mapper.HyPartnerLineInfoMapper;
@@ -16,15 +20,18 @@ import com.cool.store.request.CloseFollowRequest;
import com.cool.store.request.GetInterviewListReq;
import com.cool.store.service.HyPartnerInterviewPlanService;
import com.cool.store.service.HyPartnerLineInfoService;
import com.cool.store.service.InterviewService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.vo.InterviewDetailInfoVO;
import com.cool.store.vo.PartnerInterviewInfoVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
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 org.springframework.transaction.annotation.Transactional;
@@ -40,6 +47,7 @@ import java.util.stream.Collectors;
* @Date 2023/6/8 19:32
* @Version 1.0
*/
@Slf4j
@Service
public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlanService {
@@ -68,8 +76,15 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan
@Resource
EnterpriseUserDAO enterpriseUserDAO;
@Autowired
private InterviewService interviewService;
@Value("${feishu.notice.link.url:null}")
private String linkUrl;
@Autowired
private ISVHttpRequest isvHttpRequest;
@Override
public List<InterviewDetailInfoVO> getInterviewPlanList(String userId,Date dateTime) {
String currentDay = DateUtil.format(dateTime, CoolDateUtils.DATE_FORMAT_DAY);
@@ -227,11 +242,28 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan
@Override
public void approvalReminder() throws ApiException {
//查询即将超时但未审批的面试
HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO();
hyPartnerInterviewPlanDO.setDeleted(Boolean.FALSE);
hyPartnerInterviewPlanDO.setApplicationApproved(0);
// hyPartnerInterviewPlanDO.setStartTime();
List<HyPartnerInterviewPlanDO> hyPartnerInterviewPlanDOS = hyPartnerInterviewPlanMapper.selectBySelective(hyPartnerInterviewPlanDO);
Date startTime = new Date();
Date endTime = DateUtil.offsetMinute(startTime,30);
List<RemindInterviewMsgDTO> remindInterviewMsgDTOS = hyPartnerInterviewPlanMapper.selectRemindInterviewPlan(startTime, endTime, WorkflowStageEnum.RESERVATION.getCode(), WorkflowStatusEnum.RESERVATION_1.getCode());
if(CollectionUtils.isEmpty(remindInterviewMsgDTOS)){
return;
}
//发送消息
remindInterviewMsgDTOS.stream().forEach(interviewMsgDTO->{
try {
List<String> userIds = new ArrayList<>();
userIds.add(interviewMsgDTO.getInterviewerId());
SendCardMessageDTO sendCardMessageDTO = new SendCardMessageDTO();
sendCardMessageDTO.setUserIds(userIds);
sendCardMessageDTO.setMessageType(MessageTypeEnum.SCHEDULE_REMINDER);
sendCardMessageDTO.setMessageUrl(linkUrl);
sendCardMessageDTO.setTitle("面试预约申请");
sendCardMessageDTO.setContent(interviewService.generateFeiShuInterviewMsg(interviewMsgDTO.getPartnerName(), interviewMsgDTO.getPartnerMobile(), interviewMsgDTO.getStartTime()));
isvHttpRequest.sendFeiShuCardMessage(sendCardMessageDTO);
} catch (ApiException e) {
log.error("发送面试提醒消息失败",e);
}
});
}
/**

View File

@@ -570,12 +570,13 @@ public class InterviewServiceImpl implements InterviewService {
// hyPartnerLineInfoService.closeOrPassFollow(request.getOperatorId(),closeFollowRequest);
// }
@Override
public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime){
//"您有一个【面试预约申请】待处理预约人【姓名】手机号【13xxxxxxxxx】预约面试时间【YYYY年MM月DD日 hh:mm】请及时处理】"
StringBuffer sb = new StringBuffer();
sb.append("您有一个【面试预约申请】待处理,预约人")
sb.append("您有一个【面试预约申请】待处理,预约人 ")
.append(partnerName)
.append("手机号")
.append(" 手机号 ")
.append(partnerMobile)
.append(",预约面试时间")
.append(DateUtil.format(DateUtil.parse(interviewTime), "yyyy年MM月dd日 HH:mm"));

View File

@@ -1,24 +1,29 @@
package com.cool.store.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.constants.RedisConstant;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.dao.HyOpenAreaInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
import com.cool.store.dto.log.UserInfoUpdateDTO;
import com.cool.store.entity.HyOpenAreaInfoDO;
import com.cool.store.entity.HyPartnerLineInfoDO;
import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.OperateTypeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.PartnerIntentInfoRequest;
import com.cool.store.request.PartnerUserInfoRequest;
import com.cool.store.request.PartnerWantShopInfoRequest;
import com.cool.store.service.HyPartnerBaseInfoService;
import com.cool.store.service.HyPartnerLineInfoService;
import com.cool.store.service.LogService;
import com.cool.store.service.PartnerUserInfoService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.vo.ApplyBaseInfoVO;
import com.cool.store.vo.InviteCodeDetailVO;
import com.cool.store.vo.PartnerIntentInfoVO;
import com.cool.store.vo.PartnerUserInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -27,6 +32,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -47,6 +53,8 @@ public class PartnerUserInfoServiceImpl implements PartnerUserInfoService {
HyOpenAreaInfoDAO hyOpenAreaInfoDAO;
@Resource
private RedisUtilPool redisUtilPool;
@Autowired
private LogService logService;
@Override
public HyPartnerUserInfoDO selectByPartnerId(String partnerId) {
@@ -93,6 +101,9 @@ public class PartnerUserInfoServiceImpl implements PartnerUserInfoService {
if (hyPartnerUserInfoDO == null){
throw new ServiceException(ErrorCodeEnum.PARTNER_USER_NOT_EXIST);
}
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());
ApplyBaseInfoVO applyBaseInfoVO = new ApplyBaseInfoVO();
fillUserInfoDOByRequest(hyPartnerUserInfoDO, partnerUserInfoRequest);
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO);
@@ -124,6 +135,12 @@ public class PartnerUserInfoServiceImpl implements PartnerUserInfoService {
redisUtilPool.setString(cacheKey, JSONObject.toJSONString(request), RedisConstant.ONE_DAY_SECONDS);
}
}
//记录日志
PartnerUserInfoVO operator = PartnerUserHolder.getUser();
UserInfoUpdateDTO log = UserInfoUpdateDTO.builder().mobile(operator.getMobile()).operateUserId(operator.getPartnerId()).operateUsername(operator.getUsername())
.operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC))
.beforeUserinfoUpdate(beforeUserinfoUpdate).afterUserinfoUpdate(afterUserinfoUpdate).build();
logService.recordPartnerBizLog(operator,hyPartnerLineInfoDO.getId(), OperateTypeEnum.USERINFO_UPDATE,log);
return applyBaseInfoVO;
}

View File

@@ -83,4 +83,6 @@ xxl.job.executor.logpath = logs/xxl-job/jobhandler
xxl.job.executor.logretentiondays = 30
xxl.job.accessToken =
ec.baseUrl=http://127.0.0.1:8017
ec.baseUrl=http://127.0.0.1:8017
#飞书通知
feishu.notice.link.url = https://applink.feishu.cn/client/web_app/open?appId=cli_a4f3e24dc73a100c&lk_target_url=https%3A%2F%2Ftest-hsay-web.coolstore.cn%2F%23%2Fwork%2Fbench