| | |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.dao.business.dto.CountCyclePriceDTO; |
| | | import com.doumee.dao.business.model.ApplyChange; |
| | | import com.doumee.dao.business.model.ApplyDetail; |
| | | import com.doumee.dao.business.model.InsuranceApply; |
| | | import com.doumee.dao.business.model.Solutions; |
| | | import com.doumee.dao.business.vo.ChangeDealTypeVO; |
| | | import com.doumee.dao.business.vo.CountCyclePriceVO; |
| | | import io.swagger.models.auth.In; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | |
| | | public static final String DU_FILE ="DU_FILE" ; |
| | | public static final String SIGN_DONE_NOTIFY_URL = "SIGN_DONE_NOTIFY_URL"; |
| | | public static final int FOUR = 4; |
| | | public static final String COMPANY_PHONE_AUTH ="COMPANY_PHONE_AUTH" ; |
| | | |
| | | |
| | | /** |
| | | * 获取申请单时间列标题 |
| | | * @param type 0开始时间 1截止时间 |
| | | * @param model |
| | | * @return |
| | | */ |
| | | public static String getApplyTimeTitle(int type, InsuranceApply model){ |
| | | if(type ==1){ |
| | | if(Constants.equalsInteger(model.getSolutionType(),Constants.ONE)){ |
| | | return Constants.equalsInteger(model.getUnionApplyTbdStatus(),Constants.THREE)?"保险生效起期":"期望保险生效起期"; |
| | | }else{ |
| | | return Constants.equalsInteger(model.getStatus(), InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())?"保险生效起期":"期望保险生效起期"; |
| | | } |
| | | }else{ |
| | | if(Constants.equalsInteger(model.getSolutionType(),Constants.ONE)){ |
| | | return Constants.equalsInteger(model.getUnionApplyTbdStatus(),Constants.THREE)?"保险生效止期":"预计生效止期"; |
| | | }else{ |
| | | return Constants.equalsInteger(model.getStatus(), InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())?"保险生效止期":"预计生效止期"; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取批改单时间标题列 |
| | | * @param type 0更换派遣单位 1加保 0减保 |
| | | * @param model |
| | | * @return |
| | | */ |
| | | public static String getChangeApplyTimeTitle(int type, ApplyChange model){ |
| | | if(type ==2){ |
| | | return Constants.equalsInteger(model.getStatus(), ApplyChangeStatus.APPROVE.getKey())?"批单生效期":"期望批单生效期"; |
| | | }else if(type ==1){ |
| | | return Constants.equalsInteger(model.getStatus(), ApplyChangeStatus.APPROVE.getKey())?"批增生效起期":"期望批增生效起期"; |
| | | }else{ |
| | | return Constants.equalsInteger(model.getStatus(), ApplyChangeStatus.APPROVE.getKey())?"批减生效起期":"期望批减生效起期"; |
| | | } |
| | | } |
| | | /** |
| | | * 企业数据来源 0平台注册 1后台导入 |
| | | */ |
| | |
| | | return countCyclePriceVO; |
| | | } |
| | | |
| | | //查询每个批改周期费用 |
| | | public static BigDecimal calculateSingleCycleFee(Solutions solutions,Date startTime){ |
| | | if(Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){ |
| | | return solutions.getPrice(); |
| | | } |
| | | CountCyclePriceVO countCyclePriceVO = Constants.countPriceVO(startTime,solutions); |
| | | //单计费周期的费用 |
| | | BigDecimal singleFee = Constants.singleCycleFee(solutions,startTime,countCyclePriceVO.getEndDate()); |
| | | return singleFee; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加减保业务使用 |
| | | * 判断是否处于 周期节点 |
| | | * 结束日期 入的日期为批单日期 前一天 23:59:59 |
| | | * @param solutions |
| | | * @param startTime |
| | | * @param endTime |
| | | * @return 0=无周期费用;1=有周期费用;2无周期费用 且 数据标记无效 |
| | | */ |
| | | public static ChangeDealTypeVO calculateRetreatCost(Solutions solutions , Date startTime , Date endTime){ |
| | | ChangeDealTypeVO changeDealTypeVO = new ChangeDealTypeVO(); |
| | | //查询每个周期的费用 |
| | | changeDealTypeVO.setSinglePrice(Constants.calculateSingleCycleFee(solutions,startTime)); |
| | | |
| | | //批单日期为开始日期的第一天 则标记明细记录为 无效数据 或者 开始时间大于当前时间 直接返回 数据标记无效 |
| | | if(startTime.getTime()>endTime.getTime() |
| | | || startTime.getTime() > System.currentTimeMillis()){ |
| | | changeDealTypeVO.setChangeStatus(Constants.TWO); |
| | | return changeDealTypeVO; |
| | | } |
| | | //获取昨日日期结束 为实际减保结束日期· |
| | | Boolean isOver = true; |
| | | if(solutions.getInsureCycleUnit().equals(InsureCycleUnit.DAY.getValue())){ |
| | | //方案 计费周期和批改周期 相同 直接返回 有周期费用 |
| | | changeDealTypeVO.setChangeStatus(Constants.ONE); |
| | | return changeDealTypeVO; |
| | | }else if(solutions.getInsureCycleUnit().equals(InsureCycleUnit.HALF_MONTH.getValue())){ |
| | | //半月周期 以15.5计算 由于15.5 无法整除 所以需要特殊处理 |
| | | //奇数/偶数 用于添加天数 如果是奇数 |
| | | BigDecimal cycleHalfMonth = new BigDecimal(15.5); |
| | | Integer cycle = 1; |
| | | while(isOver){ |
| | | //获取周期后的结束时间 带时分秒 23:59:59 |
| | | Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,0, cycleHalfMonth.multiply(new BigDecimal(cycle)).setScale(2,RoundingMode.HALF_UP).intValue() |
| | | ),2); |
| | | if(cycleEndTime.getTime()>=endTime.getTime()){ |
| | | isOver = false; |
| | | //当计费周期的结束日期 刚好 与批单日期的结束日期相等 则 不需要扣除批单周期费用 |
| | | if(cycleEndTime.getTime()==endTime.getTime()){ |
| | | changeDealTypeVO.setChangeStatus(Constants.ZERO); |
| | | }else{ |
| | | changeDealTypeVO.setChangeStatus(Constants.ONE); |
| | | } |
| | | return changeDealTypeVO; |
| | | } |
| | | cycle = cycle + 1; |
| | | } |
| | | }else if(solutions.getInsureCycleUnit().equals(InsureCycleUnit.MONTH.getValue())){ |
| | | //扣费周期为月 |
| | | Integer cycle = 1; |
| | | while(isOver){ |
| | | //获取周期后的结束时间 带时分秒 23:59:59 |
| | | Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,1,cycle),2); |
| | | //当前周期 大于等于 批单结束日期时 , 则结束流程 |
| | | if(cycleEndTime.getTime()>=endTime.getTime()){ |
| | | isOver = false; |
| | | //当计费周期的结束日期 刚好 与批单日期的结束日期相等 则 不需要扣除批单周期费用 |
| | | if(cycleEndTime.getTime()==endTime.getTime()){ |
| | | changeDealTypeVO.setChangeStatus(Constants.ZERO); |
| | | }else{ |
| | | changeDealTypeVO.setChangeStatus(Constants.ONE); |
| | | } |
| | | return changeDealTypeVO; |
| | | } |
| | | cycle = cycle + 1; |
| | | } |
| | | }else if(solutions.getTimeUnit().equals(TimeUnit.QUARTER.getValue())){ |
| | | //扣费周期为季度 |
| | | Integer cycle = 3; |
| | | while(isOver){ |
| | | //获取周期后的结束时间 带时分秒 23:59:59 |
| | | Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,1,cycle),2); |
| | | //当前周期 大于等于 批单结束日期时 , 则结束流程 |
| | | if(cycleEndTime.getTime()>=endTime.getTime()){ |
| | | isOver = false; |
| | | //当计费周期的结束日期 刚好 与批单日期的结束日期相等 则 不需要扣除批单周期费用 |
| | | if(cycleEndTime.getTime()==endTime.getTime()){ |
| | | changeDealTypeVO.setChangeStatus(Constants.ZERO); |
| | | }else{ |
| | | changeDealTypeVO.setChangeStatus(Constants.ONE); |
| | | } |
| | | return changeDealTypeVO; |
| | | } |
| | | cycle = cycle + 3; |
| | | } |
| | | }else if(solutions.getTimeUnit().equals(TimeUnit.HALF_YEAR.getValue())){ |
| | | //扣费周期为半年 |
| | | Integer cycle = 3; |
| | | while(isOver){ |
| | | //获取周期后的结束时间 带时分秒 23:59:59 |
| | | Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,1,cycle),2); |
| | | //当前周期 大于等于 批单结束日期时 , 则结束流程 |
| | | if(cycleEndTime.getTime()>=endTime.getTime()){ |
| | | isOver = false; |
| | | //当计费周期的结束日期 刚好 与批单日期的结束日期相等 则 不需要扣除批单周期费用 |
| | | if(cycleEndTime.getTime()==endTime.getTime()){ |
| | | changeDealTypeVO.setChangeStatus(Constants.ZERO); |
| | | }else{ |
| | | changeDealTypeVO.setChangeStatus(Constants.ONE); |
| | | } |
| | | return changeDealTypeVO; |
| | | } |
| | | cycle = cycle + 3; |
| | | } |
| | | } |
| | | throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"计算批单周期信息异常"); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // public static CountCyclePriceVO countPriceVO(Date startDate, Solutions solutions){ |
| | | // CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO(); |
| | |
| | | if(StringUtils.isBlank(idCard)){ |
| | | return 2; |
| | | } |
| | | Pattern pattern = Pattern.compile("\\d{17}[\\d|x]"); // 定义身份证号码格式的正则表达式 |
| | | Pattern pattern = Pattern.compile("\\d{17}[\\d|x|X]"); // 定义身份证号码格式的正则表达式 |
| | | Matcher matcher = pattern.matcher(idCard); |
| | | Integer sex = 0; |
| | | if (matcher.matches()) { |
| | |
| | | } |
| | | return sex; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 状态 0已保存、1待审核、2审核通过、3退回修改、4审核驳回、5待服务机构确认、6服务机构拒绝、7已分配服务机构、8诊断中 |
| | |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | |
| | | System.out.println(IdcardUtil.isValidCard("340621199310134818")); |
| | | System.out.println(IdcardUtil.isValidCard("341621199310134818")); |
| | | System.out.println(IdcardUtil.isValidCard("342623199201150101")); |
| | | System.out.println(IdcardUtil.isValidCard("342623199201150102")); |
| | | System.out.println(IdcardUtil.isValidCard("342623199201150103")); |
| | | System.out.println(IdcardUtil.isValidCard("342623199201150104")); |
| | | // System.out.println(IdcardUtil.isValidCard("340621199310134818")); |
| | | // System.out.println(IdcardUtil.isValidCard("341621199310134818")); |
| | | |
| | | // System.out.println("{\"companyName\":\"应宝科技\",\"endtime\":\"2024-03-01 17:19:00\",\"erpId\":\"4D40185D5BC74A13821BE46EAF8B4179\",\"erpWithVisitDTOList\":[],\"faceImg\":\"20240304/1709518170325_742.jpg\",\"idcardNo\":\"342501199609300535\",\"idcardType\":0,\"name\":\"黄晋\",\"phone\":\"17756328697\",\"reason\":\"探险\",\"receptMemberId\":\"E7E514BD7DE3F27CE0530B630A0AEAE0\",\"starttime\":\"2024-03-01 13:18:00\"}"); |
| | | } |
| | |
| | | WTBYTH(24, "已退回"), |
| | | WTBYGB(25, "已关闭"), |
| | | //2024年4月25日15:17:13 修改 投保中 = 》 批改申请中 |
| | | WTBTBZ(26, "批改申请中"), |
| | | //2024-5-21 14:04:10 修改 批改申请中= 》投保中 |
| | | WTBTBZ(26, "投保中"), |
| | | WTBBZZ(27, "保障中"), |
| | | ; |
| | | // 成员变量 |
| | |
| | | CLOSE(6, "已关闭"), |
| | | CHECHED_PASSED(7, "审核通过"), |
| | | PALTFORM_CHECK_PASS_NO(8, "审核不通过"), |
| | | WTB_TOUBAOING(9, "投保中"), |
| | | WTB_TOUBAOING(9, "批改申请中"), |
| | | ; |
| | | // 成员变量 |
| | | private String name; |
| | |
| | | } |
| | | } |
| | | |
| | | public static BigDecimal singleCycleFee(Solutions solutions,Date startTime ,Date endTime){ |
| | | Integer countDays = DateUtil.daysBetweenDates(endTime, startTime) + 1; |
| | | Constants.TimeUnit timeUnit = Constants.TimeUnit.getTimeUnit(solutions.getTimeUnit()); |
| | | BigDecimal fee = solutions.getPrice(); |
| | | if(solutions.getTimeUnit().equals(solutions.getInsureCycleUnit())){ |
| | | return fee; |
| | | }else{ |
| | | if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){ |
| | | //天为批改单位 |
| | | return fee.divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP); |
| | | }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) { |
| | | //根据投保周期 定义的 每个周期 = X个 半月周期 进行计算 |
| | | // 总金额 / 投保周期定义的 半月周期数 |
| | | return fee.divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); |
| | | }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) { |
| | | // 总金额 / 投保周期定义的 半月周期数 * 2 |
| | | return fee.multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); |
| | | }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) { |
| | | //季度为批改单位 |
| | | // 总金额 / 投保周期定义的 半月周期数 * 6 |
| | | return fee.multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); |
| | | }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) { |
| | | //半年为批改单位 |
| | | // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6 |
| | | return fee.multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); |
| | | }else { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"方案配置错误"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |