1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.java110.rule.rest;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.utils.constant.RuleDomain;
import com.java110.utils.log.LoggerEngine;
import com.java110.utils.util.CodeMapUtil;
import com.java110.utils.util.RuleUtil;
import com.java110.core.base.controller.BaseController;
import com.java110.rule.smo.IRuleServiceSMO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * 规则服务
 * Created by wuxw on 2017/7/22.
 */
@RestController
public class RuleServiceRest extends BaseController {
    private final static Logger logger = LoggerFactory.getLogger(RuleServiceRest.class);
 
 
    @Autowired
    IRuleServiceSMO ruleServiceSMOImpl;
 
    /**
     * 规则校验方法
     * 请求报文协议:
     *
     * {
     "ContractRoot": {
     "TcpCont": { -- 请求头部
     "RuleType":"RULE0001", -- 用来区分走那个规则组
     "ServiceCode": "SVC0001", -- 用来判断走那些规则
     "TransactionID": "1001000101201603081234567890", -- 交易流水
     "ReqTime": "20130817200202123",--请求时间
     },
     "SvcCont": { -- 请求体 这里面的结构可以随便定
     "AccNbr": "",
     "ProductNbr":"",
     "RegionCode":"863000"
     }
     }
     }
     *
     * @param validateInfo
     * @return
     */
    @RequestMapping("/ruleService/validate")
    @ResponseBody
    public String validate(@RequestParam("validateInfo") String validateInfo){
        String resultInfo = "";
        logger.debug("----------[RuleServiceRest.validate]-----------请求报文:" + validateInfo);
        try{
            resultInfo = ruleServiceSMOImpl.validate(validateInfo);
        }catch (Exception e){
            LoggerEngine.error("----------[RuleServiceRest.validate]-----------出现异常,请求报文为["+validateInfo+"]" ,e);
            try {
                //XStream转换出错,默认返回成功,后台记录错误日志
                JSONObject jsonObject = JSONObject.parseObject(validateInfo);
                String transactionID = jsonObject.containsKey("TcpCont") ?
                        (jsonObject.getJSONObject("TcpCont").containsKey("TransactionID")?jsonObject.getJSONObject("TcpCont").getString("TransactionID"):"-1")
                        :"-1";
                String error =  e.toString();
                //记录错误日志
                //recordRuleLog(transactionID,error,"LTE4G全量校验报文转换环节异常");
                //动态常量DEP_PRVNC_RULE_ERROR_RET,不配置或配置不是1,则程序异常默认返回成功,其他返回具体异常信息
                String depPrvncSaopRuleErrorRet = CodeMapUtil.getDynamicConstantValue("DEP_PRVNC_RULE_ERROR_RET");
                if(StringUtils.isEmpty(depPrvncSaopRuleErrorRet) || !depPrvncSaopRuleErrorRet.equals("1")){
                    resultInfo = RuleUtil.ruleReturnJson(transactionID,RuleDomain.RULE_COND_RETURN_0000,"成功","");
                }else{
                    resultInfo = RuleUtil.ruleReturnJson(transactionID,RuleDomain.RULE_COND_RETURN_1999,e.getMessage(),"");
                }
            } catch (Exception e1) {
                LoggerEngine.error("----------[RuleServiceRest.validate]-----------出现异常,请求报文为["+validateInfo+"]" ,e);
                resultInfo = RuleUtil.ruleReturnJson("-1",RuleDomain.RULE_COND_RETURN_1999,e.getMessage(),"");
            }
        }finally {
            //这里需要记录日志报文
            logger.debug("----------[RuleServiceRest.validate]-----------返回报文:" + resultInfo);
            return resultInfo;
        }
    }
 
 
    public IRuleServiceSMO getRuleServiceSMOImpl() {
        return ruleServiceSMOImpl;
    }
 
    public void setRuleServiceSMOImpl(IRuleServiceSMO ruleServiceSMOImpl) {
        this.ruleServiceSMOImpl = ruleServiceSMOImpl;
    }
}