公共处理

This commit is contained in:
zhangchenbiao
2024-03-20 16:04:13 +08:00
parent 6e49510340
commit b44a20b2b9
10 changed files with 304 additions and 20 deletions

View File

@@ -0,0 +1,31 @@
package com.cool.store.enums;
/**
* @author zhangchenbiao
* @FileName: AuditResultTypeEnum
* @Description:
* @date 2024-03-20 14:55
*/
public enum AuditResultTypeEnum {
PASS(0, "通过"),
REJECT(1, "拒绝"),
CLOSE(2, "结束跟进");
private Integer code;
private String name;
private AuditResultTypeEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.dao;
import com.cool.store.entity.LineAuditInfoDO;
import com.cool.store.mapper.LineAuditInfoMapper;
import org.springframework.stereotype.Repository;
@@ -17,4 +18,9 @@ public class LineAuditInfoDAO {
@Resource
private LineAuditInfoMapper lineAuditInfoMapper;
public Long addAuditInfo(LineAuditInfoDO auditInfo){
lineAuditInfoMapper.insertSelective(auditInfo);
return auditInfo.getId();
}
}

View File

@@ -0,0 +1,26 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author zhangchenbiao
* @FileName: AuditRequest
* @Description:
* @date 2024-03-20 14:28
*/
@Data
public class AuditPassRequest {
@ApiModelProperty("线索ID")
private Long lineId;
@ApiModelProperty("证明文件与凭证")
private List<String> certifyFile;
@ApiModelProperty("通过原因")
private String passReason;
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author zhangchenbiao
* @FileName: AuditRequest
* @Description:
* @date 2024-03-20 14:28
*/
@Data
public class AuditRejectRequest {
@ApiModelProperty("线索ID")
private Long lineId;
@ApiModelProperty("公开拒绝原因")
private String rejectPublicReason;
@ApiModelProperty("真实拒绝原因")
private String rejectRealReason;
@ApiModelProperty("证明文件与凭证")
private List<String> certifyFile;
}

View File

@@ -0,0 +1,76 @@
package com.cool.store.service;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dao.LineAuditInfoDAO;
import com.cool.store.dao.LineInfoDAO;
import com.cool.store.entity.LineAuditInfoDO;
import com.cool.store.entity.LineInfoDO;
import com.cool.store.enums.AuditResultTypeEnum;
import com.cool.store.request.AuditPassRequest;
import com.cool.store.request.AuditRejectRequest;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author zhangchenbiao
* @FileName: LineFlowService
* @Description:
* @date 2024-03-20 14:32
*/
@Service
public abstract class LineFlowService {
@Resource
private LineAuditInfoDAO lineAuditInfoDAO;
@Resource
private LineInfoDAO lineInfoDAO;
private LineFlowService lineFlowService;
public Boolean auditPass(LineInfoDO lineInfo, AuditPassRequest request){
String partnerId = lineInfo.getPartnerId();
LineAuditInfoDO auditInfo = new LineAuditInfoDO();
auditInfo.setLineId(request.getLineId());
auditInfo.setPartnerId(partnerId);
auditInfo.setResultType(AuditResultTypeEnum.PASS.getCode());
auditInfo.setPassReason(request.getPassReason());
auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile()));
Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo);
return auditPass(auditId, lineInfo, request);
}
public Boolean auditReject(LineInfoDO lineInfo, AuditRejectRequest request){
String partnerId = lineInfo.getPartnerId();
LineAuditInfoDO auditInfo = new LineAuditInfoDO();
auditInfo.setLineId(request.getLineId());
auditInfo.setPartnerId(partnerId);
auditInfo.setResultType(AuditResultTypeEnum.REJECT.getCode());
auditInfo.setRejectPublicReason(request.getRejectPublicReason());
auditInfo.setRejectRealReason(request.getRejectRealReason());
auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile()));
Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo);
return auditReject(auditId, lineInfo, request);
}
public Boolean auditClose(LineInfoDO lineInfo, AuditRejectRequest request){
String partnerId = lineInfo.getPartnerId();
LineAuditInfoDO auditInfo = new LineAuditInfoDO();
auditInfo.setLineId(request.getLineId());
auditInfo.setPartnerId(partnerId);
auditInfo.setResultType(AuditResultTypeEnum.CLOSE.getCode());
auditInfo.setRejectPublicReason(request.getRejectPublicReason());
auditInfo.setRejectRealReason(request.getRejectRealReason());
auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile()));
Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo);
return auditClose(auditId, lineInfo, request);
}
protected abstract Boolean auditPass(Long auditId, LineInfoDO lineInfo, AuditPassRequest request);
protected abstract Boolean auditReject(Long auditId, LineInfoDO lineInfo, AuditRejectRequest request);
protected abstract Boolean auditClose(Long auditId, LineInfoDO lineInfo, AuditRejectRequest request);
}

