Commit a1e3b364 by zhangxingmin

Merge remote-tracking branch 'origin/dev_zxm' into test

# Conflicts:
#	yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAppointmentFileServiceImpl.java
#	yd-csf-service/src/main/java/com/yd/csf/service/service/FnaService.java
#	yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FnaServiceImpl.java
parents 13c9c6a6 bea0e9af
package com.yd.csf.api;
import com.yd.common.constant.ServerNameConstants;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
......
......@@ -78,4 +78,16 @@ public class ApiAppointmentFileController implements ApiAppointmentFileFeignClie
public Result download(String appointmentFileBizId) {
return apiAppointmentFileService.download(appointmentFileBizId);
}
/**
* 生成行程单PDF
* @param appointmentBizId
* @return
*/
@Override
public Result<String> itineraryPdf(String appointmentBizId) {
return apiAppointmentFileService.itineraryPdf(appointmentBizId);
}
}
......@@ -23,4 +23,6 @@ public interface ApiAppointmentFileService {
Result del(String appointmentFileBizId);
Result download(String appointmentFileBizId);
Result<String> itineraryPdf(String appointmentBizId);
}
......@@ -2,7 +2,10 @@ package com.yd.csf.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
......@@ -12,14 +15,22 @@ import com.yd.csf.feign.request.appointmentfile.ApiAppointmentFileAddRequest;
import com.yd.csf.feign.request.appointmentfile.ApiAppointmentFileEditRequest;
import com.yd.csf.feign.request.appointmentfile.ApiAppointmentFilePageRequest;
import com.yd.csf.feign.response.appointmentfile.ApiAppointmentFilePageResponse;
import com.yd.csf.service.dto.ItineraryDto;
import com.yd.csf.service.model.AppointmentFile;
import com.yd.csf.service.model.Policyholder;
import com.yd.csf.service.service.IAppointmentFileService;
import com.yd.csf.service.service.IAppointmentService;
import com.yd.oss.service.enums.TemplateTypeEnum;
import com.yd.oss.service.service.PdfService;
import com.yd.user.feign.response.sysuser.ApiSysUserPageResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
......@@ -35,6 +46,12 @@ public class ApiAppointmentFileServiceImpl implements ApiAppointmentFileService
@Autowired
private IAppointmentFileService iAppointmentFileService;
@Autowired
private IAppointmentService iAppointmentService;
@Autowired
private PdfService pdfService;
/**
* 预约附件信息分页查询
* @param request
......@@ -118,6 +135,41 @@ public class ApiAppointmentFileServiceImpl implements ApiAppointmentFileService
}
/**
* 生成行程单PDF
* @param appointmentBizId
* @return
*/
@Override
public Result<String> itineraryPdf(String appointmentBizId) {
String url = "";
//获取行程单的数据
ItineraryDto itineraryDto = iAppointmentService.getItineraryDto(appointmentBizId);
// ItineraryDto itineraryDto = new ItineraryDto();
// itineraryDto.setArrivalTime("2025-09-10 15:30:20");
// itineraryDto.setBusinessRepresentMobile1("1366666666");
// itineraryDto.setBusinessRepresentMobile1Code("86");
// itineraryDto.setBusinessRepresentName1("王红");
// itineraryDto.setCurrency("CY");
// itineraryDto.setEachIssuePremium("2999.99");
// itineraryDto.setInsurantName("陈发");
// itineraryDto.setMeetingPoint("香港大厦");
// itineraryDto.setName("王飞");
// itineraryDto.setPaymentTerm("10");
// itineraryDto.setProductName("全保产品");
// itineraryDto.setSigningAddress("香港保险公司");
// itineraryDto.setTotal("29990.99");
// itineraryDto.setNp("王");
// itineraryDto.setPolicyFee("999.89");
try {
url = pdfService.generatePDF(itineraryDto,appointmentBizId, TemplateTypeEnum.XCD.getItemValue());
return Result.success(url);
} catch (IOException e) {
e.printStackTrace();
throw new BusinessException("生成行程单PDF异常");
}
}
/**
* 校验预约附件信息是否存在
* @param appointmentFileBizId
* @return
......
......@@ -2,6 +2,7 @@ package com.yd.csf.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.org.apache.bcel.internal.generic.I2F;
import com.yd.common.constant.CodeGeneratorConstants;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
......@@ -17,7 +18,9 @@ import com.yd.csf.feign.response.appointment.ApiAppointmentDetailResponse;
import com.yd.csf.feign.response.appointment.ApiAppointmentPageResponse;
import com.yd.csf.service.enums.AppointmentStatusEnum;
import com.yd.csf.service.model.Appointment;
import com.yd.csf.service.model.Fna;
import com.yd.csf.service.model.ProductPlan;
import com.yd.csf.service.service.FnaService;
import com.yd.csf.service.service.IAppointmentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
......@@ -60,6 +63,9 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
@Autowired
private ApiAppointmentFileService apiAppointmentFileService;
@Autowired
private FnaService fnaService;
/**
* 预约分页查询
* @param request
......@@ -150,6 +156,23 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
//添加第二持有人信息表数据
apiSecondHolderService.addSecondHolderData(request.getApiSecondHolderInfoDto(),appointment.getAppointmentBizId());
//预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号)
updateFnaBizIdAndNo(appointment.getFnaBizId(),appointment.getAppointmentBizId(),appointment.getAppointmentNo());
return Result.success();
}
/**
* 提交待预约状态,预约信息更新到Fna表的预约业务id和预约编号
* @return
*/
public Result updateFnaBizIdAndNo(String fnaBizId,String appointmentBizId,String appointmentNo) {
Fna fna = fnaService.queryOne(fnaBizId);
if (!Objects.isNull(fna)) {
//预约编号
fna.setAppointmentBizId(appointmentBizId);
fna.setAppointmentNo(appointmentNo);
fnaService.saveOrUpdate(fna);
}
return Result.success();
}
......@@ -223,8 +246,28 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
//编辑预约入参字段校验(非库校验)
apiAppointmentCheckService.checkEditRequest(request);
//编辑预约提交-编辑预约信息主表数据,状态为待预约状态
Result<Appointment> appointmentResult = editAppointmentData(request.getApiAppointmentInfoDto(),AppointmentStatusEnum.DYY.getItemValue());
Integer status = null;
Appointment appointmentCheck = null;
if (!Objects.isNull(request.getApiAppointmentInfoDto())) {
//校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getApiAppointmentInfoDto().getAppointmentBizId());
appointmentCheck = result.getData();
if (AppointmentStatusEnum.ZC.getItemValue().equals(appointmentCheck.getStatus())){
//当前为暂存状态——>提交更新为待预约状态
status = AppointmentStatusEnum.DYY.getItemValue();
}else if (AppointmentStatusEnum.DYY.getItemValue().equals(appointmentCheck.getStatus())){
if (Objects.isNull(request.getApiAppointmentInfoDto().getConfirmAppointmentTime())) {
//待预约提交到待签署状态,确定预约时间不能为空
throw new BusinessException("待预约提交确定预约时间不能为空!");
}
//当前为待预约状态——>提交更新为待签署状态-->到新单跟进
status = AppointmentStatusEnum.DQS.getItemValue();
}
//其他状态下都是单纯编辑数据不做状态流转更新
}
//编辑预约提交-编辑预约信息主表数据
Result<Appointment> appointmentResult = editAppointmentData(request.getApiAppointmentInfoDto(),status);
Appointment appointment = appointmentResult.getData();
//编辑产品计划信息表数据
......@@ -245,6 +288,11 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
//编辑第二持有人信息表数据
apiSecondHolderService.editSecondHolderData(request.getApiSecondHolderInfoDto(),appointment.getAppointmentBizId());
if (!Objects.isNull(status) && AppointmentStatusEnum.DYY.getItemValue().equals(status)) {
//当前为暂存状态——>提交更新为待预约状态需要更新Fna表的编号和业务id完成绑定关联
//预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号)
updateFnaBizIdAndNo(appointment.getFnaBizId(),appointment.getAppointmentBizId(),appointment.getAppointmentNo());
}
return Result.success();
}
......
......@@ -44,7 +44,7 @@ spring:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: b3b01715-eb85-4242-992a-5aff03d864d4
namespace: c1e4cbcf-d8b7-4da9-a75a-7b75890fc390
# nacos的ip地址和端口
server-addr: 139.224.145.34:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
......
......@@ -56,4 +56,12 @@ public interface ApiAppointmentFileFeignClient {
*/
@GetMapping("/download")
Result download(@NotBlank(message = "预约附件信息表唯一业务ID不能为空") @RequestParam(value = "appointmentFileBizId") String appointmentFileBizId);
/**
* 生成行程单PDF
* @param appointmentBizId
* @return
*/
@GetMapping("/pdf/itinerary")
Result<String> itineraryPdf(@NotBlank(message = "预约信息主表唯一业务ID不能为空") @RequestParam(value = "appointmentBizId") String appointmentBizId);
}
......@@ -66,6 +66,11 @@ public class ApiAppointmentInfoDto {
private String businessNo;
/**
* 确定预约时间
*/
private LocalDateTime confirmAppointmentTime;
/**
* 意向预约时间
*/
// @NotNull(message = "意向预约时间不能为空")
......
......@@ -9,6 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotBlank;
/**
* 香港保险服务-预约附件信息Feign降级处理
*/
......@@ -42,6 +44,11 @@ public class ApiAppointmentFileFeignFallbackFactory implements FallbackFactory<A
public Result download(String appointmentFileBizId) {
return null;
}
@Override
public Result<String> itineraryPdf(String appointmentBizId) {
return null;
}
};
}
}
......@@ -73,6 +73,12 @@
<groupId>com.yd</groupId>
<artifactId>yd-csf-feign</artifactId>
</dependency>
<!-- OSS实现模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-oss-service</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 认证模块 -->
<dependency>
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.request.appointment.ApiAppointmentPageRequest;
import com.yd.csf.feign.response.appointment.ApiAppointmentPageResponse;
import com.yd.csf.service.dto.ItineraryDto;
import com.yd.csf.service.model.Appointment;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
......@@ -20,4 +21,7 @@ public interface AppointmentMapper extends BaseMapper<Appointment> {
IPage<ApiAppointmentPageResponse> page(@Param("page") Page<ApiAppointmentPageResponse> page,
@Param("request") ApiAppointmentPageRequest request);
//获取行程单的数据
ItineraryDto getItineraryDto(@Param("appointmentBizId") String appointmentBizId);
}
package com.yd.csf.service.dto;
import com.yd.oss.service.annotation.PdfField;
import lombok.Data;
/**
* 预约行程单PDF字段映射实体类
*/
@Data
public class ItineraryDto {
/**
* 集合时间(到港时间)
*/
@PdfField("arrivalTime")
private String arrivalTime;
/**
* 集合地点(字典)(会面地点)
*/
@PdfField("meetingPoint")
private String meetingPoint;
/**
* 意向地点(签单地址)
*/
@PdfField("signingAddress")
private String signingAddress;
/**
* 业务代表1姓名
*/
@PdfField("businessRepresentName1")
private String businessRepresentName1;
/**
* 业务代表1电话号码区号
*/
@PdfField("businessRepresentMobile1Code")
private String businessRepresentMobile1Code;
/**
* 业务代表1电话号码
*/
@PdfField("businessRepresentMobile1")
private String businessRepresentMobile1;
/**
* 咨询人(客户表-客户姓名)
*/
@PdfField("name")
private String name;
/**
* 受保人(受保人姓名)
*/
@PdfField("insurantName")
private String insurantName;
/**
* 意向缴费年期(产品计划-供款年期(字典))
*/
@PdfField("paymentTerm")
private String paymentTerm;
/**
* 意向年缴保费(产品计划-每期保费)
*/
@PdfField("eachIssuePremium")
private String eachIssuePremium;
/**
* 保单证费(产品计划-保单证费)
*/
@PdfField("policyFee")
private String policyFee;
/**
* 币种(产品计划-货币(字典))
*/
@PdfField("currency")
private String currency;
/**
* 意向咨询产品(产品计划-保险产品名称(中台保险产品名称,冗余))
*/
@PdfField("productName")
private String productName;
/**
* 合计金额(供款年期*每期保费)
*/
@PdfField("total")
private String total;
/**
* 客户姓名前缀
*/
@PdfField("np")
private String np;
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.request.appointment.ApiAppointmentPageRequest;
import com.yd.csf.feign.response.appointment.ApiAppointmentPageResponse;
import com.yd.csf.service.dto.ItineraryDto;
import com.yd.csf.service.model.Appointment;
import com.baomidou.mybatisplus.extension.service.IService;
......@@ -21,4 +22,6 @@ public interface IAppointmentService extends IService<Appointment> {
ApiAppointmentPageRequest request);
Appointment queryOne(String appointmentBizId);
ItineraryDto getItineraryDto(String appointmentBizId);
}
......@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.request.appointment.ApiAppointmentPageRequest;
import com.yd.csf.feign.response.appointment.ApiAppointmentPageResponse;
import com.yd.csf.service.dto.ItineraryDto;
import com.yd.csf.service.model.Appointment;
import com.yd.csf.service.dao.AppointmentMapper;
import com.yd.csf.service.service.IAppointmentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
/**
......@@ -43,4 +45,13 @@ public class AppointmentServiceImpl extends ServiceImpl<AppointmentMapper, Appoi
return this.getOne(new LambdaQueryWrapper<Appointment>().eq(Appointment::getAppointmentBizId,appointmentBizId));
}
/**
* 获取行程单的数据
* @param appointmentBizId
* @return
*/
public ItineraryDto getItineraryDto(String appointmentBizId){
return baseMapper.getItineraryDto(appointmentBizId);
}
}
......@@ -52,4 +52,23 @@
and a.is_deleted = 0
</select>
<select id="getItineraryDto" resultType="com.yd.csf.service.dto.ItineraryDto">
select
a.arrival_time,a.meeting_point,
a.signing_address,a.business_represent_name1,
a.business_represent_mobile1_code,a.business_represent_mobile1,
t.name,i.name as insurantName,pp.payment_term,pp.each_issue_premium,
pp.currency,pp.product_name,(pp.payment_term*pp.each_issue_premium) as total
from appointment a
left join product_plan pp on a.appointment_biz_id = pp.appointment_biz_id and pp.is_deleted = 0
left join insurant i on a.appointment_biz_id = i.appointment_biz_id and i.is_deleted = 0
left join customer t on t.customer_biz_id = a.customer_biz_id and t.is_deleted = 0
<where>
and a.appointment_biz_id = #{appointmentBizId}
and a.is_deleted = 0
</where>
limit 1
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment