您的位置:首頁>正文

drools調用drl用例

/*

* @(#)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 resultMap = new HashMap<>();

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 getParam = params.getParams();

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 nvhlInfo = (List) params.getParams().get("InfoInsured");

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 getParamDate = params.getParams();

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 getParam = params.getParams();

int insuredCount = params.getCount();

RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡

insureRole.setParams(getParam);

insureRole.setStatus(1);//設置狀態與drl檔匹配

insureRole.setCount(insuredCount);

List nvhlInfo = (List) params.getParams().get("InfoInsured");

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 getParamDate = params.getParams();

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 getParam = params.getParams();

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 nvhlInfo = (List) params.getParams().get("InfoInsured");

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 getParamDate = params.getParams();

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 getParam = params.getParams();

int insuredCount = params.getCount();

RulesMessageDTO insureRole = new RulesMessageDTO();//投保年齡

insureRole.setParams(getParam);

insureRole.setStatus(1);//設置狀態與drl檔匹配

insureRole.setCount(insuredCount);

List nvhlInfo = (List) params.getParams().get("InfoInsured");

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 getParamDate = params.getParams();

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 nvhlBaseInfo = (List) params.getParams().get("InfoInsured");

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 getParamsDate = params.getParams();

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 getParam = params.getParams();

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 nvhlInfo = (List) params.getParams().get("InfoInsured");

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 getParamDate = params.getParams();

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 getParam = params.getParams();

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 nvhlInfo = (List) params.getParams().get("InfoInsured");

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 getParamDate = params.getParams();

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;

}

}

以上是平時一些總結, 歡迎給出寶貴意見!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示