Просмотр исходного кода

加入RSA 请求报文和返回报文加密处理

wuxw7 лет назад: 8
Родитель
Сommit
b7cdb222a5
32 измененных файлов с 2068 добавлено и 43 удалено
  1. 9 0
      CenterService/doc/encrypt_decrypt.txt
  2. 80 22
      CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
  3. 7 0
      java110-common/src/main/java/com/java110/common/constant/CommonConstant.java
  4. 14 0
      java110-common/src/main/java/com/java110/common/constant/MappingConstant.java
  5. 189 0
      java110-common/src/main/java/com/java110/common/exception/DecryptException.java
  6. 186 4
      java110-common/src/main/java/com/java110/common/factory/AuthenticationFactory.java
  7. 3 15
      java110-common/src/main/java/com/java110/common/util/ResponseTemplateUtil.java
  8. 4 2
      java110-config/db/CenterService/create_table.db
  9. 33 0
      java110-config/target/classes/META-INF/spring-configuration-metadata.json
  10. 3 0
      java110-config/target/classes/META-INF/spring.factories
  11. 45 0
      java110-config/target/classes/cache/ehcache.xml
  12. 19 0
      java110-config/target/classes/cache/redis.conf
  13. 10 0
      java110-config/target/classes/common/common.properties
  14. 7 0
      java110-config/target/classes/config/center_event.properties
  15. 15 0
      java110-config/target/classes/config/event.properties
  16. 2 0
      java110-config/target/classes/config/order.properties
  17. 31 0
      java110-config/target/classes/db/db.properties
  18. 43 0
      java110-config/target/classes/logback.xml
  19. 116 0
      java110-config/target/classes/mapper/center/CenterServiceDAOImplMapper.xml
  20. 125 0
      java110-config/target/classes/mapper/common/CommonServiceDaoImplMapper.xml
  21. 12 0
      java110-config/target/classes/mapper/common/PrimaryKeyServiceDaoImplMapper.xml
  22. 334 0
      java110-config/target/classes/mapper/listener/ListenerServiceDaoImplMapper.xml
  23. 77 0
      java110-config/target/classes/mapper/merchant/MerchantMemberServiceDaoImplMapper.xml
  24. 123 0
      java110-config/target/classes/mapper/merchant/MerchantServiceDaoImplMapper.xml
  25. 109 0
      java110-config/target/classes/mapper/order/OrderServiceDaoImplMapper.xml
  26. 123 0
      java110-config/target/classes/mapper/product/ProductServiceDaoImplMapper.xml
  27. 79 0
      java110-config/target/classes/mapper/rule/RuleDaoImplMapper.xml
  28. 46 0
      java110-config/target/classes/mapper/service/QueryServiceDAOImplMapper.xml
  29. 151 0
      java110-config/target/classes/mapper/user/UserServiceDaoImplMapper.xml
  30. 8 0
      java110-config/target/classes/mq/mq.properties
  31. 40 0
      java110-config/target/classes/spring/application-dev.properties
  32. 25 0
      java110-config/target/classes/spring/application.properties

Разница между файлами не показана из-за своего большого размера
+ 9 - 0
CenterService/doc/encrypt_decrypt.txt


+ 80 - 22
CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java

@@ -19,6 +19,7 @@ import com.java110.common.util.*;
 import com.java110.entity.center.*;
 import com.java110.event.center.DataFlowEventPublishing;
 import com.java110.service.smo.IQueryServiceSMO;
+import org.apache.commons.lang3.math.NumberUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,6 +29,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+
+
 /**
  * 中心服务处理类
  * Created by wuxw on 2018/4/13.
@@ -52,7 +55,10 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
 
         JSONObject responseJson = null;
 
+        String resJson = "";
+
         try {
+            reqJson = decrypt(reqJson,headers);
             //1.0 创建数据流
             dataFlow = DataFlowFactory.newInstance().builder(reqJson, headers);
             //2.0 加载配置信息
@@ -68,7 +74,10 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
 
             responseJson = ResponseTemplateUtil.createCommonResponseJson(dataFlow);
 
-        } catch (BusinessException e) {
+        } catch (DecryptException e){ //解密异常
+            responseJson =  ResponseTemplateUtil.createOrderResponseJson(ResponseConstant.NO_TRANSACTION_ID,
+                    e.getResult().getCode(), e.getMessage());
+        }catch (BusinessException e) {
             try {
                 //7.0 作废订单和业务项
                 invalidOrderAndBusiness(dataFlow);
@@ -83,43 +92,92 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
                 updateOrderAndBusinessError(dataFlow);
             } finally {
                 responseJson = ResponseTemplateUtil.createOrderResponseJson(dataFlow.getTransactionId(),
-                        ResponseConstant.NO_NEED_SIGN, e.getResult().getCode(), e.getMessage());
+                         e.getResult().getCode(), e.getMessage());
             }
 
         } catch (OrdersException e) {
             responseJson =  ResponseTemplateUtil.createOrderResponseJson(dataFlow.getTransactionId(),
-                    ResponseConstant.NO_NEED_SIGN, e.getResult().getCode(), e.getMessage());
+                     e.getResult().getCode(), e.getMessage());
         } catch (RuleException e) {
             responseJson =  ResponseTemplateUtil.createOrderResponseJson(dataFlow.getTransactionId(),
-                    ResponseConstant.NO_NEED_SIGN, e.getResult().getCode(), e.getMessage());
+                     e.getResult().getCode(), e.getMessage());
         } catch (NoAuthorityException e) {
             responseJson =  ResponseTemplateUtil.createOrderResponseJson(dataFlow.getTransactionId(),
-                    ResponseConstant.NO_NEED_SIGN, e.getResult().getCode(), e.getMessage());
-        } catch (Exception e) {
+                     e.getResult().getCode(), e.getMessage());
+        } catch (InitConfigDataException e){
+            responseJson =  ResponseTemplateUtil.createOrderResponseJson(dataFlow.getTransactionId(),
+                    e.getResult().getCode(), e.getMessage());
+        }catch (Exception e) {
             logger.error("内部异常了:",e);
             responseJson =  ResponseTemplateUtil.createOrderResponseJson(dataFlow == null
                             ? ResponseConstant.NO_TRANSACTION_ID
                             : dataFlow.getTransactionId(),
-                    ResponseConstant.NO_NEED_SIGN, ResponseConstant.RESULT_CODE_INNER_ERROR, "内部异常了:" + e.getMessage() + e.getLocalizedMessage());
+                     ResponseConstant.RESULT_CODE_INNER_ERROR, "内部异常了:" + e.getMessage() + e.getLocalizedMessage());
         } finally {
-            //这里记录日志
-            Date endDate = DateUtil.getCurrentDate();
+            if(dataFlow != null) {
+                //这里记录日志
+                Date endDate = DateUtil.getCurrentDate();
 
-            dataFlow.setEndDate(endDate);
-            dataFlow.setResJson(responseJson);
-                    //添加耗时
-            DataFlowFactory.addCostTime(dataFlow, "service", "业务处理总耗时", dataFlow.getStartDate(), dataFlow.getEndDate());
+                dataFlow.setEndDate(endDate);
+                dataFlow.setResJson(responseJson);
+                //添加耗时
+                DataFlowFactory.addCostTime(dataFlow, "service", "业务处理总耗时", dataFlow.getStartDate(), dataFlow.getEndDate());
+
+                //这里保存耗时,以及日志
+                saveLogMessage(dataFlow.getReqJson(), dataFlow.getResJson());
 
-            //这里保存耗时,以及日志
-            saveLogMessage(dataFlow.getReqJson(),dataFlow.getResJson());
+                //保存耗时
+                saveCostTimeLogMessage(dataFlow);
+                //处理返回报文鉴权
+                AuthenticationFactory.putSign(dataFlow, responseJson);
+            }
+            resJson = encrypt(responseJson.toJSONString(),headers);
+            return resJson;
 
-            //保存耗时
-            saveCostTimeLogMessage(dataFlow);
+        }
 
-            return responseJson.toJSONString();
+    }
 
+    /**
+     * 解密
+     * @param reqJson
+     * @return
+     */
+    private String decrypt(String reqJson,Map<String,String> headers) throws DecryptException{
+        try {
+            if (MappingConstant.VALUE_ON.equals(headers.get(CommonConstant.ENCRYPT_ON_OFF))) {
+                logger.debug("解密前字符:" + reqJson);
+                reqJson = new String(AuthenticationFactory.decrypt(reqJson.getBytes("UTF-8"), AuthenticationFactory.loadPrivateKey(MappingConstant.KEY_PRIVATE_STRING)
+                        , NumberUtils.isNumber(headers.get(CommonConstant.ENCRYPT_KEY_SIZE)) ? Integer.parseInt(headers.get(CommonConstant.ENCRYPT_KEY_SIZE)) :
+                                Integer.parseInt(MappingCache.getValue(MappingConstant.KEY_DEFAULT_DECRYPT_KEY_SIZE))),"UTF-8");
+                logger.debug("解密后字符:" + reqJson);
+            }
+        }catch (Exception e){
+            throw new DecryptException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,"解密失败");
         }
 
+        return reqJson;
+    }
+
+    /**
+     * 加密
+     * @param resJson
+     * @param headers
+     * @return
+     */
+    private String encrypt(String resJson,Map<String,String> headers){
+        try {
+            if (MappingConstant.VALUE_ON.equals(headers.get(CommonConstant.ENCRYPT_ON_OFF))) {
+                logger.debug("加密前字符:" + resJson);
+                resJson = new String(AuthenticationFactory.encrypt(resJson.getBytes("UTF-8"), AuthenticationFactory.loadPubKey(MappingConstant.KEY_PUBLIC_STRING)
+                        , NumberUtils.isNumber(headers.get(CommonConstant.ENCRYPT_KEY_SIZE)) ? Integer.parseInt(headers.get(CommonConstant.ENCRYPT_KEY_SIZE)) :
+                                Integer.parseInt(MappingCache.getValue(MappingConstant.KEY_DEFAULT_DECRYPT_KEY_SIZE))),"UTF-8");
+                logger.debug("加密后字符:" + resJson);
+            }
+        }catch (Exception e){
+            logger.error("加密失败:",e);
+        }
+        return resJson;
     }
 
     /**
@@ -135,7 +193,7 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
         if (appRoutes == null) {
             //添加耗时
             DataFlowFactory.addCostTime(dataFlow, "initConfigData", "加载配置耗时", startDate);
-            throw new InitConfigDataException(ResponseConstant.RESULT_CODE_INNER_ERROR,"当前没有获取到AppId对应的信息");
+            throw new InitConfigDataException(ResponseConstant.RESULT_CODE_INNER_ERROR,"当前没有获取到AppId对应的信息,appId = "+dataFlow.getAppId());
         }
         for(AppRoute appRoute: appRoutes) {
             dataFlow.addAppRoutes(appRoute);
@@ -172,7 +230,7 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
 
         if(!StringUtil.isNullOrNone(dataFlow.getAppRoutes().get(0).getSecurityCode())){
             String sign = AuthenticationFactory.dataFlowMd5(dataFlow);
-            if(!sign.equals(dataFlow.getReqSign())){
+            if(!sign.equals(dataFlow.getReqSign().toLowerCase())){
                 throw new NoAuthorityException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "签名失败");
             }
         }
@@ -615,7 +673,7 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
         dataFlow.setRequestBusinessJson(dataFlow.getReqJson());
 
         dataFlow.setResponseBusinessJson(ResponseTemplateUtil.createCommonResponseJson(dataFlow.getTransactionId(),
-                ResponseConstant.NO_NEED_SIGN, ResponseConstant.RESULT_CODE_SUCCESS, "成功",responseBusinesses));
+                 ResponseConstant.RESULT_CODE_SUCCESS, "成功",responseBusinesses));
 
         DataFlowFactory.addCostTime(dataFlow, "doSynchronousBusinesses", "同步调用业务系统总耗时", startDate);
 }
@@ -645,7 +703,7 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
         dataFlow.setRequestBusinessJson(dataFlow.getReqJson());
 
         dataFlow.setResponseBusinessJson(ResponseTemplateUtil.createOrderResponseJson(dataFlow.getTransactionId(),
-                ResponseConstant.NO_NEED_SIGN, ResponseConstant.RESULT_CODE_SUCCESS, "成功"));
+                 ResponseConstant.RESULT_CODE_SUCCESS, "成功"));
         DataFlowFactory.addCostTime(dataFlow, "doSynchronousBusinesses", "异步调用业务系统总耗时", startDate);
         saveLogMessage(dataFlow.getRequestBusinessJson(),dataFlow.getResponseBusinessJson());
     }

+ 7 - 0
java110-common/src/main/java/com/java110/common/constant/CommonConstant.java

@@ -32,4 +32,11 @@ public class CommonConstant {
     public final static String QUERY_MODEL_SQL = "1";
     public final static String QUERY_MODEL_PROC = "2";
 
+    /**
+     * 加密 开关
+     */
+    public final static String ENCRYPT_ON_OFF = "ENCRYPT";
+
+    public final static String ENCRYPT_KEY_SIZE = "ENCRYPT_KEY_SIZE";
+
 }

