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

This commit is contained in:
zhangchenbiao
2023-06-14 10:45:04 +08:00
75 changed files with 1736 additions and 63 deletions

View File

@@ -86,6 +86,18 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- TRTC 生成 userSig 依赖 -->
<dependency>
<groupId>com.github.tencentyun</groupId>
<artifactId>tls-sig-api-v2</artifactId>
<version>2.0</version>
</dependency>
<!-- OpenPDF -->
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.30</version>
</dependency>
</dependencies>
</project>

View File

@@ -52,6 +52,10 @@ public enum ErrorCodeEnum {
LINE_ID_IS_NOT_EXIST(500001, "线索ID不存在", null),
WORK_FLOW_STAGE_PASS_ERROR(500002, "通过错误,非对应阶段!", null),
PARTNER_USER_NOT_EXIST(500002, "加盟商用户信息不存在!", null),
INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null),
;

View File

@@ -0,0 +1,35 @@
package com.cool.store.enums;
/**
* @Author: young.yu
* @Date: 2023-06-13 20:22
* @Description: 面试状态枚举
*/
public enum InteviewStatusEnum {
WAIT_APPOINTMENT(0, "待预约"),
WAIT_APPOINTMENT_TIME_CONFIRM(1, "面试时间待审核"),
WAIT_INTERVIEW(2, "待面试"),
INTERVIEWING(3, "已开始"),
WAIT_AUDIT(4, "待审核"),
AUDITING(5, "审批中"),
AUDIT_PASS(6, "审批通过"),
REFUSE(7, "拒绝");
private Integer code;
private String message;
InteviewStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}

View File

@@ -1,5 +1,7 @@
package com.cool.store.enums;
import java.util.HashMap;
/**
* @Author suzhuhong
* @Date 2023/6/9 16:17
@@ -21,6 +23,18 @@ public enum WorkflowStageEnum {
this.message = message;
}
/**
* 每个大节点对应的子节点最后一个流程
* @return
*/
public static final HashMap<String,String> getWorkflowStageMap(){
HashMap<String, String> result = new HashMap<>();
result.put(INTENT.getCode(),WorkflowStatusEnum.INTENT_3.getCode());
result.put(RESERVATION.getCode(),WorkflowStatusEnum.RESERVATION_6.getCode());
result.put(INTERVIEW.getCode(),WorkflowStatusEnum.INTERVIEW_6.getCode());
return result;
}
public String getCode() {
return code;

View File

@@ -1,5 +1,7 @@
package com.cool.store.utils;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
@@ -32,4 +34,22 @@ public class CoolDateUtils {
now.set(Calendar.DATE, now.get(Calendar.DATE) + day);
return now.getTime();
}
/**
* n天后 的最大时间 20230613 2天后最大时间---->2023-06-15 23:59:59
* @param day
* @return
*/
public static Date getDateFormatDay(int day){
LocalDate today = LocalDate.now();
LocalDate thirdDay = today.plusDays(day);
LocalDateTime thirdDayMidnight = LocalDateTime.of(thirdDay, LocalTime.MIDNIGHT);
LocalDateTime thirdDay235959 = thirdDayMidnight.with(LocalTime.MAX);
ZonedDateTime zonedDateTime = ZonedDateTime.of(thirdDay235959, ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());
}
}

View File

