Browse Source

开发代码生成器,为快速开发

吴学文 7 years ago
parent
commit
ae55ff741c
27 changed files with 2030 additions and 0 deletions
  1. 7 0
      CommunityService/src/main/java/com/java110/community/dao/IFloorServiceDao.java
  2. 145 0
      SaveFloorListener.java
  3. 78 0
      java110-code-generator/pom.xml
  4. 47 0
      java110-code-generator/src/main/java/com/java110/CodeGeneratorApp.java
  5. 64 0
      java110-code-generator/src/main/java/com/java110/code/BaseGenerator.java
  6. 87 0
      java110-code-generator/src/main/java/com/java110/code/Data.java
  7. 32 0
      java110-code-generator/src/main/java/com/java110/code/GeneratorAbstractBussiness.java
  8. 24 0
      java110-code-generator/src/main/java/com/java110/code/GeneratorIServiceDaoListener.java
  9. 28 0
      java110-code-generator/src/main/java/com/java110/code/GeneratorSaveInfoListener.java
  10. 24 0
      java110-code-generator/src/main/java/com/java110/code/GeneratorServiceDaoImplListener.java
  11. 105 0
      java110-code-generator/src/main/java/com/java110/code/GeneratorServiceDaoImplMapperListener.java
  12. 78 0
      java110-code-generator/src/main/resources/AbstractBusinessServiceDataFlowListener.java
  13. 157 0
      java110-code-generator/src/main/resources/DeleteStoreInfoListener.java
  14. 145 0
      java110-code-generator/src/main/resources/SaveInfoListener.java
  15. 168 0
      java110-code-generator/src/main/resources/UpdateInfoListener.java
  16. 72 0
      java110-code-generator/src/main/resources/dao/IServiceDao.java
  17. 125 0
      java110-code-generator/src/main/resources/dao/ServiceDaoImpl.java
  18. 90 0
      java110-code-generator/src/main/resources/dao/ServiceDaoImplMapper.xml
  19. 0 0
      java110-code-generator/src/main/resources/listener/hello.java
  20. 70 0
      java110-code-generator/src/main/resources/template/AbstractBusinessServiceDataFlowListener.txt
  21. 72 0
      java110-code-generator/src/main/resources/template/IServiceDao.txt
  22. 145 0
      java110-code-generator/src/main/resources/template/SaveListener.txt
  23. 125 0
      java110-code-generator/src/main/resources/template/ServiceDaoImpl.txt
  24. 91 0
      java110-code-generator/src/main/resources/template/ServiceDaoImplMapper.txt
  25. 20 0
      java110-code-generator/src/test/java/com/java110/AppTest.java
  26. 30 0
      java110-config/db/CommunityService/create_room.sql
  27. 1 0
      pom.xml

+ 7 - 0
CommunityService/src/main/java/com/java110/community/dao/IFloorServiceDao.java

@@ -0,0 +1,7 @@
+package com.java110.community.dao;
+
+/**
+ * 小区楼服务类
+ */
+public interface IFloorServiceDao {
+}

+ 145 - 0
SaveFloorListener.java

@@ -0,0 +1,145 @@
+package com.java110.floor.listener;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.common.util.DateUtil;
+import com.java110.common.util.StringUtil;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.entity.center.Business;
+import com.java110.floor.dao.IFloorServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 保存 小区楼信息 侦听
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("saveFloorInfoListener")
+@Transactional
+public class SaveFloorInfoListener extends AbstractFloorBusinessServiceDataFlowListener{
+
+    private final static Logger logger = LoggerFactory.getLogger(SaveFloorInfoListener.class);
+
+    @Autowired
+    IFloorServiceDao floorServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.sdddfff;
+    }
+
+    /**
+     * 保存小区楼信息 business 表中
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessFloor 节点
+        if(data.containsKey("businessFloor")){
+            JSONObject businessFloor = data.getJSONObject("businessFloor");
+            doBusinessFloor(business,businessFloor);
+            dataFlowContext.addParamOut("floorId",businessFloor.getString("floorId"));
+        }
+    }
+
+    /**
+     * business 数据转移到 instance
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doBusinessToInstance(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+
+        Map info = new HashMap();
+        info.put("bId",business.getbId());
+        info.put("operate",StatusConstant.OPERATE_ADD);
+
+        //小区楼信息
+        Map businessFloorInfo = floorServiceDaoImpl.getBusinessFloorInfo(info);
+        if( businessFloorInfo != null && !businessFloorInfo.isEmpty()) {
+            floorServiceDaoImpl.saveFloorInfoInstance(info);
+            dataFlowContext.addParamOut("floorId",businessFloorInfo.get("floor_id"));
+        }
+    }
+
+    /**
+     * 撤单
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doRecover(DataFlowContext dataFlowContext, Business business) {
+        String bId = business.getbId();
+        //Assert.hasLength(bId,"请求报文中没有包含 bId");
+        Map info = new HashMap();
+        info.put("bId",bId);
+        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        Map paramIn = new HashMap();
+        paramIn.put("bId",bId);
+        paramIn.put("statusCd",StatusConstant.STATUS_CD_INVALID);
+        //小区楼信息
+        Map floorInfo = floorServiceDaoImpl.getFloorInfo(info);
+        if(floorInfo != null && !floorInfo.isEmpty()){
+            paramIn.put("floorId",floorInfo.get("floor_id").toString());
+            floorServiceDaoImpl.updateFloorInfoInstance(paramIn);
+            dataFlowContext.addParamOut("floorId",floorInfo.get("floor_id"));
+        }
+    }
+
+
+
+    /**
+     * 处理 businessFloor 节点
+     * @param business 总的数据节点
+     * @param businessFloor 小区楼节点
+     */
+    private void doBusinessFloor(Business business,JSONObject businessFloor){
+
+        Assert.jsonObjectHaveKey(businessFloor,"floorId","businessFloor 节点下没有包含 floorId 节点");
+
+        if(businessFloor.getString("floorId").startsWith("-")){
+            //刷新缓存
+            flushFloorId(business.getDatas());
+        }
+
+        businessFloor.put("bId",business.getbId());
+        businessFloor.put("operate", StatusConstant.OPERATE_ADD);
+        //保存小区楼信息
+        floorServiceDaoImpl.saveBusinessFloorInfo(businessFloor);
+
+    }
+
+    public IFloorServiceDao getFloorServiceDaoImpl() {
+        return floorServiceDaoImpl;
+    }
+
+    public void setFloorServiceDaoImpl(IFloorServiceDao floorServiceDaoImpl) {
+        this.floorServiceDaoImpl = floorServiceDaoImpl;
+    }
+}

+ 78 - 0
java110-code-generator/pom.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>MicroCommunity</artifactId>
+        <groupId>com.java110</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>java110-code-generator</artifactId>
+
+    <name>java110-code-generator</name>
+    <!-- FIXME change it to the project's website -->
+    <url>http://www.example.com</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.7</maven.compiler.source>
+        <maven.compiler.target>1.7</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+            <plugins>
+                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+                <plugin>
+                    <artifactId>maven-clean-plugin</artifactId>
+                    <version>3.1.0</version>
+                </plugin>
+                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+                <plugin>
+                    <artifactId>maven-resources-plugin</artifactId>
+                    <version>3.0.2</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>3.8.0</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>2.22.1</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>3.0.2</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-install-plugin</artifactId>
+                    <version>2.5.2</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-deploy-plugin</artifactId>
+                    <version>2.8.2</version>
+                </plugin>
+                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+                <plugin>
+                    <artifactId>maven-site-plugin</artifactId>
+                    <version>3.7.1</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-project-info-reports-plugin</artifactId>
+                    <version>3.0.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>

+ 47 - 0
java110-code-generator/src/main/java/com/java110/CodeGeneratorApp.java