+ 14 - 0
java110-common/src/main/java/com/java110/common/constant/MappingConstant.java

@@ -11,6 +11,15 @@ public class MappingConstant {
 
     public  final static String KEY_LOG_ON_OFF = "LOG_ON_OFF";
     public  final static String KEY_COST_TIME_ON_OFF = "COST_TIME_ON_OFF";
+
+    //私钥
+    public final static String KEY_PRIVATE_STRING = "PRIVATE_STRING";
+
+    //公钥
+    public final static String KEY_PUBLIC_STRING = "PUBLIC_STRING";
+    //解密 KEY_SIZE
+    public final static String KEY_DEFAULT_DECRYPT_KEY_SIZE = "DEFAULT_DECRYPT_KEY_SIZE";
+
     public  final static String KEY_RULE_ON_OFF = "RULE_ON_OFF";
     public  final static String VALUE_ON = "ON";
     public  final static String VALUE_OFF = "OFF";
@@ -30,4 +39,9 @@ public class MappingConstant {
     //需要调用服务生成各个ID
     public final static String KEY_NEED_INVOKE_GENERATE_ID = "NEED_INVOKE_SERVICE_GENERATE_ID";
 
+    //默认掩码
+    public final static String KEY_DEFAULT_SECURITY_CODE = "DEFAULT_SECURITY_CODE";
+
+
+
 }

+ 189 - 0
java110-common/src/main/java/com/java110/common/exception/DecryptException.java

@@ -0,0 +1,189 @@
+package com.java110.common.exception;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+/**
+ * 解密异常
+ * Created by wuxw on 2018/4/14.
+ */
+public class DecryptException extends RuntimeException {
+
+
+    private Result result;
+    private Throwable cause = this;
+
+    public DecryptException(){}
+
+    /**
+     * 构造方法
+     * @param result 返回值
+     * @param cause  异常堆栈
+     */
+    public DecryptException(Result result, Throwable cause) {
+        super(result.getMsg(), cause);
+        this.result = result;
+    }
+
+    /**
+     * 构造方法
+     * @param code 返回码
+     * @param msg  错误消息
+     */
+    public DecryptException(int code, String msg) {
+        super(msg);
+        this.result = new Result(code, msg);
+    }
+
+    public DecryptException(String code, String msg) {
+        super(msg);
+        this.result = new Result(code, msg);
+    }
+
+    /**
+     * 构造方法
+     * @param result 返回值
+     * @param detail 具体的返回消息
+     */
+    public DecryptException(Result result, String detail) {
+        super(result.getMsg() + "," + detail);
+        this.result = new Result(result.getCode(), result.getMsg() + "," + detail);
+    }
+
+    /**
+     * 构造方法
+     * @param result 返回值
+     * @param detail 具体的返回消息
+     * @param cause  异常堆栈
+     */
+    public DecryptException(Result result, String detail, Throwable cause) {
+        super(result.getMsg() + "," + detail, cause);
+        this.result = new Result(result.getCode(), result.getMsg() + "," + detail);
+    }
+
+    /**
+     * 构造方法
+     * @param code	返回码
+     * @param msg	返回消息
+     * @param cause 异常堆栈
+     */
+    public DecryptException(int code, String msg, Throwable cause) {
+        super(msg, cause);
+
+        if(cause != null) {
+            if(cause.getCause() != null) {
+                msg += " cause:" + ExceptionUtils.populateExecption(cause.getCause(), 500);
+            }
+            msg += " StackTrace:"+ExceptionUtils.populateExecption(cause, 500);
+        }
+        this.result = new Result(code, msg);
+    }
+
+    /**
+     * 构造方法
+     * @param code	返回码
+     * @param cause	异常堆栈
+     */
+    public DecryptException(int code, Throwable cause) {
+        super(cause);
+        String msg = "";
+
+        if(cause != null) {
+            if(cause.getCause() != null) {
+                msg += " cause:" + ExceptionUtils.populateExecption(cause.getCause(), 500);
+            }
+            msg += " StackTrace:"+ExceptionUtils.populateExecption(cause, 500);
+        }
+        this.result = new Result(code, msg);
+    }
+
+    /**
+     *
+     * TODO 简单描述该方法的实现功能(可选).
+     * @see Throwable#getCause()
+     */
+    public synchronized Throwable getCause() {
+        return (cause==this ? super.getCause() : cause);
+    }
+
+
+    /**
+     * 返回异常消息
+     * @return 异常消息
+     */
+    @Override
+    public String getMessage() {
+        return ExceptionUtils.buildMessage(super.getMessage(), getCause());
+    }
+
+    /**
+     * 异常
+     * @return
+     */
+    public String toJsonString() {
+        JSONObject exceptionJson = JSONObject.parseObject("{\"exception\":{}");
+        JSONObject exceptionJsonObj = exceptionJson.getJSONObject("exception");
+
+        if (getResult() != null)
+            exceptionJsonObj.putAll(JSONObject.parseObject(result.toString()));
+
+        exceptionJsonObj.put("exceptionTrace",getMessage());
+
+        return exceptionJsonObj.toString();
+    }
+    @Override
+    public void printStackTrace(PrintStream ps) {
+        ps.print("<exception>");
+        if (getResult() != null) {
+            ps.print(result.toString());
+        }
+        ps.append("<exceptionTrace>");
+
+        Throwable cause = getCause();
+        if (cause == null) {
+            super.printStackTrace(ps);
+        } else {
+            ps.println(this);
+            ps.print("Caused by: ");
+            cause.printStackTrace(ps);
+        }
+        ps.append("</exceptionTrace>");
+        ps.println("</exception>");
+    }
+
+    @Override
+    public void printStackTrace(PrintWriter pw) {
+        pw.print("<exception>");
+        if (getResult() != null) {
+            pw.print(result.toString());
+        }
+        pw.append("<exceptionTrace>");
+
+        Throwable cause = getCause();
+        if (cause == null) {
+            super.printStackTrace(pw);
+        } else {
+            pw.println(this);
+            pw.print("Caused by: ");
+            cause.printStackTrace(pw);
+        }
+        pw.append("</exceptionTrace>");
+        pw.println("</exception>");
+    }
+
+    /**
+     * 返回异常值
+     * @return	异常值对象
+     */
+    public Result getResult() {
+        return result;
+    }
+
+    public void setResult(Result result) {
+        this.result = result;
+    }
+
+}

+ 186 - 4
java110-common/src/main/java/com/java110/common/factory/AuthenticationFactory.java

@@ -1,12 +1,22 @@
 package com.java110.common.factory;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.cache.MappingCache;
+import com.java110.common.constant.MappingConstant;
 import com.java110.common.constant.ResponseConstant;
 import com.java110.common.exception.NoAuthorityException;
 import com.java110.entity.center.DataFlow;
 import org.apache.commons.codec.digest.DigestUtils;
 
-import javax.naming.AuthenticationException;
+import javax.crypto.Cipher;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.UnsupportedEncodingException;
+import java.security.*;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
 
 /**
  *
@@ -37,7 +47,7 @@ public class AuthenticationFactory {
         if(dataFlow == null){
             throw new NoAuthorityException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,"MD5签名过程中出现错误");
         }
-        String reqInfo = dataFlow.getTransactionId() + dataFlow.getAppId() + dataFlow.getReqBusiness().toJSONString();
+        String reqInfo = dataFlow.getTransactionId() + dataFlow.getAppId() + dataFlow.getReqBusiness().toJSONString()+dataFlow.getAppRoutes().get(0).getSecurityCode();
         return md5(reqInfo);
     }
 
@@ -48,8 +58,180 @@ public class AuthenticationFactory {
      * @param businesses 内容
      * @return
      */
-    public static String md5(String transactionId,String appId,String businesses){
-        return md5(transactionId+appId+businesses);
+    public static String md5(String transactionId,String appId,String businesses,String code){
+        return md5(transactionId+appId+businesses).toLowerCase();
+    }
+
+    /**
+     * 添加 sign
+     * @param dataFlow
+     * @param responseJson
+     */
+    public static void putSign(DataFlow dataFlow,JSONObject responseJson){
+        JSONObject orders = responseJson.getJSONObject("orders");
+        JSONArray business = responseJson.getJSONArray("business");
+        if(dataFlow == null || dataFlow.getAppRoutes() == null || dataFlow.getAppRoutes().size() == 0) {
+            orders.put("sign", AuthenticationFactory.md5(orders.getString("transactionId"), orders.getString("responseTime"),
+                    business.toJSONString(), MappingCache.getValue(MappingConstant.KEY_DEFAULT_SECURITY_CODE)));
+        }else {
+            orders.put("sign", AuthenticationFactory.md5(orders.getString("transactionId"), orders.getString("responseTime"),
+                    business.toJSONString(), dataFlow.getAppRoutes().get(0).getSecurityCode()));
+        }
+    }
+
+
+    /**
+     * 加密
+     * @param data
+     * @param publicKey
+     * @param keySize
+     * @return
+     * @throws Exception
+     */
+    public static byte[] encrypt(byte[] data, PublicKey publicKey, int keySize)
+            throws Exception
+    {
+        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING", "BC");
+        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
+
+        int blockSize = (keySize >> 3) - 11;
+
+        int inputLen = data.length;
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        int offSet = 0;
+        int i = 0;
+        while (inputLen - offSet > 0) {
+            byte[] buf;
+            if (inputLen - offSet > blockSize) {
+                buf = cipher.doFinal(data, offSet, blockSize);
+            }else {
+                buf = cipher.doFinal(data, offSet, inputLen - offSet);
+            }
+            out.write(buf, 0, buf.length);
+            ++i;
+            offSet = i * blockSize;
+        }
+        byte[] result = out.toByteArray();
+
+        return result;
+    }
+
+    /**
+     * 解密
+     * @param data
+     * @param privateKey
+     * @param keySize
+     * @return
+     * @throws Exception
+     */
+    public static byte[] decrypt(byte[] data, PrivateKey privateKey, int keySize)
+            throws Exception
+    {
+        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING", "BC");
+        cipher.init(Cipher.DECRYPT_MODE, privateKey);
+        int blockSize = keySize >> 3;
+
+        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+
+        byte[] buf = new byte[blockSize];
+        int len = 0;
+        while ((len = byteArrayInputStream.read(buf)) > 0) {
+            byteArrayOutputStream.write(cipher.doFinal(buf, 0, len));
+        }
+
+        return byteArrayOutputStream.toByteArray();
+    }
+
+    /**
+     * 加载公钥
+     * @param keyData
+     * @return
+     * @throws Exception
+     */
+    public static PublicKey loadPubKey(String keyData)
+            throws Exception
+    {
+        return loadPemPublicKey(keyData, "RSA");
+    }
+
+    /**
+     * 加载私钥
+
+     * @param keyData
+     * @return
+     * @throws Exception
+     */
+    public static PrivateKey loadPrivateKey(String keyData) throws Exception {
+        return loadPrivateKeyPkcs8(keyData, "RSA");
+    }
+
+    /**
+     * 加载公钥
+     * @param privateKeyPem
+     * @param algorithm
+     * @return
+     * @throws Exception
+     */
+    public static PrivateKey loadPrivateKeyPkcs8(String privateKeyPem, String algorithm)
+            throws Exception
+    {
+        String privateKeyData = privateKeyPem.replace("-----BEGIN PRIVATE KEY-----", "");
+        privateKeyData = privateKeyData.replace("-----END PRIVATE KEY-----", "");
+        privateKeyData = privateKeyData.replace("\n", "");
+        privateKeyData = privateKeyData.replace("\r", "");
+
+        byte[] decoded = Base64.getDecoder().decode(privateKeyData.getBytes());
+
+        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(decoded);
+        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
+
+        return keyFactory.generatePrivate(pkcs8KeySpec);
+    }
+
+    /**
+     * 加载私钥
+     * @param publicPemData
+     * @param algorithm
+     * @return
+     * @throws Exception
+     */
+    public static PublicKey loadPemPublicKey(String publicPemData, String algorithm)
+            throws Exception
+    {
+        String publicKeyPEM = publicPemData.replace("-----BEGIN PUBLIC KEY-----", "");
+
+        publicKeyPEM = publicKeyPEM.replace("-----END PUBLIC KEY-----", "");
+
+        publicKeyPEM = publicKeyPEM.replace("\n", "");
+        publicKeyPEM = publicKeyPEM.replace("\r", "");
+
+        byte[] decoded =Base64.getDecoder().decode(publicKeyPEM.getBytes());
+
+        X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded);
+        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
+
+        return keyFactory.generatePublic(spec);
+    }
+
+    //生成密钥对
+    private static KeyPair genKeyPair(int keyLength) throws Exception{
+        KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
+        keyPairGenerator.initialize(1024);
+        return keyPairGenerator.generateKeyPair();
+    }
+
+    public static void main(String[] args) throws Exception{
+        KeyPair keyPair=genKeyPair(1024);
+
+        //获取公钥,并以base64格式打印出来
+        PublicKey publicKey=keyPair.getPublic();
+        System.out.println("公钥:"+new String(Base64.getEncoder().encode(publicKey.getEncoded())));
+
+        //获取私钥,并以base64格式打印出来
+        PrivateKey privateKey=keyPair.getPrivate();
+        System.out.println("私钥:"+new String(Base64.getEncoder().encode(privateKey.getEncoded())));
+
     }
 }
 

