From d80c70deb7541f541eaf28acfe74f880d40e3f6c Mon Sep 17 00:00:00 2001 From: pserimal Date: Thu, 15 Jun 2023 19:02:01 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=A2=E8=AF=95=E9=80=9A=E8=BF=87=E5=87=BD?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=8F=8A=E9=80=9A=E8=BF=87=E5=87=BD=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=92=8COSS=E6=9C=8D=E5=8A=A1=E5=99=A8=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/utils/PDFUtils.java | 11 +++- .../com/cool/store/utils/PassLetterUtils.java | 46 ++++++++----- .../mapper/HyPartnerInterviewMapper.java | 8 ++- .../resources/mapper/HyContentInfoMapper.xml | 4 +- .../mapper/HyPartnerInterviewMapper.xml | 38 +++++++++-- ...InterviewVO.java => EnterInterviewVO.java} | 8 ++- .../store/vo/PartnerPassLetterDetailVO.java | 5 +- coolstore-partner-service/pom.xml | 5 ++ .../java/com/cool/store/oss/OSSServer.java | 64 +++++++++++++++++++ .../cool/store/service/InterviewService.java | 11 ++++ .../service/PartnerInterviewService.java | 4 +- .../service/impl/InterviewServiceImpl.java | 45 +++++++++++++ .../impl/PartnerInterviewServiceImpl.java | 59 +++++++++++------ .../store/controller/InterviewController.java | 8 ++- .../store/controller/InterviewController.java | 15 +---- 15 files changed, 266 insertions(+), 65 deletions(-) rename coolstore-partner-model/src/main/java/com/cool/store/vo/{PartnerEnterInterviewVO.java => EnterInterviewVO.java} (59%) create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java index b12b8b33b..272b19a0e 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java @@ -94,10 +94,11 @@ public class PDFUtils { * @param color 字体颜色 */ private static void addContent(PdfReader reader, OutputStream outputStream, String content, float x, float y, BaseFont baseFont, float fontSize, int fontStyle, Color color) { + PdfStamper stamper = null; try { //生成 paragraph 并放在正确位置 //抠模板 - PdfStamper stamper = new PdfStamper(reader, outputStream); + stamper = new PdfStamper(reader, outputStream); PdfContentByte over = stamper.getOverContent(1); Font font = new Font(baseFont, fontSize, fontStyle, color); Paragraph insertContent = new Paragraph(content, font); @@ -110,6 +111,14 @@ public class PDFUtils { stamper.close(); } catch (IOException e) { throw new RuntimeException(e); + } finally { + try { + if (stamper != null) { + stamper.close(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } } } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java index af3da67ef..a94e5ee53 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java @@ -22,19 +22,16 @@ public class PassLetterUtils { * 返回通过函编码 * @param partnerName 加盟商姓名 * @param verifyCity 审批城市 + * @param passCode 通过函编码 * @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; - } + public static ByteArrayOutputStream genPassLetter(String partnerName, String passCode, String verifyCity, DateTime passTime) { String passTimeStr = DateUtil.format(passTime, "yyyy年MM月dd日"); Document document = new Document(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { //1. 创建 pdf document -// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - FileOutputStream outputStream = new FileOutputStream("passLetter.pdf"); +// FileOutputStream outputStream = new FileOutputStream("passLetter.pdf"); PdfWriter.getInstance(document, outputStream); document.open(); @@ -44,21 +41,38 @@ public class PassLetterUtils { 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; + addContentToPdf(outputStream, partnerName + " 先生/女士", 122, 640); + addContentToPdf(outputStream, passCode, 122, 558); + addContentToPdf(outputStream, verifyCity, 155, 494); + addContentToPdf(outputStream, "60天", 135, 450); + addContentToPdf(outputStream, passTimeStr, 393, 152); + return outputStream; } catch (IOException e) { throw new RuntimeException(e); + } finally { + try { + document.close(); + outputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } } } - private static void addContentToPdf(String content, float x, float y) { + /** + * 生成 passCode 的方法,拆分出来方便单独获取 passCode + * @return + */ + public static String genPassCode(DateTime passTime) { + String randomNum = RandomUtil.randomNumbers(5); + String passCode = "HSAY" + DateUtil.format(passTime, "yyMMdd") + "-" + randomNum; + return passCode; + } + + private static void addContentToPdf(ByteArrayOutputStream outputStream, 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")); + ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); + PdfReader pdfReader = new PdfReader(inputStream); PDFUtils.putParagraphAbsolutely(pdfReader, outputStream, x, y, content, 20, new Color(255, 82,25)); } catch (IOException e) { throw new RuntimeException(e); diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java index 4e0de1a97..b26ecc51e 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java @@ -1,6 +1,7 @@ package com.cool.store.mapper; import com.cool.store.entity.HyPartnerInterviewDO; +import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.cool.store.vo.PartnerPassLetterDetailVO; import org.apache.ibatis.annotations.Param; @@ -61,11 +62,16 @@ public interface HyPartnerInterviewMapper { /** * 根据会议 id 查询面试官 id */ - String getInterviewerByInterviewId(@Param("interviewId") String interviewId); + EnterInterviewVO getInterviewerByInterviewId(@Param("interviewId") String interviewId); /** * 获取通知函详情 */ PartnerPassLetterDetailVO getPassLetterDetail(@Param("interviewId") String interviewId); + /** + * 生成通过函 pdf 后修改 + */ + int updatePassLetterInfo(@Param("passCode") String passCode, @Param("passFileUrl") String passFileUrl, @Param("expiryDate") String expiryDate, @Param("interviewId") String interviewId); + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml index cf27b14f9..e69a1691f 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml @@ -106,10 +106,10 @@ content_title = #{record.contentTitle}, - + subject = #{record.subject}, - + content_type = #{record.contentType}, diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml index 0fa5d3610..2eee85c8c 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml @@ -34,6 +34,11 @@ + + + + + @@ -311,23 +316,44 @@ - + SELECT interviewer, interviewer interviewer_id, partner_id FROM hy_partner_interview WHERE id = #{interviewId} + + + UPDATE hy_partner_interview + + + pass_code = #{passCode}, + + + pass_file_url = #{passFileUrl}, + + + expiry_date = #{expiryDate} + + + WHERE id = #{interviewId} + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerEnterInterviewVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/EnterInterviewVO.java similarity index 59% rename from coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerEnterInterviewVO.java rename to coolstore-partner-model/src/main/java/com/cool/store/vo/EnterInterviewVO.java index c9a294e2d..76f42563d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerEnterInterviewVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/EnterInterviewVO.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data -public class PartnerEnterInterviewVO { +public class EnterInterviewVO { @ApiModelProperty("userSig 进入会议需要的用户签名") private String userSign; @@ -12,4 +12,10 @@ public class PartnerEnterInterviewVO { @ApiModelProperty("面试官id") private String interviewerId; + @ApiModelProperty("面试官姓名") + private String interviewerName; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerPassLetterDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerPassLetterDetailVO.java index cc83453f9..4bb0a40e2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerPassLetterDetailVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerPassLetterDetailVO.java @@ -9,7 +9,10 @@ public class PartnerPassLetterDetailVO { @ApiModelProperty("加盟商姓名") private String partnerName; - @ApiModelProperty("编码") + @ApiModelProperty("授权码") + private String authCode; + + @ApiModelProperty("通过函编码") private String passCode; @ApiModelProperty("审核城市") diff --git a/coolstore-partner-service/pom.xml b/coolstore-partner-service/pom.xml index 1422f9c1d..d1c4bc08a 100644 --- a/coolstore-partner-service/pom.xml +++ b/coolstore-partner-service/pom.xml @@ -41,6 +41,11 @@ com.aliyun ons20190214 + + + com.aliyun.oss + aliyun-sdk-oss + com.github.pagehelper pagehelper diff --git a/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java b/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java new file mode 100644 index 000000000..6f6261d31 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java @@ -0,0 +1,64 @@ +package com.cool.store.oss; + +import com.aliyun.oss.ClientException; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.OSSException; +import com.aliyun.oss.model.PutObjectRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.InputStream; + +@Component +@Slf4j +public class OSSServer { + + @Value("${oss.accessKeyId:null}") + private String accessKeyId; + @Value("${oss.accessKeySecret:null}") + private String accessKeySecret; + @Value("${oss.endpoint:null}") + private String endpoint; + @Value("${oss.bucket:null}") + private String bucket; + @Value("${corp.id:null}") + private String corpId; + + /** + * 服务端上传文件的方法 + * ObjectName 为文件存放位置 + 名字,不可包含 bucket + */ + public String uploadFileServer(InputStream inputStream, String objectName) { + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + try { + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, objectName, inputStream); + // 创建PutObject请求。 + ossClient.putObject(putObjectRequest); + return "http://" + bucket + "." + endpoint + "/" + objectName; + } catch (OSSException oe) { + log.error("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + log.error("Error Message:" + oe.getErrorMessage()); + log.error("Error Code:" + oe.getErrorCode()); + log.error("Request ID:" + oe.getRequestId()); + log.error("Host ID:" + oe.getHostId()); + } catch (ClientException ce) { + log.error("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + log.error("Error Message:" + ce.getMessage()); + } catch (RuntimeException e) { + throw new RuntimeException(e); + } + finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java index b101c26a1..c7e1173ed 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java @@ -1,9 +1,11 @@ package com.cool.store.service; +import com.cool.store.dto.partner.EnterInterviewDto; 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.EnterInterviewVO; import com.cool.store.vo.interview.InterviewVO; import java.util.List; @@ -39,4 +41,13 @@ public interface InterviewService { * @param request */ void finishInterview(FinishInterviewReq request); + + /** + * 进入面试间的方法 + * 修改一些面试状态 + * 最后返回 userSign 用于进入腾讯云音视频房间 + * @return userSign 进入视频所需签名 + */ + EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java index efc740737..9d8bca88f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java @@ -1,7 +1,7 @@ package com.cool.store.service; import com.cool.store.dto.partner.EnterInterviewDto; -import com.cool.store.vo.PartnerEnterInterviewVO; +import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.cool.store.vo.PartnerPassLetterDetailVO; @@ -20,7 +20,7 @@ public interface PartnerInterviewService { * 最后返回 userSign 用于进入腾讯云音视频房间 * @return userSign 进入视频所需签名 */ - PartnerEnterInterviewVO enterInterviewRoom(EnterInterviewDto dto); + EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto); /** * 获取通知函详情 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 5b7fc8700..c4e5488cf 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -2,8 +2,11 @@ package com.cool.store.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; +import com.cool.store.dto.partner.EnterInterviewDto; import com.cool.store.entity.HyPartnerInterviewDO; import com.cool.store.entity.HyPartnerInterviewPlanDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; import com.cool.store.mapper.HyPartnerInterviewMapper; import com.cool.store.mapper.HyPartnerInterviewPlanMapper; import com.cool.store.request.EntrustOthersReq; @@ -11,10 +14,14 @@ 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.utils.TRTCUtils; +import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.interview.InterviewVO; import lombok.extern.slf4j.Slf4j; 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.util.Date; import java.util.List; @@ -28,9 +35,18 @@ import java.util.List; @Service public class InterviewServiceImpl implements InterviewService { + @Value("${trtc.sdkAppId}") + private Long sdkAppId; + + @Value("${trtc.secretKey}") + private String key; + @Autowired private HyPartnerInterviewPlanMapper hyPartnerInterviewPlanMapper; + @Autowired + private HyPartnerInterviewMapper interviewMapper; + @Autowired private HyPartnerInterviewMapper hyPartnerInterviewMapper; @Override @@ -97,6 +113,35 @@ public class InterviewServiceImpl implements InterviewService { } + /** + * 进入面试间的方法 + * 修改一些面试状态 + * 最后返回 userSign 用于进入腾讯云音视频房间 + * + * @return userSign 进入视频所需签名 + */ + @Override + @Transactional + public EnterInterviewVO 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、姓名及加盟商姓名 + EnterInterviewVO vo = interviewMapper.getInterviewerByInterviewId(dto.getInterviewId()); + //生成 userSign + String userSig = TRTCUtils.genUserSig(sdkAppId, key, dto.getUserId()); + vo.setUserSign(userSig); + return vo; + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_ENTER_FAIL); + } + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java index 3507e4f8b..f2606d200 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java @@ -2,16 +2,16 @@ 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 cn.hutool.core.util.ObjectUtil; 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.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.PartnerEnterInterviewVO; +import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.cool.store.vo.PartnerPassLetterDetailVO; import org.springframework.beans.factory.annotation.Autowired; @@ -19,8 +19,7 @@ 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; +import java.io.*; @Service public class PartnerInterviewServiceImpl implements PartnerInterviewService { @@ -28,6 +27,9 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { @Autowired private HyPartnerInterviewMapper interviewMapper; + @Autowired + private OSSServer ossServer; + @Value("${trtc.sdkAppId}") private Long sdkAppId; @@ -54,7 +56,7 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { */ @Override @Transactional - public PartnerEnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) { + public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) { try { //1. 将面试状态改为 --> 2已开始 interviewMapper.updateInterviewStatus(dto.getInterviewId(), 2); @@ -64,13 +66,11 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { interviewMapper.updateEnterTime(dto.getInterviewId(), dto.getUserType(), DateUtil.now()); //5. 加盟商如果进入了,就修改面试计划表 is_partner_interview 字段 interviewMapper.updateWhetherPartnerEnter(dto.getInterviewId()); - //6. 查询对应的面试官id - String interviewId = interviewMapper.getInterviewerByInterviewId(dto.getInterviewId()); + //6. 查询对应的面试官id、姓名及加盟商姓名 + EnterInterviewVO vo = 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); @@ -84,17 +84,8 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { @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) { @@ -106,9 +97,35 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { } else { System.out.println("wrong"); } - String passCode = PassLetterUtils.genPassLetter(vo.getPartnerName(), verifyCity, vo.getPassCode(), createTime); - vo.setPassCode(passCode); + // TODO 调用生成通过函和修改数据库数据的方法 + String passCode = genPassLetterAndUpdateDB(vo, interviewId); + //再查一次 vo + vo = interviewMapper.getPassLetterDetail(interviewId); + //有效期为审批通过次日起第 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")); return vo; } + /** + * TODO 暂时将生成 passLetter 并上传 OSS 和修改数据库对应信息的方法放在这里,实际应该在 800 的回调方法中 + * @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); + } + return passLetterDetail.getPassCode(); + } + } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java index 4a4453ae9..c8360f4b7 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java @@ -1,8 +1,10 @@ package com.cool.store.controller; +import com.cool.store.dto.partner.EnterInterviewDto; import com.cool.store.request.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.InterviewService; +import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.interview.InterviewVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -65,6 +67,10 @@ public class InterviewController { return ResponseResult.success(); } - + @PostMapping("/enter") + @ApiOperation("进入面试间") + public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) { + return ResponseResult.success(interviewService.enterInterviewRoom(dto)); + } } diff --git a/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java index 96c06b465..3af188129 100644 --- a/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java +++ b/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java @@ -3,25 +3,14 @@ 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.EnterInterviewVO; 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.*; -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 @RequestMapping("interview") @@ -38,7 +27,7 @@ public class InterviewController { @PostMapping("/enter") @ApiOperation("进入面试间") - public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) { + public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) { return ResponseResult.success(interviewService.enterInterviewRoom(dto)); }