@@ -0,0 +1,47 @@
+package com.java110;
+
+import com.java110.code.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Hello world!
+ *
+ */
+public class CodeGeneratorApp
+{
+    public static void main( String[] args )
+    {
+        Data data = new Data();
+        data.setName("floor");
+        data.setDesc("小区楼");
+        data.setBusinessTypeCd("sdddfff");
+        data.setBusinessTableName("business_floor");
+        data.setTableName("f_floor");
+        Map<String,String> param = new HashMap<String,String>();
+        param.put("floorId","floor_id");
+        param.put("bId","b_id");
+        param.put("floorNum","floor_num");
+        param.put("userId","user_id");
+        param.put("statusCd","status_cd");
+        param.put("userId","user_id");
+        param.put("remark","remark");
+        param.put("operate","operate");
+        data.setParams(param);
+        GeneratorSaveInfoListener  generatorSaveInfoListener = new GeneratorSaveInfoListener();
+        generatorSaveInfoListener.generator(data);
+
+        GeneratorAbstractBussiness generatorAbstractBussiness = new GeneratorAbstractBussiness();
+        generatorAbstractBussiness.generator(data);
+
+        GeneratorIServiceDaoListener generatorIServiceDaoListener = new GeneratorIServiceDaoListener();
+        generatorIServiceDaoListener.generator(data);
+
+        GeneratorServiceDaoImplListener generatorServiceDaoImplListener = new GeneratorServiceDaoImplListener();
+        generatorServiceDaoImplListener.generator(data);
+
+        GeneratorServiceDaoImplMapperListener generatorServiceDaoImplMapperListener = new GeneratorServiceDaoImplMapperListener();
+        generatorServiceDaoImplMapperListener.generator(data);
+    }
+}

+ 64 - 0
java110-code-generator/src/main/java/com/java110/code/BaseGenerator.java