+ 3 - 15
java110-common/src/main/java/com/java110/common/util/ResponseTemplateUtil.java

@@ -36,14 +36,12 @@ public class ResponseTemplateUtil {
     /**
      * 创建 通用返回结果模板
      * @param transactionId 交易流水
-     * @param sign 签名
      * @param code 错误
      * @param message 错误信息
      * @param business 业务信息
      * @return
      */
     public static JSONObject createCommonResponseJson(String transactionId,
-                                                  String sign,
                                                   String code,
                                                   String message,
                                                   JSONArray business){
@@ -52,11 +50,6 @@ public class ResponseTemplateUtil {
         JSONObject orderInfo = responseInfo.getJSONObject("orders");
         orderInfo.put("transactionId",transactionId);
         orderInfo.put("responseTime",DateUtil.getDefaultFormateTimeString(new Date()));
-        if(StringUtil.isNullOrNone(sign)) {
-            orderInfo.put("sign", AuthenticationFactory.md5(transactionId, orderInfo.getString("responseTime"), business != null && business.size() > 0 ? business.toJSONString() : ""));
-        }else {
-            orderInfo.put("sign",sign);
-        }
         JSONObject orderResponseInfo = orderInfo.getJSONObject("response");
         orderResponseInfo.put("code",code);
         orderResponseInfo.put("message",message);
@@ -69,13 +62,12 @@ public class ResponseTemplateUtil {
     /**
      * 返回模板 只有Order信息
      * @param transactionId
-     * @param sign
      * @param code
      * @param message
      * @return
      */
-    public static JSONObject createOrderResponseJson(String transactionId, String sign,String code,String message){
-        return createCommonResponseJson(transactionId,sign,code,message,null);
+    public static JSONObject createOrderResponseJson(String transactionId,String code,String message){
+        return createCommonResponseJson(transactionId,code,message,null);
     }
 
     /**
@@ -84,11 +76,7 @@ public class ResponseTemplateUtil {
      * @return
      */
     public static JSONObject createCommonResponseJson(DataFlow dataFlow){
-        JSONObject responseJson = dataFlow.getResponseBusinessJson();
-        JSONObject orders = responseJson.getJSONObject("orders");
-        JSONArray business = responseJson.getJSONArray("business");
-        orders.put("sign",AuthenticationFactory.md5(orders.getString("transactionId"),orders.getString("responseTime"),business.toJSONString()));
-        return responseJson;
+        return dataFlow.getResponseBusinessJson();
     }
 
     /**

Разница между файлами не показана из-за своего большого размера
+ 4 - 2
java110-config/db/CenterService/create_table.db


+ 33 - 0
java110-config/target/classes/META-INF/spring-configuration-metadata.json

@@ -0,0 +1,33 @@
+{
+  "groups": [
+    {
+      "name": "java110.common",
+      "type": "com.java110.config.properties.CommonProperties",
+      "sourceType": "com.java110.config.properties.CommonProperties"
+    },
+    {
+      "name": "java110.event.properties",
+      "type": "com.java110.config.properties.EventProperties",
+      "sourceType": "com.java110.config.properties.EventProperties"
+    },
+    {
+      "name": "java110.order",
+      "type": "com.java110.config.properties.OrderProperties",
+      "sourceType": "com.java110.config.properties.OrderProperties"
+    }
+  ],
+  "properties": [
+    {
+      "name": "java110.event.properties.order-dispatch-listener",
+      "type": "java.lang.String",
+      "description": "订单调度 侦听",
+      "sourceType": "com.java110.config.properties.EventProperties"
+    },
+    {
+      "name": "java110.order.delete-order-asyn",
+      "type": "java.lang.String",
+      "sourceType": "com.java110.config.properties.OrderProperties"
+    }
+  ],
+  "hints": []
+}

+ 3 - 0
java110-config/target/classes/META-INF/spring.factories

@@ -0,0 +1,3 @@
+# Application Listeners
+#org.springframework.context.ApplicationListener=\
+  com.java110.event.init.SystemStartUpInit

+ 45 - 0
java110-config/target/classes/cache/ehcache.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
+
+    <!-- 磁盘缓存位置 -->
+    <diskStore path="java.io.tmpdir/ehcache"/>
+
+    <!-- 默认缓存 -->
+    <defaultCache
+            maxEntriesLocalHeap="10000"
+            eternal="false"
+            timeToIdleSeconds="120"
+            timeToLiveSeconds="120"
+            maxEntriesLocalDisk="10000000"
+            diskExpiryThreadIntervalSeconds="120"
+            memoryStoreEvictionPolicy="LRU"/>
+
+    <!-- helloworld缓存 -->
+    <cache name="helloworld"
+           maxElementsInMemory="1000"
+           eternal="false"
+           timeToIdleSeconds="5"
+           timeToLiveSeconds="5"
+           overflowToDisk="false"
+           memoryStoreEvictionPolicy="LRU"/>
+
+    <!--
+    ehcache.xml配置参数说明:
+
+name:缓存名称。
+maxElementsInMemory:缓存最大个数。
+eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
+timeToIdleSeconds:置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
+timeToLiveSeconds:缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。
+maxEntriesLocalDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
+overflowToDisk:内存不足时,是否启用磁盘缓存。
+diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
+maxElementsOnDisk:硬盘最大缓存个数。
+diskPersistent:是否在VM重启时存储硬盘的缓存数据。默认值是false。
+diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
+memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
+clearOnFlush:内存数量最大时是否清除。
+
+    -->
+</ehcache>

+ 19 - 0
java110-config/target/classes/cache/redis.conf

@@ -0,0 +1,19 @@
+# REDIS (RedisProperties)
+# Redis数据库索引(默认为0)
+spring.redis.database=0
+# Redis服务器地址
+spring.redis.host=192.168.0.58
+# Redis服务器连接端口
+spring.redis.port=6379
+# Redis服务器连接密码(默认为空)
+spring.redis.password=
+# 连接池最大连接数(使用负值表示没有限制)
+spring.redis.pool.max-active=8
+# 连接池最大阻塞等待时间(使用负值表示没有限制)
+spring.redis.pool.max-wait=-1
+# 连接池中的最大空闲连接
+spring.redis.pool.max-idle=8
+# 连接池中的最小空闲连接
+spring.redis.pool.min-idle=0
+# 连接超时时间(毫秒)
+spring.redis.timeout=0

+ 10 - 0
java110-config/target/classes/common/common.properties

@@ -0,0 +1,10 @@
+
+#文件下载时,选用provInner.DownloadFileFromFtpToTFS beanId 对应的类来处理
+java110.common.downloadClass=provInner.DownloadFileFromFtpToTFS
+#下载Unicode转码
+java110.common.task.tamplete.name.D=&#70;&#84;&#80;&#25991;&#20214;&#20445;&#23384;&#33267;&#84;&#70;&#83;
+java110.common.task.deal.class.U=provInner.UpFileFromTFSToFTP
+java110.common.task.tamplete.name.U=&#84;&#70;&#83;&#25991;&#20214;&#20445;&#23384;&#33267;&#70;&#84;&#80;
+
+java110.common.task.deal.class.DT=provInner.DownloadFileFromFtpToTable
+java110.common.task.tamplete.name.DT=&#70;&#84;&#80;&#25991;&#20214;&#20445;&#23384;&#84;&#97;&#98;&#108;&#101;

+ 7 - 0
java110-config/target/classes/config/center_event.properties

@@ -0,0 +1,7 @@
+java110.event.properties.centerServiceListener=\
+  dataFlowCustListener,\
+  dataFlowMerchantListener
+
+java110.event.properties.centerServiceEvent=\
+  save.userService.userInfo::com.java110.event.center.user.event.DataFlowCustEvent,\
+  save.merchantService.merchantInfo::com.java110.event.center.merchant.event.DataFlowMerchantEvent

+ 15 - 0
java110-config/target/classes/config/event.properties

@@ -0,0 +1,15 @@
+java110.event.properties.orderDispatchListener=\
+  custDispatchListener,\
+  custDispatchListener,\
+  merchantDispatchListener,\
+  commonDispatchListener
+
+java110.event.properties.orderDispatchEvent=\
+  C1::com.java110.event.app.cust.AppCustEvent,\
+  C2::com.java110.event.app.cust.AppCustEvent,\
+  C1D::com.java110.event.app.cust.AppDeleteCustEvent
+
+## service A::B##M@@C@@D M is after method(the method is in the CommonDispatchAfterMethod class) name ,
+### if method is 0 , no method need to do
+java110.event.properties.listener.service=\
+  Test1::http://user-service/test/sayHello?param={param}##0@@http://user-service/test/sayHello?param={param}@@http://user-service/test/sayHello?param={param}

+ 2 - 0
java110-config/target/classes/config/order.properties

@@ -0,0 +1,2 @@
+# asyn S Synchronous  A asynchronous,activemq
+java110.order.deleteOrderAsyn=A

+ 31 - 0
java110-config/target/classes/db/db.properties

@@ -0,0 +1,31 @@
+#数据库设置
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource  
+spring.datasource.driverClassName=com.mysql.jdbc.Driver  
+spring.datasource.url=jdbc:mysql://192.168.31.199:3306/TT  
+spring.datasource.username=TT  
+spring.datasource.password=TT@12345678  
+#--------------------------
+# 下面为连接池的补充设置,应用到上面所有数据源中
+# 初始化大小,最小,最大
+spring.datasource.initialSize=5  
+spring.datasource.minIdle=5  
+spring.datasource.maxActive=20  
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000  
+# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+spring.datasource.timeBetweenEvictionRunsMillis=60000  
+# 配置一个连接在池中最小生存的时间,单位是毫秒
+spring.datasource.minEvictableIdleTimeMillis=300000  
+spring.datasource.validationQuery=SELECT 1 FROM DUAL  
+spring.datasource.testWhileIdle=true  
+spring.datasource.testOnBorrow=false  
+spring.datasource.testOnReturn=false  
+# 打开PSCache,并且指定每个连接上PSCache的大小
+spring.datasource.poolPreparedStatements=true  
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
+# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+spring.datasource.filters=stat,wall,log4j  
+# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true

+ 43 - 0
java110-config/target/classes/logback.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <include resource="org/springframework/boot/logging/logback/base.xml"/>
+
+
+    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <File>logs/app.log</File>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>logs/info-%d{yyyyMMdd}.log.%i</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>500MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <maxHistory>2</maxHistory>
+        </rollingPolicy>
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
+            </Pattern>
+        </layout>
+    </appender>
+
+    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+        <File>logs/error.log</File>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_PATH}/error-%d{yyyyMMdd}.log.%i
+            </fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>500MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <maxHistory>2</maxHistory>
+        </rollingPolicy>
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
+
+            </Pattern>
+        </layout>
+    </appender>
+
+    <logger name="org.springframework.web" level="INFO_FILE"/>
+    <logger name="com.java110" level="INFO_FILE"/>
+</configuration>

+ 116 - 0
java110-config/target/classes/mapper/center/CenterServiceDAOImplMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="centerServiceDAOImpl">
+
+    <!--保存订单信息 c_orders 中 -->
+    <insert id="saveOrder" parameterType="Map">
+        <![CDATA[
+            insert into c_orders(o_id,app_id,ext_transaction_id,user_id,request_time,order_type_cd,remark,status_cd)
+            values(#{oId},#{appId},#{extTransactionId},#{userId},#{requestTime},#{orderTypeCd},#{remark},#{statusCd})
+        ]]>
+    </insert>
+    <!-- 保存属性信息c_orders_attrs 中-->
+    <insert id="saveOrderAttrs" parameterType="Map">
+        <![CDATA[
+            insert into c_orders_attrs(o_id,attr_id,spec_cd,value)
+            values(#{oId},#{attrId},#{specCd},#{value})
+        ]]>
+    </insert>
+    <!-- 保存订单项信息 c_business -->
+    <insert id="saveBusiness" parameterType="Map">
+        <![CDATA[
+            insert into c_business(b_id,o_id,business_type_cd,remark,status_cd)
+            values(#{bId},#{oId},#{businessTypeCd},#{remark},#{statusCd})
+        ]]>
+    </insert>
+    <!-- 保存属性信息 c_business_attrs -->
+    <insert id="saveBusinessAttrs" parameterType="Map">
+        <![CDATA[
+            insert into c_business_attrs(b_id,attr_id,spec_cd,value)
+            values(#{bId},#{attrId},#{specCd},#{value})
+        ]]>
+    </insert>
+    <!-- 更新订单信息(一般就更新订单状态) -->
+    <update id="updateOrder" parameterType="Map" >
+        <![CDATA[
+            update c_orders co set
+            co.status_cd=#{statusCd},
+            co.finish_time=#{finishTime}
+            where co.o_id=#{oId}
+         ]]>
+    </update>
+    <!-- 更新订单项信息(一般就更新订单项状态)-->
+    <update id="updateBusiness" parameterType="Map">
+        <![CDATA[
+            update c_business cb set
+            cb.status_cd=#{statusCd},
+            cb.finish_time=#{finishTime}
+            where cb.o_id=#{oId}
+         ]]>
+    </update>
+    <!--根据bId 修改业务项信息-->
+    <update id="updateBusinessByBId" parameterType="Map">
+        <![CDATA[
+            update c_business cb set
+            cb.status_cd=#{statusCd},
+            cb.finish_time=#{finishTime}
+            where cb.b_id in (#{bId})
+            and cb.status_cd not in ('D','E')
+         ]]>
+    </update>
+    <!-- 当所有业务动作是否都是C,将订单信息改为 C-->
+    <update id="completeOrderByBId" parameterType="String" >
+        <![CDATA[
+            update c_orders co set co.status_cd = 'C' where co.status='S'
+                and not exists(
+                        select 1 from c_business cb where cb.status_cd <> 'C'
+                        and cb.o_id = co.o_id
+                        and cb.b_id in (#{bId})
+                )
+        ]]>
+    </update>
+
+    <select id="getOrderInfoByBId" parameterType="String" resultType="Map">
+        <![CDATA[
+        select co.* from c_orders co where 1 = 1 and exists
+        (
+            select 1 from c_business cb where cb.o_id = co.o_id
+            and cb.b_id = #{bId}
+        )
+    ]]>
+    </select>
+
+    <!-- 获取同个订单中已经完成的订单项-->
+    <select id="getCommonOrderCompledBusinessByBId" parameterType="String" resultType="Map">
+        <![CDATA[
+            select * from c_business cb where cb.finish_time is not null
+            and cb.o_id in (
+                select cb1.o_id from c_business cb1 where cb1.b_id = #{bId}
+            )
+        ]]>
+    </select>
+    <!--查询 所有有效 app信息-->
+    <select id="getAppRouteAndServiceInfoAll" resultType="Map">
+        <![CDATA[
+             SELECT ca.app_id,ca.name,ca.security_code,ca.while_list_ip,ca.black_list_ip,cr.invoke_limit_times,
+            cr.order_type_cd,cs.service_id,cs.business_type_cd,cs.invoke_model,
+            cs.messageQueueName,cs.method,cs.name,cs.provide_app_id,cs.retry_count,cs.seq,cs.service_code,
+            cs.timeout,cs.url FROM c_app ca,c_route cr,c_service cs
+            WHERE ca.status_cd = '0'
+            AND ca.app_id = cr.app_id
+            AND cr.status_cd = '0'
+            AND cr.service_id = cs.service_id
+            AND cs.status_cd = '0'
+        ]]>
+
+    </select>
+
+    <select id="getMappingInfoAll" resultType="com.java110.entity.mapping.Mapping">
+        <![CDATA[
+             SELECT cm.domain,cm.name,cm.key,cm.value,cm.remark from c_mapping cm where cm.status_cd = '0'
+        ]]>
+    </select>
+
+</mapper>

+ 125 - 0
java110-config/target/classes/mapper/common/CommonServiceDaoImplMapper.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="commonServiceDaoImpl">
+
+    <!--查询所有有效的映射数据-->
+    <select id="getCodeMappingAll" resultType="com.java110.entity.mapping.CodeMapping">
+        <![CDATA[
+            SELECT
+              cm.id,
+              cm.name,
+              cm.domain,
+              cm.h_code,
+              cm.p_code,
+              cm.description,
+              cm.create_dt
+            FROM
+              code_mapping cm
+            WHERE cm.status_cd = '0'
+		]]>
+    </select>
+
+    <!--根据域查询对应的映射关系-->
+    <select id="getCodeMappingByDomain" parameterType="com.java110.entity.mapping.CodeMapping"
+            resultType="com.java110.entity.mapping.CodeMapping"
+    >
+        <![CDATA[
+            SELECT
+              cm.id,
+              cm.name,
+              cm.domain,
+              cm.h_code,
+              cm.p_code,
+              cm.description,
+              cm.create_dt
+            FROM
+              code_mapping cm
+            WHERE cm.status_cd = '0'
+            and cm.domain=#{domain}
+        ]]>
+    </select>
+
+    <!--根据HCode查询映射关系-->
+    <select id="getCodeMappingByHCode" parameterType="com.java110.entity.mapping.CodeMapping"
+            resultType="com.java110.entity.mapping.CodeMapping"
+    >
+        <![CDATA[
+            SELECT
+              cm.id,
+              cm.name,
+              cm.domain,
+              cm.h_code,
+              cm.p_code,
+              cm.description,
+              cm.create_dt
+            FROM
+              code_mapping cm
+            WHERE cm.status_cd = '0'
+            and cm.h_code=#{h_code}
+
+        ]]>
+    </select>
+
+    <!--根据PCode查询映射关系-->
+    <select id="getCodeMappingByPCode" parameterType="com.java110.entity.mapping.CodeMapping"
+            resultType="com.java110.entity.mapping.CodeMapping"
+    >
+        <![CDATA[
+            SELECT
+              cm.id,
+              cm.name,
+              cm.domain,
+              cm.h_code,
+              cm.p_code,
+              cm.description,
+              cm.create_dt
+            FROM
+              code_mapping cm
+            WHERE cm.status_cd = '0'
+            and cm.p_code=#{p_code}
+        ]]>
+    </select>
+
+    <!--根据PCode查询映射关系-->
+    <select id="getCodeMappingByDomainAndHCode" parameterType="com.java110.entity.mapping.CodeMapping"
+            resultType="com.java110.entity.mapping.CodeMapping"
+    >
+        <![CDATA[
+            SELECT
+              cm.id,
+              cm.name,
+              cm.domain,
+              cm.h_code,
+              cm.p_code,
+              cm.description,
+              cm.create_dt
+            FROM
+              code_mapping cm
+            WHERE cm.status_cd = '0'
+            and cm.h_code=#{p_code}
+            and cm.domain=#{domain}
+        ]]>
+    </select>
+
+    <!--根据PCode查询映射关系-->
+    <select id="getCodeMappingByDomainAndPCode" parameterType="com.java110.entity.mapping.CodeMapping"
+            resultType="com.java110.entity.mapping.CodeMapping"
+    >
+        <![CDATA[
+            SELECT
+              cm.id,
+              cm.name,
+              cm.domain,
+              cm.h_code,
+              cm.p_code,
+              cm.description,
+              cm.create_dt
+            FROM
+              code_mapping cm
+            WHERE cm.status_cd = '0'
+            and cm.p_code=#{p_code}
+            and cm.domain=#{domain}
+        ]]>
+    </select>
+
+</mapper>

+ 12 - 0
java110-config/target/classes/mapper/common/PrimaryKeyServiceDaoImplMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="primaryKeyServiceDaoImpl">
+
+    <!--查询所有有效的映射数据-->
+    <select id="queryPrimaryKey" parameterType="Map" resultType="Map">
+        <![CDATA[
+            SELECT nextval(#{name}) AS targetId from dual
+		]]>
+    </select>
+
+</mapper>

+ 334 - 0
java110-config/target/classes/mapper/listener/ListenerServiceDaoImplMapper.xml

@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ListenerServiceDaoImpl">
+
+    <parameterMap type="java.util.HashMap" id="TaskFunctionProcParameters">
+        <parameter property="param" javaType="java.lang.String"
+                   jdbcType="VARCHAR" mode="IN" />
+        <parameter property="retVal" javaType="java.lang.String"
+                   jdbcType="VARCHAR" mode="OUT" />
+    </parameterMap>
+
+    <select id="queryFtpItemsCount" parameterType="java.util.HashMap"
+            resultType="Integer">
+        SELECT count(1)
+        FROM SAOP_FTP_TASK A
+        WHERE A.STATE = 'A'
+    </select>
+
+    <!-- 查询文件下载上传列表(配置项)
+     where  A1.rn > ((TO_NUMBER(#{curPage}) -1) * TO_NUMBER(#pageSize#)) AND A1.rn <= (TO_NUMBER(#curPage#) * TO_NUMBER(#pageSize#))
+     -->
+    <select id="queryFtpItems" parameterType="java.util.HashMap" resultType="java.util.HashMap">
+        <![CDATA[
+		SELECT rownum as rn,A.TASKID,
+		       A.TASKNAME,
+		       A.FILE_NAME,
+		       A.U_OR_D,
+		       A.RUN_STATE,
+		       A.RUN_FLAG,
+		       A.TNUM,
+		       A.TASKCRON,
+		       A.ERRPHONE,
+		       A.FILESEQ,
+		       A.UPNULL,
+		       A.PREFLAG,
+		       A.PREFUNCTION,
+		       A.AFTERFLAG,
+		       A.AFTERFUNCTION,
+		       A.DEAL_CLASS,
+		       A.CREATE_DATE
+		  FROM SAOP_FTP_TASK A
+		 WHERE A.STATE = 'A'
+         limit 0,100
+	]]>
+    </select>
+    <select id="newCreateTaskId" resultType="long">
+        <![CDATA[
+	        SELECT seq_cep_taskid.NEXTVAL  AS taskId from dual
+	        ]]>
+    </select>
+    <insert id="addFtpItem" parameterType="java.util.HashMap">
+        insert into saop_ftp_task(taskid,
+        taskname,
+        file_name,
+        u_or_d,
+        tnum,
+        taskcron,
+        errphone,
+        fileseq,
+        upnull,
+        preflag,
+        prefunction,
+        afterflag,
+        afterfunction,
+        deal_class)
+        values(#{taskId},
+        #{taskName},
+        #{fileName},
+        #{uOrD},
+        #{tNum},
+        #{taskCron},
+        #{errPhone},
+        #{fileSeq},
+        #{upNull},
+        #{preFlag},
+        #{preFunction},
+        #{afterFlag},
+        #{afterFunction},
+        #{dealClass}
+        )
+    </insert>
+    <!-- 根据taskId 查询FtpItem 信息 -->
+    <select id="queryFtpItemByTaskId" parameterType="java.util.HashMap"
+            resultType="java.util.HashMap">
+        SELECT A.TASKID,
+        A.TASKNAME,
+        A.FILE_NAME,
+        A.U_OR_D,
+        A.RUN_STATE,
+        A.RUN_FLAG,
+        A.TNUM,
+        A.TASKCRON,
+        A.ERRPHONE,
+        A.FILESEQ,
+        A.UPNULL,
+        A.PREFLAG,
+        A.PREFUNCTION,
+        A.AFTERFLAG,
+        A.AFTERFUNCTION,
+        A.DEAL_CLASS,
+        A.CREATE_DATE
+        FROM SAOP_FTP_TASK A
+        WHERE A.STATE = 'A'
+        and A.TASKID = #{taskId}
+    </select>
+    <!-- 根据任务名称搜素 -->
+    <select id="searchFtpItemByTaskName" parameterType="java.util.HashMap"
+            resultType="java.util.HashMap">
+        <![CDATA[
+		SELECT A.TASKID,
+		A.TASKNAME,
+		A.FILE_NAME,
+		A.U_OR_D,
+		A.RUN_STATE,
+		A.RUN_FLAG,
+		A.TNUM,
+		A.TASKCRON,
+		A.ERRPHONE,
+		A.FILESEQ,
+		A.UPNULL,
+		A.PREFLAG,
+		A.PREFUNCTION,
+		A.AFTERFLAG,
+		A.AFTERFUNCTION,
+		A.DEAL_CLASS,
+		A.CREATE_DATE
+		FROM SAOP_FTP_TASK A
+		WHERE A.STATE = 'A'
+		and A.TASKNAME like '%' || #{taskName} || '%'
+		and rownum < 1000
+	]]>
+    </select>
+    <!-- 修改ftp配置信息 -->
+    <update id="updateFtpItemByTaskId" parameterType="java.util.HashMap">
+        update saop_ftp_task sft
+        set update_date = sysdate
+        <if test="taskName != null and taskName != ''">,sft.taskname = #{taskName}
+        </if>
+        <if test="fileName != null and fileName != ''">,sft.file_name = #{fileName}
+        </if>
+        <if test="uOrD != null and uOrD != ''">,sft.u_or_d = #{uOrD}</if>
+        <if test="runState != null and runState != ''">,sft.run_state = #{runState}
+        </if>
+        <if test="runFlag != null and runFlag != ''">,sft.run_flag = #{runFlag}</if>
+        <if test="tNum != null and tNum != ''">,sft.tnum = #{tNum}</if>
+        <if test="taskCron != null and taskCron != ''">,sft.taskcron = #{taskCron}
+        </if>
+        <if test="errPhone != null and errPhone != ''">,sft.errphone = #{errPhone}
+        </if>
+        <if test="fileSeq != null and fileSeq != ''">,sft.fileseq = #{fileSeq}</if>
+        <if test="upNull != null and upNull != ''">,sft.upnull = #{upNull}</if>
+        <if test="preFlag != null and preFlag != ''">,sft.preflag = #{preFlag}</if>
+        <if test="preFunction != null and preFunction != ''">,sft.prefunction = #{preFunction}
+        </if>
+        <if test="afterFlag != null and afterFlag != ''">,sft.afterflag = #{afterFlag}
+        </if>
+        <if test="afterFunction != null and afterFunction != ''">,sft.afterfunction = #{afterFunction}
+        </if>
+        <if test="dealClass != null and dealClass != ''">,sft.deal_class = #{dealClass}
+        </if>
+        where sft.state = 'A'
+        and sft.taskid = #{taskId}
+    </update>
+
+    <!-- 修改ftp配置信息 -->
+    <update id="updateFtpItemRunState" parameterType="java.util.HashMap">
+        update
+        saop_ftp_task sft
+        set update_date = sysdate,sft.run_state= #{runState}
+        where sft.run_state = #{oldRunState}
+    </update>
+
+    <!-- 删除ftp配置信息 -->
+    <update id="deleteFtpItemByTaskId" parameterType="java.util.HashMap">
+        update
+        saop_ftp_task sft
+        set sft.state = 'R'
+        where sft.state = 'A'
+        and sft.taskid in
+        <foreach collection="taskIds" item="taskId" index="index" open="(" close=")" separator=",">
+            #{taskId}
+        </foreach>
+    </update>
+    <!-- 根据taskids 获取将要操作的ftp配置信息 -->
+    <select id="queryFtpItemsByTaskIds" parameterType="java.util.HashMap" resultType="java.util.HashMap">
+        SELECT
+        A.TASKID,
+        A.TASKNAME,
+        A.FILE_NAME,
+        A.U_OR_D,
+        A.RUN_STATE,
+        A.RUN_FLAG,
+        A.TNUM,
+        A.TASKCRON,
+        A.ERRPHONE,
+        A.FILESEQ,
+        A.UPNULL,
+        A.PREFLAG,
+        A.PREFUNCTION,
+        A.AFTERFLAG,
+        A.AFTERFUNCTION,
+        A.DEAL_CLASS
+        FROM SAOP_FTP_TASK A
+        WHERE A.STATE = 'A'
+        AND A.TASKID in
+        <foreach collection="taskIds" item="taskId" index="index" open="(" close=")" separator=",">
+            #{taskId}
+        </foreach>
+    </select>
+    <!-- 查询FTPItem的属性信息 -->
+    <select id="queryFtpItemAttrsByTaskId" parameterType="java.util.HashMap"
+            resultType="java.util.HashMap">
+        SELECT A.TASKID, A.ITEM_SPEC_ID, A.VALUE
+        FROM SAOP_FTP_TASK_ATTR A
+        WHERE A.TASKID = #{taskId}
+    </select>
+    <!-- 保存FTPItem的属性信息 -->
+    <insert id="addFtpItemAttrs" parameterType="java.util.HashMap">
+        insert into
+        SAOP_FTP_TASK_ATTR(taskid,item_spec_id,value)
+        values(#{taskId},#{itemSpecId},#{value})
+    </insert>
+    <!-- 查询没有下载过的文件名 -->
+    <select id="queryFileNamesWithOutFtpLog" parameterType="java.util.HashMap"
+            resultType="java.util.HashMap">
+        <![CDATA[
+		SELECT #{fileNames} AS fileNames FROM DUAL
+		 where #{fileNames} not in
+		       (select sfl.file_name from saop_ftp_log sfl where sfl.taskId = #{taskId})
+		]]>
+    </select>
+
+    <insert id="addDownloadFileName" parameterType="java.util.HashMap">
+        <selectKey keyProperty="logid" resultType="long">
+            <![CDATA[
+	        SELECT seq_cep_taskid.NEXTVAL  AS logid from dual
+	        ]]>
+        </selectKey>
+        insert into saop_ftp_log(
+        log_id,
+        taskid,
+        file_name,
+        tfs_file_name
+        )
+        values(
+        #{logid},
+        #{taskId},
+        #{fileName},
+        #{tfsFileName}
+        )
+    </insert>
+
+
+    <select id="queryItemSpec" parameterType="java.util.HashMap" resultType="java.util.HashMap">
+        select a.item_spec_cd, a.domain, a.name, a.describe, a.create_date
+        from saop_ftp_item_spec a
+        where a.status_cd = '0'
+        <if test="domain != null and domain !=''"> and a.domain = #{domain}</if>
+        <if test="name != null and name !=''">  and a.name = #{name}</if>
+        <if test="itemSpecCd != null and itemSpecCd !=''">  and a.item_spec_cd = #i{temSpecCd}
+        </if>
+    </select>
+
+    <delete id="deleteFtpItemAttrsbyTaskId" parameterType="java.util.HashMap">
+        DELETE
+        FROM SAOP_FTP_TASK_ATTR A
+        WHERE A.TASKID = #{taskId}
+    </delete>
+
+    <!-- 执行 存储过程 -->
+    <update id="calltaskfunction" parameterType="java.util.HashMap" statementType="CALLABLE">
+        {call $functionname$()}
+    </update>
+
+
+    <update id="calltaskfunctionwithparam" parameterMap="TaskFunctionProcParameters">
+        { call $functionname$(?,?)}
+    </update>
+
+
+    <insert id="saveTaskRunLog"
+            parameterType="com.java110.entity.listener.FtpTaskLog">
+        insert into
+        cep_ftp_tasklog(taskid,u_or_d,state,serverfilename,localfilename,filelength)
+        values(#{taskid},#{uord},#{state},#{serverfilename},#{localfilename},#{filelength})
+    </insert>
+
+    <update id="updateTaskRunLog"
+            parameterType="com.java110.entity.listener.FtpTaskLog">
+        update cep_ftp_tasklog set update_date=now()
+        <if test="state != null and state !=''">,state = #{state}</if>
+        where logid=#{logid}
+    </update>
+    <insert id="saveTaskRunDetailLog"
+            parameterType="com.java110.entity.listener.FtpTaskLogDetail">
+        insert into
+        cep_ftp_tasklog_detail(logid,taskid,state,tnum,begin,end,data,havedown,remark,SERVERFILENAME,LOCALFILENAME)
+        values(#{logid},#{taskid},#{state},#{tnum},#{begin},#{end},#{data},#{havedown},#{remark},#{serverfilename},#{localfilename})
+    </insert>
+    <update id="updateTaskRunDetailLog"
+            parameterType="com.java110.entity.listener.FtpTaskLogDetail">
+        update cep_ftp_tasklog_detail set update_date=now()
+        <if test="state != null and state !=''">,state = #{state}</if>
+        <if test="data != null and data !=''">,data = #{data}</if>
+        <if test="havedown != null and havedown !=''">,havedown = #{havedown}</if>
+        <if test="remark != null and remark !=''">,remark = #{remark}</if>
+        where id=#id#
+    </update>
+
+    <insert id="insertFileData2Table" parameterType="String">
+        $value$
+    </insert>
+
+    <select id="execConfigSql" parameterType="String" resultType="String">
+        $value$
+    </select>
+
+
+    <select id="queryTableColInfo" parameterType="java.util.HashMap"
+            resultType="java.util.HashMap">
+        select distinct column_name,data_type
+        from all_tab_columns
+        where table_name=#tablename#
+        <if test="username != null and username !=''">
+            owner=#{username}
+        </if>
+        <if test="column_name != null and column_name !=''">
+            column_name in($colnames$)
+        </if>
+    </select>
+
+ </mapper>

+ 77 - 0
java110-config/target/classes/mapper/merchant/MerchantMemberServiceDaoImplMapper.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="merchantMemberServiceDaoImpl">
+
+
+    <!--根据客户ID 查询客户信息,其中包括 merchant 和merchantAttr 数据-->
+    <select id="queryDataToMerchantMember" parameterType="com.java110.entity.merchant.MerchantMember" resultType="com.java110.entity.merchant.MerchantMember">
+
+            select mm.id,
+             mm.merchantId,
+             mm.memberId,
+             mm.memberType,
+             mm.create_dt,
+             mm.status_cd,
+             mm.start_dt,
+             mm.end_dt,
+             mm.versionId,
+             mm.version_dt
+             from merchant_member mm
+            where mm.status_cd = '0'
+            <if test="merchantId != null and merchantId != ''">
+                and mm.merchantId = #{merchantId}
+            </if>
+            <if test="versionId != null and versionId != ''">
+                and mm.versionId = #{versionId}
+            </if>
+        <![CDATA[
+            and start_dt < now()
+            and end_dt > now()
+        ]]>
+    </select>
+
+    <select id="queryBoMerchantMember" parameterType="com.java110.entity.merchant.BoMerchantMember" resultType="com.java110.entity.merchant.BoMerchantMember">
+        select  mm.boId,
+        mm.merchantId,
+        mm.memberId,
+        mm.versionId,
+        mm.memberType,
+        mm.create_dt,
+        mm.start_dt,
+        mm.end_dt,
+        mm.state
+        from bo_merchant_member mm
+        where 1=1
+        <if test="merchantId != null and merchantId != ''">
+            and mm.merchantId = #{merchantId}
+        </if>
+        <if test="versionId != null and versionId != ''">
+            and mm.versionId = #{versionId}
+        </if>
+        <if test="memberId != null and memberId != ''">
+            and mm.memberId = #{memberId}
+        </if>
+    </select>
+
+    <!--  保存过程数据 add by wuxw 2017-09-08 21:48 -->
+    <insert id="saveDataToBoMerchantMember" parameterType="com.java110.entity.merchant.BoMerchantMember">
+        insert into bo_merchant_member(boId,merchantId,memberId,versionId,memberType,state,start_dt,end_dt)
+        values(#boId#,#merchantId#,#memberId#,#versionId#,#memberType#,#state#,#start_dt#,#end_dt#)
+    </insert>
+
+    <!-- 保存实例数据 add by wuxw 2017-09-08 21:58 -->
+    <insert id="saveDataToMerchant" parameterType="com.java110.entity.merchant.BoMerchantMember">
+        insert into merchant_member(merchantId,memberId,versionId,memberType,status_cd,start_dt,end_dt,version_dt)
+        values(#merchantId#,#memberId#,#versionId#,#memberType#,'0',#start_dt#,#end_dt#,now())
+    </insert>
+    <!-- 删除实例数据 add by wuxw 2017-09-08 22:02 -->
+    <update id="deleteDataToMerchant" parameterType="com.java110.entity.merchant.BoMerchantMember">
+        update merchant_member mm set mm.status_cd = '1',mm.versionId = #versionId#,mm.version_dt = now() where mm.memberId = #memberId#
+        and mm.merchantId = #merchantId#
+    </update>
+
+
+
+</mapper>

+ 123 - 0
java110-config/target/classes/mapper/merchant/MerchantServiceDaoImplMapper.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="merchantServiceDAOImpl">
+
+    <resultMap type="com.java110.entity.merchant.Merchant" id="merchantMap">
+        <id column="merchantId" jdbcType="VARCHAR" property="merchantId"/>
+        <result column="logoImg" jdbcType="VARCHAR" property="logoImg"/>
+        <result column="name" jdbcType="VARCHAR" property="name"/>
+        <result column="address" jdbcType="VARCHAR" property="address"/>
+        <result column="type" jdbcType="VARCHAR" property="type"/>
+        <result column="start_dt" jdbcType="DATE" property="start_dt"/>
+        <result column="end_dt" jdbcType="DATE" property="end_dt"/>
+        <result column="status_cd" jdbcType="VARCHAR" property="status_cd"/>
+        <result column="create_dt" jdbcType="DATE" property="create_dt"/>
+        <!-- 一对多关系 -->
+        <!-- <collection property="stus" resultMap="Student.StudentResult"></collection>  -->
+        <collection property="merchantAttrs" javaType="com.java110.entity.merchant.MerchantAttr">
+            <id property="merchantId" column="merchantId"/>
+            <result property="attrCd" column="attrCd"/>
+            <result property="value" column="value"/>
+        </collection>
+    </resultMap>
+
+    <!--根据用户Id查询用户角色
+    <select id="findRolesByUserId" resultType="SysRole">
+        SELECT
+        r.*
+        FROM
+        t_role r,
+        t_merchant_role ur
+        WHERE ur.uid = #{merchantId}
+        AND ur.roleId = r.roleId
+        AND ur.status_cd = '1'
+    </select>
+-->
+    <!--保存数据至过程表 bo_merchant 中 -->
+    <insert id="saveDataToBoMerchant" parameterType="com.java110.entity.merchant.BoMerchant">
+        <![CDATA[
+            insert into bo_merchant(boId,merchantId,logoImg,name,address,type,start_dt,end_dt,state)
+            values(#{boId},#{merchantId},#{logoImg},#{name},#{address},#{type},#{start_dt},#{end_dt},#{state})
+        ]]>
+    </insert>
+    <!-- 保存数据至过程表bo_merchant_attr 中-->
+    <insert id="saveDataToBoMerchantAttr" parameterType="com.java110.entity.merchant.BoMerchantAttr">
+        <![CDATA[
+            insert into bo_merchant_attr(boId,merchantId,attrCd,value,state)
+            values(#{boId},#{merchantId},#{attrCd},#{value},#{state})
+        ]]>
+    </insert>
+    <!-- 保存 实例客户信息 merchant -->
+    <insert id="saveDataToMerchant" parameterType="com.java110.entity.merchant.Merchant">
+        <![CDATA[
+            insert into merchant(merchantId,logoImg,name,address,type,start_dt,end_dt,status_cd)
+            values(#{merchantId},#{logoImg},#{name},#{address},#{type},#{start_dt},#{end_dt},#{status_cd})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 merchant -->
+    <insert id="deleteDataToMerchant" parameterType="com.java110.entity.merchant.Merchant">
+        <![CDATA[
+           delete * from merchant c where c.merchantId = #{merchantId}
+        ]]>
+    </insert>
+
+    <!-- 保存 实例客户属性信息 merchant_attr -->
+    <insert id="saveDataToMerchantAttr" parameterType="com.java110.entity.merchant.MerchantAttr">
+        <![CDATA[
+            insert into merchant_attr(merchantId,attrCd,value,status_cd)
+            values(#{merchantId},#{attrCd},#{value},#{status_cd})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 merchant -->
+    <update id="deleteDataToMerchantAttr" parameterType="com.java110.entity.merchant.MerchantAttr">
+           delete * from merchant_attr ct where 1=1
+           <if test="merchantId != null and merchantId != ''">
+               and ct.merchantId = #{merchantId}
+           </if>
+            <if test="attrCd != null and attrCd != ''">
+                and ct.attrCd = #{attrCd}
+            </if>
+    </update>
+    <!--根据客户ID 查询客户信息,其中包括 merchant 和merchantAttr 数据-->
+    <select id="queryDataToMerchant" parameterType="com.java110.entity.merchant.Merchant" resultMap="merchantMap">
+        <![CDATA[
+            select c.merchantId,c.logoImg,c.name,c.address,c.type,c.start_dt,c.end_dt,c.status_cd,c.create_dt,
+            ca.merchantId,ca.attrCd,ca.value
+             from merchant c, merchant_attr ca where c.merchantId= ca.merchantId
+            and c.merchantId = #{merchantId}
+            and c.status_cd = '0'
+        ]]>
+    </select>
+
+    <!-- 查询客户过程数据 -->
+    <select id="queryBoMerchant" parameterType="com.java110.entity.merchant.BoMerchant" resultType="com.java110.entity.merchant.BoMerchant">
+        select bc.boId,bc.merchantId,bc.logoImg,bc.name,bc.address,bc.type,bc.start_dt,bc.end_dt,bc.state,bc.create_dt,
+        from bo_merchant bc where 1=1
+        <if test="boId != null and boId != ''">
+            and bc.boId = #{boId}
+        </if>
+        <if test="merchantId != null and merchantId != ''">
+            and bc.merchantId = #{merchantId}
+        </if>
+        and bc.state in ('ADD','DEL')
+        <if test="create_dt != null and create_dt != ''">
+            order by bc.create_dt desc
+        </if>
+    </select>
+    <!-- 查询客户属性过程表-->
+    <select id="queryBoMerchantAttr" parameterType="com.java110.entity.merchant.BoMerchantAttr" resultType="com.java110.entity.merchant.BoMerchantAttr">
+        select bca.boId,bca.merchantId,bca.attrCd,bca.value,bca.state,bca.create_dt from bo_merchant_attr bca where 1=1
+        <if test="boId !=null and boId != ''">
+            and bca.boId = #{boId}
+        </if>
+        <if test="merchantId != null and merchantId != ''">
+            and bca.merchantId = #{merchantId}
+        </if>
+        <if test="create_dt != null and create_dt != ''">
+            order by bc.create_dt desc
+        </if>
+    </select>
+
+</mapper>

+ 109 - 0
java110-config/target/classes/mapper/order/OrderServiceDaoImplMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="centerServiceDaoImpl">
+
+    <!--order_list order_list_attr  返回结果封装-->
+    <resultMap type="com.java110.entity.order.OrderList" id="orderListMap">
+        <id column="olId" jdbcType="VARCHAR" property="olId"/>
+        <result column="channelId" jdbcType="VARCHAR" property="channelId"/>
+        <result column="custId" jdbcType="VARCHAR" property="custId"/>
+        <result column="olTypeCd" jdbcType="VARCHAR" property="olTypeCd"/>
+        <result column="extSystemId" jdbcType="VARCHAR" property="extSystemId"/>
+        <result column="remark" jdbcType="VARCHAR" property="remark"/>
+        <result column="create_dt" jdbcType="TIMESTAMP" property="create_dt"/>
+        <result column="status_cd" jdbcType="VARCHAR" property="status_cd"/>
+        <!-- 一对多关系 -->
+        <collection property="orderListAttrs" javaType="com.java110.entity.order.OrderListAttr">
+            <id property="olId" column="olId"/>
+            <result property="attrCd" column="attrCd"/>
+            <result property="value" column="value"/>
+            <result property="name" column="name"/>
+        </collection>
+    </resultMap>
+
+    <!--order_list order_list_attr  返回结果封装-->
+    <resultMap type="com.java110.entity.order.BusiOrder" id="busiOrderMap">
+        <id column="olId" jdbcType="VARCHAR" property="olId"/>
+        <result column="boId" jdbcType="VARCHAR" property="boId"/>
+        <result column="actionTypeCd" jdbcType="VARCHAR" property="actionTypeCd"/>
+        <result column="status_cd" jdbcType="VARCHAR" property="status_cd"/>
+        <result column="create_dt" jdbcType="TIMESTAMP" property="create_dt"/>
+        <result column="start_dt" jdbcType="TIMESTAMP" property="start_dt"/>
+        <result column="end_dt" jdbcType="TIMESTAMP" property="end_dt"/>
+        <result column="remark" jdbcType="VARCHAR" property="remark"/>
+        <!-- 一对多关系 -->
+        <collection property="busiOrderAttrs" javaType="com.java110.entity.order.BusiOrderAttr">
+            <id property="boId" column="boId"/>
+            <result property="attrCd" column="attrCd"/>
+            <result property="value" column="value"/>
+            <result property="name" column="name"/>
+        </collection>
+    </resultMap>
+
+    <!--保存数据至过程表 bo_cust 中 -->
+    <insert id="saveDataToBoOrderList" parameterType="com.java110.entity.order.OrderList">
+        <![CDATA[
+            insert into order_list(olId,channelId,custId,olTypeCd,extSystemId,remark)
+            values(#{olId},#{channelId},#{custId},#{olTypeCd},#{extSystemId},#{remark})
+        ]]>
+    </insert>
+    <!-- 保存数据至过程表bo_cust_attr 中-->
+    <insert id="saveDataToOrderListAttr" parameterType="com.java110.entity.order.OrderListAttr">
+        <![CDATA[
+            insert into order_list_attr(olId,attrCd,value)
+            values(#{boId},#{attrCd},#{value})
+        ]]>
+    </insert>
+    <!-- 保存 实例客户信息 cust -->
+    <insert id="saveDataToBusiOrder" parameterType="com.java110.entity.order.BusiOrder">
+        <![CDATA[
+            insert into busi_order(boId,olId,actionTypeCd,status_cd,start_dt,end_dt,remark)
+            values(#{boId},#{olId},#{actionTypeCd},#{status_cd},#{start_dt},#{end_dt},#{remark})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 cust -->
+    <insert id="saveDataToBusiOrderAttr" parameterType="com.java110.entity.order.BusiOrderAttr">
+        <![CDATA[
+            insert into busi_order_attr(boId,attrCd,value)
+            values(#{boId},#{attrCd},#{value})
+        ]]>
+    </insert>
+    <!-- 查询订单信息(order_list order_list_attr) {'olId':'71234567','extSystemId':'','custId':'','channelId':''} -->
+    <select id="queryOrderListAndAttr" parameterType="com.java110.entity.order.OrderList" resultMap="orderListMap">
+            select ol.olId,ol.channelId,ol.custId,ol.olTypeCd,ol.extSystemId,ol.remark,ol.create_dt,ol.status_cd,ola.attrCd,ola.value,
+            (select ac.name from attr ac where ac.attrCd = ola.attrCd limit 0) name
+            from order_list ol , order_list_attr ola where ol.olId = ola.olId and ol.status_cd in ('0')
+        <if test="olId != null and olId != ''">
+           and ol.olId = #{olId}
+        </if>
+
+        <if test="extSystemId != null and extSystemId != ''">
+            and ol.extSystemId = #{extSystemId}
+        </if>
+
+        <if test="custId != null and custId != ''">
+            and ol.channelId = #{channelId}
+        </if>
+
+    </select>
+    <!-- 查询订单信息 busi_order busi_order_attr-->
+    <select id="queryBusiOrderAndAttr" parameterType="com.java110.entity.order.BusiOrder" resultMap="busiOrderMap">
+        select bo.boId,bo.olId,bo.actionTypeCd,bo.status_cd,bo.start_dt,bo.end_dt,bo.remark,boa.attrCd,value,
+        (select ac.name from attr ac where ac.attrCd = ola.attrCd limit 0) name
+        from busi_order bo,busi_order_attr boa where bo.boId = boa.boId and bo.status_cd in ('0')
+        <if test="olId != null and olId != ''">
+            and bo.olId = #{olId}
+        </if>
+        <if test="boId != null and boId != ''">
+            and bo.boId = #{boId}
+        </if>
+        <if test="actionTypeCd !=null and actionTypeCd != ''">
+
+            and bo.actionTypeCd in (#{actionTypeCd})
+
+        </if>
+    </select>
+
+</mapper>

+ 123 - 0
java110-config/target/classes/mapper/product/ProductServiceDaoImplMapper.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="productServiceDAOImpl">
+
+    <resultMap type="com.java110.entity.product.Product" id="productMap">
+        <id column="productId" jdbcType="VARCHAR" property="productId"/>
+        <result column="productImg" jdbcType="VARCHAR" property="productImg"/>
+        <result column="name" jdbcType="VARCHAR" property="name"/>
+        <result column="catalogCd" jdbcType="VARCHAR" property="catalogCd"/>
+        <result column="productDesc" jdbcType="VARCHAR" property="productDesc"/>
+        <result column="start_dt" jdbcType="DATE" property="start_dt"/>
+        <result column="end_dt" jdbcType="DATE" property="end_dt"/>
+        <result column="status_cd" jdbcType="VARCHAR" property="status_cd"/>
+        <result column="create_dt" jdbcType="DATE" property="create_dt"/>
+        <!-- 一对多关系 -->
+        <!-- <collection property="stus" resultMap="Student.StudentResult"></collection>  -->
+        <collection property="productAttrs" javaType="com.java110.entity.product.ProductAttr">
+            <id property="productId" column="productId"/>
+            <result property="attrCd" column="attrCd"/>
+            <result property="value" column="value"/>
+        </collection>
+    </resultMap>
+
+    <!--根据用户Id查询用户角色
+    <select id="findRolesByUserId" resultType="SysRole">
+        SELECT
+        r.*
+        FROM
+        t_role r,
+        t_product_role ur
+        WHERE ur.uid = #{productId}
+        AND ur.roleId = r.roleId
+        AND ur.status_cd = '1'
+    </select>
+-->
+    <!--保存数据至过程表 bo_product 中 -->
+    <insert id="saveDataToBoProduct" parameterType="com.java110.entity.product.BoProduct">
+        <![CDATA[
+            insert into bo_product(boId,productId,productImg,name,catalogCd,productDesc,start_dt,end_dt,state)
+            values(#{boId},#{productId},#{productImg},#{name},#{catalogCd},#{productDesc},#{start_dt},#{end_dt},#{state})
+        ]]>
+    </insert>
+    <!-- 保存数据至过程表bo_product_attr 中-->
+    <insert id="saveDataToBoProductAttr" parameterType="com.java110.entity.product.BoProductAttr">
+        <![CDATA[
+            insert into bo_product_attr(boId,productId,attrCd,value,state)
+            values(#{boId},#{productId},#{attrCd},#{value},#{state})
+        ]]>
+    </insert>
+    <!-- 保存 实例客户信息 product -->
+    <insert id="saveDataToProduct" parameterType="com.java110.entity.product.Product">
+        <![CDATA[
+            insert into product(productId,productImg,name,catalogCd,productDesc,start_dt,end_dt,status_cd)
+            values(#{productId},#{productImg},#{name},#{catalogCd},#{productDesc},#{start_dt},#{end_dt},#{status_cd})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 product -->
+    <insert id="deleteDataToProduct" parameterType="com.java110.entity.product.Product">
+        <![CDATA[
+           delete * from product c where c.productId = #{productId}
+        ]]>
+    </insert>
+
+    <!-- 保存 实例客户属性信息 product_attr -->
+    <insert id="saveDataToProductAttr" parameterType="com.java110.entity.product.ProductAttr">
+        <![CDATA[
+            insert into product_attr(productId,attrCd,value,status_cd)
+            values(#{productId},#{attrCd},#{value},#{status_cd})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 product -->
+    <update id="deleteDataToProductAttr" parameterType="com.java110.entity.product.ProductAttr">
+           delete * from product_attr ct where 1=1
+           <if test="productId != null and productId != ''">
+               and ct.productId = #{productId}
+           </if>
+            <if test="attrCd != null and attrCd != ''">
+                and ct.attrCd = #{attrCd}
+            </if>
+    </update>
+    <!--根据客户ID 查询客户信息,其中包括 product 和productAttr 数据-->
+    <select id="queryDataToProduct" parameterType="com.java110.entity.product.Product" resultMap="productMap">
+        <![CDATA[
+            select c.productId,c.productImg,c.name,c.catalogCd,c.productDesc,c.start_dt,c.end_dt,c.status_cd,c.create_dt,
+            ca.productId,ca.attrCd,ca.value
+             from product c, product_attr ca where c.productId= ca.productId
+            and c.productId = #{productId}
+            and c.status_cd = '0'
+        ]]>
+    </select>
+
+    <!-- 查询客户过程数据 -->
+    <select id="queryBoProduct" parameterType="com.java110.entity.product.BoProduct" resultType="com.java110.entity.product.BoProduct">
+        select bc.boId,bc.productId,bc.productImg,bc.name,bc.catalogCd,bc.productDesc,bc.start_dt,bc.end_dt,bc.state,bc.create_dt,
+        from bo_product bc where 1=1
+        <if test="boId != null and boId != ''">
+            and bc.boId = #{boId}
+        </if>
+        <if test="productId != null and productId != ''">
+            and bc.productId = #{productId}
+        </if>
+        and bc.state in ('ADD','DEL')
+        <if test="create_dt != null and create_dt != ''">
+            order by bc.create_dt desc
+        </if>
+    </select>
+    <!-- 查询客户属性过程表-->
+    <select id="queryBoProductAttr" parameterType="com.java110.entity.product.BoProductAttr" resultType="com.java110.entity.product.BoProductAttr">
+        select bca.boId,bca.productId,bca.attrCd,bca.value,bca.state,bca.create_dt from bo_product_attr bca where 1=1
+        <if test="boId !=null and boId != ''">
+            and bca.boId = #{boId}
+        </if>
+        <if test="productId != null and productId != ''">
+            and bca.productId = #{productId}
+        </if>
+        <if test="create_dt != null and create_dt != ''">
+            order by bc.create_dt desc
+        </if>
+    </select>
+
+</mapper>

+ 79 - 0
java110-config/target/classes/mapper/rule/RuleDaoImplMapper.xml

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ruleDaoImpl">
+
+    <parameterMap type="map" id="executeProMap">
+        <parameter property="transactionId" jdbcType="VARCHAR" mode="IN"/>
+        <parameter property="paramIn" jdbcType="VARCHAR" mode="IN"/>
+        <parameter property="paramOut" jdbcType="VARCHAR" mode="OUT"/>
+    </parameterMap>
+
+    <!-- 执行sql-->
+    <select id="executeSql"  resultType="java.util.HashMap" >
+        $sql$
+    </select>
+
+    <!-- 执行 存储过程 -->
+    <update id="executeProc" parameterMap="executeProMap" statementType="CALLABLE">
+        {call $procName$(?, ?, ?)}
+    </update>
+
+    <!-- 查询表 rule_entrance 中数据 -->
+    <select id="getRuleEntranceMap" resultType="com.java110.entity.rule.RuleEntrance">
+        SELECT T.rule_id,
+        T.rule_condition,
+        T.status_cd,
+        T.create_dt
+        FROM rule_entrance T
+        WHERE T.STATUS_CD = '0' ORDER BY T.rule_id
+    </select>
+    <!-- 查询表 rule -->
+    <select id="queryRule" resultType="com.java110.entity.rule.Rule">
+        SELECT T.rule_id, T.rule_code, T.rule_name, T.rule_desc,T.rule_level,T.rule_type,T.rule_url,T.status_cd,T.create_dt
+        FROM rule T
+        WHERE T.status_cd = '0'
+
+    </select>
+    <!--查询表 rule_cond_cfg-->
+    <select id="queryRuleCondCfg" resultType="com.java110.entity.rule.RuleCondCfg">
+        SELECT
+        T.rule_id,
+        T.rule_node,
+        T.data_from_flag,
+        T.db_sql,
+        T.default_value,
+        T.node_existed,
+        T.proc_param_flag,
+        T.is_reverse,
+        T.is_log,
+        T.error_code,
+        T.error_msg,
+        T.remark,
+        T.seq,
+        T.data_stack_flag_prefix,
+        T.jpath,
+        T.status_cd,
+        T.create_dt
+        FROM rule_cond_cfg T
+        WHERE T.rule_id = #{ruleId}
+        AND status_cd = '0'
+        ORDER BY seq
+    </select>
+
+    <!--规则组-->
+    <select id="querySaopRuleGroupMap" resultType="java.util.HashMap">
+        SELECT T.groupId, T.groupName, T.order_seq, T.key_identify_logic_str
+        FROM rule_group T
+        WHERE T.status_cd = '0'
+        ORDER BY T.order_seq
+    </select>
+
+    <!--规则组与规则关系-->
+    <select id="querySaopRuleGroupRelaMap"  resultType="java.util.HashMap">
+        SELECT T.groupId, T.rule_id
+        FROM group_rule_relation T
+        WHERE T.status_cd = '0'
+    </select>
+ </mapper>

+ 46 - 0
java110-config/target/classes/mapper/service/QueryServiceDAOImplMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="queryServiceDAOImpl">
+
+    <resultMap type="com.java110.entity.service.ServiceSql" id="serviceSqlMap">
+        <result column="service_code" jdbcType="VARCHAR" property="serviceCode"/>
+        <result column="name" jdbcType="VARCHAR" property="name"/>
+        <result column="params" jdbcType="VARCHAR" property="params"/>
+        <result column="query_model" jdbcType="VARCHAR" property="queryModel"/>
+        <result column="sql" jdbcType="CLOB" property="sql"/>
+        <result column="proc" jdbcType="VARCHAR" property="proc"/>
+        <result column="template" jdbcType="CLOB" property="template"/>
+        <result column="status_cd" jdbcType="VARCHAR" property="statusCd"/>
+        <result column="remark" jdbcType="VARCHAR" property="remark"/>
+    </resultMap>
+
+    <parameterMap type="java.util.Map" id="qryProcParam">
+        <parameter property="resMsg" javaType="java.lang.String" jdbcType="CLOB" mode="OUT" />
+    </parameterMap>
+
+    <!--执行查询sql -->
+    <select id="executeSql" parameterType="String" resultType="Map">
+        ${value}
+    </select>
+    <!--执行 update sql-->
+    <update id="updateSql" parameterMap="String">
+        ${value}
+    </update>
+
+    <select id="executeProc" parameterMap="qryProcParam">
+        {call ${procNameInfo}?)}
+    </select>
+
+    <update id="updateProc" parameterMap="qryProcParam">
+        {call ${procNameInfo}?)}
+    </update>
+
+    <select id="qureyServiceSqlAll" resultMap="serviceSqlMap">
+        SELECT css.service_code,css.name,css.params,css.query_model,css.sql,
+        css.proc,css.template,css.remark,css.status_cd
+        FROM c_service_sql css WHERE css.status_cd = '0'
+    </select>
+
+</mapper>

+ 151 - 0
java110-config/target/classes/mapper/user/UserServiceDaoImplMapper.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userServiceDAOImpl">
+
+    <resultMap type="com.java110.entity.user.Cust" id="custMap">
+        <id column="custId" jdbcType="VARCHAR" property="custId"/>
+        <result column="name" jdbcType="VARCHAR" property="name"/>
+        <result column="email" jdbcType="VARCHAR" property="email"/>
+        <result column="cellphone" jdbcType="VARCHAR" property="cellphone"/>
+        <result column="realName" jdbcType="VARCHAR" property="realName"/>
+        <result column="sex" jdbcType="VARCHAR" property="sex"/>
+        <result column="password" jdbcType="VARCHAR" property="password"/>
+        <result column="lanId" jdbcType="VARCHAR" property="lanId"/>
+        <result column="custAdress" jdbcType="VARCHAR" property="custAdress"/>
+        <result column="custType" jdbcType="VARCHAR" property="custType"/>
+        <result column="openId" jdbcType="VARCHAR" property="openId"/>
+        <!-- 一对多关系 -->
+        <!-- <collection property="stus" resultMap="Student.StudentResult"></collection>  -->
+        <collection property="custAttrs" javaType="com.java110.entity.user.CustAttr">
+            <id property="custId" column="custId"/>
+            <result property="attrCd" column="attrCd"/>
+            <result property="value" column="value"/>
+        </collection>
+    </resultMap>
+
+    <!--根据用户Id查询用户角色
+    <select id="findRolesByUserId" resultType="SysRole">
+        SELECT
+        r.*
+        FROM
+        t_role r,
+        t_user_role ur
+        WHERE ur.uid = #{userId}
+        AND ur.roleId = r.roleId
+        AND ur.status_cd = '1'
+    </select>
+-->
+    <!--保存数据至过程表 bo_cust 中 -->
+    <insert id="saveDataToBoCust" parameterType="com.java110.entity.user.BoCust">
+        <![CDATA[
+            insert into bo_cust(boId,custId,name,email,cellphone,realName,sex,password,lanId,custAdress,custType,openId,state)
+            values(#{boId},#{custId},#{name},#{email},#{cellphone},#{realName},#{sex},#{password},#{lanId},#{custAdress},#{custType},#{openId},#{state})
+        ]]>
+    </insert>
+    <!-- 保存数据至过程表bo_cust_attr 中-->
+    <insert id="saveDataToBoCustAttr" parameterType="com.java110.entity.user.BoCustAttr">
+        <![CDATA[
+            insert into bo_cust_attr(boId,custId,attrCd,value,state)
+            values(#{boId},#{custId},#{attrCd},#{value},#{state})
+        ]]>
+    </insert>
+    <!-- 保存 实例客户信息 cust -->
+    <insert id="saveDataToCust" parameterType="com.java110.entity.user.Cust">
+        <![CDATA[
+            insert into cust(custId,name,email,cellphone,realName,sex,password,lanId,custAdress,custType,openId,status_cd)
+            values(#{custId},#{name},#{email},#{cellphone},#{realName},#{sex},#{password},#{lanId},#{custAdress},#{custType},#{openId},#{status_cd})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 cust -->
+    <insert id="deleteDataToCust" parameterType="com.java110.entity.user.Cust">
+        <![CDATA[
+           delete * from cust c where c.custId = #{custId}
+        ]]>
+    </insert>
+
+    <!-- 保存 实例客户属性信息 cust_attr -->
+    <insert id="saveDataToCustAttr" parameterType="com.java110.entity.user.CustAttr">
+        <![CDATA[
+            insert into cust_attr(custId,attrCd,value,status_cd)
+            values(#{custId},#{attrCd},#{value},#{status_cd})
+        ]]>
+    </insert>
+    <!-- 删除实例客户信息 cust -->
+    <update id="deleteDataToCustAttr" parameterType="com.java110.entity.user.CustAttr">
+           delete * from cust_attr ct where 1=1
+           <if test="custId != null and custId != ''">
+               and ct.custId = #{custId}
+           </if>
+            <if test="attrCd != null and attrCd != ''">
+                and ct.attrCd = #{attrCd}
+            </if>
+    </update>
+    <!--根据客户ID 查询客户信息,其中包括 cust 和custAttr 数据-->
+    <select id="queryDataToCust" parameterType="com.java110.entity.user.Cust" resultMap="custMap">
+
+            select c.custId,c.name,c.email,c.cellphone,c.realName,c.sex,c.password,c.lanId,c.custAdress,c.custType,c.openId,
+            ca.custId,ca.attrCd,ca.value
+             from cust c, cust_attr ca where c.custId= ca.custId
+        <if test="custId != null and custId != ''">
+            and c.custId = #{custId}
+        </if>
+        <if test="versionId != null and versionId != ''">
+            and c.versionId = #{versionId}
+        </if>
+            and c.status_cd = '0'
+
+    </select>
+
+    <!-- 查询客户过程数据 -->
+    <select id="queryBoCust" parameterType="com.java110.entity.user.BoCust" resultType="com.java110.entity.user.BoCust">
+        select bc.boId,bc.custId,bc.name,bc.email,bc.cellphone,bc.realName,bc.sex,bc.password,bc.lanId,bc.custAdress,bc.custType,bc.openId,bc.create_dt
+        from bo_cust bc where 1=1
+        <if test="boId != null and boId != ''">
+            and bc.boId = #{boId}
+        </if>
+        <if test="custId != null and custId != ''">
+            and bc.custId = #{custId}
+        </if>
+        <if test="versionId != null and versionId != ''">
+            and c.versionId = #{versionId}
+        </if>
+        and bc.state in ('ADD','DEL','KIP')
+        <if test="create_dt != null and create_dt != ''">
+            order by bc.create_dt desc
+        </if>
+    </select>
+    <!-- 查询客户属性过程表-->
+    <select id="queryBoCustAttr" parameterType="com.java110.entity.user.BoCustAttr" resultType="com.java110.entity.user.BoCustAttr">
+        select bca.boId,bca.custId,bca.attrCd,bca.value,bca.state,bca.create_dt from bo_cust_attr bca where 1=1
+        <if test="boId !=null and boId != ''">
+            and bca.boId = #{boId}
+        </if>
+        <if test="custId != null and custId != ''">
+            and bca.custId = #{custId}
+        </if>
+        <if test="versionId != null and versionId != ''">
+            and bca.versionId = #{versionId}
+        </if>
+        <if test="create_dt != null and create_dt != ''">
+            order by bca.create_dt desc
+        </if>
+    </select>
+
+    <!-- 查询客户属性信息 -->
+    <select id="queryDataToCustAttr" parameterType="com.java110.entity.user.CustAttr" resultType="com.java110.entity.user.CustAttr">
+        select * from cust_attr ca where 1=1
+        <if test="custId != null and custId != ''">
+            and ca.custId = #{custId}
+        </if>
+        <if test="versionId != null and versionId != ''">
+            and ca.versionId = #{versionId}
+        </if>
+        <if test="attrCd != null and attrCd != ''">
+            and ca.attrCd = #{attrCd}
+        </if>
+        and status_cd = '0'
+    </select>
+
+</mapper>

+ 8 - 0
java110-config/target/classes/mq/mq.properties

@@ -0,0 +1,8 @@
+mq.queue.user=user_queue
+mq.queue.deleteOrderQueue=delete_order_queue
+mq.topic.deleteOrderTopic=delete_order_topic
+
+mq.brokerUrl=tcp://localhost:61616
+mq.username=admin
+mq.password=admin
+mq.maxConnection=50

+ 40 - 0
java110-config/target/classes/spring/application-dev.properties

@@ -0,0 +1,40 @@
+######primary#############
+#datasource.primary.url=jdbc:mysql://123.57.213.140:3306/test1
+#datasource.primary.username=com.java110.wuxw
+#datasource.primary.password=com.java110.wuxw@2016
+#datasource.primary.driverClassName=com.mysql.jdbc.Driver
+######secondary#############
+#datasource.secondary.url=jdbc:mysql://123.57.213.140:3306/test2
+#datasource.secondary.username=com.java110.wuxw
+#datasource.secondary.password=com.java110.wuxw@2016
+#datasource.secondary.driverClassName=com.mysql.jdbc.Driver
+# 主数据源,默认的
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.url=jdbc:mysql://123.57.155.214:3306/crm
+spring.datasource.username=OutTest
+spring.datasource.password=wxwlovewym2977
+#保持连接
+spring.datasource.poolPingQuery=SELECT * FROM crm.t_user a WHERE a.uid = 1
+spring.datasource.poolPingEnabled=true
+spring.datasource.poolPingConnectionsNotUsedFor=3600000
+
+# 更多数据源
+custom.datasource.names=primary,secondary
+custom.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
+custom.datasource.primary.url=jdbc:mysql://123.57.155.214:3306/crm
+custom.datasource.primary.username=OutTest
+custom.datasource.primary.password=wxwlovewym2977
+#保持连接
+spring.datasource.primary.poolPingQuery=SELECT * FROM crm.t_user a WHERE a.uid = 1
+spring.datasource.primary.poolPingEnabled=true
+spring.datasource.primary.poolPingConnectionsNotUsedFor=3600000
+
+custom.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
+custom.datasource.secondary.url=jdbc:mysql://123.57.155.214:3306/crm
+custom.datasource.secondary.username=OutTest
+custom.datasource.secondary.password=wxwlovewym2977
+#保持连接
+spring.datasource.secondary.poolPingQuery=SELECT * FROM crm.t_user a WHERE a.uid = 1
+spring.datasource.secondary.poolPingEnabled=true
+spring.datasource.secondary.poolPingConnectionsNotUsedFor=3600000
+

+ 25 - 0
java110-config/target/classes/spring/application.properties

@@ -0,0 +1,25 @@
+# 数据源配置
+spring.profiles.active=dev
+# mybatis config
+#spring.datasource.schema=import.sql
+#mybatis.datasource=primaryDataSource
+#mybatis.config-location=classpath:/mybatis-config.xml
+# mybatis mapper file path config,auto scan
+mybatis.mapperLocations=classpath:/Mapper/*.xml
+mybatis.type-aliases-package=com.java110.entity
+logging.level.root=WARN
+logging.level.sample.mybatis.mapper=TRACE
+#log level
+#logging.level.org.springframework.web=DEBUG
+spring.thymeleaf.mode=HTML5
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.content-type=text/html
+spring.thymeleaf.cache=false
+spring.thymeleaf.prefix=classpath:/templates/
+#config static source
+spring.mvc.static-path-pattern=/static/**
+spring.resources.static-locations=classpath:/static/
+server.port=8011
+
+
+