/*
* @(#)com.isoftstone.cloud.rules.service.impl
* @(#)NvhlProductValidateService.java 2016年10月17日
*
* Copyright ? 2001-2012, All rights reserved.
* iSoftStone Information Technology ( Group ) Co., Ltd.
*/
package com.isoftstone.cloud.rules.service.impl;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.drools.runtime.StatefulKnowledgeSession;
import org.springframework.stereotype.Service;
import com.isoftstone.cloud.insurance.common.model.CustomerInfo;
import com.isoftstone.cloud.policy.model.NvhlInsuredBaseInfo;
import com.isoftstone.cloud.prd.model.PrdInsuranceElement;
import com.isoftstone.cloud.rules.model.RulesMessageDTO;
import com.isoftstone.cloud.rules.service.INvhlProductValidateService;
/**
*
Description: 非車險產品校驗規則
* @ClassName: NvhlProductValidateServiceImpl
* @author WernGin jhhuanga@i.com 2016年10月17日 下午4:28:35
* @see TODO
*/
@Service("rules.nvhlProductValidateService")
public class NvhlProductValidateServiceImpl extends BaseValidateRuntime implements INvhlProductValidateService{
private static final String APP_PATH = "app/";
@Override
/**
*
Description: 校驗投保規則服務
* @ClassName: IValidateBaseService
* @author WernGin jhhuanga@i.com 2016年10月17日 下午5:12:35
* @see TODO
*/
public RulesMessageDTO validate(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000001");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(params.getParams());
insureRole.setStatus(1);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getMessage()!= null){
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultMap.put("age", "年齡不符合要求");
resultParams.setResultBody(resultMap);
}
RulesMessageDTO insureAreal = new RulesMessageDTO();//保障地區
insureAreal.setStatus(3);
insureAreal.setParams(params.getParams());
skSession.insert(insureAreal);
skSession.fireAllRules();
if(insureAreal.getMessage()== null){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultMap.put("areal", "保障區域不符合要求");
resultParams.setResultBody(resultMap);
}
RulesMessageDTO insureBuyNum = new RulesMessageDTO();//投保量
insureBuyNum.setStatus(5);
insureBuyNum.setParams(params.getParams());
skSession.insert(insureBuyNum);
skSession.fireAllRules();
if(insureBuyNum.getMessage()!= null){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultMap.put("buyNum", "每人僅限投一份");
resultParams.setResultBody(resultMap);
}
RulesMessageDTO insureValidity = new RulesMessageDTO();//判斷次日生效
insureValidity.setParams(params.getParams());
insureValidity.setStatus(7);
Calendar calendar = Calendar.getInstance();
int nowDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
insureValidity.setNowDay(nowDayOfMonth);
String validity = (String)params.getParams().get("validity");
String[] split = validity.split("-");
int validityDay = Integer.parseInt(split[2]);
insureValidity.setValidityDay(validityDay);
skSession.insert(insureValidity);
skSession.fireAllRules();
if(insureValidity.getMessage()!= null){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultMap.put("validity", "生效日期不符合規則");
resultParams.setResultBody(resultMap);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
@Override
public RulesMessageDTO validateMore(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000102");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
int insuredCount = params.getCount();
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(getParam);
insureRole.setStatus(1);//設置狀態與drl檔匹配
insureRole.setCount(insuredCount);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getInsuredInfo().size()<2){
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultParams.setInsuredInfo(insureRole.getInsuredInfo());
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO insureAreal = new RulesMessageDTO();//保障地區
insureAreal.setStatus(3);
insureAreal.setCount(insuredCount);
insureAreal.setParams(getParam);
skSession.insert(insureAreal);
skSession.fireAllRules();
if(insureAreal.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:insureAreal.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO insureBuyNum = new RulesMessageDTO();//投保量
insureBuyNum.setStatus(5);
insureBuyNum.setCount(insuredCount);
insureBuyNum.setParams(getParam);
skSession.insert(insureBuyNum);
skSession.fireAllRules();
if(insureBuyNum.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:insureBuyNum.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO validityDate = new RulesMessageDTO();//判斷次日生效
validityDate.setStatus(7);
validityDate.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlInfo){
String insureValidity = info.getValidityDate();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date endDate = format.parse(insureValidity);
Calendar endCld = Calendar.getInstance();
endCld.setTime(endDate);
Date date = new Date();
Calendar startCld = Calendar.getInstance();
startCld.setTime(date);
int dif = endCld.get(Calendar.DAY_OF_YEAR)-startCld.get(Calendar.DAY_OF_YEAR);
info.setValidityDay(dif);
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000102");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
validityDate.setParams(getParamDate);
skSession.insert(validityDate);
skSession.fireAllRules();
if(validityDate.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:validityDate.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
@Override
public RulesMessageDTO validateLife(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000103");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
int insuredCount = params.getCount();
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(getParam);
insureRole.setStatus(1);//設置狀態與drl檔匹配
insureRole.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlInfo){
String appBrithday = info.getAppBrithday();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = format.parse(appBrithday);
Calendar startCld = Calendar.getInstance();
startCld.setTime(startDate);
Date date = new Date();
Calendar endCld = Calendar.getInstance();
endCld.setTime(date);
int dif = endCld.get(Calendar.DAY_OF_YEAR)-startCld.get(Calendar.DAY_OF_YEAR);
info.setValidityDay(dif);
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000103");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
insureRole.setParams(getParamDate);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getInsuredInfo().size()<2){
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultParams.setInsuredInfo(insureRole.getInsuredInfo());
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO insureBuyNum = new RulesMessageDTO();//投保量
insureBuyNum.setStatus(5);
insureBuyNum.setCount(insuredCount);
insureBuyNum.setParams(getParam);
skSession.insert(insureBuyNum);
skSession.fireAllRules();
if(insureBuyNum.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:insureBuyNum.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
@Override
public RulesMessageDTO validateAccident(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000104");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
int insuredCount = params.getCount();
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(getParam);
insureRole.setStatus(1);//設置狀態與drl檔匹配
insureRole.setCount(insuredCount);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getInsuredInfo().size()<2){
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultParams.setInsuredInfo(insureRole.getInsuredInfo());
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO insureAreal = new RulesMessageDTO();//保障地區
insureAreal.setStatus(3);
insureAreal.setCount(insuredCount);
insureAreal.setParams(getParam);
skSession.insert(insureAreal);
skSession.fireAllRules();
if(insureAreal.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:insureAreal.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO insureBuyNum = new RulesMessageDTO();//投保量
insureBuyNum.setStatus(5);
insureBuyNum.setCount(insuredCount);
insureBuyNum.setParams(getParam);
skSession.insert(insureBuyNum);
skSession.fireAllRules();
if(insureBuyNum.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:insureBuyNum.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO validityDate = new RulesMessageDTO();//判斷次日生效
validityDate.setStatus(7);
validityDate.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlInfo){
String insureValidity = info.getValidityDate();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date endDate = format.parse(insureValidity);
Calendar endCld = Calendar.getInstance();
endCld.setTime(endDate);
Date date = new Date();
Calendar startCld = Calendar.getInstance();
startCld.setTime(date);
int dif = endCld.get(Calendar.DAY_OF_YEAR)-startCld.get(Calendar.DAY_OF_YEAR);
info.setValidityDay(dif);
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000104");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
validityDate.setParams(getParamDate);
skSession.insert(validityDate);
skSession.fireAllRules();
if(validityDate.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:validityDate.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
@Override
public RulesMessageDTO validateHousehold(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000105");//規則調用放,
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
int insuredCount = params.getCount();
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(getParam);
insureRole.setStatus(1);//設置狀態與drl檔匹配
insureRole.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlInfo){
String appBrithday = info.getAppBrithday();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = format.parse(appBrithday);
Calendar startCld = Calendar.getInstance();
startCld.setTime(startDate);
Date date = new Date();
Calendar endCld = Calendar.getInstance();
endCld.setTime(date);
int dif = endCld.get(Calendar.DAY_OF_YEAR)-startCld.get(Calendar.DAY_OF_YEAR);
info.setDifDay(dif);
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000105");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
insureRole.setParams(getParamDate);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getInsuredInfo().size()<2){
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultParams.setInsuredInfo(insureRole.getInsuredInfo());
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO insureBuyNum = new RulesMessageDTO();//投保量
insureBuyNum.setStatus(5);
insureBuyNum.setCount(insuredCount);
insureBuyNum.setParams(getParam);
skSession.insert(insureBuyNum);
skSession.fireAllRules();
if(insureBuyNum.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:insureBuyNum.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO validityDate = new RulesMessageDTO();//判斷第五日生效
validityDate.setStatus(7);
validityDate.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlBaseInfo){
String insureValidity = info.getValidityDate();
String[] valDay = insureValidity.split("-");
for(String day:valDay){
int intDay = Integer.parseInt(day);
info.setValidityDay(intDay);
}
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000105");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
validityDate.setParams(getParamsDate);
Calendar calendar = Calendar.getInstance();
int nowDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
validityDate.setNowDay(nowDayOfMonth+4);
skSession.insert(validityDate);
skSession.fireAllRules();
if(validityDate.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:validityDate.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
@Override
public RulesMessageDTO validateMutual_health(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000106");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
int insuredCount = params.getCount();
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(getParam);
insureRole.setStatus(1);//設置狀態與drl檔匹配
insureRole.setCount(insuredCount);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getInsuredInfo().size()<2){
resultParams.setStatus( 1);
}else{
resultParams.setStatus(0);
resultParams.setInsuredInfo(insureRole.getInsuredInfo());
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO validityDate = new RulesMessageDTO();//判斷次日生效
validityDate.setStatus(7);
validityDate.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlInfo){
String insureValidity = info.getValidityDate();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date endDate = format.parse(insureValidity);
Calendar endCld = Calendar.getInstance();
endCld.setTime(endDate);
Date date = new Date();
Calendar startCld = Calendar.getInstance();
startCld.setTime(date);
int dif = endCld.get(Calendar.DAY_OF_YEAR)-startCld.get(Calendar.DAY_OF_YEAR);
info.setValidityDay(dif);
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000106");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
validityDate.setParams(getParamDate);
skSession.insert(validityDate);
skSession.fireAllRules();
if(validityDate.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:validityDate.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
@Override
public RulesMessageDTO validateMutual_accident(RulesMessageDTO params) {
StatefulKnowledgeSession skSession = null;
RulesMessageDTO resultParams = new RulesMessageDTO();
try {
params.setRuleCode("NVHL0000107");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
int insuredCount = params.getCount();
RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡
insureRole.setParams(getParam);
insureRole.setStatus(1);//設置狀態與drl檔匹配
insureRole.setCount(insuredCount);
skSession.insert(insureRole);
skSession.fireAllRules();
if(insureRole.getInsuredInfo().size()<2){
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
resultParams.setInsuredInfo(insureRole.getInsuredInfo());
}
resultParams.getInsuredInfo().remove("0");
RulesMessageDTO validityDate = new RulesMessageDTO();//判斷次日生效
validityDate.setStatus(7);
validityDate.setCount(insuredCount);
List
for(NvhlInsuredBaseInfo info:nvhlInfo){
String insureValidity = info.getValidityDate();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date endDate = format.parse(insureValidity);
Calendar endCld = Calendar.getInstance();
endCld.setTime(endDate);
Date date = new Date();
Calendar startCld = Calendar.getInstance();
startCld.setTime(date);
int dif = endCld.get(Calendar.DAY_OF_YEAR)-startCld.get(Calendar.DAY_OF_YEAR);
info.setValidityDay(dif);
}
params.getParams().put("InfoInsured",nvhlInfo);
params.setRuleCode("NVHL0000107");//規則調用放, 需要設置
skSession = getStatefulKnowledgeSession(APP_PATH+params.getRuleCode());
Map
validityDate.setParams(getParamDate);
skSession.insert(validityDate);
skSession.fireAllRules();
if(validityDate.getInsuredInfo().size()<2){
if(resultParams.getStatus()!=0)
resultParams.setStatus(1);
}else{
resultParams.setStatus(0);
for(String insuredInfo:validityDate.getInsuredInfo()){//將符合條件的資訊賦給返回值
resultParams.getInsuredInfo().add(insuredInfo);
}
}
resultParams.getInsuredInfo().remove("0");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (skSession != null)
skSession.dispose();
}
return resultParams;
}
}
以上是平時一些總結,
歡迎給出寶貴意見!