View File

@@ -65,4 +65,13 @@ public interface LineInterviewService {
* @return
*/
EnterInterviewVO enterInterviewRoom(Long interviewId, String interviewUserId, InterviewUserTypeEnum userType);
/**
* 结束面试
* @param interviewId
* @param userId
* @return
*/
Integer finishInterview(Long interviewId, String userId);
}

View File

@@ -9,10 +9,9 @@ import com.cool.store.entity.LineInterviewDO;
import com.cool.store.enums.*;
import com.cool.store.exception.ApiException;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.AppointmentTimeRequest;
import com.cool.store.request.LineInterviewPageRequest;
import com.cool.store.request.ModifyInterviewerRequest;
import com.cool.store.request.*;
import com.cool.store.service.LabelService;
import com.cool.store.service.LineFlowService;
import com.cool.store.service.LineInterviewService;
import com.cool.store.utils.TRTCUtils;
import com.cool.store.utils.UUIDUtils;
@@ -22,6 +21,7 @@ import com.cool.store.vo.interview.EnterInterviewVO;
import com.cool.store.vo.interview.LineInterviewPageVO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Value;
@@ -42,8 +42,9 @@ import java.util.stream.Stream;
* @Description:
* @date 2024-03-15 16:04
*/
@Slf4j
@Service
public class LineInterviewServiceImpl implements LineInterviewService {
public class LineInterviewServiceImpl extends LineFlowService implements LineInterviewService {
@Value("${trtc.sdkAppId}")
private Long sdkAppId;
@@ -224,4 +225,38 @@ public class LineInterviewServiceImpl implements LineInterviewService {
String userSig = TRTCUtils.genUserSig(sdkAppId, key, interviewUserId);
return new EnterInterviewVO(userSig, interviewInfo.getInterviewer(), userName, lineInfo.getUsername());
}
@Override
public Integer finishInterview(Long interviewId, String userId) {
LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfoById(interviewId);
if(Objects.isNull(interviewInfo)){
throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST);
}
//已关闭就禁止进入房间了
if (interviewInfo.getRoomStatus().equals(RoomStatus.CLOSED.getCode())) {
throw new ServiceException(ErrorCodeEnum.ROOM_STATUS_ERROR);
}
interviewInfo.setRoomStatus(RoomStatus.CLOSED.getCode());
interviewInfo.setActualEndTime(new Date());
//更新线索状态
LineInfoDO lineInfo = new LineInfoDO();
lineInfoDAO.updateLineInfo(lineInfo);
return lineInterviewDAO.updateInterviewInfo(interviewInfo);
}
@Override
protected Boolean auditPass(Long auditId, LineInfoDO lineInfo, AuditPassRequest request) {
return null;
}
@Override
protected Boolean auditReject(Long auditId, LineInfoDO lineInfo, AuditRejectRequest request) {
return null;
}
@Override
protected Boolean auditClose(Long auditId, LineInfoDO lineInfo, AuditRejectRequest request) {
return null;
}
}

View File

@@ -0,0 +1,73 @@
package com.cool.store.controller.webb;
import com.cool.store.dao.LineInfoDAO;
import com.cool.store.entity.LineInfoDO;
import com.cool.store.request.AuditPassRequest;
import com.cool.store.request.AuditRejectRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.LineFlowService;
import com.cool.store.service.impl.LineInterviewServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author zhangchenbiao
* @FileName: LineOperationController
* @Description:
* @date 2024-03-20 14:20
*/
@Api(tags = "线索审核")
@RestController
@RequestMapping({"/audit"})
public class LineAuditController {
private LineFlowService lineFlowService;
@Resource
private LineInfoDAO lineInfoDAO;
@Autowired
private ApplicationContext applicationContext;
@ApiOperation("审核通过")
@PostMapping("/pass")
public ResponseResult<Boolean> auditPass(@RequestBody AuditPassRequest request){
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId());
initLineFlowService(lineInfo);
return ResponseResult.success(lineFlowService.auditPass(lineInfo, request));
}
@ApiOperation("审核拒绝")
@PostMapping("/reject")
public ResponseResult<Boolean> auditReject(@RequestBody AuditRejectRequest request){
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId());
initLineFlowService(lineInfo);
return ResponseResult.success(lineFlowService.auditReject(lineInfo, request));
}
@ApiOperation("结束跟进")
@PostMapping("/close")
public ResponseResult<Boolean> auditClose(@RequestBody AuditRejectRequest request){
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId());
initLineFlowService(lineInfo);
return ResponseResult.success(lineFlowService.auditClose(lineInfo, request));
}
private void initLineFlowService(LineInfoDO lineInfo){
Integer workflowSubStage = lineInfo.getWorkflowSubStage();
if(workflowSubStage == 1){
this.lineFlowService = (LineFlowService)applicationContext.getBean(LineInterviewServiceImpl.class);
}else{
}
}
}

