Commit e888a128 authored by fangxinjiang's avatar fangxinjiang

见费出单逻辑-fxj

parent d0a94b0e
......@@ -439,6 +439,12 @@ public class TInsuranceDetail extends BaseEntity {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private LocalDate preHandleTime;
/**
* 差额settleId
*/
@TableField(exist = false)
@Schema(description = "差额settleId")
private String balanceId;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -196,4 +196,10 @@ public class EkpInteractiveParam implements Serializable {
*/
@Schema(description = "是否见费出单")
private String isJfcd;
/**
* 差额settleId
*/
@Schema(description = "差额settleId")
private String balanceId;
}
......@@ -2038,59 +2038,89 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
}
//根据结算类型判断是否需要计算预估保费
//预估 (是否见费出单为的不用生成预估,因为之前已经生成了)
if (detail.getSettleType() == CommonConstants.ZERO_INT && CommonConstants.ONE_STRING.equals(detail.getIsJfcd())){
if (CommonConstants.ONE_INT == detail.getBillingType()){
// 按月查费率
// 预估保费 = 费率 * 购买标准 + 5元
BigDecimal estimatePremium = new BigDecimal(detail.getBuyStandard())
.multiply(detail.getRate())
.add(BigDecimal.valueOf(5.00))
.setScale(2,BigDecimal.ROUND_HALF_UP);
detail.setEstimatePremium(estimatePremium);
if (detail.getBuyType() == CommonConstants.THREE_INT){
detail.setPolicyEffect(LocalDate.now().plusDays(CommonConstants.ONE_INT));
}
//记录状态均置为「已投保」
detail.setBuyHandleStatus(CommonConstants.THREE_INT);
detail.setSignFlag(CommonConstants.ONE_INT);
//记录的有效状态,置为「有效」
detail.setIsEffect(CommonConstants.ZERO_INT);
detail.setIsOverdue(CommonConstants.ZERO_INT);
detail.setIsUse(CommonConstants.ZERO_INT);
detail.setUpdateTime(LocalDateTime.now());
detail.setUpdateBy(user.getId());
//保费存储
TInsuranceSettle settle = new TInsuranceSettle();
settle.setInsDetailId(detail.getId());
settle.setSettleType(detail.getSettleType());
settle.setSettleHandleStatus(CommonConstants.ONE_STRING);
settle.setCreateTime(LocalDateTime.now());
settle.setEstimatePushTime(LocalDateTime.now());
settle.setEstimatePremium(estimatePremium);
//调完ekp接口才会是1
settle.setIsEstimatePush(CommonConstants.ZERO_INT);
settle.setId(RandomStringUtils.randomNumeric(19));
settleList.add(settle);
detail.setDefaultSettleId(settle.getId());
successTwo.add(detail);
updateEmployeeInsurancePreById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING);
updateEmployeeInsurancePreRenewById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING, false);
//生成收入数据
createInsuranceInfo(detail,settleDomain);
}else {
//按天
//计算起止时间的天数
long day = LocalDateUtil.betweenDay(detail.getPolicyStart().toString(), detail.getPolicyEnd().toString());
if (detail.getBuyType() == CommonConstants.THREE_INT){
detail.setPolicyEffect(LocalDate.now().plusDays(CommonConstants.ONE_INT));
day = LocalDateUtil.betweenDay(detail.getPolicyEffect().toString(), detail.getPolicyEnd().toString());
if (detail.getSettleType() == CommonConstants.ZERO_INT ){
if (CommonConstants.ONE_STRING.equals(detail.getIsJfcd())){
if (CommonConstants.ONE_INT == detail.getBillingType()){
// 按月查费率
// 预估保费 = 费率 * 购买标准 + 5元
BigDecimal estimatePremium = new BigDecimal(detail.getBuyStandard())
.multiply(detail.getRate())
.add(BigDecimal.valueOf(5.00))
.setScale(2,BigDecimal.ROUND_HALF_UP);
detail.setEstimatePremium(estimatePremium);
if (detail.getBuyType() == CommonConstants.THREE_INT){
detail.setPolicyEffect(LocalDate.now().plusDays(CommonConstants.ONE_INT));
}
//记录状态均置为「已投保」
detail.setBuyHandleStatus(CommonConstants.THREE_INT);
detail.setSignFlag(CommonConstants.ONE_INT);
//记录的有效状态,置为「有效」
detail.setIsEffect(CommonConstants.ZERO_INT);
detail.setIsOverdue(CommonConstants.ZERO_INT);
detail.setIsUse(CommonConstants.ZERO_INT);
detail.setUpdateTime(LocalDateTime.now());
detail.setUpdateBy(user.getId());
//保费存储
TInsuranceSettle settle = new TInsuranceSettle();
settle.setInsDetailId(detail.getId());
settle.setSettleType(detail.getSettleType());
settle.setSettleHandleStatus(CommonConstants.ONE_STRING);
settle.setCreateTime(LocalDateTime.now());
settle.setEstimatePushTime(LocalDateTime.now());
settle.setEstimatePremium(estimatePremium);
//调完ekp接口才会是1
settle.setIsEstimatePush(CommonConstants.ZERO_INT);
settle.setId(RandomStringUtils.randomNumeric(19));
settleList.add(settle);
detail.setDefaultSettleId(settle.getId());
successTwo.add(detail);
updateEmployeeInsurancePreById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING);
updateEmployeeInsurancePreRenewById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING, false);
//生成收入数据
createInsuranceInfo(detail,settleDomain);
}else {
//按天
//计算起止时间的天数
long day = LocalDateUtil.betweenDay(detail.getPolicyStart().toString(), detail.getPolicyEnd().toString());
if (detail.getBuyType() == CommonConstants.THREE_INT){
detail.setPolicyEffect(LocalDate.now().plusDays(CommonConstants.ONE_INT));
day = LocalDateUtil.betweenDay(detail.getPolicyEffect().toString(), detail.getPolicyEnd().toString());
}
//预估保费 = (购买标准 / 365) * 天数 + 5元
BigDecimal estimatePremium = new BigDecimal(detail.getBuyStandard())
.multiply(new BigDecimal(day))
.divide(new BigDecimal("365"),CommonConstants.TWO_INT,BigDecimal.ROUND_HALF_UP)
.add(BigDecimal.valueOf(5.00));
detail.setEstimatePremium(estimatePremium);
//记录状态均置为「已投保」
detail.setBuyHandleStatus(CommonConstants.THREE_INT);
detail.setSignFlag(CommonConstants.ONE_INT);
//记录的有效状态,置为「有效」
detail.setIsEffect(CommonConstants.ZERO_INT);
detail.setIsOverdue(CommonConstants.ZERO_INT);
detail.setIsUse(CommonConstants.ZERO_INT);
detail.setUpdateTime(LocalDateTime.now());
detail.setUpdateBy(user.getId());
//保费存储
TInsuranceSettle settle = new TInsuranceSettle();
settle.setInsDetailId(detail.getId());
settle.setSettleType(detail.getSettleType());
settle.setSettleHandleStatus(CommonConstants.ONE_STRING);
settle.setEstimatePremium(estimatePremium);
//调完ekp接口才会是1
settle.setIsEstimatePush(CommonConstants.ONE_INT);
settle.setEstimatePushTime(LocalDateTime.now());
settle.setCreateTime(LocalDateTime.now());
settle.setId(RandomStringUtils.randomNumeric(19));
settleList.add(settle);
detail.setDefaultSettleId(settle.getId());
successTwo.add(detail);
updateEmployeeInsurancePreById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING);
updateEmployeeInsurancePreRenewById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING, false);
//生成收入数据
createInsuranceInfo(detail,settleDomain);
}
//预估保费 = (购买标准 / 365) * 天数 + 5元
BigDecimal estimatePremium = new BigDecimal(detail.getBuyStandard())
.multiply(new BigDecimal(day))
.divide(new BigDecimal("365"),CommonConstants.TWO_INT,BigDecimal.ROUND_HALF_UP)
.add(BigDecimal.valueOf(5.00));
detail.setEstimatePremium(estimatePremium);
}else if (CommonConstants.ZERO_STRING.equals(detail.getIsJfcd())){
//记录状态均置为「已投保」
detail.setBuyHandleStatus(CommonConstants.THREE_INT);
detail.setSignFlag(CommonConstants.ONE_INT);
......@@ -2100,24 +2130,7 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
detail.setIsUse(CommonConstants.ZERO_INT);
detail.setUpdateTime(LocalDateTime.now());
detail.setUpdateBy(user.getId());
//保费存储
TInsuranceSettle settle = new TInsuranceSettle();
settle.setInsDetailId(detail.getId());
settle.setSettleType(detail.getSettleType());
settle.setSettleHandleStatus(CommonConstants.ONE_STRING);
settle.setEstimatePremium(estimatePremium);
//调完ekp接口才会是1
settle.setIsEstimatePush(CommonConstants.ONE_INT);
settle.setEstimatePushTime(LocalDateTime.now());
settle.setCreateTime(LocalDateTime.now());
settle.setId(RandomStringUtils.randomNumeric(19));
settleList.add(settle);
detail.setDefaultSettleId(settle.getId());
successTwo.add(detail);
updateEmployeeInsurancePreById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING);
updateEmployeeInsurancePreRenewById(detail, Stream.of("4").collect(Collectors.toList()),CommonConstants.SIX_STRING, false);
//生成收入数据
createInsuranceInfo(detail,settleDomain);
}
}
//实缴
......@@ -2433,7 +2446,7 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
if(StringUtils.isNotBlank(detail.getDefaultSettleId()) && detail.getSettleType() == CommonConstants.ZERO_INT){
settle = tInsuranceSettleService.getById(detail.getDefaultSettleId());
//如果未推送则推送预估新增
if(CommonConstants.ZERO_INT == settle.getIsEstimatePush()){
if(null != settle && CommonConstants.ZERO_INT == settle.getIsEstimatePush()){
doJointInsuranceTask.asynchronousEkpInfo(detail,settle,CommonConstants.ONE_INT);
}
}
......@@ -2538,10 +2551,11 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
settleNew.setEstimatePremium(detail.getEstimatePremium());
//调完ekp接口才会是1
settleNew.setCreateTime(LocalDateTime.now());
tInsuranceSettleService.save(settleNew);
//调EKP新增实际保费
detail.setActualPremium(bigDecimalAct);
doJointInsuranceTask.asynchronousEkpInfo(detail,settleNew,CommonConstants.SEVEN_INT);
if (bigDecimalAct.compareTo(detail.getEstimatePremium()) != 0){
tInsuranceSettleService.save(settleNew);
detail.setBalanceId(settleNew.getId());
doJointInsuranceTask.asynchronousEkpInfo(detail,settleNew,CommonConstants.SEVEN_INT);
}
}
}
......
......@@ -639,7 +639,7 @@ public class DoJointInsuranceTask {
ys = 0L;
}
}else {
if (!"".equals(param.getIsJfcd())){
if (!"0".equals(param.getIsJfcd())){
//1、针对非提前缴费也非预估模式也未启用BPO结算模式的项目下,商险只存在实缴费用,实缴费用中应收等于应支——此类费用“实缴费用”需已收才能支出
if (InsurancesConstants.ACTUAL_SETTLE_BILL.equals(param.getSettleType())
&& "无".equals(pushParam.getFd_3af9d1441ef7b6())){
......@@ -659,7 +659,7 @@ public class DoJointInsuranceTask {
ys = BigDecimalUtils.safeSubtract(param.getActualPremium(),param.getEstimatePremium()).doubleValue();
}
}
} else if ("".equals(param.getIsJfcd())){
} else if ("0".equals(param.getIsJfcd())){
//3、针对提前缴费的项目,无论是否为预估模式,商险存在预估费用,预估费用中应收有值为按照规则计算得出的,应支为0;存在实缴费用,实缴费用应收为0,应支等于导入的实缴金额;
// 存在差额费用,差额费用应收有值,等于“实缴的应支金额-预估的应收金额——此类实缴支出会判断是否存在提前缴费的标识,若存在,则支出可以选择的到,
// 选择后即可支出(差额明细逻辑:导入后根据预估明细和实缴明细,生成“单据类型”为“差额”的商险明细数据(只有应收金额没有应支,应收金额=实缴的应支-预估的应收,若>0,
......@@ -681,6 +681,9 @@ public class DoJointInsuranceTask {
pushParam.setFd_3adfe6e3911ffe(0.00);
//是否全部结算
pushParam.setFd_3b13b2ecc164aa("是");
//实际保费设置为0.0
pushParam.setFd_3adfe6610c0d2c(0.00);
}
}
......@@ -952,7 +955,11 @@ public class DoJointInsuranceTask {
if (null != param.getDetailId() && null != param.getDefaultSettleId()) {
pushParam.setFd_3b0a5743acab7e(param.getDetailId() + CommonConstants.DOWN_LINE_STRING + param.getDefaultSettleId());
} else {
pushParam.setFd_3b0a5743acab7e(CommonConstants.EMPTY_STRING);
if (InsurancesConstants.BALANCE_SETTLE_BILL.equals(param.getSettleType())){
pushParam.setFd_3b0a5743acab7e(param.getDetailId() + CommonConstants.DOWN_LINE_STRING + (null==param.getBalanceId()?"":param.getBalanceId()));
}else {
pushParam.setFd_3b0a5743acab7e(CommonConstants.EMPTY_STRING);
}
}
//单据类型
pushParam.setFd_3adfe6af71a1cc(null != param.getSettleType() ? param.getSettleType() : CommonConstants.EMPTY_STRING);
......
......@@ -107,11 +107,11 @@
</delete>
<delete id="deleteEkpInsuranceDetailAsso">
delete from ekp_insurances_info where fd_3b0a5743acab7e like concat(#{id},'%') and fd_jfcd='是' and (fd_3adfe6af71a1cc = '差额' or fd_3adfe6af71a1cc = '实缴')
delete from ekp_insurances_info where fd_3b0a5743acab7e like CONCAT(#{id},'%') and fd_jfcd='是' and (fd_3adfe6af71a1cc = '差额' or fd_3adfe6af71a1cc = '实缴')
</delete>
<delete id="callBackBalance">
delete from ekp_insurances_info where fd_3b0a5743acab7e like concat(#{id},'%') and fd_jfcd='是' and fd_3adfe6af71a1cc = '差额'
delete from ekp_insurances_info where fd_3b0a5743acab7e like CONCAT(#{id},'%') and fd_jfcd='是' and fd_3adfe6af71a1cc = '差额'
</delete>
<select id="getDeptSettle" resultMap="BaseDeptResultMap">
select
......
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