@@ -0,0 +1,64 @@
+package com.java110.code;
+
+import java.io.*;
+
+public class BaseGenerator {
+
+
+    //首字母转小写
+    public static String toLowerCaseFirstOne(String s){
+        if(Character.isLowerCase(s.charAt(0)))
+            return s;
+        else
+            return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
+    }
+
+
+    //首字母转大写
+    public static String toUpperCaseFirstOne(String s){
+        if(Character.isUpperCase(s.charAt(0)))
+            return s;
+        else
+            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
+    }
+
+
+    /**
+     * 读入TXT文件
+     */
+    public static StringBuffer readFile(String pathname) {
+        StringBuffer sb = new StringBuffer();
+        try (FileReader reader = new FileReader(pathname);
+             BufferedReader br = new BufferedReader(reader) // 建立一个对象,它把文件内容转成计算机能读懂的语言
+        ) {
+            String line ="";
+            //网友推荐更加简洁的写法
+            while ((line = br.readLine()) != null) {
+                // 一次读入一行数据
+                sb.append(line+"\n");
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return sb;
+    }
+
+    /**
+     * 写入TXT文件
+     */
+    public static void writeFile(String filePath,String fileName) {
+        try {
+            File writeName = new File(filePath); // 相对路径,如果没有则要建立一个新的output.txt文件
+            writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
+            try (FileWriter writer = new FileWriter(writeName);
+                 BufferedWriter out = new BufferedWriter(writer)
+            ) {
+                out.write(fileName);
+                out.flush(); // 把缓存区内容压入文件
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 87 - 0
java110-code-generator/src/main/java/com/java110/code/Data.java

@@ -0,0 +1,87 @@
+package com.java110.code;
+
+import java.util.List;
+import java.util.Map;
+
+public class Data {
+
+    private String packagePath;
+
+    private String id;
+
+    private String name;
+
+    private String desc;
+
+    private String businessTypeCd;
+
+    private String businessTableName;
+
+    private String tableName;
+
+    private Map params;
+
+    public String getPackagePath() {
+        return packagePath;
+    }
+
+    public void setPackagePath(String packagePath) {
+        this.packagePath = packagePath;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Map getParams() {
+        return params;
+    }
+
+    public void setParams(Map params) {
+        this.params = params;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    public String getBusinessTypeCd() {
+        return businessTypeCd;
+    }
+
+    public void setBusinessTypeCd(String businessTypeCd) {
+        this.businessTypeCd = businessTypeCd;
+    }
+
+    public String getBusinessTableName() {
+        return businessTableName;
+    }
+
+    public void setBusinessTableName(String businessTableName) {
+        this.businessTableName = businessTableName;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+}

+ 32 - 0
java110-code-generator/src/main/java/com/java110/code/GeneratorAbstractBussiness.java

@@ -0,0 +1,32 @@
+package com.java110.code;
+
+import java.util.Map;
+
+public class GeneratorAbstractBussiness extends BaseGenerator {
+
+    /**
+     * 生成代码
+     * @param data
+     */
+    public void generator(Data data){
+        StringBuffer sb = readFile(this.getClass().getResource("/template/AbstractBusinessServiceDataFlowListener.txt").getFile());
+        String fileContext = sb.toString();
+        fileContext = fileContext.replace("store",toLowerCaseFirstOne(data.getName()))
+                .replace("Store",toUpperCaseFirstOne(data.getName()))
+                .replace("商户",data.getDesc())
+                ;
+        Map<String,String> param = data.getParams();
+        String mappingContext="";
+        for(String key : param.keySet()){
+            if("statusCd".equals(key)){
+                continue;
+            }
+            mappingContext += "business"+toUpperCaseFirstOne(data.getName())+"Info.put(\""+key+"\",business"+toUpperCaseFirstOne(data.getName())+"Info.get(\""+param.get(key)+"\"));\n";
+        }
+        fileContext = fileContext.replace("$flushBusinessInfo$",mappingContext);
+        System.out.println(this.getClass().getResource("/listener").getPath());
+        String writePath = this.getClass().getResource("/listener").getPath()+"/Abstract"+toUpperCaseFirstOne(data.getName())+"BusinessServiceDataFlowListener.java";
+        writeFile(writePath,
+                fileContext);
+    }
+}

+ 24 - 0
java110-code-generator/src/main/java/com/java110/code/GeneratorIServiceDaoListener.java

@@ -0,0 +1,24 @@
+package com.java110.code;
+
+public class GeneratorIServiceDaoListener extends BaseGenerator {
+
+
+
+
+
+    /**
+     * 生成代码
+     * @param data
+     */
+    public void generator(Data data){
+        StringBuffer sb = readFile(this.getClass().getResource("/template/IServiceDao.txt").getFile());
+        String fileContext = sb.toString();
+        fileContext = fileContext.replace("store",toLowerCaseFirstOne(data.getName()))
+                .replace("Store",toUpperCaseFirstOne(data.getName()))
+                .replace("商户",data.getDesc());
+        System.out.println(this.getClass().getResource("/listener").getPath());
+        String writePath = this.getClass().getResource("/listener").getPath()+"/I"+toUpperCaseFirstOne(data.getName())+"ServiceDao.java";
+        writeFile(writePath,
+                fileContext);
+    }
+}

+ 28 - 0
java110-code-generator/src/main/java/com/java110/code/GeneratorSaveInfoListener.java

@@ -0,0 +1,28 @@
+package com.java110.code;
+
+import java.io.*;
+import java.util.Date;
+
+public class GeneratorSaveInfoListener extends BaseGenerator {
+
+
+
+
+
+    /**
+     * 生成代码
+     * @param data
+     */
+    public void generator(Data data){
+        StringBuffer sb = readFile(this.getClass().getResource("/template/SaveListener.txt").getFile());
+        String fileContext = sb.toString();
+        fileContext = fileContext.replace("store",toLowerCaseFirstOne(data.getName()))
+                .replace("Store",toUpperCaseFirstOne(data.getName()))
+                .replace("商户",data.getDesc())
+                .replace("BUSINESS_TYPE_SAVE_STORE_INFO",data.getBusinessTypeCd());
+        System.out.println(this.getClass().getResource("/listener").getPath());
+        String writePath = this.getClass().getResource("/listener").getPath()+"/Save"+toUpperCaseFirstOne(data.getName())+"Listener.java";
+        writeFile(writePath,
+                fileContext);
+    }
+}

+ 24 - 0
java110-code-generator/src/main/java/com/java110/code/GeneratorServiceDaoImplListener.java

@@ -0,0 +1,24 @@
+package com.java110.code;
+
+public class GeneratorServiceDaoImplListener extends BaseGenerator {
+
+
+
+
+
+    /**
+     * 生成代码
+     * @param data
+     */
+    public void generator(Data data){
+        StringBuffer sb = readFile(this.getClass().getResource("/template/ServiceDaoImpl.txt").getFile());
+        String fileContext = sb.toString();
+        fileContext = fileContext.replace("store",toLowerCaseFirstOne(data.getName()))
+                .replace("Store",toUpperCaseFirstOne(data.getName()))
+                .replace("商户",data.getDesc());
+        System.out.println(this.getClass().getResource("/listener").getPath());
+        String writePath = this.getClass().getResource("/listener").getPath()+"/"+toUpperCaseFirstOne(data.getName())+"ServiceDaoImpl.java";
+        writeFile(writePath,
+                fileContext);
+    }
+}

+ 105 - 0
java110-code-generator/src/main/java/com/java110/code/GeneratorServiceDaoImplMapperListener.java

@@ -0,0 +1,105 @@
+package com.java110.code;
+
+import java.util.Map;
+
+public class GeneratorServiceDaoImplMapperListener extends BaseGenerator {
+
+
+    /**
+     *
+     * @param data
+     * @param fileContext
+     * @return
+     */
+    //insert into business_store(store_id,b_id,user_id,name,address,tel,store_type_cd,nearby_landmarks,map_x,map_y,month,operate)
+    //        values(#{storeId},#{bId},#{userId},#{name},#{address},#{tel},#{storeTypeCd},#{nearbyLandmarks},#{mapX},#{mapY},#{month},#{operate})
+
+    private String dealSaveBusinessInfo(Data data,String fileContext){
+        String sql = "insert info "+ data.getBusinessTableName() + "(\n";
+        String sqlValue = "\n) values (\n";
+
+        Map<String,String> params = data.getParams();
+
+        for(String key:params.keySet()){
+            if("statusCd".equals(key)){
+                continue;
+            }
+            sql += params.get(key)+",";
+            sqlValue += "#{"+key+"},";
+        }
+
+        sql = sql.endsWith(",")?sql.substring(0,sql.length()-1):sql;
+        sqlValue = sqlValue.endsWith(",")?sqlValue.substring(0,sqlValue.length()-1):sqlValue;
+
+        sql += (sqlValue +"\n)");
+
+        fileContext = fileContext.replace("$saveBusinessInfo$",sql);
+
+        return fileContext;
+
+    }
+
+    /**
+     * select s.store_id,s.b_id,s.user_id,s.name,s.address,s.tel,s.store_type_cd,s.nearby_landmarks,s.map_x,s.map_y,s.operate
+     *         from business_store s where 1 = 1
+     *         <if test="operate != null and operate != ''">
+     *             and s.operate = #{operate}
+     *         </if>
+     *         <if test="bId != null and bId !=''">
+     *             and s.b_id = #{bId}
+     *         </if>
+     *         <if test="storeId != null and storeId != ''">
+     *             and s.store_id = #{storeId}
+     *         </if>
+     * @param data
+     * @param fileContext
+     * @return
+     */
+    private String dealGetBusinessInfo(Data data,String fileContext){
+        String sql = "select  ";
+        String sqlValue = " \nfrom "+data.getBusinessTableName()+" t \nwhere 1 =1 \n";
+
+        Map<String,String> params = data.getParams();
+
+        for(String key:params.keySet()){
+            if("statusCd".equals(key)){
+                continue;
+            }
+            sql += ("t."+params.get(key)+",");
+            sqlValue += "<if test=\""+key+" !=null and "+key+" != ''\">\n";
+            sqlValue += "   and t."+params.get(key)+"= #{"+key +"}\n";
+            sqlValue += "</if> \n";
+
+        }
+
+        sql = sql.endsWith(",")?sql.substring(0,sql.length()-1):sql;
+
+        sql += sqlValue;
+
+        fileContext = fileContext.replace("$getBusinessInfo$",sql);
+
+        return fileContext;
+
+    }
+
+
+
+    /**
+     * 生成代码
+     * @param data
+     */
+    public void generator(Data data){
+        StringBuffer sb = readFile(this.getClass().getResource("/template/ServiceDaoImplMapper.txt").getFile());
+        String fileContext = sb.toString();
+        fileContext = fileContext.replace("store",toLowerCaseFirstOne(data.getName()))
+                .replace("Store",toUpperCaseFirstOne(data.getName()))
+                .replace("商户",data.getDesc());
+        fileContext = dealSaveBusinessInfo(data,fileContext);
+        fileContext = dealGetBusinessInfo(data,fileContext);
+
+        System.out.println(this.getClass().getResource("/listener").getPath());
+        String writePath = this.getClass().getResource("/listener").getPath()+"/"+toUpperCaseFirstOne(data.getName())+"ServiceDaoImplMapper.xml";
+        writeFile(writePath,
+                fileContext);
+    }
+}

+ 78 - 0
java110-code-generator/src/main/resources/AbstractBusinessServiceDataFlowListener.java

@@ -0,0 +1,78 @@
+package com.java110.store.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.entity.center.Business;
+import com.java110.event.service.AbstractBusinessServiceDataFlowListener;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * 商户 服务侦听 父类
+ * Created by wuxw on 2018/7/4.
+ */
+public abstract class AbstractStoreBusinessServiceDataFlowListener extends AbstractBusinessServiceDataFlowListener{
+    private final static Logger logger = LoggerFactory.getLogger(AbstractStoreBusinessServiceDataFlowListener.class);
+
+
+    /**
+     * 获取 DAO工具类
+     * @return
+     */
+    public abstract IStoreServiceDao getStoreServiceDaoImpl();
+
+    /**
+     * 刷新 businessStoreInfo 数据
+     * 主要将 数据库 中字段和 接口传递字段建立关系
+     * @param businessStoreInfo
+     */
+    protected void flushBusinessStoreInfo(Map businessStoreInfo,String statusCd){
+        businessStoreInfo.put("newBId",businessStoreInfo.get("b_id"));
+        businessStoreInfo.put("storeId",businessStoreInfo.get("store_id"));
+        businessStoreInfo.put("userId",businessStoreInfo.get("user_id"));
+        businessStoreInfo.put("storeTypeCd",businessStoreInfo.get("store_type_cd"));
+        businessStoreInfo.put("nearbyLandmarks",businessStoreInfo.get("nearby_landmarks"));
+        businessStoreInfo.put("mapX",businessStoreInfo.get("map_x"));
+        businessStoreInfo.put("mapY",businessStoreInfo.get("map_y"));
+        businessStoreInfo.put("statusCd", statusCd);
+    }
+
+
+    /**
+     * 当修改数据时,查询instance表中的数据 自动保存删除数据到business中
+     * @param businessStore 商户信息
+     */
+    protected void autoSaveDelBusinessStore(Business business, JSONObject businessStore){
+//自动插入DEL
+        Map info = new HashMap();
+        info.put("storeId",businessStore.getString("storeId"));
+        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        Map currentStoreInfo = getStoreServiceDaoImpl().getStoreInfo(info);
+        if(currentStoreInfo == null || currentStoreInfo.isEmpty()){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"未找到需要修改数据信息,入参错误或数据有问题,请检查"+info);
+        }
+        currentStoreInfo.put("bId",business.getbId());
+        currentStoreInfo.put("storeId",currentStoreInfo.get("store_id"));
+        currentStoreInfo.put("userId",currentStoreInfo.get("user_id"));
+        currentStoreInfo.put("storeTypeCd",currentStoreInfo.get("store_type_cd"));
+        currentStoreInfo.put("nearbyLandmarks",currentStoreInfo.get("nearby_landmarks"));
+        currentStoreInfo.put("mapX",currentStoreInfo.get("map_x"));
+        currentStoreInfo.put("mapY",currentStoreInfo.get("map_y"));
+        currentStoreInfo.put("operate",StatusConstant.OPERATE_DEL);
+        getStoreServiceDaoImpl().saveBusinessStoreInfo(currentStoreInfo);
+    }
+
+
+
+
+
+}

+ 157 - 0
java110-code-generator/src/main/resources/DeleteStoreInfoListener.java

@@ -0,0 +1,157 @@
+package com.java110.store.listener;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.Business;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 删除商户信息 侦听
+ *
+ * 处理节点
+ * 1、businessStore:{} 商户基本信息节点
+ * 2、businessStoreAttr:[{}] 商户属性信息节点
+ * 3、businessStorePhoto:[{}] 商户照片信息节点
+ * 4、businessStoreCerdentials:[{}] 商户证件信息节点
+ * 协议地址 :https://github.com/java110/MicroCommunity/wiki/%E5%88%A0%E9%99%A4%E5%95%86%E6%88%B7%E4%BF%A1%E6%81%AF-%E5%8D%8F%E8%AE%AE
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("deleteStoreInfoListener")
+@Transactional
+public class DeleteStoreInfoListener extends AbstractStoreBusinessServiceDataFlowListener {
+
+    private final static Logger logger = LoggerFactory.getLogger(DeleteStoreInfoListener.class);
+    @Autowired
+    IStoreServiceDao storeServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 3;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_DELETE_STORE_INFO;
+    }
+
+    /**
+     * 根据删除信息 查出Instance表中数据 保存至business表 (状态写DEL) 方便撤单时直接更新回去
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStore 节点 按理这里不应该处理,程序上支持,以防真有这种业务
+        if(data.containsKey("businessStore")){
+            JSONObject businessStore = data.getJSONObject("businessStore");
+            doBusinessStore(business,businessStore);
+            dataFlowContext.addParamOut("storeId",businessStore.getString("storeId"));
+        }
+
+
+    }
+
+    /**
+     * 删除 instance数据
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doBusinessToInstance(DataFlowContext dataFlowContext, Business business) {
+        String bId = business.getbId();
+        //Assert.hasLength(bId,"请求报文中没有包含 bId");
+
+        //商户信息
+        Map info = new HashMap();
+        info.put("bId",business.getbId());
+        info.put("operate",StatusConstant.OPERATE_DEL);
+
+        //商户信息
+        Map businessStoreInfo = storeServiceDaoImpl.getBusinessStoreInfo(info);
+        if( businessStoreInfo != null && !businessStoreInfo.isEmpty()) {
+            flushBusinessStoreInfo(businessStoreInfo,StatusConstant.STATUS_CD_INVALID);
+            storeServiceDaoImpl.updateStoreInfoInstance(businessStoreInfo);
+            dataFlowContext.addParamOut("storeId",businessStoreInfo.get("store_id"));
+        }
+
+    }
+
+    /**
+     * 撤单
+     * 从business表中查询到DEL的数据 将instance中的数据更新回来
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doRecover(DataFlowContext dataFlowContext, Business business) {
+        String bId = business.getbId();
+        //Assert.hasLength(bId,"请求报文中没有包含 bId");
+        Map info = new HashMap();
+        info.put("bId",bId);
+        info.put("statusCd",StatusConstant.STATUS_CD_INVALID);
+
+        Map delInfo = new HashMap();
+        delInfo.put("bId",business.getbId());
+        delInfo.put("operate",StatusConstant.OPERATE_DEL);
+        //商户信息
+        Map storeInfo = storeServiceDaoImpl.getStoreInfo(info);
+        if(storeInfo != null && !storeInfo.isEmpty()){
+
+            //商户信息
+            Map businessStoreInfo = storeServiceDaoImpl.getBusinessStoreInfo(delInfo);
+            //除非程序出错了,这里不会为空
+            if(businessStoreInfo == null || businessStoreInfo.isEmpty()){
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_INNER_ERROR,"撤单失败(store),程序内部异常,请检查! "+delInfo);
+            }
+
+            flushBusinessStoreInfo(businessStoreInfo,StatusConstant.STATUS_CD_VALID);
+            storeServiceDaoImpl.updateStoreInfoInstance(businessStoreInfo);
+            dataFlowContext.addParamOut("storeId",storeInfo.get("store_id"));
+        }
+    }
+
+
+
+    /**
+     * 处理 businessStore 节点
+     * @param business 总的数据节点
+     * @param businessStore 商户节点
+     */
+    private void doBusinessStore(Business business,JSONObject businessStore){
+
+        Assert.jsonObjectHaveKey(businessStore,"storeId","businessStore 节点下没有包含 storeId 节点");
+
+        if(businessStore.getString("storeId").startsWith("-")){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"storeId 错误,不能自动生成(必须已经存在的storeId)"+businessStore);
+        }
+        //自动插入DEL
+        autoSaveDelBusinessStore(business,businessStore);
+    }
+
+    public IStoreServiceDao getStoreServiceDaoImpl() {
+        return storeServiceDaoImpl;
+    }
+
+    public void setStoreServiceDaoImpl(IStoreServiceDao storeServiceDaoImpl) {
+        this.storeServiceDaoImpl = storeServiceDaoImpl;
+    }
+}

+ 145 - 0
java110-code-generator/src/main/resources/SaveInfoListener.java

@@ -0,0 +1,145 @@
+package com.java110.store.listener;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.common.util.DateUtil;
+import com.java110.common.util.StringUtil;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.entity.center.Business;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 保存 用户信息 侦听
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("saveStoreInfoListener")
+@Transactional
+public class SaveStoreInfoListener extends AbstractStoreBusinessServiceDataFlowListener{
+
+    private final static Logger logger = LoggerFactory.getLogger(SaveStoreInfoListener.class);
+
+    @Autowired
+    IStoreServiceDao storeServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_SAVE_STORE_INFO;
+    }
+
+    /**
+     * 保存商户信息 business 表中
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStore 节点
+        if(data.containsKey("businessStore")){
+            JSONObject businessStore = data.getJSONObject("businessStore");
+            doBusinessStore(business,businessStore);
+            dataFlowContext.addParamOut("storeId",businessStore.getString("storeId"));
+        }
+    }
+
+    /**
+     * business 数据转移到 instance
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doBusinessToInstance(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+
+        Map info = new HashMap();
+        info.put("bId",business.getbId());
+        info.put("operate",StatusConstant.OPERATE_ADD);
+
+        //商户信息
+        Map businessStoreInfo = storeServiceDaoImpl.getBusinessStoreInfo(info);
+        if( businessStoreInfo != null && !businessStoreInfo.isEmpty()) {
+            storeServiceDaoImpl.saveStoreInfoInstance(info);
+            dataFlowContext.addParamOut("storeId",businessStoreInfo.get("store_id"));
+        }
+    }
+
+    /**
+     * 撤单
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doRecover(DataFlowContext dataFlowContext, Business business) {
+        String bId = business.getbId();
+        //Assert.hasLength(bId,"请求报文中没有包含 bId");
+        Map info = new HashMap();
+        info.put("bId",bId);
+        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        Map paramIn = new HashMap();
+        paramIn.put("bId",bId);
+        paramIn.put("statusCd",StatusConstant.STATUS_CD_INVALID);
+        //商户信息
+        Map storeInfo = storeServiceDaoImpl.getStoreInfo(info);
+        if(storeInfo != null && !storeInfo.isEmpty()){
+            paramIn.put("storeId",storeInfo.get("store_id").toString());
+            storeServiceDaoImpl.updateStoreInfoInstance(paramIn);
+            dataFlowContext.addParamOut("storeId",storeInfo.get("store_id"));
+        }
+    }
+
+
+
+    /**
+     * 处理 businessStore 节点
+     * @param business 总的数据节点
+     * @param businessStore 商户节点
+     */
+    private void doBusinessStore(Business business,JSONObject businessStore){
+
+        Assert.jsonObjectHaveKey(businessStore,"storeId","businessStore 节点下没有包含 storeId 节点");
+
+        if(businessStore.getString("storeId").startsWith("-")){
+            //刷新缓存
+            flushStoreId(business.getDatas());
+        }
+
+        businessStore.put("bId",business.getbId());
+        businessStore.put("operate", StatusConstant.OPERATE_ADD);
+        //保存商户信息
+        storeServiceDaoImpl.saveBusinessStoreInfo(businessStore);
+
+    }
+
+    public IStoreServiceDao getStoreServiceDaoImpl() {
+        return storeServiceDaoImpl;
+    }
+
+    public void setStoreServiceDaoImpl(IStoreServiceDao storeServiceDaoImpl) {
+        this.storeServiceDaoImpl = storeServiceDaoImpl;
+    }
+}

+ 168 - 0
java110-code-generator/src/main/resources/UpdateInfoListener.java

@@ -0,0 +1,168 @@
+package com.java110.store.listener;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.Business;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 修改商户信息 侦听
+ *
+ * 处理节点
+ * 1、businessStore:{} 商户基本信息节点
+ * 2、businessStoreAttr:[{}] 商户属性信息节点
+ * 3、businessStorePhoto:[{}] 商户照片信息节点
+ * 4、businessStoreCerdentials:[{}] 商户证件信息节点
+ * 协议地址 :https://github.com/java110/MicroCommunity/wiki/%E4%BF%AE%E6%94%B9%E5%95%86%E6%88%B7%E4%BF%A1%E6%81%AF-%E5%8D%8F%E8%AE%AE
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("updateStoreInfoListener")
+@Transactional
+public class UpdateStoreInfoListener extends AbstractStoreBusinessServiceDataFlowListener {
+
+    private final static Logger logger = LoggerFactory.getLogger(UpdateStoreInfoListener.class);
+    @Autowired
+    IStoreServiceDao storeServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 2;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_UPDATE_STORE_INFO;
+    }
+
+    /**
+     * business过程
+     * @param dataFlowContext
+     * @param business
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+
+        JSONObject data = business.getDatas();
+
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStore 节点
+        if(data.containsKey("businessStore")){
+            JSONObject businessStore = data.getJSONObject("businessStore");
+            doBusinessStore(business,businessStore);
+            dataFlowContext.addParamOut("storeId",businessStore.getString("storeId"));
+        }
+    }
+
+
+    /**
+     * business to instance 过程
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doBusinessToInstance(DataFlowContext dataFlowContext, Business business) {
+
+        JSONObject data = business.getDatas();
+
+        Map info = new HashMap();
+        info.put("bId",business.getbId());
+        info.put("operate",StatusConstant.OPERATE_ADD);
+
+        //商户信息
+        Map businessStoreInfo = storeServiceDaoImpl.getBusinessStoreInfo(info);
+        if( businessStoreInfo != null && !businessStoreInfo.isEmpty()) {
+            flushBusinessStoreInfo(businessStoreInfo,StatusConstant.STATUS_CD_VALID);
+            storeServiceDaoImpl.updateStoreInfoInstance(businessStoreInfo);
+            dataFlowContext.addParamOut("storeId",businessStoreInfo.get("store_id"));
+        }
+
+    }
+
+    /**
+     * 撤单
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doRecover(DataFlowContext dataFlowContext, Business business) {
+
+        String bId = business.getbId();
+        //Assert.hasLength(bId,"请求报文中没有包含 bId");
+        Map info = new HashMap();
+        info.put("bId",bId);
+        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        Map delInfo = new HashMap();
+        delInfo.put("bId",business.getbId());
+        delInfo.put("operate",StatusConstant.OPERATE_DEL);
+        //商户信息
+        Map storeInfo = storeServiceDaoImpl.getStoreInfo(info);
+        if(storeInfo != null && !storeInfo.isEmpty()){
+
+            //商户信息
+            Map businessStoreInfo = storeServiceDaoImpl.getBusinessStoreInfo(delInfo);
+            //除非程序出错了,这里不会为空
+            if(businessStoreInfo == null || businessStoreInfo.isEmpty()){
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_INNER_ERROR,"撤单失败(store),程序内部异常,请检查! "+delInfo);
+            }
+
+            flushBusinessStoreInfo(businessStoreInfo,StatusConstant.STATUS_CD_VALID);
+            storeServiceDaoImpl.updateStoreInfoInstance(businessStoreInfo);
+            dataFlowContext.addParamOut("storeId",storeInfo.get("store_id"));
+        }
+
+    }
+
+
+
+    /**
+     * 处理 businessStore 节点
+     * @param business 总的数据节点
+     * @param businessStore 商户节点
+     */
+    private void doBusinessStore(Business business,JSONObject businessStore){
+
+        Assert.jsonObjectHaveKey(businessStore,"storeId","businessStore 节点下没有包含 storeId 节点");
+
+        if(businessStore.getString("storeId").startsWith("-")){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"storeId 错误,不能自动生成(必须已经存在的storeId)"+businessStore);
+        }
+        //自动保存DEL
+        autoSaveDelBusinessStore(business,businessStore);
+
+        businessStore.put("bId",business.getbId());
+        businessStore.put("operate", StatusConstant.OPERATE_ADD);
+        //保存商户信息
+        storeServiceDaoImpl.saveBusinessStoreInfo(businessStore);
+
+    }
+
+
+
+
+    public IStoreServiceDao getStoreServiceDaoImpl() {
+        return storeServiceDaoImpl;
+    }
+
+    public void setStoreServiceDaoImpl(IStoreServiceDao storeServiceDaoImpl) {
+        this.storeServiceDaoImpl = storeServiceDaoImpl;
+    }
+
+
+
+}

+ 72 - 0
java110-code-generator/src/main/resources/dao/IServiceDao.java

@@ -0,0 +1,72 @@
+package com.java110.store.dao;
+
+
+import com.java110.common.exception.DAOException;
+import com.java110.entity.merchant.BoMerchant;
+import com.java110.entity.merchant.BoMerchantAttr;
+import com.java110.entity.merchant.Merchant;
+import com.java110.entity.merchant.MerchantAttr;
+
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 商户组件内部之间使用,没有给外围系统提供服务能力
+ * 商户服务接口类,要求全部以字符串传输,方便微服务化
+ * 新建客户,修改客户,删除客户,查询客户等功能
+ *
+ * Created by wuxw on 2016/12/27.
+ */
+public interface IStoreServiceDao {
+
+    /**
+     * 保存 商户信息
+     * @param businessStoreInfo 商户信息 封装
+     * @throws DAOException 操作数据库异常
+     */
+    public void saveBusinessStoreInfo(Map businessStoreInfo) throws DAOException;
+
+
+
+    /**
+     * 查询商户信息(business过程)
+     * 根据bId 查询商户信息
+     * @param info bId 信息
+     * @return 商户信息
+     * @throws DAOException
+     */
+    public Map getBusinessStoreInfo(Map info) throws DAOException;
+
+
+
+
+    /**
+     * 保存 商户信息 Business数据到 Instance中
+     * @param info
+     * @throws DAOException
+     */
+    public void saveStoreInfoInstance(Map info) throws DAOException;
+
+
+
+
+    /**
+     * 查询商户信息(instance过程)
+     * 根据bId 查询商户信息
+     * @param info bId 信息
+     * @return 商户信息
+     * @throws DAOException
+     */
+    public Map getStoreInfo(Map info) throws DAOException;
+
+
+
+    /**
+     * 修改商户信息
+     * @param info 修改信息
+     * @throws DAOException
+     */
+    public void updateStoreInfoInstance(Map info) throws DAOException;
+
+}

+ 125 - 0
java110-code-generator/src/main/resources/dao/ServiceDaoImpl.java

@@ -0,0 +1,125 @@
+package com.java110.store.dao.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.exception.DAOException;
+import com.java110.common.util.DateUtil;
+import com.java110.core.base.dao.BaseServiceDao;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 商户服务 与数据库交互
+ * Created by wuxw on 2017/4/5.
+ */
+@Service("storeServiceDaoImpl")
+//@Transactional
+public class StoreServiceDaoImpl extends BaseServiceDao implements IStoreServiceDao {
+
+    private final static Logger logger = LoggerFactory.getLogger(StoreServiceDaoImpl.class);
+
+    /**
+     * 商户信息封装
+     * @param businessStoreInfo 商户信息 封装
+     * @throws DAOException
+     */
+    @Override
+    public void saveBusinessStoreInfo(Map businessStoreInfo) throws DAOException {
+        businessStoreInfo.put("month", DateUtil.getCurrentMonth());
+        // 查询business_user 数据是否已经存在
+        logger.debug("保存商户信息 入参 businessStoreInfo : {}",businessStoreInfo);
+        int saveFlag = sqlSessionTemplate.insert("storeServiceDaoImpl.saveBusinessStoreInfo",businessStoreInfo);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存商户数据失败:"+ JSONObject.toJSONString(businessStoreInfo));
+        }
+    }
+
+
+    /**
+     * 查询商户信息
+     * @param info bId 信息
+     * @return 商户信息
+     * @throws DAOException
+     */
+    @Override
+    public Map getBusinessStoreInfo(Map info) throws DAOException {
+
+        logger.debug("查询商户信息 入参 info : {}",info);
+
+        List<Map> businessStoreInfos = sqlSessionTemplate.selectList("storeServiceDaoImpl.getBusinessStoreInfo",info);
+        if(businessStoreInfos == null){
+            return null;
+        }
+        if(businessStoreInfos.size() >1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"根据条件查询有多条数据,数据异常,请检查:businessStoreInfos,"+ JSONObject.toJSONString(info));
+        }
+
+        return businessStoreInfos.get(0);
+    }
+
+
+
+    /**
+     * 保存商户信息 到 instance
+     * @param info   bId 信息
+     * @throws DAOException
+     */
+    @Override
+    public void saveStoreInfoInstance(Map info) throws DAOException {
+        logger.debug("保存商户信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.insert("storeServiceDaoImpl.saveStoreInfoInstance",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存商户信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
+
+    /**
+     * 查询商户信息(instance)
+     * @param info bId 信息
+     * @return
+     * @throws DAOException
+     */
+    @Override
+    public Map getStoreInfo(Map info) throws DAOException {
+        logger.debug("查询商户信息 入参 info : {}",info);
+
+        List<Map> businessStoreInfos = sqlSessionTemplate.selectList("storeServiceDaoImpl.getStoreInfo",info);
+        if(businessStoreInfos == null || businessStoreInfos.size() == 0){
+            return null;
+        }
+        if(businessStoreInfos.size() >1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"根据条件查询有多条数据,数据异常,请检查:getStoreInfo,"+ JSONObject.toJSONString(info));
+        }
+
+        return businessStoreInfos.get(0);
+    }
+
+
+    /**
+     * 修改商户信息
+     * @param info 修改信息
+     * @throws DAOException
+     */
+    @Override
+    public void updateStoreInfoInstance(Map info) throws DAOException {
+        logger.debug("修改商户信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.update("storeServiceDaoImpl.updateStoreInfoInstance",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"修改商户信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
+
+}

+ 90 - 0
java110-code-generator/src/main/resources/dao/ServiceDaoImplMapper.xml

@@ -0,0 +1,90 @@
+<?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="storeServiceDaoImpl">
+    
+    <!-- 保存商户信息 add by wuxw 2018-07-03 -->
+    <insert id="saveBusinessStoreInfo" parameterType="Map">
+        $saveBusinessInfo$
+    </insert>
+
+
+    <!-- 查询商户信息(Business) add by wuxw 2018-07-03 -->
+    <select id="getBusinessStoreInfo" parameterType="Map" resultType="Map">
+        $getBusinessInfo$
+    </select>
+
+
+
+
+    <!-- 保存商户信息至 instance表中 add by wuxw 2018-07-03 -->
+    <insert id="saveStoreInfoInstance" parameterType="Map">
+        insert into s_store(store_id,b_id,user_id,name,address,tel,store_type_cd,nearby_landmarks,map_x,map_y,status_cd)
+        select s.store_id,s.b_id,s.user_id,s.name,s.address,s.tel,s.store_type_cd,s.nearby_landmarks,s.map_x,s.map_y,'0'
+        from business_store s where 
+        s.operate = 'ADD' and s.b_id=#{bId}
+    </insert>
+
+
+
+    <!-- 查询商户信息 add by wuxw 2018-07-03 -->
+    <select id="getStoreInfo" parameterType="Map" resultType="Map">
+        select s.store_id,s.b_id,s.user_id,s.name,s.address,s.tel,s.store_type_cd,s.nearby_landmarks,s.map_x,s.map_y,s.status_cd
+        from s_store s
+        where 1=1
+        <if test="statusCd != null and statusCd != ''">
+            and s.status_cd = #{statusCd}
+        </if>
+
+        <if test="bId != null and bId !=''">
+            and s.b_id = #{bId}
+        </if>
+        <if test="storeId != null and storeId !=''">
+            and s.store_id = #{storeId}
+        </if>
+    </select>
+
+
+
+
+    <!-- 修改商户信息 add by wuxw 2018-07-03 -->
+    <update id="updateStoreInfoInstance" parameterType="Map">
+        update s_store s set s.status_cd = #{statusCd}
+        <if test="newBId != null and newBId != ''">
+            ,s.b_id = #{newBId}
+        </if>
+        <if test="userId != null and userId != ''">
+            ,s.user_id = #{userId}
+        </if>
+        <if test="name != null and name != ''">
+            ,s.name = #{name}
+        </if>
+        <if test="address != null and address != ''">
+            ,s.address = #{address}
+        </if>
+        <if test="tel != null and tel != ''">
+            ,s.tel = #{tel}
+        </if>
+        <if test="storeTypeCd != null and storeTypeCd != ''">
+            ,s.store_type_cd = #{storeTypeCd}
+        </if>
+        <if test="nearbyLandmarks != null and nearbyLandmarks != ''">
+            ,s.nearby_landmarks = #{nearbyLandmarks}
+        </if>
+        <if test="mapX != null and mapX != ''">
+            ,s.map_x = #{mapX}
+        </if>
+        <if test="mapY != null and mapY != ''">
+            ,s.map_y = #{mapY}
+        </if>
+        where 1=1
+        <if test="bId != null and bId !=''">
+            and s.b_id = #{bId}
+        </if>
+        <if test="storeId != null and storeId !=''">
+            and s.store_id = #{storeId}
+        </if>
+    </update>
+
+</mapper>

+ 0 - 0
java110-code-generator/src/main/resources/listener/hello.java


+ 70 - 0
java110-code-generator/src/main/resources/template/AbstractBusinessServiceDataFlowListener.txt

@@ -0,0 +1,70 @@
+package com.java110.store.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.entity.center.Business;
+import com.java110.event.service.AbstractBusinessServiceDataFlowListener;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * 商户 服务侦听 父类
+ * Created by wuxw on 2018/7/4.
+ */
+public abstract class AbstractStoreBusinessServiceDataFlowListener extends AbstractBusinessServiceDataFlowListener{
+    private final static Logger logger = LoggerFactory.getLogger(AbstractStoreBusinessServiceDataFlowListener.class);
+
+
+    /**
+     * 获取 DAO工具类
+     * @return
+     */
+    public abstract IStoreServiceDao getStoreServiceDaoImpl();
+
+    /**
+     * 刷新 businessStoreInfo 数据
+     * 主要将 数据库 中字段和 接口传递字段建立关系
+     * @param businessStoreInfo
+     */
+    protected void flushBusinessStoreInfo(Map businessStoreInfo,String statusCd){
+        businessStoreInfo.put("newBId",businessStoreInfo.get("b_id"));
+        $flushBusinessInfo$
+        businessStoreInfo.put("statusCd", statusCd);
+    }
+
+
+    /**
+     * 当修改数据时,查询instance表中的数据 自动保存删除数据到business中
+     * @param businessStore 商户信息
+     */
+    protected void autoSaveDelBusinessStore(Business business, JSONObject businessStore){
+//自动插入DEL
+        Map info = new HashMap();
+        info.put("storeId",businessStore.getString("storeId"));
+        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        Map currentStoreInfo = getStoreServiceDaoImpl().getStoreInfo(info);
+        if(currentStoreInfo == null || currentStoreInfo.isEmpty()){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"未找到需要修改数据信息,入参错误或数据有问题,请检查"+info);
+        }
+        currentStoreInfo.put("bId",business.getbId());
+
+        $flushBusinessInfo$
+
+        currentStoreInfo.put("operate",StatusConstant.OPERATE_DEL);
+        getStoreServiceDaoImpl().saveBusinessStoreInfo(currentStoreInfo);
+    }
+
+
+
+
+
+}

+ 72 - 0
java110-code-generator/src/main/resources/template/IServiceDao.txt

@@ -0,0 +1,72 @@
+package com.java110.store.dao;
+
+
+import com.java110.common.exception.DAOException;
+import com.java110.entity.merchant.BoMerchant;
+import com.java110.entity.merchant.BoMerchantAttr;
+import com.java110.entity.merchant.Merchant;
+import com.java110.entity.merchant.MerchantAttr;
+
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 商户组件内部之间使用,没有给外围系统提供服务能力
+ * 商户服务接口类,要求全部以字符串传输,方便微服务化
+ * 新建客户,修改客户,删除客户,查询客户等功能
+ *
+ * Created by wuxw on 2016/12/27.
+ */
+public interface IStoreServiceDao {
+
+    /**
+     * 保存 商户信息
+     * @param businessStoreInfo 商户信息 封装
+     * @throws DAOException 操作数据库异常
+     */
+    public void saveBusinessStoreInfo(Map businessStoreInfo) throws DAOException;
+
+
+
+    /**
+     * 查询商户信息(business过程)
+     * 根据bId 查询商户信息
+     * @param info bId 信息
+     * @return 商户信息
+     * @throws DAOException
+     */
+    public Map getBusinessStoreInfo(Map info) throws DAOException;
+
+
+
+
+    /**
+     * 保存 商户信息 Business数据到 Instance中
+     * @param info
+     * @throws DAOException
+     */
+    public void saveStoreInfoInstance(Map info) throws DAOException;
+
+
+
+
+    /**
+     * 查询商户信息(instance过程)
+     * 根据bId 查询商户信息
+     * @param info bId 信息
+     * @return 商户信息
+     * @throws DAOException
+     */
+    public Map getStoreInfo(Map info) throws DAOException;
+
+
+
+    /**
+     * 修改商户信息
+     * @param info 修改信息
+     * @throws DAOException
+     */
+    public void updateStoreInfoInstance(Map info) throws DAOException;
+
+}

+ 145 - 0
java110-code-generator/src/main/resources/template/SaveListener.txt

@@ -0,0 +1,145 @@
+package com.java110.store.listener;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.common.util.DateUtil;
+import com.java110.common.util.StringUtil;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.entity.center.Business;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 保存 商户信息 侦听
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("saveStoreInfoListener")
+@Transactional
+public class SaveStoreInfoListener extends AbstractStoreBusinessServiceDataFlowListener{
+
+    private final static Logger logger = LoggerFactory.getLogger(SaveStoreInfoListener.class);
+
+    @Autowired
+    IStoreServiceDao storeServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_SAVE_STORE_INFO;
+    }
+
+    /**
+     * 保存商户信息 business 表中
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStore 节点
+        if(data.containsKey("businessStore")){
+            JSONObject businessStore = data.getJSONObject("businessStore");
+            doBusinessStore(business,businessStore);
+            dataFlowContext.addParamOut("storeId",businessStore.getString("storeId"));
+        }
+    }
+
+    /**
+     * business 数据转移到 instance
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doBusinessToInstance(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+
+        Map info = new HashMap();
+        info.put("bId",business.getbId());
+        info.put("operate",StatusConstant.OPERATE_ADD);
+
+        //商户信息
+        Map businessStoreInfo = storeServiceDaoImpl.getBusinessStoreInfo(info);
+        if( businessStoreInfo != null && !businessStoreInfo.isEmpty()) {
+            storeServiceDaoImpl.saveStoreInfoInstance(info);
+            dataFlowContext.addParamOut("storeId",businessStoreInfo.get("store_id"));
+        }
+    }
+
+    /**
+     * 撤单
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doRecover(DataFlowContext dataFlowContext, Business business) {
+        String bId = business.getbId();
+        //Assert.hasLength(bId,"请求报文中没有包含 bId");
+        Map info = new HashMap();
+        info.put("bId",bId);
+        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        Map paramIn = new HashMap();
+        paramIn.put("bId",bId);
+        paramIn.put("statusCd",StatusConstant.STATUS_CD_INVALID);
+        //商户信息
+        Map storeInfo = storeServiceDaoImpl.getStoreInfo(info);
+        if(storeInfo != null && !storeInfo.isEmpty()){
+            paramIn.put("storeId",storeInfo.get("store_id").toString());
+            storeServiceDaoImpl.updateStoreInfoInstance(paramIn);
+            dataFlowContext.addParamOut("storeId",storeInfo.get("store_id"));
+        }
+    }
+
+
+
+    /**
+     * 处理 businessStore 节点
+     * @param business 总的数据节点
+     * @param businessStore 商户节点
+     */
+    private void doBusinessStore(Business business,JSONObject businessStore){
+
+        Assert.jsonObjectHaveKey(businessStore,"storeId","businessStore 节点下没有包含 storeId 节点");
+
+        if(businessStore.getString("storeId").startsWith("-")){
+            //刷新缓存
+            flushStoreId(business.getDatas());
+        }
+
+        businessStore.put("bId",business.getbId());
+        businessStore.put("operate", StatusConstant.OPERATE_ADD);
+        //保存商户信息
+        storeServiceDaoImpl.saveBusinessStoreInfo(businessStore);
+
+    }
+
+    public IStoreServiceDao getStoreServiceDaoImpl() {
+        return storeServiceDaoImpl;
+    }
+
+    public void setStoreServiceDaoImpl(IStoreServiceDao storeServiceDaoImpl) {
+        this.storeServiceDaoImpl = storeServiceDaoImpl;
+    }
+}

+ 125 - 0
java110-code-generator/src/main/resources/template/ServiceDaoImpl.txt

@@ -0,0 +1,125 @@
+package com.java110.store.dao.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.exception.DAOException;
+import com.java110.common.util.DateUtil;
+import com.java110.core.base.dao.BaseServiceDao;
+import com.java110.store.dao.IStoreServiceDao;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 商户服务 与数据库交互
+ * Created by wuxw on 2017/4/5.
+ */
+@Service("storeServiceDaoImpl")
+//@Transactional
+public class StoreServiceDaoImpl extends BaseServiceDao implements IStoreServiceDao {
+
+    private final static Logger logger = LoggerFactory.getLogger(StoreServiceDaoImpl.class);
+
+    /**
+     * 商户信息封装
+     * @param businessStoreInfo 商户信息 封装
+     * @throws DAOException
+     */
+    @Override
+    public void saveBusinessStoreInfo(Map businessStoreInfo) throws DAOException {
+        businessStoreInfo.put("month", DateUtil.getCurrentMonth());
+        // 查询business_user 数据是否已经存在
+        logger.debug("保存商户信息 入参 businessStoreInfo : {}",businessStoreInfo);
+        int saveFlag = sqlSessionTemplate.insert("storeServiceDaoImpl.saveBusinessStoreInfo",businessStoreInfo);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存商户数据失败:"+ JSONObject.toJSONString(businessStoreInfo));
+        }
+    }
+
+
+    /**
+     * 查询商户信息
+     * @param info bId 信息
+     * @return 商户信息
+     * @throws DAOException
+     */
+    @Override
+    public Map getBusinessStoreInfo(Map info) throws DAOException {
+
+        logger.debug("查询商户信息 入参 info : {}",info);
+
+        List<Map> businessStoreInfos = sqlSessionTemplate.selectList("storeServiceDaoImpl.getBusinessStoreInfo",info);
+        if(businessStoreInfos == null){
+            return null;
+        }
+        if(businessStoreInfos.size() >1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"根据条件查询有多条数据,数据异常,请检查:businessStoreInfos,"+ JSONObject.toJSONString(info));
+        }
+
+        return businessStoreInfos.get(0);
+    }
+
+
+
+    /**
+     * 保存商户信息 到 instance
+     * @param info   bId 信息
+     * @throws DAOException
+     */
+    @Override
+    public void saveStoreInfoInstance(Map info) throws DAOException {
+        logger.debug("保存商户信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.insert("storeServiceDaoImpl.saveStoreInfoInstance",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存商户信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
+
+    /**
+     * 查询商户信息(instance)
+     * @param info bId 信息
+     * @return
+     * @throws DAOException
+     */
+    @Override
+    public Map getStoreInfo(Map info) throws DAOException {
+        logger.debug("查询商户信息 入参 info : {}",info);
+
+        List<Map> businessStoreInfos = sqlSessionTemplate.selectList("storeServiceDaoImpl.getStoreInfo",info);
+        if(businessStoreInfos == null || businessStoreInfos.size() == 0){
+            return null;
+        }
+        if(businessStoreInfos.size() >1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"根据条件查询有多条数据,数据异常,请检查:getStoreInfo,"+ JSONObject.toJSONString(info));
+        }
+
+        return businessStoreInfos.get(0);
+    }
+
+
+    /**
+     * 修改商户信息
+     * @param info 修改信息
+     * @throws DAOException
+     */
+    @Override
+    public void updateStoreInfoInstance(Map info) throws DAOException {
+        logger.debug("修改商户信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.update("storeServiceDaoImpl.updateStoreInfoInstance",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"修改商户信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
+
+}

+ 91 - 0
java110-code-generator/src/main/resources/template/ServiceDaoImplMapper.txt

@@ -0,0 +1,91 @@
+<?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="storeServiceDaoImpl">
+
+    <!-- 保存商户信息 add by wuxw 2018-07-03 -->
+       <insert id="saveBusinessStoreInfo" parameterType="Map">
+           $saveBusinessInfo$
+       </insert>
+
+
+       <!-- 查询商户信息(Business) add by wuxw 2018-07-03 -->
+       <select id="getBusinessStoreInfo" parameterType="Map" resultType="Map">
+           $getBusinessInfo$
+       </select>
+
+
+
+
+
+    <!-- 保存商户信息至 instance表中 add by wuxw 2018-07-03 -->
+    <insert id="saveStoreInfoInstance" parameterType="Map">
+        insert into s_store(store_id,b_id,user_id,name,address,tel,store_type_cd,nearby_landmarks,map_x,map_y,status_cd)
+        select s.store_id,s.b_id,s.user_id,s.name,s.address,s.tel,s.store_type_cd,s.nearby_landmarks,s.map_x,s.map_y,'0'
+        from business_store s where
+        s.operate = 'ADD' and s.b_id=#{bId}
+    </insert>
+
+
+
+    <!-- 查询商户信息 add by wuxw 2018-07-03 -->
+    <select id="getStoreInfo" parameterType="Map" resultType="Map">
+        select s.store_id,s.b_id,s.user_id,s.name,s.address,s.tel,s.store_type_cd,s.nearby_landmarks,s.map_x,s.map_y,s.status_cd
+        from s_store s
+        where 1=1
+        <if test="statusCd != null and statusCd != ''">
+            and s.status_cd = #{statusCd}
+        </if>
+
+        <if test="bId != null and bId !=''">
+            and s.b_id = #{bId}
+        </if>
+        <if test="storeId != null and storeId !=''">
+            and s.store_id = #{storeId}
+        </if>
+    </select>
+
+
+
+
+    <!-- 修改商户信息 add by wuxw 2018-07-03 -->
+    <update id="updateStoreInfoInstance" parameterType="Map">
+        update s_store s set s.status_cd = #{statusCd}
+        <if test="newBId != null and newBId != ''">
+            ,s.b_id = #{newBId}
+        </if>
+        <if test="userId != null and userId != ''">
+            ,s.user_id = #{userId}
+        </if>
+        <if test="name != null and name != ''">
+            ,s.name = #{name}
+        </if>
+        <if test="address != null and address != ''">
+            ,s.address = #{address}
+        </if>
+        <if test="tel != null and tel != ''">
+            ,s.tel = #{tel}
+        </if>
+        <if test="storeTypeCd != null and storeTypeCd != ''">
+            ,s.store_type_cd = #{storeTypeCd}
+        </if>
+        <if test="nearbyLandmarks != null and nearbyLandmarks != ''">
+            ,s.nearby_landmarks = #{nearbyLandmarks}
+        </if>
+        <if test="mapX != null and mapX != ''">
+            ,s.map_x = #{mapX}
+        </if>
+        <if test="mapY != null and mapY != ''">
+            ,s.map_y = #{mapY}
+        </if>
+        where 1=1
+        <if test="bId != null and bId !=''">
+            and s.b_id = #{bId}
+        </if>
+        <if test="storeId != null and storeId !=''">
+            and s.store_id = #{storeId}
+        </if>
+    </update>
+
+</mapper>

+ 20 - 0
java110-code-generator/src/test/java/com/java110/AppTest.java

@@ -0,0 +1,20 @@
+package com.java110;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}

+ 30 - 0
java110-config/db/CommunityService/create_room.sql

@@ -0,0 +1,30 @@
+-- 楼信息
+CREATE TABLE business_floor(
+  floor_id VARCHAR(30) NOT NULL COMMENT '楼ID',
+  b_id VARCHAR(30) NOT NULL COMMENT '业务Id',
+  floor_num VARCHAR(12) NOT NULL COMMENT '楼编号',
+  `name` VARCHAR(100) NOT NULL COMMENT '小区楼名称',
+  user_id VARCHAR(30) NOT NULL COMMENT '用户ID',
+  remark VARCHAR(300) NOT NULL COMMENT '用户ID',
+  create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  operate VARCHAR(4) NOT NULL COMMENT '数据状态,添加ADD,修改MOD 删除DEL'
+);
+
+
+CREATE INDEX idx_business_floor_id ON business_floor(floor_id);
+CREATE INDEX idx_business_floor_b_id ON business_floor(b_id);
+
+
+CREATE TABLE f_floor(
+  floor_id VARCHAR(30) NOT NULL COMMENT '楼ID',
+  b_id VARCHAR(30) NOT NULL COMMENT '业务Id',
+  floor_num VARCHAR(12) NOT NULL COMMENT '楼编号',
+  `name` VARCHAR(100) NOT NULL COMMENT '小区楼名称',
+  user_id VARCHAR(30) NOT NULL COMMENT '用户ID',
+  remark VARCHAR(300) NOT NULL COMMENT '用户ID',
+  create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  status_cd VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '数据状态,详细参考c_status表,S 保存,0, 在用 1失效',
+  UNIQUE KEY (floor_id)
+);
+CREATE INDEX idx_floor_b_id ON f_floor(b_id);
+CREATE UNIQUE INDEX idx_floor_id ON f_floor(floor_id);

+ 1 - 0
pom.xml

@@ -32,6 +32,7 @@
         <module>CommentService</module>
         <module>Api</module>
         <module>CommunityService</module>
+        <module>java110-code-generator</module>
     </modules>
 
     <parent>