View File

@@ -2,27 +2,22 @@ package com.cool.store.controller.webb;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.enums.InterviewUserTypeEnum;
import com.cool.store.exception.ApiException;
import com.cool.store.request.AppointmentTimeRequest;
import com.cool.store.request.LineInterviewPageRequest;
import com.cool.store.request.ModifyInterviewerRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.LineInterviewService;
import com.cool.store.vo.interview.AppointmentTimeVO;
import com.cool.store.vo.interview.EnterInterviewVO;
import com.cool.store.vo.interview.LineInterviewPageVO;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
/**
* @author zhangchenbiao
@@ -32,7 +27,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/pc/interview/")
@Api(tags = "PC端面试&面谈")
@Api(tags = "PC端-面试&面谈")
@Slf4j
public class PCLineInterviewController {
@@ -46,21 +41,29 @@ public class PCLineInterviewController {
}
@ApiOperation("修改面试官")
@PostMapping("/interviewer/modify")
@PostMapping("/modify")
public ResponseResult<Boolean> modifyInterviewer(@RequestBody @Validated ModifyInterviewerRequest request) {
return ResponseResult.success(lineInterviewService.modifyInterviewer(request));
}
@ApiOperation("面试列表")
@PostMapping("/interviewer/page")
@PostMapping("/page")
public ResponseResult<PageInfo<LineInterviewPageVO>> getInterviewerPage(@RequestBody LineInterviewPageRequest request) {
return ResponseResult.success(lineInterviewService.getInterviewerPage(request));
}
@ApiOperation("进入房间")
@GetMapping("/interviewer/room/enter")
@GetMapping("/room/enter")
public ResponseResult<EnterInterviewVO> enterInterviewRoom(@RequestParam("interviewId")Long interviewId) {
String userId = CurrentUserHolder.getUserId();
return ResponseResult.success(lineInterviewService.enterInterviewRoom(interviewId, userId, InterviewUserTypeEnum.INTERVIEWER));
}
@GetMapping("/finish")
@ApiOperation("结束面试")
public ResponseResult finishInterview(@RequestParam("interviewId")Long interviewId) throws ApiException {
String userId = CurrentUserHolder.getUserId();
lineInterviewService.finishInterview(interviewId, userId);
return ResponseResult.success();
}
}

View File

@@ -3,15 +3,11 @@ package com.cool.store.controller.webc;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.enums.InterviewUserTypeEnum;
import com.cool.store.request.AppointmentTimeRequest;
import com.cool.store.request.LineInterviewPageRequest;
import com.cool.store.request.ModifyInterviewerRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.LineInterviewService;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.interview.AppointmentTimeVO;
import com.cool.store.vo.interview.EnterInterviewVO;
import com.cool.store.vo.interview.LineInterviewPageVO;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -33,7 +29,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/interview")
@Api(tags = "加盟商端面试&面谈")
@Api(tags = "加盟商端-面试&面谈")
@Slf4j
public class LineInterviewController {
@@ -60,7 +56,7 @@ public class LineInterviewController {
}
@ApiOperation("进入房间")
@GetMapping("/interviewer/room/enter")
@GetMapping("/room/enter")
public ResponseResult<EnterInterviewVO> enterInterviewRoom(@RequestParam("interviewId")Long interviewId) {
PartnerUserInfoVO partnerUser = PartnerUserHolder.getUser();
return ResponseResult.success(lineInterviewService.enterInterviewRoom(interviewId, partnerUser.getPartnerId(), InterviewUserTypeEnum.LINE));