Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner
# Conflicts: # coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java # coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml
This commit is contained in:
@@ -1,15 +1,26 @@
|
||||
package com.cool.store.handler;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.exception.ApiException;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
import com.cool.store.response.error.ErrorResponse;
|
||||
import com.cool.store.utils.UUIDUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: CustomExceptionHandler
|
||||
@@ -21,24 +32,41 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
public class CustomExceptionHandler {
|
||||
|
||||
@ExceptionHandler(value = ServiceException.class)
|
||||
public ResponseEntity<ErrorResponse> handleCustomException(ServiceException e) {
|
||||
public void handleCustomException(ServiceException e, HttpServletResponse httpServletResponse) {
|
||||
log.error(e.getMessage(), e);
|
||||
ErrorResponse errorResponse = new ErrorResponse(e.getErrorCode(), e.getMessage());
|
||||
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
|
||||
ResponseResult responseResult = new ResponseResult(e.getErrorCode(), e.getMessage());
|
||||
responseResult(httpServletResponse, responseResult);
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = ApiException.class)
|
||||
public ResponseEntity<ErrorResponse> handleCustomException(ApiException e) {
|
||||
public void handleCustomException(ApiException e, HttpServletResponse httpServletResponse) {
|
||||
log.error(e.getMessage(), e);
|
||||
ErrorResponse errorResponse = new ErrorResponse(e.getErrorCode(), e.getMessage());
|
||||
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
|
||||
ResponseResult responseResult = new ResponseResult(e.getErrorCode(), e.getMessage());
|
||||
responseResult(httpServletResponse, responseResult);
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
public ResponseEntity<ErrorResponse> handleException(Exception e) {
|
||||
public void handleException(Exception e, HttpServletResponse httpServletResponse) {
|
||||
log.error(e.getMessage(), e);
|
||||
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
|
||||
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
ResponseResult responseResult = new ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
|
||||
responseResult(httpServletResponse, responseResult);
|
||||
}
|
||||
|
||||
|
||||
private void responseResult(HttpServletResponse response, ResponseResult result) {
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-type", "application/json;charset=UTF-8");
|
||||
String requestId = MDC.get(CommonConstants.REQUEST_ID);
|
||||
if(StringUtils.isBlank(requestId)){
|
||||
requestId = UUIDUtils.get32UUID();
|
||||
}
|
||||
result.setRequestId(requestId);
|
||||
result.setData(null);
|
||||
try {
|
||||
response.getWriter().write(JSONObject.toJSONString(result, SerializerFeature.WriteNullStringAsEmpty));
|
||||
} catch (IOException ex) {
|
||||
log.error(ex.getMessage(),ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -125,6 +125,28 @@ public class ISVHttpRequest {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取部门详情
|
||||
* @param deptId
|
||||
* @return
|
||||
*/
|
||||
public SysDepartmentDTO getDepartmentDetail(String deptId){
|
||||
String url = isvDomain + "/corp/getDepartmentDetail";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("deptId", deptId);
|
||||
ResultDTO responseEntity = null;
|
||||
try {
|
||||
responseEntity = httpRestTemplateService.getForObject(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getData()) && responseEntity.isSuccess()){
|
||||
return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getData()), SysDepartmentDTO.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public AuthScopeDTO getAuthScope(){
|
||||
String url = isvDomain + "/corp/getAuthScope";
|
||||
HashMap requestMap = new HashMap();
|
||||
|
||||
@@ -45,10 +45,9 @@ public class RocketMqLogAspect {
|
||||
Object[] args = joinPoint.getArgs();
|
||||
Message message = (Message)args[0];
|
||||
String traceId = message.getMsgID() + Constants.TOPIC_PARTITION_SEPARATOR + message.getReconsumeTimes();
|
||||
Map<String, String> context = MDC.getCopyOfContextMap();
|
||||
if(Objects.isNull(context)){
|
||||
MDC.put(CommonConstants.REQUEST_ID, traceId);
|
||||
}
|
||||
String requestId = message.getUserProperties(CommonConstants.REQUEST_ID);
|
||||
MDC.put(CommonConstants.REQUEST_ID, requestId);
|
||||
MDC.put(CommonConstants.MESSAGE_ID, traceId);
|
||||
} catch (IllegalArgumentException e) {
|
||||
log.info("MDC mqBeforeLog", e);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.dto.partner.DescribePhoneNumberDTO;
|
||||
import com.cool.store.enums.IDCardSideEnum;
|
||||
import com.cool.store.exception.ApiException;
|
||||
import com.cool.store.vo.cuser.IdentityCardInfoVO;
|
||||
|
||||
@@ -24,6 +25,6 @@ public interface AliyunService {
|
||||
* @param faceImageUrl
|
||||
* @return
|
||||
*/
|
||||
IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl) throws ApiException;
|
||||
IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl, IDCardSideEnum sideEnum) throws ApiException;
|
||||
|
||||
}
|
||||
|
||||
@@ -22,4 +22,8 @@ public interface HyPartnerBaseInfoService {
|
||||
Boolean submitPartnerBaseInfo(PartnerBaseInfoRequest request);
|
||||
|
||||
PartnerBaseInfoVO queryPartnerBaseInfo(String partnerId, Long lineId);
|
||||
|
||||
Long getLineIdByIdCard(String idCard);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -104,5 +104,7 @@ public interface HyPartnerLineInfoService {
|
||||
*/
|
||||
PageInfo<PublicSeaLineListVo> publicSeaLineList(String userId,LineRequest lineRequest);
|
||||
|
||||
PartnerLineBaseInfoVO getPartnerLinBaseInfo(String partnerId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,6 @@ public interface PartnerInterviewService {
|
||||
/**
|
||||
* 获取通知函详情
|
||||
*/
|
||||
PartnerPassLetterDetailVO passLetterDetail(String interviewId);
|
||||
PartnerPassLetterDetailVO passLetterDetail(String interviewPlanId);
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.aliyun.ocr20191230.models.RecognizeIdentityCardResponseBody;
|
||||
import com.aliyun.teaopenapi.models.Config;
|
||||
import com.cool.store.dto.partner.DescribePhoneNumberDTO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.IDCardSideEnum;
|
||||
import com.cool.store.exception.ApiException;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.service.AliyunService;
|
||||
@@ -23,6 +24,7 @@ import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
@@ -61,7 +63,7 @@ public class AliyunServiceImpl implements AliyunService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl) throws ApiException {
|
||||
public IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl, IDCardSideEnum sideEnum) throws ApiException {
|
||||
//todo zcb ak sk替换
|
||||
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
|
||||
.setAccessKeyId("LTAI5t9RaXvABZbHvoXjDFJ1")
|
||||
@@ -74,23 +76,26 @@ public class AliyunServiceImpl implements AliyunService {
|
||||
InputStream inputStream = url.openConnection().getInputStream();
|
||||
com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest recognizeIdentityCardAdvanceRequest = new com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest()
|
||||
.setImageURLObject(inputStream)
|
||||
.setSide("face");
|
||||
.setSide(sideEnum.getCode());
|
||||
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
|
||||
RecognizeIdentityCardResponse idCardResponse = client.recognizeIdentityCardAdvance(recognizeIdentityCardAdvanceRequest, runtime);
|
||||
log.info("身份证解析结果:{}", JSONObject.toJSONString(idCardResponse));
|
||||
RecognizeIdentityCardResponseBody.RecognizeIdentityCardResponseBodyDataFrontResult frontResult = Optional.ofNullable(idCardResponse).map(o -> o.getBody()).map(o -> o.data).map(o -> o.frontResult).orElse(null);
|
||||
String username = frontResult.name;
|
||||
String liveAddress = frontResult.address;
|
||||
String birthdate = frontResult.birthDate;
|
||||
if(StringUtils.isNotBlank(birthdate)){
|
||||
birthdate = convertDate(birthdate, "yyyyMMdd");
|
||||
if(Objects.nonNull(frontResult)){
|
||||
String username = frontResult.name;
|
||||
String liveAddress = frontResult.address;
|
||||
String birthdate = frontResult.birthDate;
|
||||
if(StringUtils.isNotBlank(birthdate)){
|
||||
birthdate = convertDate(birthdate, "yyyyMMdd");
|
||||
}
|
||||
String sex = frontResult.gender;
|
||||
String idCard = frontResult.IDNumber;
|
||||
String nation = frontResult.nationality;
|
||||
IdentityCardInfoVO result = new IdentityCardInfoVO(username, liveAddress, birthdate, sex, idCard, nation);
|
||||
log.info("身份证解析:{}", JSONObject.toJSONString(result));
|
||||
return result;
|
||||
}
|
||||
String sex = frontResult.gender;
|
||||
String idCard = frontResult.IDNumber;
|
||||
String nation = frontResult.nationality;
|
||||
IdentityCardInfoVO result = new IdentityCardInfoVO(username, liveAddress, birthdate, sex, idCard, nation);
|
||||
log.info("身份证解析:{}", JSONObject.toJSONString(result));
|
||||
return result;
|
||||
return null;
|
||||
} catch (com.aliyun.tea.TeaException e) {
|
||||
log.error("身份证解析报错TeaException:{}", e);
|
||||
throw new ApiException(e.getMessage());
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.dao.*;
|
||||
@@ -9,6 +10,8 @@ import com.cool.store.dto.dept.DepartmentEventDTO;
|
||||
import com.cool.store.dto.enterprise.*;
|
||||
import com.cool.store.entity.*;
|
||||
import com.cool.store.enums.DataSourceEnum;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.http.ISVHttpRequest;
|
||||
import com.cool.store.service.EnterpriseSyncService;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
@@ -209,16 +212,61 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
|
||||
|
||||
@Override
|
||||
public void deptUpdateEvent(DepartmentEventDTO param) {
|
||||
SysDepartmentDTO departmentDetail = isvHttpRequest.getDepartmentDetail(param.getDepartmentId());
|
||||
if(Objects.isNull(departmentDetail)){
|
||||
return;
|
||||
}
|
||||
log.info("部门变更:{}", JSONObject.toJSONString(param));
|
||||
switch (parseValue(param.getEventType())){
|
||||
case DEPARTMENT_CREATED:
|
||||
RegionDO parentRegionInfo = regionDAO.getRegionInfoByRegionId(departmentDetail.getParentId());
|
||||
if(Objects.isNull(parentRegionInfo)){
|
||||
throw new ServiceException(ErrorCodeEnum.PARENT_NODE_NOT_EXIST);
|
||||
}
|
||||
Multimap<String, String> leaderDeptMap = ArrayListMultimap.create();
|
||||
RegionDO region = SysDepartmentDTO.convertRegionDO(departmentDetail, leaderDeptMap, parentRegionInfo);
|
||||
regionDAO.batchInsertOrUpdate(Arrays.asList(region));
|
||||
dealUserLeaderDept(leaderDeptMap);
|
||||
break;
|
||||
case DEPARTMENT_UPDATED:
|
||||
if(param.getIsChangeParent()){
|
||||
syncAll();
|
||||
return;
|
||||
}
|
||||
Multimap<String, String> updateLeaderDeptMap = ArrayListMultimap.create();
|
||||
RegionDO updateRegion = SysDepartmentDTO.convertRegionDO(departmentDetail, updateLeaderDeptMap);
|
||||
regionDAO.batchInsertOrUpdate(Arrays.asList(updateRegion));
|
||||
dealUserLeaderDept(updateLeaderDeptMap);
|
||||
break;
|
||||
case DEPARTMENT_DELETED:
|
||||
syncAll();
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void dealUserLeaderDept(Multimap<String, String> leaderDeptMap){
|
||||
if(leaderDeptMap.isEmpty()){
|
||||
return;
|
||||
}
|
||||
List<String> userIds = leaderDeptMap.keys().stream().collect(Collectors.toList());
|
||||
List<EnterpriseUserDO> userList = enterpriseUserDAO.getUserInfoByUserIds(userIds);
|
||||
for (EnterpriseUserDO enterpriseUser : userList) {
|
||||
List<String> deptIds = leaderDeptMap.get(enterpriseUser.getUserId()).stream().collect(Collectors.toList());
|
||||
String leaderDeptIds = enterpriseUser.getLeaderDeptIds();
|
||||
if(StringUtils.isNotBlank(leaderDeptIds)){
|
||||
List<String> existDeptIds = JSONObject.parseArray(leaderDeptIds).stream().map(String::valueOf).collect(Collectors.toList());
|
||||
//取并集
|
||||
existDeptIds.addAll(deptIds);
|
||||
List<String> allDeptIds = existDeptIds.stream().distinct().collect(Collectors.toList());
|
||||
enterpriseUser.setLeaderDeptIds(JSONObject.toJSONString(allDeptIds));
|
||||
}else{
|
||||
enterpriseUser.setLeaderDeptIds(JSONObject.toJSONString(deptIds));
|
||||
}
|
||||
enterpriseUser.setIsLeader(Boolean.TRUE);
|
||||
}
|
||||
enterpriseUserDAO.batchInsertOrUpdate(userList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -67,6 +67,11 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
|
||||
return baseInfoVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getLineIdByIdCard(String idCard) {
|
||||
return hyPartnerBaseInfoDAO.getLineIdByIdCard(idCard);
|
||||
}
|
||||
|
||||
private void fillBaseInfo(HyPartnerBaseInfoDO baseInfoDO, PartnerBaseInfoRequest request) {
|
||||
baseInfoDO.setPartnerId(request.getPartnerId());
|
||||
baseInfoDO.setPartnerLineId(request.getPartnerLineId());
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.dao.HyPartnerLineInfoDAO;
|
||||
import com.cool.store.dao.HyPartnerUserInfoDAO;
|
||||
@@ -17,19 +19,21 @@ import com.cool.store.enums.WorkflowStatusEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.request.CloseFollowRequest;
|
||||
import com.cool.store.request.LineRequest;
|
||||
import com.cool.store.service.EnterpriseUserService;
|
||||
import com.cool.store.service.HyPartnerLineInfoService;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.StringUtil;
|
||||
import com.cool.store.vo.*;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -49,6 +53,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
EnterpriseUserDAO enterpriseUserDAO;
|
||||
@Resource
|
||||
UserRegionMappingDAO userRegionMappingDAO;
|
||||
@Resource
|
||||
private RedisUtilPool redisUtilPool;
|
||||
|
||||
@Override
|
||||
public StageCountVO selectStagePendingCount(String userId) {
|
||||
@@ -291,6 +297,18 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
return publicSeaLineList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PartnerLineBaseInfoVO getPartnerLinBaseInfo(String partnerId) {
|
||||
PartnerLineBaseInfoVO lineBaseInfoVO = new PartnerLineBaseInfoVO();
|
||||
// todo wxp 需要加条件
|
||||
HyPartnerLineInfoDO lineInfoDO = hyPartnerLineInfoDAO.getByPartnerId(partnerId);
|
||||
BeanUtil.copyProperties(lineInfoDO, lineBaseInfoVO);
|
||||
String coolingPeriodFirstLoginCacheKey = MessageFormat.format(RedisConstant.COOLINGPERIOD_FIRSTLOGIN_KEY, partnerId);
|
||||
String value = redisUtilPool.getString(coolingPeriodFirstLoginCacheKey);
|
||||
lineBaseInfoVO.setCoolDownFirstLoginFlag(StringUtils.isNotBlank(value));
|
||||
return lineBaseInfoVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* convertPartnerBlackListDTOToVo
|
||||
* @param partnerBlackListDTO
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.cool.store.request.ModifyInterviewTimeReq;
|
||||
import com.cool.store.service.InterviewService;
|
||||
import com.cool.store.utils.TRTCUtils;
|
||||
import com.cool.store.vo.EnterInterviewVO;
|
||||
import com.cool.store.vo.EnterpriseUserBaseInfoVO;
|
||||
import com.cool.store.vo.interview.InterviewVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -57,7 +58,15 @@ public class InterviewServiceImpl implements InterviewService {
|
||||
|
||||
@Override
|
||||
public InterviewVO getInterviewInfo(String interviewId) {
|
||||
return hyPartnerInterviewPlanMapper.getInterviewInfo(interviewId);
|
||||
InterviewVO vo = hyPartnerInterviewPlanMapper.getInterviewInfo(interviewId);
|
||||
//查询面试官和记录人信息
|
||||
EnterpriseUserBaseInfoVO interviewerInfo = hyPartnerInterviewPlanMapper.getEnterpriseUserBaseInfo(vo.getInterviewerId());
|
||||
vo.setInterviewerName(interviewerInfo.getName());
|
||||
vo.setInterviewerMobile(interviewerInfo.getMobile());
|
||||
EnterpriseUserBaseInfoVO recorderInfo = hyPartnerInterviewPlanMapper.getEnterpriseUserBaseInfo(vo.getRecorderId());
|
||||
vo.setRecorderName(recorderInfo.getName());
|
||||
vo.setRecorderMobile(recorderInfo.getMobile());
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -125,15 +134,15 @@ public class InterviewServiceImpl implements InterviewService {
|
||||
public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) {
|
||||
try {
|
||||
//1. 将面试状态改为 --> 2已开始
|
||||
interviewMapper.updateInterviewStatus(dto.getInterviewId(), 2);
|
||||
interviewMapper.updateInterviewStatus(dto.getInterviewPlanId(), 2);
|
||||
//3. 修改面试实际开始时间,以第一个人进来的时间为准,后续不再修改
|
||||
interviewMapper.updateActualStartTime(dto.getInterviewId(), DateUtil.now());
|
||||
interviewMapper.updateActualStartTime(dto.getInterviewPlanId(), DateUtil.now());
|
||||
//4. 修改加盟商或面试官进入面试时间
|
||||
interviewMapper.updateEnterTime(dto.getInterviewId(), dto.getUserType(), DateUtil.now());
|
||||
interviewMapper.updateEnterTime(dto.getInterviewPlanId(), dto.getUserType(), DateUtil.now());
|
||||
//5. 加盟商如果进入了,就修改面试计划表 is_partner_interview 字段
|
||||
interviewMapper.updateWhetherPartnerEnter(dto.getInterviewId());
|
||||
interviewMapper.updateWhetherPartnerEnter(dto.getInterviewPlanId());
|
||||
//6. 查询对应的面试官id、姓名及加盟商姓名
|
||||
EnterInterviewVO vo = interviewMapper.getInterviewerByInterviewId(dto.getInterviewId());
|
||||
EnterInterviewVO vo = interviewMapper.getInterviewerByInterviewPlanId(dto.getInterviewPlanId());
|
||||
//生成 userSign
|
||||
String userSig = TRTCUtils.genUserSig(sdkAppId, key, dto.getUserId());
|
||||
vo.setUserSign(userSig);
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.HyPartnerInterviewMapper;
|
||||
import com.cool.store.oss.OSSServer;
|
||||
import com.cool.store.service.PartnerInterviewService;
|
||||
import com.cool.store.utils.PDFUtils;
|
||||
import com.cool.store.utils.PassLetterUtils;
|
||||
import com.cool.store.utils.TRTCUtils;
|
||||
import com.cool.store.vo.EnterInterviewVO;
|
||||
@@ -21,6 +22,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
import static com.cool.store.utils.PDFUtils.pdf2Img;
|
||||
|
||||
@Service
|
||||
public class PartnerInterviewServiceImpl implements PartnerInterviewService {
|
||||
|
||||
@@ -59,15 +62,15 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
|
||||
public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) {
|
||||
try {
|
||||
//1. 将面试状态改为 --> 2已开始
|
||||
interviewMapper.updateInterviewStatus(dto.getInterviewId(), 2);
|
||||
interviewMapper.updateInterviewStatus(dto.getInterviewPlanId(), 2);
|
||||
//3. 修改面试实际开始时间,以第一个人进来的时间为准,后续不再修改
|
||||
interviewMapper.updateActualStartTime(dto.getInterviewId(), DateUtil.now());
|
||||
interviewMapper.updateActualStartTime(dto.getInterviewPlanId(), DateUtil.now());
|
||||
//4. 修改加盟商或面试官进入面试时间
|
||||
interviewMapper.updateEnterTime(dto.getInterviewId(), dto.getUserType(), DateUtil.now());
|
||||
interviewMapper.updateEnterTime(dto.getInterviewPlanId(), dto.getUserType(), DateUtil.now());
|
||||
//5. 加盟商如果进入了,就修改面试计划表 is_partner_interview 字段
|
||||
interviewMapper.updateWhetherPartnerEnter(dto.getInterviewId());
|
||||
interviewMapper.updateWhetherPartnerEnter(dto.getInterviewPlanId());
|
||||
//6. 查询对应的面试官id、姓名及加盟商姓名
|
||||
EnterInterviewVO vo = interviewMapper.getInterviewerByInterviewId(dto.getInterviewId());
|
||||
EnterInterviewVO vo = interviewMapper.getInterviewerByInterviewPlanId(dto.getInterviewPlanId());
|
||||
//生成 userSign
|
||||
String userSig = TRTCUtils.genUserSig(sdkAppId, key, dto.getUserId());
|
||||
vo.setUserSign(userSig);
|
||||
@@ -79,11 +82,10 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
|
||||
|
||||
/**
|
||||
* 获取通知函详情
|
||||
* TODO 暂时将生成通过函文件的功能放在这里方便测试和联调,审批通过的回调方法完成后应该放到该方法中
|
||||
*/
|
||||
@Override
|
||||
public PartnerPassLetterDetailVO passLetterDetail(String interviewId) {
|
||||
PartnerPassLetterDetailVO vo = interviewMapper.getPassLetterDetail(interviewId);
|
||||
public PartnerPassLetterDetailVO passLetterDetail(String interviewPlanId) {
|
||||
PartnerPassLetterDetailVO vo = interviewMapper.getPassLetterDetail(interviewPlanId);
|
||||
//解析意向开店区域为市级行政区
|
||||
String verifyCity = vo.getVerifyCity();
|
||||
String[] split = verifyCity.split("/");
|
||||
@@ -97,33 +99,48 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
|
||||
} else {
|
||||
System.out.println("wrong");
|
||||
}
|
||||
// TODO 调用生成通过函和修改数据库数据的方法
|
||||
String passCode = genPassLetterAndUpdateDB(vo, interviewId);
|
||||
verifyCity = vo.getVerifyCity();
|
||||
// 调用生成通过函和修改数据库数据的方法
|
||||
String passCode = genPassLetterAndUpdateDB(vo, interviewPlanId);
|
||||
//再查一次 vo
|
||||
vo = interviewMapper.getPassLetterDetail(interviewId);
|
||||
vo = interviewMapper.getPassLetterDetail(interviewPlanId);
|
||||
//有效期为审批通过次日起第 60 天的 23:59:59,由此倒推 createTime
|
||||
DateTime expiryDate = DateUtil.parseDate(vo.getExpiryDate());
|
||||
DateTime createTime = DateUtil.offsetDay(expiryDate, -60);
|
||||
vo.setCreateTime(DateUtil.format(createTime, "yyyy-MM-dd"));
|
||||
vo.setVerifyCity((verifyCity));
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO 暂时将生成 passLetter 并上传 OSS 和修改数据库对应信息的方法放在这里,实际应该在 800 的回调方法中
|
||||
* 生成通知函上传 OSS 和修改数据库相应数据
|
||||
* @return passCode
|
||||
*/
|
||||
private String genPassLetterAndUpdateDB(PartnerPassLetterDetailVO passLetterDetail, String interviewId) {
|
||||
//已经有 passCode 的话就不要再生成了,默认上游全部数据都正确
|
||||
if (ObjectUtil.isEmpty(passLetterDetail.getPassCode())) {
|
||||
DateTime createTime = DateUtil.date();
|
||||
String code = passLetterDetail.getPassCode() == null ? PassLetterUtils.genPassCode(createTime) : passLetterDetail.getPassCode();
|
||||
ByteArrayOutputStream outputStream = PassLetterUtils.genPassLetter(passLetterDetail.getPartnerName(), code, passLetterDetail.getVerifyCity(), createTime);
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
|
||||
String passFileUrl = ossServer.uploadFileServer(inputStream, "partner/passLetter/" + code + ".pdf");
|
||||
//计算有效期截至日期
|
||||
DateTime expiryDate = DateUtil.offsetDay(createTime, 60);
|
||||
String expiryDateStr = DateUtil.format(expiryDate, "yyyy-MM-dd") + " 23:59:59";
|
||||
interviewMapper.updatePassLetterInfo(code, passFileUrl, expiryDateStr, interviewId);
|
||||
//已经有文件 URL 的话就不要再生成了,默认上游全部数据都正确
|
||||
if (ObjectUtil.isEmpty(passLetterDetail.getPassPdfUrl()) || ObjectUtil.isEmpty(passLetterDetail.getPassImageUrl())) {
|
||||
try {
|
||||
DateTime createTime = DateUtil.date();
|
||||
String code = passLetterDetail.getPassCode() == null ? PassLetterUtils.genPassCode(createTime) : passLetterDetail.getPassCode();
|
||||
//生成的 pdf 通过函内存输出流
|
||||
ByteArrayOutputStream pdfOut = PassLetterUtils.genPassLetter(passLetterDetail.getPartnerName(), code, passLetterDetail.getVerifyCity(), createTime);
|
||||
//生成的 pdf 通过函内存输入流
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(pdfOut.toByteArray());
|
||||
String passPdfUrl = ossServer.uploadFileServer(inputStream, "partner/passLetter/" + code + ".pdf");
|
||||
//转换为图片
|
||||
inputStream.reset();
|
||||
ByteArrayOutputStream imageOut = PDFUtils.pdf2Img(inputStream, 2.0f);
|
||||
inputStream = new ByteArrayInputStream(imageOut.toByteArray());
|
||||
//上传 OSS
|
||||
String passImageUrl = ossServer.uploadFileServer(inputStream, "partner/passLetter/" + code + ".png");
|
||||
//计算有效期截止日期
|
||||
DateTime expiryDate = DateUtil.offsetDay(createTime, 60);
|
||||
String expiryDateStr = DateUtil.format(expiryDate, "yyyy-MM-dd") + " 23:59:59";
|
||||
interviewMapper.updatePassLetterInfo(code, passPdfUrl, passImageUrl, expiryDateStr, interviewId);
|
||||
inputStream.close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return passLetterDetail.getPassCode();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user