@@ -0,0 +1,117 @@
package com.cool.store.utils;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.*;
import java.awt.*;
import java.io.IOException;
import java.io.OutputStream;
/**
* 使用 OpenPDF 封装的 pdf 工具类
*/
public class PDFUtils {
private static final int[] A4Size = {595, 842};
/**
* 设置 pdf 背景图片A4
* 每页都需要单独设置
*/
public static void setBackgroundImgA4(Document document, Image image) {
//图片顶格
image.setAbsolutePosition(0, 0);
//填满 A4 大小的页面
image.scaleAbsolute(A4Size[0], A4Size[1]);
document.add(image);
}
/**
* 设置 pdf 背景图片
* 每页都需要单独设置
*/
public static void setBackgroundImg(Document document, Image image, int width, int height) {
//图片顶格
image.setAbsolutePosition(0, 0);
image.scaleAbsolute(width, height);
document.add(image);
}
/**
* 将文本放在 pdf 的绝对位置上来抠模板(不指定字体,默认为 OpenPDF 自带的 STSong-Light Normal
* @param reader PdfReader 流
* @param outputStream 输出流
* @param x 左边距
* @param y 下边距
* @param content 要插入的文本
* @param fontSize 字体大小
* @param color 文本颜色
*/
public static void putParagraphAbsolutely(PdfReader reader, OutputStream outputStream, float x, float y, String content, float fontSize, Color color) {
try {
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
addContent(reader, outputStream, content, x, y, baseFont, fontSize, 0, color);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 指定字体的文本绝对位置插入方法
* @param reader PdfReader 流
* @param outputStream 输出流
* @param x 左边距
* @param y 下边距
* @param content 要插入的文本
* @param baseFont 字体设置(如果不使用 OpenPDF 自带的字体,就需要将字体文件放在项目路径下)
* 自定义字体方式
* ttf 字体
* 1. BaseFont baseFont = BaseFont.createFont("arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
* ttc 字体(包含了两种字体,所以需要选择 0 或 1
* 2. BaseFont baseFont = BaseFont.createFont("simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
* @param fontSize 字体大小
* @param fontStyle 字体风格()
* NORMAL = 0; BOLD = 1; ITALIC = 2; UNDERLINE = 4; STRIKETHRU = 8; BOLDITALIC = BOLD | ITALIC;
* @param color 字体颜色
*/
public static void putParagraphAbsolutely(PdfReader reader, OutputStream outputStream, float x, float y, String content, BaseFont baseFont, float fontSize, int fontStyle, Color color) {
addContent(reader, outputStream, content, x, y, baseFont, fontSize, fontStyle, color);
}
/**
* 插入文本的 raw 方法
* @param reader PDF 读取流
* @param outputStream 输出流
* @param content 插入文本
* @param x 左边距
* @param y 下边距
* @param baseFont 字体和编码设置
* @param fontSize 字体大小
* @param fontStyle 字体风格
* @param color 字体颜色
*/
private static void addContent(PdfReader reader, OutputStream outputStream, String content, float x, float y, BaseFont baseFont, float fontSize, int fontStyle, Color color) {
try {
//生成 paragraph 并放在正确位置
//抠模板
PdfStamper stamper = new PdfStamper(reader, outputStream);
PdfContentByte over = stamper.getOverContent(1);
Font font = new Font(baseFont, fontSize, fontStyle, color);
Paragraph insertContent = new Paragraph(content, font);
ColumnText columnText = new ColumnText(over);
// llx 和 urx 最小的值决定离左边的距离. lly 和 ury 最大的值决定离下边的距离
columnText.setSimpleColumn(x, y, Float.MAX_VALUE, Float.MIN_VALUE);
columnText.addElement(insertContent);
columnText.go();
stamper.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -0,0 +1,68 @@
package com.cool.store.utils;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.lowagie.text.Document;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
import java.awt.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
//生成资格面试通过函的工具
public class PassLetterUtils {
/**
* 生成通过函的方法
* 返回通过函编码
* @param partnerName 加盟商姓名
* @param verifyCity 审批城市
* @param passTime 审批通过时间
*/
public static String genPassLetter(String partnerName, String passCode, String verifyCity, DateTime passTime) {
String randomNum = RandomUtil.randomNumbers(5);
if (ObjectUtil.isEmpty(passCode)) {
passCode = "HSAY" + DateUtil.format(passTime, "yyMMdd") + "-" + randomNum;
}
String passTimeStr = DateUtil.format(passTime, "yyyy年MM月dd日");
Document document = new Document();
try {
//1. 创建 pdf document
// ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
FileOutputStream outputStream = new FileOutputStream("passLetter.pdf");
PdfWriter.getInstance(document, outputStream);
document.open();
//2. 添加背景图片
Image img = Image.getInstance(PassLetterUtils.class.getResource("/static/passLetterBg.jpg").toString());
PDFUtils.setBackgroundImgA4(document, img);
document.close();
//3. 填写通过函模板信息
addContentToPdf(partnerName + " 先生/女士", 122, 640);
addContentToPdf(passCode, 122, 558);
addContentToPdf(verifyCity, 155, 494);
addContentToPdf("60天", 135, 450);
addContentToPdf(passTimeStr, 393, 152);
return passCode;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static void addContentToPdf(String content, float x, float y) {
try {
PdfReader pdfReader = new PdfReader(Files.newInputStream(Paths.get("passLetter.pdf")));
OutputStream outputStream = Files.newOutputStream(Paths.get("passLetter.pdf"));
PDFUtils.putParagraphAbsolutely(pdfReader, outputStream, x, y, content, 20, new Color(255, 82,25));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.utils;
import com.tencentyun.TLSSigAPIv2;
/**
* 腾讯实时音视频TRTC工具类
*/
public class TRTCUtils {
/**
* 默认过期时间 30 s
*/
private static final Long expired = 30L;
/**
* 生成 userSig 用于进入会议
* 详见 https://cloud.tencent.com/document/product/647/17275#.E8.B0.83.E8.AF.95.E8.B7.91.E9.80.9A.E9.98.B6.E6.AE.B5.E5.A6.82.E4.BD.95.E8.AE.A1.E7.AE.97-UserSig.EF.BC.9F
*/
public static String genUserSig(Long sdkAppId, String key, String userId) {
TLSSigAPIv2 tlsSigAPIv2 = new TLSSigAPIv2(sdkAppId, key);
return tlsSigAPIv2.genUserSig(userId, expired);
}
public static String genUserSig(Long sdkAppId, String key, String userId, Long expiredTime) {
TLSSigAPIv2 tlsSigAPIv2 = new TLSSigAPIv2(sdkAppId, key);
return tlsSigAPIv2.genUserSig(userId, expiredTime);
}
}

View File

@@ -6,6 +6,7 @@ import com.cool.store.dto.content.ContentQueryListDto;
import com.cool.store.dto.content.ContentUpdateDto;
import com.cool.store.entity.HyContentInfoDO;
import com.cool.store.mapper.HyContentInfoMapper;
import com.cool.store.vo.HyContentInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@@ -36,7 +37,7 @@ public class ContentDAO {
contentInfoMapper.updateByPrimaryKeySelective(hyContentInfoDO);
}
public List<HyContentInfoDO> queryContentList(ContentQueryListDto dto) {
public List<HyContentInfoVO> queryContentList(ContentQueryListDto dto) {
return contentInfoMapper.queryContentList(dto);
}

View File

@@ -28,11 +28,11 @@ public class HyOpenAreaInfoDAO {
return hyOpenAreaInfoMapper.queryKeyOpenArea();
}
public List<HyOpenAreaInfoDO> queryByKeyword(String keyword){
public List<HyOpenAreaInfoDO> queryByKeyword(String keyword,Boolean filterData){
if (StringUtils.isEmpty(keyword)){
return new ArrayList<>();
}
return hyOpenAreaInfoMapper.queryByKeyword(keyword);
return hyOpenAreaInfoMapper.queryByKeyword(keyword,filterData);
}
public List<HyOpenAreaInfoDO> queryFirstLevel(){

View File

@@ -0,0 +1,41 @@
package com.cool.store.dao;
import com.cool.store.entity.HyPartnerBaseInfoDO;
import com.cool.store.mapper.HyPartnerBaseInfoMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
/**
* @Author suzhuhong
* @Date 2023/6/13 20:25
* @Version 1.0
*/
@Repository
public class HyPartnerBaseInfoDAO {
@Resource
HyPartnerBaseInfoMapper hyPartnerBaseInfoMapper;
public int insertSelective( HyPartnerBaseInfoDO record){
return hyPartnerBaseInfoMapper.insertSelective(record);
}
/**
*
* 默认更新方法根据主键更新不会把null值更新到数据库避免覆盖之前有值的
* dateTime:2023-05-29 03:51
*/
public int updateByPrimaryKeySelective(HyPartnerBaseInfoDO record){
return hyPartnerBaseInfoMapper.updateByPrimaryKeySelective(record);
}
public int updateByPartnerId(String userName,String mobile,String partnerId){
return hyPartnerBaseInfoMapper.updateByPartnerId(userName,mobile,partnerId);
}
}

View File

@@ -125,4 +125,7 @@ public class HyPartnerLineInfoDAO {
return hyPartnerLineInfoMapper.joinAndRemoveBlack(lineId,status,joinReason,removeReason);
}
}

View File

@@ -24,6 +24,11 @@ public class HyPartnerUserInfoDAO {
HyPartnerUserInfoMapper hyPartnerUserInfoMapper;
public int updateByPrimaryKeySelective(HyPartnerUserInfoDO hyPartnerUserInfoDO){
return hyPartnerUserInfoMapper.updateByPrimaryKeySelective(hyPartnerUserInfoDO);
}
/**
* 根据PartnerId查询用户
* @param partnerId

View File

@@ -2,6 +2,7 @@ package com.cool.store.mapper;
import com.cool.store.dto.content.ContentQueryListDto;
import com.cool.store.entity.HyContentInfoDO;
import com.cool.store.vo.HyContentInfoVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -36,7 +37,7 @@ public interface HyContentInfoMapper {
* 分页查询动态列表
* 根据传入参数匹配
*/
List<HyContentInfoDO> queryContentList(ContentQueryListDto dto);
List<HyContentInfoVO> queryContentList(ContentQueryListDto dto);
/**
* 根据contentId查询动态详情

View File

@@ -39,7 +39,7 @@ public interface HyOpenAreaInfoMapper {
* 查询所有
* @return
*/
List<HyOpenAreaInfoDO> queryByKeyword(@Param("keyword") String keyword);
List<HyOpenAreaInfoDO> queryByKeyword(@Param("keyword") String keyword, @Param("filterData") Boolean filterData);
/**
* 查询所有一级城市 (所有省份+直辖市)

View File

@@ -22,4 +22,15 @@ public interface HyPartnerBaseInfoMapper {
* dateTime:2023-05-29 03:51
*/
int updateByPrimaryKeySelective(@Param("record") HyPartnerBaseInfoDO record);
/**
* 根据加盟商ID修改用户名称与手机号
* @param userName
* @param mobile
* @param partnerId
* @return
*/
int updateByPartnerId(@Param("userName") String userName,
@Param("mobile") String mobile,
@Param("partnerId") String partnerId);
}

View File

@@ -2,6 +2,7 @@ package com.cool.store.mapper;
import com.cool.store.entity.HyPartnerInterviewDO;
import com.cool.store.vo.PartnerInterviewInfoVO;
import com.cool.store.vo.PartnerPassLetterDetailVO;
import org.apache.ibatis.annotations.Param;
/**
@@ -31,4 +32,40 @@ public interface HyPartnerInterviewMapper {
*/
PartnerInterviewInfoVO queryByPartnerId(@Param("partnerId") String partnerId);
/**
* 修改面试状态
* 预约状态 0 待预约;1待面试;2已开始;3待审核;4审批中;5审批通过;6拒绝
*/
int updateInterviewStatus(@Param("interviewId") String interviewId, @Param("status") Integer status);
/**
* 修改面试实际开始时间
* @param dateTime "yyyy-MM-dd HH:mm:ss"
*/
int updateActualStartTime(@Param("interviewId") String interviewId, @Param("dateTime") String dateTime);
/**
* 修改加盟商或面试官进入面试时间
* @param userType 1.面试官2.加盟商3.其他
* @param dateTime "yyyy-MM-dd HH:mm:ss"
* @return
*/
int updateEnterTime(@Param("interviewId") String interviewId, @Param("userType") Integer userType, @Param("dateTime") String dateTime);
/**
* 将加盟商是否参会修改为参会
* 0未参加1参加
*/
int updateWhetherPartnerEnter(@Param("interviewId") String interviewId);
/**
* 根据会议 id 查询面试官 id
*/
String getInterviewerByInterviewId(@Param("interviewId") String interviewId);
/**
* 获取通知函详情
*/
PartnerPassLetterDetailVO getPassLetterDetail(@Param("interviewId") String interviewId);
}

View File

@@ -3,6 +3,8 @@ package com.cool.store.mapper;
import com.cool.store.dto.partner.PartnerInterviewInfoDTO;
import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO;
import com.cool.store.entity.HyPartnerInterviewPlanDO;
import com.cool.store.request.GetInterviewListReq;
import com.cool.store.vo.interview.InterviewVO;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;
@@ -50,7 +52,6 @@ public interface HyPartnerInterviewPlanMapper {
@Param("currentDate") String currentDate,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
/**
* 查询面试列表
* @param userId
@@ -70,4 +71,20 @@ public interface HyPartnerInterviewPlanMapper {
PageInfo<PartnerInterviewInfoDTO> getPartnerInterviewInfoList(@Param("userId") String userId,
@Param("workflowStage") String workflowStage ,
@Param("workflowStatus") String workflowStatus);
/**
* 查询面试列表
*
* @param request
* @return
*/
List<InterviewVO> getInterviewList(@Param("record") GetInterviewListReq request);
/**
* 查询面试详情
*
* @param interviewId
* @return
*/
InterviewVO getInterviewInfo(String interviewId);
}

View File

@@ -17,8 +17,14 @@
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.cool.store.entity.HyContentInfoDO">
<result column="content" jdbcType="LONGVARCHAR" property="content" />
</resultMap>
<resultMap id="HyContentInfoVOList" type="com.cool.store.vo.HyContentInfoVO">
<association property="updateUserName" column="update_user_id" select="getUpdateUserName"></association>
<association property="updateUserPhone" column="update_user_id" select="getUpdateUserPhone"></association>
</resultMap>
<sql id="Base_Column_List">
id, content_title, subject, content_type, cover, status, deleted, create_time, update_time,
id, content_title, subject, content_type, cover, content, status, deleted, create_time, update_time,
create_user_id, update_user_id
</sql>
<sql id="Blob_Column_List">
@@ -42,9 +48,6 @@
<if test="record.status != null">
status,
</if>
<if test="record.deleted != null">
deleted,
</if>
<if test="record.createTime != null">
create_time,
</if>
@@ -143,8 +146,8 @@
</set>
where id = #{contentId}
</update>
<select id="queryContentList" resultType="com.cool.store.entity.HyContentInfoDO">
select <include refid="Base_Column_List"></include>
<select id="queryContentList" resultMap="HyContentInfoVOList">
select <include refid="Base_Column_List"></include>, update_user_id updateUserId
from hy_content_info
where deleted = 0
<if test="contentTitle != null and contentTitle != ''">
@@ -156,6 +159,24 @@
<if test="contentType != null and contentType != ''">
and content_type = #{contentType}
</if>
<if test="startTime != null and startTime != ''">
and update_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and update_time &lt;= #{endTime}
</if>
</select>
<select id="getUpdateUserName" resultType="string">
select name
from enterprise_user
where deleted = 0
and user_id = #{updateUserId}
</select>
<select id="getUpdateUserPhone" resultType="string">
select mobile
from enterprise_user
where deleted = 0
and user_id = #{updateUserId}
</select>
<!-- 查询动态详情 -->

View File

@@ -133,6 +133,9 @@
select * from
hy_open_area_info
where area_path like concat('%',#{keyword},'%')
<if test="filterData!=null and filterData==true">
and province_city_flag = 1
</if>
</select>

View File

@@ -202,4 +202,18 @@
</set>
where id = #{record.id}
</update>
<update id="updateByPartnerId">
update hy_partner_base_info
<set>
<if test="userName != null and userName!=''">
username = #{record.username},
</if>
<if test="mobile != null and mobile!=''">
mobile = #{record.mobile},
</if>
where partner_id = #{partnerId}
</set>
</update>
</mapper>

View File

@@ -34,6 +34,11 @@
<association property="interviewerName" column="interviewerId" select="queryInterviewerName" javaType="string"/>
</resultMap>
<resultMap id="passLetterDetail" type="com.cool.store.vo.PartnerPassLetterDetailVO">
<association property="partnerName" column="partner_id" select="queryPartnerName"></association>
<association property="verifyCity" column="partner_id" select="getVerifyCity"></association>
</resultMap>
<sql id="Base_Column_List">
id, status, partner_line_id, interview_plan_id, partner_id, deadline, interviewer,
recorder, process_info, record_time, summary, auth_code, pass_file_url, expiry_date,
@@ -261,4 +266,68 @@
WHERE deleted = 0
AND user_id = #{interview}
</select>
<!-- 修改面试状态 -->
<update id="updateInterviewStatus">
UPDATE hy_partner_interview
SET `status` = #{status}
WHERE id = #{interviewId}
</update>
<!-- 修改面试实际开始时间 -->
<update id="updateActualStartTime">
UPDATE hy_partner_interview_plan
SET actual_start_time = IF(actual_start_time IS NULL, #{dateTime}, actual_start_time)
WHERE id = (
SELECT interview_plan_id
FROM hy_partner_interview
WHERE id = #{interviewId}
)
</update>
<!-- 修改面试官或加盟商入会时间 -->
<update id="updateEnterTime">
UPDATE hy_partner_interview
<set>
<if test="userType != null and userType == 1">
interviewer_enter_time = IF(interviewer_enter_time IS NULL, #{dateTime}, interviewer_enter_time),
</if>
<if test="userType != null and userType == 2">
partner_enter_time = IF(partner_enter_time IS NULL, #{dateTime}, partner_enter_time)
</if>
</set>
WHERE id = 1
</update>
<!-- 修改加盟商参会状态为参加 -->
<update id="updateWhetherPartnerEnter">
UPDATE hy_partner_interview_plan
SET is_partner_interview = 1
WHERE id = (
SELECT interview_plan_id
FROM hy_partner_interview
WHERE id = #{interviewId}
)
</update>
<!-- 根据会议 id 获取面试官 id -->
<select id="getInterviewerByInterviewId" resultType="java.lang.String">
SELECT interviewer
FROM hy_partner_interview
WHERE id = #{interviewId}
</select>
<!-- 获取通知函详情 -->
<select id="getPassLetterDetail" resultMap="passLetterDetail">
SELECT pass_code, pass_file_url, expiry_date, partner_id
FROM hy_partner_interview
WHERE id = #{interviewId}
</select>
<!-- 获取意向开店区域 -->
<select id="getVerifyCity" resultType="string">
SELECT want_shop_area
FROM hy_partner_intent_info
WHERE partner_id = #{partner_id}
</select>
</mapper>

View File

@@ -237,4 +237,65 @@
</if>
</where>
</select>
<select id="getInterviewList" resultType="com.cool.store.vo.interview.InterviewVO">
select hpip.id as interviewId,
hpui.username as partnerName,
hpui.mobile as partnerMobile,
hpip.room_id as roomId,
hpip.start_time as startTime,
hpui.username as interviewerName,
hpui.mobile as interviewerMobile,
hpip.room_status as roomStatus,
hpip.end_time as endTime
from hy_partner_interview_plan hpip
left join hy_partner_line_info hpll on hpip.partner_line_id = hpll.id
left join hy_partner_user_info hpui on hpui.partner_id = hpip.partner_id
<where>
<if test="record.partnerName !=null and partnerName!=''">
hpui.username like concat('%',#{record.partnerName},'%')
</if>
<if test="record.partnerMobile !=null and partnerMobile!=''">
hpui.mobile like concat('%',#{record.partnerMobile},'%')
</if>
<if test="record.roomId !=null and roomId!=''">
hpip.room_id = #{record.roomId}
</if>
<if test="record.interviewerName !=null and interviewerName!=''">
hpui.username like concat('%',#{record.interviewerName},'%')
</if>
<if test="record.interviewerMobile !=null and interviewerMobile!=''">
hpui.mobile like concat('%',#{record.interviewerMobile},'%')
</if>
<if test="record.roomStatus !=null and roomStatus!=''">
hpip.room_status = #{record.roomStatus}
</if>
<if test="record.startTime !=null and startTime!=''">
hpip.start_time &lt;= #{record.startTime}
</if>
<if test="record.endTime !=null and endTime!=''">
hpip.end_time &gt;= #{record.endTime}
</if>
</where>
</select>
<select id="getInterviewInfo" resultType="com.cool.store.vo.interview.InterviewVO">
select hpip.id as interviewId,
hpui.username as partnerName,
hpui.mobile as partnerMobile,
hpip.room_id as roomId,
hpip.start_time as startTime,
hpui.username as interviewerName,
hpui.mobile as interviewerMobile,
hpip.room_status as roomStatus,
hpip.end_time as endTime,
hpip.partner_id as partnerId,
hpip.interviewer as interviewerId,
hpi.status as status
from hy_partner_interview_plan hpip
left join hy_partner_line_info hpll on hpip.partner_line_id = hpll.id
left join hy_partner_user_info hpui on hpui.partner_id = hpip.partner_id
left join hy_partner_interview hpi on hpip.id = hpi.interview_plan_id
where hpip.id = #{interviewId}
</select>
</mapper>

View File

@@ -295,7 +295,8 @@
a.workflow_status as workflowStatus,
a.partner_id as partnerUserId,
a.investment_manager as investmentManager,
b.user_portrait as user_portrait
b.user_portrait as user_portrait,
b.id as partnerBaseInfoId
from hy_partner_line_info a inner join hy_partner_base_info b
on a.id = b.partner_line_id
<where>

View File

@@ -18,4 +18,10 @@ public class ContentQueryListDto extends PageBasicInfo {
@ApiModelProperty("类型,默认选中全部时不传值")
private String contentType;
@ApiModelProperty("筛选开始时间")
private String startTime;
@ApiModelProperty("筛选结束时间")
private String endTime;
}

View File

@@ -0,0 +1,18 @@
package com.cool.store.dto.partner;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class EnterInterviewDto {
@ApiModelProperty(value = "会议id", required = true)
private String interviewId;
@ApiModelProperty(value = "用户id", required = true)
private String userId;
@ApiModelProperty(value = "1.面试官2.加盟商3.其他", required = true)
private Integer userType;
}

View File

@@ -13,6 +13,9 @@ public class PartnerLineInfoAndBaseInfoDTO {
@ApiModelProperty("线索ID")
private Long id;
@ApiModelProperty("加盟申请基本信息 添加tags使用该ID")
private Long partnerBaseInfoId;
@ApiModelProperty("hy_partner_user_info.partner_id")
private String partnerId;

View File

@@ -40,10 +40,10 @@ public class HyContentInfoDO implements Serializable {
private Integer deleted;
@ApiModelProperty("创建时间")
private Date createTime;
private String createTime;
@ApiModelProperty("更新时间")
private Date updateTime;
private String updateTime;
@ApiModelProperty("新建人ID")
private String createUserId;

View File

@@ -15,8 +15,8 @@ import java.util.List;
@ApiModel
public class AddTagsRequest {
@ApiModelProperty("线索ID")
private Long lineId;
@ApiModelProperty("加盟申请基本信息ID")
private Long partnerBaseInfoId;
@ApiModelProperty("标签列表")
private List<String> Tags;
}

View File

@@ -13,8 +13,8 @@ import lombok.Data;
@ApiModel
public class BaseUserInfoRequest {
@ApiModelProperty("ID")
private Long id;
@ApiModelProperty("partnerId")
private String partnerId;
@ApiModelProperty("手机号")
private String mobile;
@@ -25,11 +25,11 @@ public class BaseUserInfoRequest {
@ApiModelProperty("常驻区域")
private String liveArea;
@ApiModelProperty("意向开店区域")
@ApiModelProperty("意向开店区域ID")
private String wantShopArea;
@ApiModelProperty("意向开店区域ID")
private Long wantShopAreaId;
@ApiModelProperty("意向开店区域Name")
private Long wantShopAreaName;
@ApiModelProperty("0不接受调剂、1全国调剂、2省内调剂、3市内调剂")
private Integer acceptAdjustType;

View File

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/5/31 11:01
@@ -21,7 +23,7 @@ public class CloseFollowRequest {
@ApiModelProperty("真实拒绝原因")
private String rejectRealReason;
@ApiModelProperty("证明文件与凭证")
private String certifyFile;
private List<String> certifyFile;
@ApiModelProperty("通过原因")
private String passReason;
@ApiModelProperty("通过-pass 拒绝-reject")

View File

@@ -0,0 +1,20 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: young.yu
* @Date: 2023-06-09 15:41
* @Description:
*/
@Data
@ApiModel
public class EntrustOthersReq {
@ApiModelProperty("会议编号")
private String interviewId;
@ApiModelProperty("新面试官编号")
private String newInterviewerId;
}

View File

@@ -0,0 +1,17 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: young.yu
* @Date: 2023-06-12 17:43
* @Description:
*/
@Data
@ApiModel
public class FinishInterviewReq {
@ApiModelProperty("会议编号")
private String interviewId;
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.request;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: young.yu
* @Date: 2023-06-06 15:50
* @Description:
*/
@Data
@ApiModel
public class GetInterviewListReq extends PageBasicInfo {
@ApiModelProperty("加盟商姓名")
private String partnerName;
@ApiModelProperty("加盟商手机号")
private String partnerMobile;
@ApiModelProperty("房间号")
private String roomId;
@ApiModelProperty("面试官姓名")
private String interviewerName;
@ApiModelProperty("面试官手机号")
private String interviewerMobile;
@ApiModelProperty("房间状态:0待开放;1已开放; 2已关闭")
private Integer roomStatus;
@ApiModelProperty("开始时间")
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
}

View File

@@ -0,0 +1,21 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: young.yu
* @Date: 2023-06-12 17:43
* @Description:
*/
@Data
@ApiModel
public class ModifyInterviewTimeReq {
@ApiModelProperty("会议编号")
private String interviewId;
@ApiModelProperty("新预约开始时间")
private String newStartBookingTime;
@ApiModelProperty("新预约结束时间")
private String newEndBookingTime;
}

View File

@@ -0,0 +1,17 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: young.yu
* @Date: 2023-06-09 15:41
* @Description:
*/
@Data
@ApiModel
public class QueryByInterviewIdReq {
@ApiModelProperty("会议编号")
private String interviewId;
}

View File

@@ -0,0 +1,48 @@
package com.cool.store.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class HyContentInfoVO {
@ApiModelProperty("")
private Long id;
@ApiModelProperty("内容标题")
private String contentTitle;
@ApiModelProperty("栏目CODE")
private String subject;
@ApiModelProperty("类型 image-图文 video-视频")
private String contentType;
@ApiModelProperty("封面URL")
private String cover;
@ApiModelProperty("状态 0-启用 1-禁用")
private Integer status;
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("更新时间")
private String updateTime;
@ApiModelProperty("新建人ID")
private String createUserId;
@ApiModelProperty("更新人ID")
private String updateUserId;
@ApiModelProperty("更新人姓名")
private String updateUserName;
@ApiModelProperty("更新人电话")
private String updateUserPhone;
@ApiModelProperty("图文内容或者视频文件URL")
private String content;
}

View File

@@ -0,0 +1,15 @@
package com.cool.store.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PartnerEnterInterviewVO {
@ApiModelProperty("userSig 进入会议需要的用户签名")
private String userSign;
@ApiModelProperty("面试官id")
private String interviewerId;
}

View File

@@ -18,6 +18,8 @@ public class PartnerLineInfoAndBaseInfoVO {
@ApiModelProperty("线索ID")
private Long id;
private Long partnerBaseInfoId;
@ApiModelProperty("流程阶段:1意向申请审核;2预约面试时间;3加盟资格面试;4分配选址开发经理;5商圈点位评估;6上传店铺租赁信息;7完善加盟签约信息;8支付加盟费用;9签订加盟合同")
private String workflowStage;

View File

@@ -0,0 +1,27 @@
package com.cool.store.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PartnerPassLetterDetailVO {
@ApiModelProperty("加盟商姓名")
private String partnerName;
@ApiModelProperty("编码")
private String passCode;
@ApiModelProperty("审核城市")
private String verifyCity;
@ApiModelProperty("函文件URL")
private String passFileUrl;
@ApiModelProperty("生成日期YYYY-MM-DD")
private String createTime;
@ApiModelProperty("有效期截至")
private String expiryDate;
}

View File

@@ -0,0 +1,145 @@
package com.cool.store.vo.interview;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @Author: young.yu
* @Date: 2023-06-08 16:26
* @Description:
*/
@ApiModel(description = "面试信息")
public class InterviewVO {
@ApiModelProperty(value = "会议id", required = true)
private String interviewId;
@ApiModelProperty(value = "加盟商用户编号")
private String partnerId;
@ApiModelProperty(value = "被面试人姓名", required = true)
private String partnerName;
@ApiModelProperty(value = "被面试人手机号", required = true)
private String partnerMobile;
@ApiModelProperty(value = "房间号", required = true)
private String roomId;
@ApiModelProperty(value = "会议计划开始时间", required = true, example = "2023-06-03 10:00")
private String startTime;
@ApiModelProperty(value = "面试官人员编号")
private String interviewerId;
@ApiModelProperty(value = "面试官姓名", required = true)
private String interviewerName;
@ApiModelProperty(value = "面试官手机号", required = true)
private String interviewerMobile;
@ApiModelProperty(value = "房间状态(0待开放;1已开放;2已关闭)", required = true)
private String roomStatus;
@ApiModelProperty(value = "会议结束时间", required = true, example = "2023-06-03 12:00")
private String endTime;
@ApiModelProperty(value = "预约状态 0 待预约;1待面试;2已开始;3待审核;4审批中;5审批通过;6拒绝", required = true)
private Integer status;
public String getPartnerId() {
return partnerId;
}
public void setPartnerId(String partnerId) {
this.partnerId = partnerId;
}
public String getInterviewerId() {
return interviewerId;
}
public void setInterviewerId(String interviewerId) {
this.interviewerId = interviewerId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getInterviewId() {
return interviewId;
}
public void setInterviewId(String interviewId) {
this.interviewId = interviewId;
}
public String getPartnerName() {
return partnerName;
}
public void setPartnerName(String partnerName) {
this.partnerName = partnerName;
}
public String getPartnerMobile() {
return partnerMobile;
}
public void setPartnerMobile(String partnerMobile) {
this.partnerMobile = partnerMobile;
}
public String getRoomId() {
return roomId;
}
public void setRoomId(String roomId) {
this.roomId = roomId;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getInterviewerName() {
return interviewerName;
}
public void setInterviewerName(String interviewerName) {
this.interviewerName = interviewerName;
}
public String getInterviewerMobile() {
return interviewerMobile;
}
public void setInterviewerMobile(String interviewerMobile) {
this.interviewerMobile = interviewerMobile;
}
public String getRoomStatus() {
return roomStatus;
}
public void setRoomStatus(String roomStatus) {
this.roomStatus = roomStatus;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}

View File

@@ -4,6 +4,7 @@ import com.cool.store.dto.content.ContentAddDto;
import com.cool.store.dto.content.ContentQueryListDto;
import com.cool.store.dto.content.ContentUpdateDto;
import com.cool.store.entity.HyContentInfoDO;
import com.cool.store.vo.HyContentInfoVO;
import java.util.List;
@@ -31,7 +32,7 @@ public interface ContentService {
/**
* 查询动态列表
*/
List<HyContentInfoDO> queryContentList(ContentQueryListDto dto);
List<HyContentInfoVO> queryContentList(ContentQueryListDto dto);
/**
* 查询动态详情

View File

@@ -0,0 +1,42 @@
package com.cool.store.service;
import com.cool.store.request.EntrustOthersReq;
import com.cool.store.request.FinishInterviewReq;
import com.cool.store.request.GetInterviewListReq;
import com.cool.store.request.ModifyInterviewTimeReq;
import com.cool.store.vo.interview.InterviewVO;
import java.util.List;
/**
* @Author: young.yu
* @Date: 2023-06-06 15:01
* @Description :面试service
*/
public interface InterviewService {
List<InterviewVO> getInterviewList(GetInterviewListReq request);
/**
* 根据面试会议id查询面试信息
* @param interviewId
* @return
*/
InterviewVO getInterviewInfo(String interviewId);
/**
* 委托他人
* @param request
*/
void entrustOthers(EntrustOthersReq request);
/**
* 修改面试时间
* @param request
*/
void modifyInterviewTime(ModifyInterviewTimeReq request);
/**
* 结束面试
* @param request
*/
void finishInterview(FinishInterviewReq request);
}

View File

@@ -1,6 +1,9 @@
package com.cool.store.service;
import com.cool.store.dto.partner.EnterInterviewDto;
import com.cool.store.vo.PartnerEnterInterviewVO;
import com.cool.store.vo.PartnerInterviewInfoVO;
import com.cool.store.vo.PartnerPassLetterDetailVO;
public interface PartnerInterviewService {
@@ -11,4 +14,17 @@ public interface PartnerInterviewService {
*/
PartnerInterviewInfoVO queryByPartnerId(String partnerId);
/**
* 进入面试间的方法
* 修改一些面试状态
* 最后返回 userSign 用于进入腾讯云音视频房间
* @return userSign 进入视频所需签名
*/
PartnerEnterInterviewVO enterInterviewRoom(EnterInterviewDto dto);
/**
* 获取通知函详情
*/
PartnerPassLetterDetailVO passLetterDetail(String interviewId);
}

View File

@@ -8,6 +8,7 @@ import com.cool.store.dto.content.ContentUpdateDto;
import com.cool.store.entity.HyContentInfoDO;
import com.cool.store.mapper.HyContentInfoMapper;
import com.cool.store.service.ContentService;
import com.cool.store.vo.HyContentInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -60,7 +61,7 @@ public class ContentServiceImpl implements ContentService {
* 查询动态列表
*/
@Override
public List<HyContentInfoDO> queryContentList(ContentQueryListDto dto) {
public List<HyContentInfoVO> queryContentList(ContentQueryListDto dto) {
return contentInfoMapper.queryContentList(dto);
}

View File

@@ -0,0 +1,102 @@
package com.cool.store.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import com.cool.store.entity.HyPartnerInterviewDO;
import com.cool.store.entity.HyPartnerInterviewPlanDO;
import com.cool.store.mapper.HyPartnerInterviewMapper;
import com.cool.store.mapper.HyPartnerInterviewPlanMapper;
import com.cool.store.request.EntrustOthersReq;
import com.cool.store.request.FinishInterviewReq;
import com.cool.store.request.GetInterviewListReq;
import com.cool.store.request.ModifyInterviewTimeReq;
import com.cool.store.service.InterviewService;
import com.cool.store.vo.interview.InterviewVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Author: young.yu
* @Date: 2023-06-06 15:19
* @Description:
*/
@Slf4j
@Service
public class InterviewServiceImpl implements InterviewService {
@Autowired
private HyPartnerInterviewPlanMapper hyPartnerInterviewPlanMapper;
@Autowired
private HyPartnerInterviewMapper hyPartnerInterviewMapper;
@Override
public List<InterviewVO> getInterviewList(GetInterviewListReq request) {
List<InterviewVO> interviewList = hyPartnerInterviewPlanMapper.getInterviewList(request);
return interviewList;
}
@Override
public InterviewVO getInterviewInfo(String interviewId) {
return hyPartnerInterviewPlanMapper.getInterviewInfo(interviewId);
}
@Override
public void entrustOthers(EntrustOthersReq request) {
//TODO 1.原面试官日程删除
//TODO 2.新面试官日程新增
//TODO 3.面试信息变更
HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO();
record.setId(Long.valueOf(request.getInterviewId()));
record.setInterviewer(request.getInterviewId());
record.setUpdateTime(new Date());
hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(record);
HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO();
hyPartnerInterviewDO.setInterviewPlanId(Long.valueOf(request.getInterviewId()));
hyPartnerInterviewDO.setInterviewer(request.getNewInterviewerId());
hyPartnerInterviewDO.setUpdateTime(new Date());
hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO);
}
@Override
public void modifyInterviewTime(ModifyInterviewTimeReq request) {
//TODO 修改面试时间
HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO();
record.setId(Long.valueOf(request.getInterviewId()));
record.setStartTime(Convert.toDate(request.getNewStartBookingTime()));
record.setUpdateTime(new Date());
hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(record);
}
@Override
public void finishInterview(FinishInterviewReq request) {
//更新面试计划信息
HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO();
record.setId(Long.valueOf(request.getInterviewId()));
record.setRoomStatus(0);
record.setUpdateTime(new Date());
hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(record);
//更新面试信息
HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO();
hyPartnerInterviewDO.setInterviewPlanId(Long.valueOf(request.getInterviewId()));
hyPartnerInterviewDO.setStatus(3);
hyPartnerInterviewDO.setUpdateTime(new Date());
hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO);
}
}

View File

@@ -1,10 +1,26 @@
package com.cool.store.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.cool.store.dto.partner.EnterInterviewDto;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.HyPartnerInterviewMapper;
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.PartnerEnterInterviewVO;
import com.cool.store.vo.PartnerInterviewInfoVO;
import com.cool.store.vo.PartnerPassLetterDetailVO;
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;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
@Service
public class PartnerInterviewServiceImpl implements PartnerInterviewService {
@@ -12,8 +28,15 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
@Autowired
private HyPartnerInterviewMapper interviewMapper;
@Value("${trtc.sdkAppId}")
private Long sdkAppId;
@Value("${trtc.secretKey}")
private String key;
/**
* 加盟商查询面试信息
*
* @param partnerId
* @return
*/
@@ -22,4 +45,70 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
return interviewMapper.queryByPartnerId(partnerId);
}
/**
* 进入面试间的方法
* 修改一些面试状态
* 最后返回 userSign 用于进入腾讯云音视频房间
*
* @return userSign 进入视频所需签名
*/
@Override
@Transactional
public PartnerEnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) {
try {
//1. 将面试状态改为 --> 2已开始
interviewMapper.updateInterviewStatus(dto.getInterviewId(), 2);
//3. 修改面试实际开始时间,以第一个人进来的时间为准,后续不再修改
interviewMapper.updateActualStartTime(dto.getInterviewId(), DateUtil.now());
//4. 修改加盟商或面试官进入面试时间
interviewMapper.updateEnterTime(dto.getInterviewId(), dto.getUserType(), DateUtil.now());
//5. 加盟商如果进入了,就修改面试计划表 is_partner_interview 字段
interviewMapper.updateWhetherPartnerEnter(dto.getInterviewId());
//6. 查询对应的面试官id
String interviewId = interviewMapper.getInterviewerByInterviewId(dto.getInterviewId());
//生成 userSign
String userSig = TRTCUtils.genUserSig(sdkAppId, key, dto.getUserId());
PartnerEnterInterviewVO vo = new PartnerEnterInterviewVO();
vo.setUserSign(userSig);
vo.setInterviewerId(interviewId);
return vo;
} catch (Exception e) {
throw new ServiceException(ErrorCodeEnum.INTERVIEW_ENTER_FAIL);
}
}
/**
* 获取通知函详情
* TODO 暂时将生成通过函文件的功能放在这里方便测试和联调,审批通过的回调方法完成后应该放到该方法中
*/
@Override
public PartnerPassLetterDetailVO passLetterDetail(String interviewId) {
PartnerPassLetterDetailVO vo = interviewMapper.getPassLetterDetail(interviewId);
//有效期为审批通过次日起第 60 天的 23:59:59由此倒推 createTime
DateTime expiryDate = DateUtil.parseDate(vo.getExpiryDate());
DateTime createTime = DateUtil.offsetDay(expiryDate, -61);
vo.setCreateTime(DateUtil.format(createTime, "yyyy-MM-dd"));
//解析意向开店区域为市级行政区
String verifyCity = vo.getVerifyCity();
if (verifyCity == null) {
String passCode = PassLetterUtils.genPassLetter(vo.getPartnerName(), verifyCity, vo.getPassCode(), createTime);
vo.setPassCode(passCode);
return vo;
}
String[] split = verifyCity.split("/");
//根据长度来取市级行政区域
if (split.length == 2) {
vo.setVerifyCity(split[1]);
} else if (split.length == 3) {
vo.setVerifyCity(split[1]);
} else if (split.length == 4) {
vo.setVerifyCity(split[2]);
} else {
System.out.println("wrong");
}
String passCode = PassLetterUtils.genPassLetter(vo.getPartnerName(), verifyCity, vo.getPassCode(), createTime);
vo.setPassCode(passCode);
return vo;
}
}

View File

@@ -0,0 +1,19 @@
package com.cool.store.Service;
import com.cool.store.request.AddTagsRequest;
/**
* @Author suzhuhong
* @Date 2023/6/13 21:37
* @Version 1.0
*/
public interface HyPartnerBaseInfoService {
/**
* 添加标签
* @param addTagsRequest
* @return
*/
Boolean addTags(AddTagsRequest addTagsRequest);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.Service;
import com.cool.store.request.BaseUserInfoRequest;
import com.cool.store.vo.PartnerIntentApplyInfoVO;
import com.github.pagehelper.PageInfo;
@@ -28,4 +29,11 @@ public interface HyPartnerIntentInfoService {
*/
PartnerIntentApplyInfoVO getPartnerIntentApplyInfo(Long lineId);
/**
* 员工端 修改加盟商意向信息
* @param baseUserInfoRequest
* @return
*/
Boolean updatePartnerIntentInfo(BaseUserInfoRequest baseUserInfoRequest);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.Service;
import com.cool.store.request.CloseFollowRequest;
import com.cool.store.request.LineRequest;
import com.cool.store.vo.BlackListVO;
import com.cool.store.vo.PartnerLineInfoAndBaseInfoVO;
@@ -90,5 +91,13 @@ public interface HyPartnerLineInfoService {
*/
Boolean removeBlackList( Long lineId, Integer status, String removeReason);
/**
* 结束或者通过线索
* @param userId
* @param closeFollowRequest
* @return
*/
Boolean closeOrPassFollow(String userId,CloseFollowRequest closeFollowRequest);
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.Service;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/6/13 22:11
* @Version 1.0
*/
public interface OpenAreaService {
/**
* 根据关键字搜索
* @param keyword
* @return
*/
List<OpenAreaTreeVO> queryByKeyword(String keyword);
/**
* 查询字列表
* @param type
* @param parentId
* @return
*/
List<OpenAreaVO> getChildrenList(String type, Long parentId);
}

View File

@@ -0,0 +1,33 @@
package com.cool.store.Service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.Service.HyPartnerBaseInfoService;
import com.cool.store.dao.HyPartnerBaseInfoDAO;
import com.cool.store.entity.HyPartnerBaseInfoDO;
import com.cool.store.request.AddTagsRequest;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
/**
* @Author suzhuhong
* @Date 2023/6/13 21:37
* @Version 1.0
*/
@Service
public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
@Resource
HyPartnerBaseInfoDAO hyPartnerBaseInfoDAO;
@Override
public Boolean addTags(AddTagsRequest addTagsRequest) {
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = new HyPartnerBaseInfoDO();
hyPartnerBaseInfoDO.setId(addTagsRequest.getPartnerBaseInfoId());
hyPartnerBaseInfoDO.setUserPortrait(CollectionUtils.isNotEmpty(addTagsRequest.getTags())? JSONObject.toJSONString(addTagsRequest.getTags()):"");
hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(hyPartnerBaseInfoDO);
return Boolean.TRUE;
}
}

View File

@@ -2,6 +2,7 @@ package com.cool.store.Service.impl;
import com.cool.store.Service.HyPartnerIntentInfoService;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.HyPartnerBaseInfoDAO;
import com.cool.store.dao.HyPartnerIntentInfoDAO;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
@@ -13,6 +14,8 @@ import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.WorkflowStageEnum;
import com.cool.store.enums.WorkflowStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.HyPartnerBaseInfoMapper;
import com.cool.store.request.BaseUserInfoRequest;
import com.cool.store.vo.PartnerIntentApplyInfoVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -39,6 +42,8 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic
HyPartnerUserInfoDAO hyPartnerUserInfoDAO;
@Resource
HyPartnerLineInfoDAO hyPartnerLineInfoDAO;
@Resource
HyPartnerBaseInfoDAO hyPartnerBaseInfoDAO;
@Override
public PageInfo<PartnerIntentApplyInfoVO> getPartnerIntentApplyList(String userId, String type, Integer pageSize, Integer pageNumber) {
@@ -82,6 +87,24 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic
return partnerIntentApplyInfoVO;
}
@Override
public Boolean updatePartnerIntentInfo(BaseUserInfoRequest baseUserInfoRequest) {
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(String.valueOf(baseUserInfoRequest.getPartnerId()));
if (hyPartnerUserInfoDO==null){
throw new ServiceException(ErrorCodeEnum.PARTNER_USER_NOT_EXIST);
}
hyPartnerUserInfoDO.setUsername(baseUserInfoRequest.getUsername());
hyPartnerUserInfoDO.setMobile(baseUserInfoRequest.getMobile());
hyPartnerUserInfoDO.setLiveArea(baseUserInfoRequest.getLiveArea());
hyPartnerUserInfoDO.setWantShopArea(baseUserInfoRequest.getWantShopArea());
hyPartnerUserInfoDO.setAcceptAdjustType(baseUserInfoRequest.getAcceptAdjustType());
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO);
//修改意向申请信息中的加盟商名称与手机号
hyPartnerBaseInfoDAO.updateByPartnerId(baseUserInfoRequest.getUsername(),baseUserInfoRequest.getMobile(),baseUserInfoRequest.getPartnerId());
return Boolean.TRUE;
}
/**
* partnerIntentApplyInfoDTOToVo
* @param partnerIntentApplyInfoDTO

View File

@@ -1,6 +1,8 @@
package com.cool.store.Service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPObject;
import com.cool.store.Service.HyPartnerLineInfoService;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
@@ -14,6 +16,7 @@ import com.cool.store.enums.LineStatusEnum;
import com.cool.store.enums.WorkflowStageEnum;
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.utils.CoolDateUtils;
import com.cool.store.utils.StringUtil;
@@ -23,11 +26,16 @@ import com.cool.store.vo.PartnerLineInfoVO;
import com.cool.store.vo.StageCountVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.gson.JsonObject;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -188,7 +196,44 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
return Boolean.TRUE;
}
@Override
public Boolean closeOrPassFollow(String userId,CloseFollowRequest closeFollowRequest) {
HyPartnerLineInfoDO hyPartnerLineInfoDO = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(closeFollowRequest.getLineId());
if (hyPartnerLineInfoDO==null){
throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST);
}
if (WorkflowStageEnum.INTENT.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage())){
throw new ServiceException(ErrorCodeEnum.WORK_FLOW_STAGE_PASS_ERROR);
}
//通过
if ("pass".equals(closeFollowRequest.getType())){
hyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.RESERVATION.getCode());
hyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.RESERVATION_0.getCode());
hyPartnerLineInfoDO.setDeadline(CoolDateUtils.getDateFormatDay(2));
hyPartnerLineInfoDO.setPassReason(closeFollowRequest.getPassReason());
if (CollectionUtils.isNotEmpty(closeFollowRequest.getCertifyFile())){
hyPartnerLineInfoDO.setCertifyFile(JSONObject.toJSONString(closeFollowRequest.getCertifyFile()));
}
}
//拒绝
if ("reject".equals(closeFollowRequest.getType())){
//当前节点 拒绝的子状态
String workflowStatus = WorkflowStageEnum.getWorkflowStageMap().get(hyPartnerLineInfoDO.getWorkflowStage());
hyPartnerLineInfoDO.setWorkflowStatus(workflowStatus);
//15天 冷静期
// TODO: 2023/6/13 冷静期
hyPartnerLineInfoDO.setDeadline(CoolDateUtils.getDateBefore(new Date(),15));
hyPartnerLineInfoDO.setRejectPublicReason(closeFollowRequest.getRejectPublicReason());
hyPartnerLineInfoDO.setRejectRealReason(closeFollowRequest.getRejectRealReason());
if (CollectionUtils.isNotEmpty(closeFollowRequest.getCertifyFile())){
hyPartnerLineInfoDO.setCertifyFile(JSONObject.toJSONString(closeFollowRequest.getCertifyFile()));
}
hyPartnerLineInfoDO.setLineStatus(LineStatusEnum.PUBLIC_SEAS.getCode());
}
hyPartnerLineInfoDAO.updateByPrimaryKeySelective(hyPartnerLineInfoDO);
return Boolean.TRUE;
}
/**
* convertPartnerBlackListDTOToVo
* @param partnerBlackListDTO
@@ -221,6 +266,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
partnerLineInfoAndBaseInfoVO.setPartnerUserId(partnerLineInfoAndBaseInfoDTO.getPartnerId());
partnerLineInfoAndBaseInfoVO.setInvestmentManager(partnerLineInfoAndBaseInfoDTO.getInvestmentManager());
partnerLineInfoAndBaseInfoVO.setUserPortrait(partnerLineInfoAndBaseInfoDTO.getUserPortrait());
partnerLineInfoAndBaseInfoVO.setPartnerBaseInfoId(partnerLineInfoAndBaseInfoDTO.getPartnerBaseInfoId());
partnerLineInfoAndBaseInfoVO.setWorkflowStage(partnerLineInfoAndBaseInfoDTO.getWorkflowStage());
partnerLineInfoAndBaseInfoVO.setWorkflowStatus(partnerLineInfoAndBaseInfoDTO.getWorkflowStatus());
return partnerLineInfoAndBaseInfoVO;

View File

@@ -0,0 +1,137 @@
package com.cool.store.Service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.Service.OpenAreaService;
import com.cool.store.dao.HyOpenAreaInfoDAO;
import com.cool.store.entity.HyOpenAreaInfoDO;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author suzhuhong
* @Date 2023/6/13 22:11
* @Version 1.0
*/
@Service
public class OpenAreaServiceImpl implements OpenAreaService {
@Resource
HyOpenAreaInfoDAO hyOpenAreaInfoDAO;
@Override
public List<OpenAreaTreeVO> queryByKeyword(String keyword) {
//先查出所有的一级菜单
List<HyOpenAreaInfoDO> openArea = hyOpenAreaInfoDAO.queryFirstLevel();
Map<Long, HyOpenAreaInfoDO> longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
//查询关键字下所有的数据 原始的数据
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,Boolean.TRUE);
Set<Long> longSet = hyOpenAreaInfoDOS.stream().map(HyOpenAreaInfoDO::getId).collect(Collectors.toSet());
hyOpenAreaInfoDOS.stream().forEach(x->{
Long parentId = x.getParentId();
if (parentId!=null&&!longSet.contains(parentId)){
//添加到集合中
longSet.add(x.getParentId());
HyOpenAreaInfoDO hyOpenAreaInfoDO = longHyOpenAreaInfoDOMap.get(parentId);
hyOpenAreaInfoDOS.add(hyOpenAreaInfoDO);
}
});
JSONArray objects = buildTree(JSONArray.parseArray(JSONObject.toJSONString(hyOpenAreaInfoDOS)), "id", "parentId","childNode" );
List<OpenAreaTreeVO> openAreaTreeVOS = JSONObject.parseArray(objects.toJSONString(), OpenAreaTreeVO.class);
return openAreaTreeVOS;
}
@Override
public List<OpenAreaVO> getChildrenList(String type, Long parentId) {
List<HyOpenAreaInfoDO> childrenList = hyOpenAreaInfoDAO.getChildrenList(type, parentId);
List<OpenAreaVO> result = new ArrayList<>();
childrenList.stream().forEach(x->{
OpenAreaVO openAreaVO = convertDoToVo(x);
result.add(openAreaVO);
});
return result;
}
private OpenAreaVO convertDoToVo(HyOpenAreaInfoDO hyOpenAreaInfoDO){
OpenAreaVO openAreaVO = new OpenAreaVO();
openAreaVO.setId(hyOpenAreaInfoDO.getId());
openAreaVO.setAreaName(hyOpenAreaInfoDO.getAreaName());
openAreaVO.setParentId(hyOpenAreaInfoDO.getParentId());
openAreaVO.setAreaPath(hyOpenAreaInfoDO.getAreaPath());
openAreaVO.setAreaStatus(hyOpenAreaInfoDO.getAreaStatus());
openAreaVO.setBackgroundBanner(hyOpenAreaInfoDO.getBackgroundBanner());
openAreaVO.setDetailBanner(hyOpenAreaInfoDO.getDetailBanner());
return openAreaVO;
}
/**
* 构建树
* @param arr
* @param id
* @param pid
* @param child
* @return
*/
public static JSONArray buildTree(JSONArray arr, String id, String pid, String child) {
//新建一个JSONArray来接收组装成树形结构的返回值
JSONArray jsonArray = new JSONArray();
//新建一个JSONObject对象
JSONObject hash = new JSONObject();
//将数组转换为object格式
for (int i = 0; i < arr.size(); i++) {
//获取当前的JSON对象
JSONObject json = (JSONObject) arr.get(i);
//把当前id作为键当前JSON对象作为值 put回hash这个Object对象中
//这里的put方法类似于map的put方法
hash.put(json.getString(id), json);
}
//遍历结果集
for (int j = 0; j < arr.size(); j++) {
//单条记录
JSONObject aVal = (JSONObject) arr.get(j);
//在hash中取出key为单条记录中pid的值
String pidStr = "";
//如果父级id不等于null
if (aVal.get(pid) != null) {
pidStr = aVal.get(pid).toString();
}
//从hash这个对象中获取父级对象 parent
JSONObject hashParent = (JSONObject) hash.get(pidStr);
//如果记录的pid存在则说明它有父节点将她添加到孩子节点的集合中
if (hashParent != null) {
//检查是否有child属性
if (hashParent.get(child) != null) {
//有子节点 则先将子节点取出
JSONArray children = (JSONArray) hashParent.get(child);
//然后把当前这个对象放进子节点之中
children.add(aVal);
//最后把子节点在放回父节点之中
hashParent.put(child, children);
} else {
//无子节点 则新建一个子节点
JSONArray children = new JSONArray();
//然后再把当前对象放进去
children.add(aVal);
//最后在放回父节点之中
hashParent.put(child, children);
}
} else {
jsonArray.add(aVal);
}
}
return jsonArray;
}
}

View File

@@ -6,6 +6,7 @@ import com.cool.store.dto.content.ContentUpdateDto;
import com.cool.store.entity.HyContentInfoDO;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.ContentService;
import com.cool.store.vo.HyContentInfoVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiOperation;
@@ -43,10 +44,10 @@ public class ContentController {
@PostMapping("/queryContentList")
@ApiOperation("查询动态列表")
public ResponseResult<PageInfo<HyContentInfoDO>> queryContentList(@RequestBody ContentQueryListDto dto) {
public ResponseResult<PageInfo<HyContentInfoVO>> queryContentList(@RequestBody ContentQueryListDto dto) {
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
List<HyContentInfoDO> list = contentService.queryContentList(dto);
PageInfo<HyContentInfoDO> page = new PageInfo<>(list);
List<HyContentInfoVO> list = contentService.queryContentList(dto);
PageInfo<HyContentInfoVO> page = new PageInfo<>(list);
return ResponseResult.success(page);
}

View File

@@ -1,9 +1,6 @@
package com.cool.store.controller;
import com.cool.store.Service.DeskService;
import com.cool.store.Service.HyPartnerIntentInfoService;
import com.cool.store.Service.HyPartnerInterviewPlanService;
import com.cool.store.Service.HyPartnerLineInfoService;
import com.cool.store.Service.*;
import com.cool.store.enums.LineStatusEnum;
import com.cool.store.request.*;
import com.cool.store.response.ResponseResult;
@@ -36,6 +33,10 @@ public class DeskController {
HyPartnerInterviewPlanService hyPartnerInterviewPlanService;
@Resource
HyPartnerLineInfoService hyPartnerLineInfoService;
@Resource
HyPartnerBaseInfoService hyPartnerBaseInfoService;
@Resource
OpenAreaService openAreaService;
@GetMapping(path = "/interviewSchedule")
@@ -222,25 +223,23 @@ public class DeskController {
@PostMapping(path = "/closeOrPassFollow")
@ApiOperation("意向申请审核 结束跟进/通过流程")
public ResponseResult<Boolean> closeFollow(@RequestBody CloseFollowRequest closeFollowRequest){
public ResponseResult<Boolean> closeOrPassFollow(@RequestBody CloseFollowRequest closeFollowRequest){
return ResponseResult.success();
String userId = "";
return ResponseResult.success(hyPartnerLineInfoService.closeOrPassFollow(userId,closeFollowRequest));
}
@PostMapping(path = "/changeIntentInfo")
@ApiOperation("员工端变更C端用户意向信息")
public ResponseResult<Boolean> changeIntentInfo( @RequestBody BaseUserInfoRequest baseUserInfoRequest){
return ResponseResult.success();
return ResponseResult.success(hyPartnerIntentInfoService.updatePartnerIntentInfo(baseUserInfoRequest));
}
@PostMapping(path = "/addTags")
@ApiOperation("添加标签接口")
public ResponseResult<Boolean> addTags(@RequestBody AddTagsRequest addTagsRequest){
return ResponseResult.success();
return ResponseResult.success(hyPartnerBaseInfoService.addTags(addTagsRequest));
}
@@ -258,16 +257,25 @@ public class DeskController {
@GetMapping(path = "/getOpenAreaTree")
@ApiOperation("开放城市树")
@ApiOperation("开放城市树-搜索城市")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentId", value = "父区域名称", required = false),
@ApiImplicitParam(name = "type", value = "可预约-reservation 可申请-apply ", required = false),
@ApiImplicitParam(name = "keyWord", value = "搜索关键字", required = false)
})
public ResponseResult<List<OpenAreaVO>> getOpenAreaTree(@RequestParam(value = "parentId",required = false)Long parentId,
@RequestParam(value = "type",required = false)String type,
@RequestParam(value = "keyWord",required = false)String keyWord){
return ResponseResult.success();
public ResponseResult<List<OpenAreaTreeVO>> getOpenAreaTree(@RequestParam(value = "keyWord",required = false)String keyWord){
return ResponseResult.success(openAreaService.queryByKeyword(keyWord));
}
@GetMapping(path = "/getOpenAreaList")
@ApiOperation("开放城市树-子列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentId", value = "父区域名称", required = false),
@ApiImplicitParam(name = "type", value = "可预约-reservation 可申请-apply ", required = false)
})
public ResponseResult<List<OpenAreaVO>> getOpenAreaList(@RequestParam(value = "parentId",required = false)Long parentId,
@RequestParam(value = "type",required = false)String type){
return ResponseResult.success(openAreaService.getChildrenList(type,parentId));
}

View File

@@ -0,0 +1,70 @@
package com.cool.store.controller;
import com.cool.store.request.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.InterviewService;
import com.cool.store.vo.interview.InterviewVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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 java.util.List;
/**
* @Author: young.yu
* @Date: 2023-06-06 15:22
* @Description:
*/
@RestController
@RequestMapping("/interview")
@Api(tags = "面试信息")
public class InterviewController {
@Autowired
private InterviewService interviewService;
@PostMapping("/list")
@ApiOperation("获取面试信息列表")
public ResponseResult<PageInfo<InterviewVO>> getInterviewList(@RequestBody GetInterviewListReq request) {
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<InterviewVO> interviewList = interviewService.getInterviewList(request);
return ResponseResult.success(new PageInfo<>(interviewList));
}
@PostMapping("/queryByInterviewId")
@ApiOperation("根据面试会议id查询面试信息")
public ResponseResult<InterviewVO> queryByInterviewId(@RequestBody QueryByInterviewIdReq request) {
InterviewVO interviewVO = interviewService.getInterviewInfo(request.getInterviewId());
return ResponseResult.success(interviewVO);
}
@PostMapping("/entrustOthers")
@ApiOperation("委托他人")
public ResponseResult entrustOthers(@RequestBody EntrustOthersReq request) {
interviewService.entrustOthers(request);
return ResponseResult.success();
}
@PostMapping("/modifyInterviewTime")
@ApiOperation("修改面试时间")
public ResponseResult modifyInterviewTime(@RequestBody ModifyInterviewTimeReq request) {
interviewService.modifyInterviewTime(request);
return ResponseResult.success();
}
@PostMapping("/finish")
@ApiOperation("修改面试时间")
public ResponseResult finishInterview(@RequestBody FinishInterviewReq request) {
interviewService.finishInterview(request);
return ResponseResult.success();
}
}

View File

@@ -48,3 +48,7 @@ oss.accessKeySecret=FFsl8d9batprJ0vXr0k4Y8ada40Wm2
oss.endpoint=oss-cn-hangzhou.aliyuncs.com
oss.bucket=cool-store-hsay
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -49,4 +49,8 @@ oss.accessKeyId=LTAI5tRSXy2MrqaaBJ6gReur
oss.accessKeySecret=FFsl8d9batprJ0vXr0k4Y8ada40Wm2
oss.endpoint=oss-cn-hangzhou.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -1,15 +1,26 @@
package com.cool.store.controller;
import com.cool.store.dto.partner.EnterInterviewDto;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.PartnerInterviewService;
import com.cool.store.utils.PDFUtils;
import com.cool.store.vo.PartnerEnterInterviewVO;
import com.cool.store.vo.PartnerInterviewInfoVO;
import com.cool.store.vo.PartnerPassLetterDetailVO;
import com.lowagie.text.Document;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfWriter;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
@Api(tags = "加盟商资格面试")
@RestController
@@ -25,4 +36,16 @@ public class InterviewController {
return ResponseResult.success(interviewService.queryByPartnerId(partnerId));
}
@PostMapping("/enter")
@ApiOperation("进入面试间")
public ResponseResult<PartnerEnterInterviewVO> enterInterviewRoom(@RequestBody EnterInterviewDto dto) {
return ResponseResult.success(interviewService.enterInterviewRoom(dto));
}
@PostMapping("/passLetter/detail")
@ApiOperation("通过函详情")
public ResponseResult<PartnerPassLetterDetailVO> passLetterDetail(@RequestParam String interviewId) {
return ResponseResult.success(interviewService.passLetterDetail(interviewId));
}
}

View File

@@ -74,7 +74,7 @@ public class OpenAreaServiceImpl implements OpenAreaService {
Map<Long, HyOpenAreaInfoDO> longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
//查询关键字下所有的数据 原始的数据
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword);
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,Boolean.FALSE);
Map<Long, HyOpenAreaInfoDO> hyMap = hyOpenAreaInfoDOS.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tRSXy2MrqaaBJ6gReur
oss.accessKeySecret=FFsl8d9batprJ0vXr0k4Y8ada40Wm2
oss.endpoint=oss-cn-hangzhou.aliyuncs.com
oss.bucket=cool-store-hsay
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -47,4 +47,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -45,4 +45,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -51,3 +51,7 @@ oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -45,4 +45,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -45,4 +45,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

View File

@@ -45,4 +45,8 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740
corp.id = 171cddee76471740
#TRTC
trtc.sdkAppId=1400811820
trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219

Binary file not shown.

After

Width:  |  Height:  |  Size: 942 KiB