曾成 лет назад: 6
Родитель
Сommit
5b79ed5032
27 измененных файлов с 1732 добавлено и 25 удалено
  1. 1 0
      Api/src/main/java/com/java110/api/bmo/store/IStoreBMO.java
  2. 2 0
      Api/src/main/java/com/java110/api/bmo/store/impl/StoreBMOImpl.java
  3. 38 0
      Api/src/main/java/com/java110/api/bmo/storeAttr/IStoreAttrBMO.java
  4. 102 0
      Api/src/main/java/com/java110/api/bmo/storeAttr/impl/StoreAttrBMOImpl.java
  5. 7 0
      Api/src/main/java/com/java110/api/listener/store/ListStoresListener.java
  6. 0 1
      Api/src/main/java/com/java110/api/listener/store/UpdateStoreListener.java
  7. 67 0
      Api/src/main/java/com/java110/api/listener/storeAttr/DeleteStoreAttrListener.java
  8. 88 0
      Api/src/main/java/com/java110/api/listener/storeAttr/ListStoreAttrsListener.java
  9. 69 0
      Api/src/main/java/com/java110/api/listener/storeAttr/SaveStoreAttrListener.java
  10. 68 0
      Api/src/main/java/com/java110/api/listener/storeAttr/UpdateStoreAttrListener.java
  11. 81 0
      StoreService/src/main/java/com/java110/store/dao/IStoreAttrServiceDao.java
  12. 129 0
      StoreService/src/main/java/com/java110/store/dao/impl/StoreAttrServiceDaoImpl.java
  13. 83 0
      StoreService/src/main/java/com/java110/store/listener/storeAttr/AbstractStoreAttrBusinessServiceDataFlowListener.java
  14. 177 0
      StoreService/src/main/java/com/java110/store/listener/storeAttr/DeleteStoreAttrInfoListener.java
  15. 175 0
      StoreService/src/main/java/com/java110/store/listener/storeAttr/SaveStoreAttrInfoListener.java
  16. 190 0
      StoreService/src/main/java/com/java110/store/listener/storeAttr/UpdateStoreAttrInfoListener.java
  17. 76 0
      StoreService/src/main/java/com/java110/store/smo/impl/StoreAttrInnerServiceSMOImpl.java
  18. 9 0
      java110-bean/src/main/java/com/java110/dto/store/StoreAttrDto.java
  19. 13 0
      java110-bean/src/main/java/com/java110/vo/api/store/ApiStoreDataVo.java
  20. 67 0
      java110-bean/src/main/java/com/java110/vo/api/storeAttr/ApiStoreAttrDataVo.java
  21. 19 0
      java110-bean/src/main/java/com/java110/vo/api/storeAttr/ApiStoreAttrVo.java
  22. 16 21
      java110-code-generator/src/main/resources/back/template_1.json
  23. 42 0
      java110-core/src/main/java/com/java110/core/smo/storeAttr/IStoreAttrInnerServiceSMO.java
  24. 173 0
      java110-db/src/main/resources/mapper/store/StoreAttrServiceDaoImplMapper.xml
  25. 5 3
      java110-db/src/main/resources/mapper/store/StoreServiceDaoImplMapper.xml
  26. 4 0
      java110-utils/src/main/java/com/java110/utils/constant/BusinessTypeConstant.java
  27. 31 0
      java110-utils/src/main/java/com/java110/utils/constant/ServiceCodeStoreAttrConstant.java

+ 1 - 0
Api/src/main/java/com/java110/api/bmo/store/IStoreBMO.java

@@ -51,4 +51,5 @@ public interface IStoreBMO extends IApiBaseBMO {
     public JSONObject addStore(JSONObject paramInJson);
 
     public JSONObject updateStore(JSONObject paramInJson);
+
 }

+ 2 - 0
Api/src/main/java/com/java110/api/bmo/store/impl/StoreBMOImpl.java

@@ -6,6 +6,7 @@ import com.java110.api.bmo.ApiBaseBMO;
 import com.java110.api.bmo.store.IStoreBMO;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.core.smo.store.IStoreInnerServiceSMO;
+import com.java110.dto.store.StoreAttrDto;
 import com.java110.dto.store.StoreDto;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.BusinessTypeConstant;
@@ -67,6 +68,7 @@ public class StoreBMOImpl extends ApiBaseBMO implements IStoreBMO {
         return business;
     }
 
+
     /**
      * 添加员工
      *

+ 38 - 0
Api/src/main/java/com/java110/api/bmo/storeAttr/IStoreAttrBMO.java

@@ -0,0 +1,38 @@
+package com.java110.api.bmo.storeAttr;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.bmo.IApiBaseBMO;
+import com.java110.core.context.DataFlowContext;
+
+public interface IStoreAttrBMO extends IApiBaseBMO {
+
+
+    /**
+     * 添加商户属性
+     * @param paramInJson
+     * @param dataFlowContext
+     * @return
+     */
+     JSONObject addStoreAttr(JSONObject paramInJson, DataFlowContext dataFlowContext);
+
+    /**
+     * 添加商户属性信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+     JSONObject updateStoreAttr(JSONObject paramInJson, DataFlowContext dataFlowContext);
+
+    /**
+     * 删除商户属性
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+     JSONObject deleteStoreAttr(JSONObject paramInJson, DataFlowContext dataFlowContext);
+
+
+
+}

+ 102 - 0
Api/src/main/java/com/java110/api/bmo/storeAttr/impl/StoreAttrBMOImpl.java

@@ -0,0 +1,102 @@
+package com.java110.api.bmo.storeAttr.impl;
+
+import com.alibaba.fastjson.JSONObject;
+
+import com.java110.api.bmo.ApiBaseBMO;
+import com.java110.api.bmo.storeAttr.IStoreAttrBMO;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.file.IFileInnerServiceSMO;
+import com.java110.core.smo.file.IFileRelInnerServiceSMO;
+import com.java110.core.smo.storeAttr.IStoreAttrInnerServiceSMO;
+import com.java110.dto.file.FileRelDto;
+import com.java110.dto.store.StoreAttrDto;
+import com.java110.utils.constant.BusinessTypeConstant;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("storeAttrBMOImpl")
+public class StoreAttrBMOImpl extends ApiBaseBMO implements IStoreAttrBMO {
+
+    @Autowired
+    private IStoreAttrInnerServiceSMO storeAttrInnerServiceSMOImpl;
+
+    /**
+     * 添加小区信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject addStoreAttr(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        //business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_SAVE_STOREATTR);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessStoreAttr = new JSONObject();
+        businessStoreAttr.putAll(paramInJson);
+        businessStoreAttr.put("attrId", "-1");
+        //计算 应收金额
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessStoreAttr", businessStoreAttr);
+        return business;
+    }
+
+
+    /**
+     * 添加活动信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject updateStoreAttr(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+        StoreAttrDto storeAttrDto = new StoreAttrDto();
+        storeAttrDto.setAttrId(paramInJson.getString("attrId"));
+        List<StoreAttrDto> storeAttrDtos = storeAttrInnerServiceSMOImpl.queryStoreAttrs(storeAttrDto);
+
+        Assert.listOnlyOne(storeAttrDtos, "未找到需要修改的活动 或多条数据");
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_STORE_ATTR);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessStoreAttr = new JSONObject();
+        businessStoreAttr.putAll(BeanConvertUtil.beanCovertMap(storeAttrDtos.get(0)));
+        businessStoreAttr.putAll(paramInJson);
+        //计算 应收金额
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessStoreAttr", businessStoreAttr);
+        return business;
+    }
+
+
+
+    /**
+     * 添加小区信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject deleteStoreAttr(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        //business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_DELETE_STOREATTR);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessStoreAttr = new JSONObject();
+        businessStoreAttr.putAll(paramInJson);
+        //计算 应收金额
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessStoreAttr", businessStoreAttr);
+        return business;
+    }
+
+}

+ 7 - 0
Api/src/main/java/com/java110/api/listener/store/ListStoresListener.java

@@ -87,7 +87,13 @@ public class ListStoresListener extends AbstractServiceApiListener {
         storeAttrDto.setStoreIds(getStoreIds(stores));
         List<StoreAttrDto> storeAttrDtos = storeInnerServiceSMOImpl.getStoreAttrs(storeAttrDto);
         for (ApiStoreDataVo storeDataVo : stores) {
+            List<StoreAttrDto> storeAttrs = new ArrayList<StoreAttrDto>();
             for (StoreAttrDto tmpStoreAttrDto : storeAttrDtos) {
+
+                if(storeDataVo.getStoreId().equals(storeDataVo.getStoreId())){
+                    storeAttrs.add(tmpStoreAttrDto);
+                }
+
                 if (!storeDataVo.getStoreId().equals(tmpStoreAttrDto.getStoreId())) {
                     continue;
                 }
@@ -99,6 +105,7 @@ public class ListStoresListener extends AbstractServiceApiListener {
                     storeDataVo.setBusinessScope(tmpStoreAttrDto.getValue());
                 }
             }
+            storeDataVo.setStoreAttrDtoList(storeAttrs);
         }
     }
 

+ 0 - 1
Api/src/main/java/com/java110/api/listener/store/UpdateStoreListener.java

@@ -43,7 +43,6 @@ public class UpdateStoreListener extends AbstractServiceApiListener {
         AppService service = event.getAppService();
 
         businesses.add(storeBMOImpl.updateStore(reqJson));
-
         ResponseEntity<String> responseEntity = storeBMOImpl.callService(context, service.getServiceCode(), businesses);
 
         context.setResponseEntity(responseEntity);

+ 67 - 0
Api/src/main/java/com/java110/api/listener/storeAttr/DeleteStoreAttrListener.java

@@ -0,0 +1,67 @@
+package com.java110.api.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.bmo.storeAttr.IStoreAttrBMO;
+import com.java110.api.listener.AbstractServiceApiListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.AppService;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.constant.ServiceCodeStoreAttrConstant;
+import com.java110.utils.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * 保存小区侦听
+ * add by wuxw 2019-06-30
+ */
+@Java110Listener("deleteStoreAttrListener")
+public class DeleteStoreAttrListener extends AbstractServiceApiListener {
+
+    @Autowired
+    private IStoreAttrBMO storeAttrBMOImpl;
+
+    @Override
+    protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
+        Assert.hasKeyAndValue(reqJson, "attrId", "attrId不能为空");
+
+    }
+
+    @Override
+    protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
+
+        HttpHeaders header = new HttpHeaders();
+        context.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+
+        AppService service = event.getAppService();
+
+        //添加单元信息
+        businesses.add(storeAttrBMOImpl.deleteStoreAttr(reqJson, context));
+
+        ResponseEntity<String> responseEntity = storeAttrBMOImpl.callService(context, service.getServiceCode(), businesses);
+
+        context.setResponseEntity(responseEntity);
+    }
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeStoreAttrConstant.DELETE_STOREATTR;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+}

+ 88 - 0
Api/src/main/java/com/java110/api/listener/storeAttr/ListStoreAttrsListener.java

@@ -0,0 +1,88 @@
+package com.java110.api.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.listener.AbstractServiceApiListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.storeAttr.IStoreAttrInnerServiceSMO;
+import com.java110.dto.store.StoreAttrDto;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.utils.constant.ServiceCodeStoreAttrConstant;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.api.storeAttr.ApiStoreAttrDataVo;
+import com.java110.vo.api.storeAttr.ApiStoreAttrVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 查询小区侦听类
+ */
+@Java110Listener("listStoreAttrsListener")
+public class ListStoreAttrsListener extends AbstractServiceApiListener {
+
+    @Autowired
+    private IStoreAttrInnerServiceSMO storeAttrInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeStoreAttrConstant.LIST_STOREATTRS;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.GET;
+    }
+
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+
+    public IStoreAttrInnerServiceSMO getStoreAttrInnerServiceSMOImpl() {
+        return storeAttrInnerServiceSMOImpl;
+    }
+
+    public void setStoreAttrInnerServiceSMOImpl(IStoreAttrInnerServiceSMO storeAttrInnerServiceSMOImpl) {
+        this.storeAttrInnerServiceSMOImpl = storeAttrInnerServiceSMOImpl;
+    }
+
+    @Override
+    protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
+        super.validatePageInfo(reqJson);
+    }
+
+    @Override
+    protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
+
+        StoreAttrDto storeAttrDto = BeanConvertUtil.covertBean(reqJson, StoreAttrDto.class);
+
+        int count = storeAttrInnerServiceSMOImpl.queryStoreAttrsCount(storeAttrDto);
+
+        List<ApiStoreAttrDataVo> storeAttrs = null;
+
+        if (count > 0) {
+            storeAttrs = BeanConvertUtil.covertBeanList(storeAttrInnerServiceSMOImpl.queryStoreAttrs(storeAttrDto), ApiStoreAttrDataVo.class);
+        } else {
+            storeAttrs = new ArrayList<>();
+        }
+
+        ApiStoreAttrVo apiStoreAttrVo = new ApiStoreAttrVo();
+
+        apiStoreAttrVo.setTotal(count);
+        apiStoreAttrVo.setRecords((int) Math.ceil((double) count / (double) reqJson.getInteger("row")));
+        apiStoreAttrVo.setStoreAttrs(storeAttrs);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(JSONObject.toJSONString(apiStoreAttrVo), HttpStatus.OK);
+
+        context.setResponseEntity(responseEntity);
+
+    }
+}

+ 69 - 0
Api/src/main/java/com/java110/api/listener/storeAttr/SaveStoreAttrListener.java

@@ -0,0 +1,69 @@
+package com.java110.api.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.bmo.storeAttr.IStoreAttrBMO;
+import com.java110.api.listener.AbstractServiceApiListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.AppService;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.constant.ServiceCodeStoreAttrConstant;
+import com.java110.utils.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * 保存小区侦听
+ * add by wuxw 2019-06-30
+ */
+@Java110Listener("saveStoreAttrListener")
+public class SaveStoreAttrListener extends AbstractServiceApiListener {
+
+    @Autowired
+    private IStoreAttrBMO storeAttrBMOImpl;
+
+    @Override
+    protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
+        //Assert.hasKeyAndValue(reqJson, "xxx", "xxx");
+
+        Assert.hasKeyAndValue(reqJson, "attrId", "请求报文中未包含attrId");
+
+    }
+
+    @Override
+    protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
+
+        HttpHeaders header = new HttpHeaders();
+        context.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+
+        AppService service = event.getAppService();
+
+        //添加单元信息
+        businesses.add(storeAttrBMOImpl.addStoreAttr(reqJson, context));
+
+        ResponseEntity<String> responseEntity = storeAttrBMOImpl.callService(context, service.getServiceCode(), businesses);
+
+        context.setResponseEntity(responseEntity);
+    }
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeStoreAttrConstant.ADD_STOREATTR;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+}

+ 68 - 0
Api/src/main/java/com/java110/api/listener/storeAttr/UpdateStoreAttrListener.java

@@ -0,0 +1,68 @@
+package com.java110.api.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.bmo.storeAttr.IStoreAttrBMO;
+import com.java110.api.listener.AbstractServiceApiListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.AppService;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.constant.ServiceCodeStoreAttrConstant;
+import com.java110.utils.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+
+/**
+ * 保存商户属性侦听
+ * add by wuxw 2019-06-30
+ */
+@Java110Listener("updateStoreAttrListener")
+public class UpdateStoreAttrListener extends AbstractServiceApiListener {
+
+    @Autowired
+    private IStoreAttrBMO storeAttrBMOImpl;
+
+    @Override
+    protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
+
+        Assert.hasKeyAndValue(reqJson, "attrId", "attrId不能为空");
+
+    }
+
+    @Override
+    protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
+
+        HttpHeaders header = new HttpHeaders();
+        context.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+
+        AppService service = event.getAppService();
+
+        //添加单元信息
+        businesses.add(storeAttrBMOImpl.updateStoreAttr(reqJson, context));
+
+        ResponseEntity<String> responseEntity = storeAttrBMOImpl.callService(context, service.getServiceCode(), businesses);
+
+        context.setResponseEntity(responseEntity);
+    }
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeStoreAttrConstant.UPDATE_STOREATTR;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+}

+ 81 - 0
StoreService/src/main/java/com/java110/store/dao/IStoreAttrServiceDao.java

@@ -0,0 +1,81 @@
+package com.java110.store.dao;
+
+
+import com.java110.utils.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 IStoreAttrServiceDao {
+
+    /**
+     * 保存 商户属性信息
+     * @param businessStoreAttrInfo 商户属性信息 封装
+     * @throws DAOException 操作数据库异常
+     */
+    void saveBusinessStoreAttrInfo(Map businessStoreAttrInfo) throws DAOException;
+
+
+
+    /**
+     * 查询商户属性信息(business过程)
+     * 根据bId 查询商户属性信息
+     * @param info bId 信息
+     * @return 商户属性信息
+     * @throws DAOException DAO异常
+     */
+    List<Map> getBusinessStoreAttrInfo(Map info) throws DAOException;
+
+
+
+
+    /**
+     * 保存 商户属性信息 Business数据到 Instance中
+     * @param info
+     * @throws DAOException DAO异常
+     */
+    void saveStoreAttrInfoInstance(Map info) throws DAOException;
+
+
+
+
+    /**
+     * 查询商户属性信息(instance过程)
+     * 根据bId 查询商户属性信息
+     * @param info bId 信息
+     * @return 商户属性信息
+     * @throws DAOException DAO异常
+     */
+    List<Map> getStoreAttrInfo(Map info) throws DAOException;
+
+
+
+    /**
+     * 修改商户属性信息
+     * @param info 修改信息
+     * @throws DAOException DAO异常
+     */
+    void updateStoreAttrInfoInstance(Map info) throws DAOException;
+
+
+    /**
+     * 查询商户属性总数
+     *
+     * @param info 商户属性信息
+     * @return 商户属性数量
+     */
+    int queryStoreAttrsCount(Map info);
+
+}

+ 129 - 0
StoreService/src/main/java/com/java110/store/dao/impl/StoreAttrServiceDaoImpl.java

@@ -0,0 +1,129 @@
+package com.java110.store.dao.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.base.dao.BaseServiceDao;
+import com.java110.store.dao.IStoreAttrServiceDao;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.exception.DAOException;
+import com.java110.utils.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 商户属性服务 与数据库交互
+ * Created by wuxw on 2017/4/5.
+ */
+@Service("storeAttrServiceDaoImpl")
+//@Transactional
+public class StoreAttrServiceDaoImpl extends BaseServiceDao implements IStoreAttrServiceDao {
+
+    private static Logger logger = LoggerFactory.getLogger(StoreAttrServiceDaoImpl.class);
+
+    /**
+     * 商户属性信息封装
+     * @param businessStoreAttrInfo 商户属性信息 封装
+     * @throws DAOException DAO异常
+     */
+    @Override
+    public void saveBusinessStoreAttrInfo(Map businessStoreAttrInfo) throws DAOException {
+        businessStoreAttrInfo.put("month", DateUtil.getCurrentMonth());
+        // 查询business_user 数据是否已经存在
+        logger.debug("保存商户属性信息 入参 businessStoreAttrInfo : {}",businessStoreAttrInfo);
+        int saveFlag = sqlSessionTemplate.insert("storeAttrServiceDaoImpl.saveBusinessStoreAttrInfo",businessStoreAttrInfo);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存商户属性数据失败:"+ JSONObject.toJSONString(businessStoreAttrInfo));
+        }
+    }
+
+
+    /**
+     * 查询商户属性信息
+     * @param info bId 信息
+     * @return 商户属性信息
+     * @throws DAOException DAO异常
+     */
+    @Override
+    public List<Map> getBusinessStoreAttrInfo(Map info) throws DAOException {
+
+        logger.debug("查询商户属性信息 入参 info : {}",info);
+
+        List<Map> businessStoreAttrInfos = sqlSessionTemplate.selectList("storeAttrServiceDaoImpl.getBusinessStoreAttrInfo",info);
+
+        return businessStoreAttrInfos;
+    }
+
+
+
+    /**
+     * 保存商户属性信息 到 instance
+     * @param info   bId 信息
+     * @throws DAOException DAO异常
+     */
+    @Override
+    public void saveStoreAttrInfoInstance(Map info) throws DAOException {
+        logger.debug("保存商户属性信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.insert("storeAttrServiceDaoImpl.saveStoreAttrInfoInstance",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存商户属性信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
+
+    /**
+     * 查询商户属性信息(instance)
+     * @param info bId 信息
+     * @return List<Map>
+     * @throws DAOException DAO异常
+     */
+    @Override
+    public List<Map> getStoreAttrInfo(Map info) throws DAOException {
+        logger.debug("查询商户属性信息 入参 info : {}",info);
+
+        List<Map> businessStoreAttrInfos = sqlSessionTemplate.selectList("storeAttrServiceDaoImpl.getStoreAttrInfo",info);
+
+        return businessStoreAttrInfos;
+    }
+
+
+    /**
+     * 修改商户属性信息
+     * @param info 修改信息
+     * @throws DAOException DAO异常
+     */
+    @Override
+    public void updateStoreAttrInfoInstance(Map info) throws DAOException {
+        logger.debug("修改商户属性信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.update("storeAttrServiceDaoImpl.updateStoreAttrInfoInstance",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"修改商户属性信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
+     /**
+     * 查询商户属性数量
+     * @param info 商户属性信息
+     * @return 商户属性数量
+     */
+    @Override
+    public int queryStoreAttrsCount(Map info) {
+        logger.debug("查询商户属性数据 入参 info : {}",info);
+
+        List<Map> businessStoreAttrInfos = sqlSessionTemplate.selectList("storeAttrServiceDaoImpl.queryStoreAttrsCount", info);
+        if (businessStoreAttrInfos.size() < 1) {
+            return 0;
+        }
+
+        return Integer.parseInt(businessStoreAttrInfos.get(0).get("count").toString());
+    }
+
+
+}

+ 83 - 0
StoreService/src/main/java/com/java110/store/listener/storeAttr/AbstractStoreAttrBusinessServiceDataFlowListener.java

@@ -0,0 +1,83 @@
+package com.java110.store.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.entity.center.Business;
+import com.java110.event.service.AbstractBusinessServiceDataFlowListener;
+import com.java110.store.dao.IStoreAttrServiceDao;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.constant.StatusConstant;
+import com.java110.utils.exception.ListenerExecuteException;
+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 AbstractStoreAttrBusinessServiceDataFlowListener extends AbstractBusinessServiceDataFlowListener {
+    private static Logger logger = LoggerFactory.getLogger(AbstractStoreAttrBusinessServiceDataFlowListener.class);
+
+
+    /**
+     * 获取 DAO工具类
+     *
+     * @return
+     */
+    public abstract IStoreAttrServiceDao getStoreAttrServiceDaoImpl();
+
+    /**
+     * 刷新 businessStoreAttrInfo 数据
+     * 主要将 数据库 中字段和 接口传递字段建立关系
+     *
+     * @param businessStoreAttrInfo
+     */
+    protected void flushBusinessStoreAttrInfo(Map businessStoreAttrInfo, String statusCd) {
+        businessStoreAttrInfo.put("newBId", businessStoreAttrInfo.get("b_id"));
+        businessStoreAttrInfo.put("attrId", businessStoreAttrInfo.get("attr_id"));
+        businessStoreAttrInfo.put("operate", businessStoreAttrInfo.get("operate"));
+        businessStoreAttrInfo.put("createTime", businessStoreAttrInfo.get("create_time"));
+        businessStoreAttrInfo.put("specCd", businessStoreAttrInfo.get("spec_cd"));
+        businessStoreAttrInfo.put("storeId", businessStoreAttrInfo.get("store_id"));
+        businessStoreAttrInfo.put("value", businessStoreAttrInfo.get("value"));
+        businessStoreAttrInfo.remove("bId");
+        businessStoreAttrInfo.put("statusCd", statusCd);
+    }
+
+
+    /**
+     * 当修改数据时,查询instance表中的数据 自动保存删除数据到business中
+     *
+     * @param businessStoreAttr 商户属性信息
+     */
+    protected void autoSaveDelBusinessStoreAttr(Business business, JSONObject businessStoreAttr) {
+//自动插入DEL
+        Map info = new HashMap();
+        info.put("attrId", businessStoreAttr.getString("attrId"));
+        info.put("statusCd", StatusConstant.STATUS_CD_VALID);
+        List<Map> currentStoreAttrInfos = getStoreAttrServiceDaoImpl().getStoreAttrInfo(info);
+        if (currentStoreAttrInfos == null || currentStoreAttrInfos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR, "未找到需要修改数据信息,入参错误或数据有问题,请检查" + info);
+        }
+
+        Map currentStoreAttrInfo = currentStoreAttrInfos.get(0);
+
+        currentStoreAttrInfo.put("bId", business.getbId());
+
+        currentStoreAttrInfo.put("attrId", currentStoreAttrInfo.get("attr_id"));
+        currentStoreAttrInfo.put("operate", currentStoreAttrInfo.get("operate"));
+        currentStoreAttrInfo.put("createTime", currentStoreAttrInfo.get("create_time"));
+        currentStoreAttrInfo.put("specCd", currentStoreAttrInfo.get("spec_cd"));
+        currentStoreAttrInfo.put("storeId", currentStoreAttrInfo.get("store_id"));
+        currentStoreAttrInfo.put("value", currentStoreAttrInfo.get("value"));
+
+
+        currentStoreAttrInfo.put("operate", StatusConstant.OPERATE_DEL);
+        getStoreAttrServiceDaoImpl().saveBusinessStoreAttrInfo(currentStoreAttrInfo);
+    }
+
+
+}

+ 177 - 0
StoreService/src/main/java/com/java110/store/listener/storeAttr/DeleteStoreAttrInfoListener.java

@@ -0,0 +1,177 @@
+package com.java110.store.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.store.dao.IStoreAttrServiceDao;
+import com.java110.utils.constant.BusinessTypeConstant;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.constant.StatusConstant;
+import com.java110.utils.exception.ListenerExecuteException;
+import com.java110.utils.util.Assert;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.Business;
+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、businessStoreAttr:{} 商户属性基本信息节点
+ * 2、businessStoreAttrAttr:[{}] 商户属性属性信息节点
+ * 3、businessStoreAttrPhoto:[{}] 商户属性照片信息节点
+ * 4、businessStoreAttrCerdentials:[{}] 商户属性证件信息节点
+ * 协议地址 :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("deleteStoreAttrInfoListener")
+@Transactional
+public class DeleteStoreAttrInfoListener extends AbstractStoreAttrBusinessServiceDataFlowListener {
+
+    private final static Logger logger = LoggerFactory.getLogger(DeleteStoreAttrInfoListener.class);
+    @Autowired
+    IStoreAttrServiceDao storeAttrServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 3;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_DELETE_COMMUNITY;
+    }
+
+    /**
+     * 根据删除信息 查出Instance表中数据 保存至business表 (状态写DEL) 方便撤单时直接更新回去
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStoreAttr 节点
+        if(data.containsKey("businessStoreAttr")){
+            //处理 businessStoreAttr 节点
+            if(data.containsKey("businessStoreAttr")){
+                Object _obj = data.get("businessStoreAttr");
+                JSONArray businessStoreAttrs = null;
+                if(_obj instanceof JSONObject){
+                    businessStoreAttrs = new JSONArray();
+                    businessStoreAttrs.add(_obj);
+                }else {
+                    businessStoreAttrs = (JSONArray)_obj;
+                }
+                //JSONObject businessStoreAttr = data.getJSONObject("businessStoreAttr");
+                for (int _storeAttrIndex = 0; _storeAttrIndex < businessStoreAttrs.size();_storeAttrIndex++) {
+                    JSONObject businessStoreAttr = businessStoreAttrs.getJSONObject(_storeAttrIndex);
+                    doBusinessStoreAttr(business, businessStoreAttr);
+                    if(_obj instanceof JSONObject) {
+                        dataFlowContext.addParamOut("attrId", businessStoreAttr.getString("attrId"));
+                    }
+                }
+            }
+        }
+
+
+    }
+
+    /**
+     * 删除 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);
+
+        //商户属性信息
+        List<Map> businessStoreAttrInfos = storeAttrServiceDaoImpl.getBusinessStoreAttrInfo(info);
+        if( businessStoreAttrInfos != null && businessStoreAttrInfos.size() >0) {
+            for (int _storeAttrIndex = 0; _storeAttrIndex < businessStoreAttrInfos.size();_storeAttrIndex++) {
+                Map businessStoreAttrInfo = businessStoreAttrInfos.get(_storeAttrIndex);
+                flushBusinessStoreAttrInfo(businessStoreAttrInfo,StatusConstant.STATUS_CD_INVALID);
+                storeAttrServiceDaoImpl.updateStoreAttrInfoInstance(businessStoreAttrInfo);
+                dataFlowContext.addParamOut("attrId",businessStoreAttrInfo.get("attr_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);
+        //商户属性信息
+        List<Map> storeAttrInfo = storeAttrServiceDaoImpl.getStoreAttrInfo(info);
+        if(storeAttrInfo != null && storeAttrInfo.size() > 0){
+
+            //商户属性信息
+            List<Map> businessStoreAttrInfos = storeAttrServiceDaoImpl.getBusinessStoreAttrInfo(delInfo);
+            //除非程序出错了,这里不会为空
+            if(businessStoreAttrInfos == null ||  businessStoreAttrInfos.size() == 0){
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_INNER_ERROR,"撤单失败(storeAttr),程序内部异常,请检查! "+delInfo);
+            }
+            for (int _storeAttrIndex = 0; _storeAttrIndex < businessStoreAttrInfos.size();_storeAttrIndex++) {
+                Map businessStoreAttrInfo = businessStoreAttrInfos.get(_storeAttrIndex);
+                flushBusinessStoreAttrInfo(businessStoreAttrInfo,StatusConstant.STATUS_CD_VALID);
+                storeAttrServiceDaoImpl.updateStoreAttrInfoInstance(businessStoreAttrInfo);
+            }
+        }
+    }
+
+
+
+    /**
+     * 处理 businessStoreAttr 节点
+     * @param business 总的数据节点
+     * @param businessStoreAttr 商户属性节点
+     */
+    private void doBusinessStoreAttr(Business business,JSONObject businessStoreAttr){
+
+        Assert.jsonObjectHaveKey(businessStoreAttr,"attrId","businessStoreAttr 节点下没有包含 attrId 节点");
+
+        if(businessStoreAttr.getString("attrId").startsWith("-")){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"attrId 错误,不能自动生成(必须已经存在的attrId)"+businessStoreAttr);
+        }
+        //自动插入DEL
+        autoSaveDelBusinessStoreAttr(business,businessStoreAttr);
+    }
+
+    public IStoreAttrServiceDao getStoreAttrServiceDaoImpl() {
+        return storeAttrServiceDaoImpl;
+    }
+
+    public void setStoreAttrServiceDaoImpl(IStoreAttrServiceDao storeAttrServiceDaoImpl) {
+        this.storeAttrServiceDaoImpl = storeAttrServiceDaoImpl;
+    }
+}

+ 175 - 0
StoreService/src/main/java/com/java110/store/listener/storeAttr/SaveStoreAttrInfoListener.java

@@ -0,0 +1,175 @@
+package com.java110.store.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.store.dao.IStoreAttrServiceDao;
+import com.java110.utils.constant.BusinessTypeConstant;
+import com.java110.utils.constant.StatusConstant;
+import com.java110.utils.util.Assert;
+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 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;
+
+/**
+ * 保存 商户属性信息 侦听
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("saveStoreAttrInfoListener")
+@Transactional
+public class SaveStoreAttrInfoListener extends AbstractStoreAttrBusinessServiceDataFlowListener{
+
+    private static Logger logger = LoggerFactory.getLogger(SaveStoreAttrInfoListener.class);
+
+    @Autowired
+    private IStoreAttrServiceDao storeAttrServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_SAVE_JUNK_REQUIREMENT;
+    }
+
+    /**
+     * 保存商户属性信息 business 表中
+     * @param dataFlowContext 数据对象
+     * @param business 当前业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+        JSONObject data = business.getDatas();
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStoreAttr 节点
+        if(data.containsKey("businessStoreAttr")){
+            Object bObj = data.get("businessStoreAttr");
+            JSONArray businessStoreAttrs = null;
+            if(bObj instanceof JSONObject){
+                businessStoreAttrs = new JSONArray();
+                businessStoreAttrs.add(bObj);
+            }else {
+                businessStoreAttrs = (JSONArray)bObj;
+            }
+            //JSONObject businessStoreAttr = data.getJSONObject("businessStoreAttr");
+            for (int bStoreAttrIndex = 0; bStoreAttrIndex < businessStoreAttrs.size();bStoreAttrIndex++) {
+                JSONObject businessStoreAttr = businessStoreAttrs.getJSONObject(bStoreAttrIndex);
+                doBusinessStoreAttr(business, businessStoreAttr);
+                if(bObj instanceof JSONObject) {
+                    dataFlowContext.addParamOut("attrId", businessStoreAttr.getString("attrId"));
+                }
+            }
+        }
+    }
+
+    /**
+     * 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);
+
+        //商户属性信息
+        List<Map> businessStoreAttrInfo = storeAttrServiceDaoImpl.getBusinessStoreAttrInfo(info);
+        if( businessStoreAttrInfo != null && businessStoreAttrInfo.size() >0) {
+            reFreshShareColumn(info, businessStoreAttrInfo.get(0));
+            storeAttrServiceDaoImpl.saveStoreAttrInfoInstance(info);
+            if(businessStoreAttrInfo.size() == 1) {
+                dataFlowContext.addParamOut("attrId", businessStoreAttrInfo.get(0).get("attr_id"));
+            }
+        }
+    }
+
+
+    /**
+     * 刷 分片字段
+     *
+     * @param info         查询对象
+     * @param businessInfo 小区ID
+     */
+    private void reFreshShareColumn(Map info, Map businessInfo) {
+
+        if (info.containsKey("storeId")) {
+            return;
+        }
+
+        if (!businessInfo.containsKey("store_id")) {
+            return;
+        }
+
+        info.put("storeId", businessInfo.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);
+        //商户属性信息
+        List<Map> storeAttrInfo = storeAttrServiceDaoImpl.getStoreAttrInfo(info);
+        if(storeAttrInfo != null && storeAttrInfo.size() > 0){
+            reFreshShareColumn(paramIn, storeAttrInfo.get(0));
+            storeAttrServiceDaoImpl.updateStoreAttrInfoInstance(paramIn);
+        }
+    }
+
+
+
+    /**
+     * 处理 businessStoreAttr 节点
+     * @param business 总的数据节点
+     * @param businessStoreAttr 商户属性节点
+     */
+    private void doBusinessStoreAttr(Business business,JSONObject businessStoreAttr){
+
+        Assert.jsonObjectHaveKey(businessStoreAttr,"attrId","businessStoreAttr 节点下没有包含 attrId 节点");
+
+        if(businessStoreAttr.getString("attrId").startsWith("-")){
+            //刷新缓存
+            //flushStoreAttrId(business.getDatas());
+
+            businessStoreAttr.put("attrId",GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+
+        }
+
+        businessStoreAttr.put("bId",business.getbId());
+        businessStoreAttr.put("operate", StatusConstant.OPERATE_ADD);
+        //保存商户属性信息
+        storeAttrServiceDaoImpl.saveBusinessStoreAttrInfo(businessStoreAttr);
+
+    }
+
+    public IStoreAttrServiceDao getStoreAttrServiceDaoImpl() {
+        return storeAttrServiceDaoImpl;
+    }
+
+    public void setStoreAttrServiceDaoImpl(IStoreAttrServiceDao storeAttrServiceDaoImpl) {
+        this.storeAttrServiceDaoImpl = storeAttrServiceDaoImpl;
+    }
+}

+ 190 - 0
StoreService/src/main/java/com/java110/store/listener/storeAttr/UpdateStoreAttrInfoListener.java

@@ -0,0 +1,190 @@
+package com.java110.store.listener.storeAttr;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.store.dao.IStoreAttrServiceDao;
+import com.java110.utils.constant.BusinessTypeConstant;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.constant.StatusConstant;
+import com.java110.utils.exception.ListenerExecuteException;
+import com.java110.utils.util.Assert;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.entity.center.Business;
+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、businessStoreAttr:{} 商户属性基本信息节点
+ * 2、businessStoreAttrAttr:[{}] 商户属性属性信息节点
+ * 3、businessStoreAttrPhoto:[{}] 商户属性照片信息节点
+ * 4、businessStoreAttrCerdentials:[{}] 商户属性证件信息节点
+ * 协议地址 :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("updateStoreAttrInfoListener")
+@Transactional
+public class UpdateStoreAttrInfoListener extends AbstractStoreAttrBusinessServiceDataFlowListener {
+
+    private static Logger logger = LoggerFactory.getLogger(UpdateStoreAttrInfoListener.class);
+    @Autowired
+    private IStoreAttrServiceDao storeAttrServiceDaoImpl;
+
+    @Override
+    public int getOrder() {
+        return 2;
+    }
+
+    @Override
+    public String getBusinessTypeCd() {
+        return BusinessTypeConstant.BUSINESS_TYPE_UPDATE_STORE_ATTR;
+    }
+
+    /**
+     * business过程
+     * @param dataFlowContext 上下文对象
+     * @param business 业务对象
+     */
+    @Override
+    protected void doSaveBusiness(DataFlowContext dataFlowContext, Business business) {
+
+        JSONObject data = business.getDatas();
+
+        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+
+        //处理 businessStoreAttr 节点
+        if(data.containsKey("businessStoreAttr")){
+            //处理 businessStoreAttr 节点
+            if(data.containsKey("businessStoreAttr")){
+                Object _obj = data.get("businessStoreAttr");
+                JSONArray businessStoreAttrs = null;
+                if(_obj instanceof JSONObject){
+                    businessStoreAttrs = new JSONArray();
+                    businessStoreAttrs.add(_obj);
+                }else {
+                    businessStoreAttrs = (JSONArray)_obj;
+                }
+                //JSONObject businessStoreAttr = data.getJSONObject("businessStoreAttr");
+                for (int _storeAttrIndex = 0; _storeAttrIndex < businessStoreAttrs.size();_storeAttrIndex++) {
+                    JSONObject businessStoreAttr = businessStoreAttrs.getJSONObject(_storeAttrIndex);
+                    doBusinessStoreAttr(business, businessStoreAttr);
+                    if(_obj instanceof JSONObject) {
+                        dataFlowContext.addParamOut("attrId", businessStoreAttr.getString("attrId"));
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 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);
+
+        //商户属性信息
+        List<Map> businessStoreAttrInfos = storeAttrServiceDaoImpl.getBusinessStoreAttrInfo(info);
+        if( businessStoreAttrInfos != null && businessStoreAttrInfos.size() >0) {
+            for (int _storeAttrIndex = 0; _storeAttrIndex < businessStoreAttrInfos.size();_storeAttrIndex++) {
+                Map businessStoreAttrInfo = businessStoreAttrInfos.get(_storeAttrIndex);
+                flushBusinessStoreAttrInfo(businessStoreAttrInfo,StatusConstant.STATUS_CD_VALID);
+                storeAttrServiceDaoImpl.updateStoreAttrInfoInstance(businessStoreAttrInfo);
+                if(businessStoreAttrInfo.size() == 1) {
+                    dataFlowContext.addParamOut("attrId", businessStoreAttrInfo.get("attr_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);
+        //商户属性信息
+        List<Map> storeAttrInfo = storeAttrServiceDaoImpl.getStoreAttrInfo(info);
+        if(storeAttrInfo != null && storeAttrInfo.size() > 0){
+
+            //商户属性信息
+            List<Map> businessStoreAttrInfos = storeAttrServiceDaoImpl.getBusinessStoreAttrInfo(delInfo);
+            //除非程序出错了,这里不会为空
+            if(businessStoreAttrInfos == null || businessStoreAttrInfos.size() == 0){
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_INNER_ERROR,"撤单失败(storeAttr),程序内部异常,请检查! "+delInfo);
+            }
+            for (int _storeAttrIndex = 0; _storeAttrIndex < businessStoreAttrInfos.size();_storeAttrIndex++) {
+                Map businessStoreAttrInfo = businessStoreAttrInfos.get(_storeAttrIndex);
+                flushBusinessStoreAttrInfo(businessStoreAttrInfo,StatusConstant.STATUS_CD_VALID);
+                storeAttrServiceDaoImpl.updateStoreAttrInfoInstance(businessStoreAttrInfo);
+            }
+        }
+
+    }
+
+
+
+    /**
+     * 处理 businessStoreAttr 节点
+     * @param business 总的数据节点
+     * @param businessStoreAttr 商户属性节点
+     */
+    private void doBusinessStoreAttr(Business business,JSONObject businessStoreAttr){
+
+        Assert.jsonObjectHaveKey(businessStoreAttr,"attrId","businessStoreAttr 节点下没有包含 attrId 节点");
+
+        if(businessStoreAttr.getString("attrId").startsWith("-")){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"attrId 错误,不能自动生成(必须已经存在的attrId)"+businessStoreAttr);
+        }
+        //自动保存DEL
+        autoSaveDelBusinessStoreAttr(business,businessStoreAttr);
+
+        businessStoreAttr.put("bId",business.getbId());
+        businessStoreAttr.put("operate", StatusConstant.OPERATE_ADD);
+        //保存商户属性信息
+        storeAttrServiceDaoImpl.saveBusinessStoreAttrInfo(businessStoreAttr);
+
+    }
+
+
+
+
+    public IStoreAttrServiceDao getStoreAttrServiceDaoImpl() {
+        return storeAttrServiceDaoImpl;
+    }
+
+    public void setStoreAttrServiceDaoImpl(IStoreAttrServiceDao storeAttrServiceDaoImpl) {
+        this.storeAttrServiceDaoImpl = storeAttrServiceDaoImpl;
+    }
+
+
+
+}

+ 76 - 0
StoreService/src/main/java/com/java110/store/smo/impl/StoreAttrInnerServiceSMOImpl.java

@@ -0,0 +1,76 @@
+package com.java110.store.smo.impl;
+
+
+import com.java110.dto.store.StoreAttrDto;
+import com.java110.store.dao.IStoreAttrServiceDao;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.smo.storeAttr.IStoreAttrInnerServiceSMO;
+import com.java110.core.smo.user.IUserInnerServiceSMO;
+import com.java110.dto.PageDto;
+import com.java110.dto.user.UserDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName FloorInnerServiceSMOImpl
+ * @Description 商户属性内部服务实现类
+ * @Author wuxw
+ * @Date 2019/4/24 9:20
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+@RestController
+public class StoreAttrInnerServiceSMOImpl extends BaseServiceSMO implements IStoreAttrInnerServiceSMO {
+
+    @Autowired
+    private IStoreAttrServiceDao storeAttrServiceDaoImpl;
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Override
+    public List<StoreAttrDto> queryStoreAttrs(@RequestBody  StoreAttrDto storeAttrDto) {
+
+        //校验是否传了 分页信息
+
+        int page = storeAttrDto.getPage();
+
+        if (page != PageDto.DEFAULT_PAGE) {
+            storeAttrDto.setPage((page - 1) * storeAttrDto.getRow());
+        }
+
+        List<StoreAttrDto> storeAttrs = BeanConvertUtil.covertBeanList(storeAttrServiceDaoImpl.getStoreAttrInfo(BeanConvertUtil.beanCovertMap(storeAttrDto)), StoreAttrDto.class);
+
+        if (storeAttrs == null || storeAttrs.size() == 0) {
+            return storeAttrs;
+        }
+
+        return storeAttrs;
+    }
+
+
+    @Override
+    public int queryStoreAttrsCount(@RequestBody StoreAttrDto storeAttrDto) {
+        return storeAttrServiceDaoImpl.queryStoreAttrsCount(BeanConvertUtil.beanCovertMap(storeAttrDto));    }
+
+    public IStoreAttrServiceDao getStoreAttrServiceDaoImpl() {
+        return storeAttrServiceDaoImpl;
+    }
+
+    public void setStoreAttrServiceDaoImpl(IStoreAttrServiceDao storeAttrServiceDaoImpl) {
+        this.storeAttrServiceDaoImpl = storeAttrServiceDaoImpl;
+    }
+
+    public IUserInnerServiceSMO getUserInnerServiceSMOImpl() {
+        return userInnerServiceSMOImpl;
+    }
+
+    public void setUserInnerServiceSMOImpl(IUserInnerServiceSMO userInnerServiceSMOImpl) {
+        this.userInnerServiceSMOImpl = userInnerServiceSMOImpl;
+    }
+}

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/store/StoreAttrDto.java

@@ -21,6 +21,7 @@ public class StoreAttrDto extends PageDto implements Serializable {
     private String attrId;
     private String specCd;
     private String value;
+    private String name;
 
 
     private Date createTime;
@@ -82,4 +83,12 @@ public class StoreAttrDto extends PageDto implements Serializable {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
 }

+ 13 - 0
java110-bean/src/main/java/com/java110/vo/api/store/ApiStoreDataVo.java

@@ -1,7 +1,11 @@
 package com.java110.vo.api.store;
 
+import com.java110.dto.store.StoreAttrDto;
+import com.java110.dto.store.StoreDto;
+
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 public class ApiStoreDataVo implements Serializable {
     private String storeId;
@@ -19,6 +23,7 @@ public class ApiStoreDataVo implements Serializable {
     private String storeName;
     private String storeTypeName;
     private String createTime;
+    private List<StoreAttrDto> storeAttrDtoList;
 
     public String getStoreId() {
         return storeId;
@@ -139,4 +144,12 @@ public class ApiStoreDataVo implements Serializable {
     public void setBusinessScope(String businessScope) {
         this.businessScope = businessScope;
     }
+
+    public List<StoreAttrDto> getStoreAttrDtoList() {
+        return storeAttrDtoList;
+    }
+
+    public void setStoreAttrDtoList(List<StoreAttrDto> storeAttrDtoList) {
+        this.storeAttrDtoList = storeAttrDtoList;
+    }
 }

+ 67 - 0
java110-bean/src/main/java/com/java110/vo/api/storeAttr/ApiStoreAttrDataVo.java

@@ -0,0 +1,67 @@
+package com.java110.vo.api.storeAttr;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class ApiStoreAttrDataVo implements Serializable {
+
+    private String attrId;
+private String operate;
+private String createTime;
+private String specCd;
+private String statusCd;
+private String storeId;
+private String bId;
+private String value;
+public String getAttrId() {
+        return attrId;
+    }
+public void setAttrId(String attrId) {
+        this.attrId = attrId;
+    }
+public String getOperate() {
+        return operate;
+    }
+public void setOperate(String operate) {
+        this.operate = operate;
+    }
+public String getCreateTime() {
+        return createTime;
+    }
+public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+public String getSpecCd() {
+        return specCd;
+    }
+public void setSpecCd(String specCd) {
+        this.specCd = specCd;
+    }
+public String getStatusCd() {
+        return statusCd;
+    }
+public void setStatusCd(String statusCd) {
+        this.statusCd = statusCd;
+    }
+public String getStoreId() {
+        return storeId;
+    }
+public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+public String getBId() {
+        return bId;
+    }
+public void setBId(String bId) {
+        this.bId = bId;
+    }
+public String getValue() {
+        return value;
+    }
+public void setValue(String value) {
+        this.value = value;
+    }
+
+
+
+}

+ 19 - 0
java110-bean/src/main/java/com/java110/vo/api/storeAttr/ApiStoreAttrVo.java

@@ -0,0 +1,19 @@
+package com.java110.vo.api.storeAttr;
+
+import com.java110.vo.MorePageVo;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class ApiStoreAttrVo extends MorePageVo implements Serializable {
+    List<ApiStoreAttrDataVo> storeAttrs;
+
+
+    public List<ApiStoreAttrDataVo> getStoreAttrs() {
+        return storeAttrs;
+    }
+
+    public void setStoreAttrs(List<ApiStoreAttrDataVo> storeAttrs) {
+        this.storeAttrs = storeAttrs;
+    }
+}

+ 16 - 21
java110-code-generator/src/main/resources/back/template_1.json

@@ -1,36 +1,31 @@
 {
-  "id": "communityId",
-  "name": "community",
-  "desc": "小区",
-  "shareParam": "communityId",
-  "shareColumn": "community_id",
+  "id": "attrId",
+  "name": "storeAttr",
+  "desc": "商户属性",
+  "shareParam": "storeId",
+  "shareColumn": "store_id",
   "newBusinessTypeCd": "BUSINESS_TYPE_SAVE_JUNK_REQUIREMENT",
-  "updateBusinessTypeCd": "BUSINESS_TYPE_UPDATE_JUNK_REQUIREMENT",
+  "updateBusinessTypeCd": "BUSINESS_TYPE_UPDATE_STORE_ATTR",
   "deleteBusinessTypeCd": "BUSINESS_TYPE_DELETE_COMMUNITY",
   "newBusinessTypeCdValue": "550200030001",
-  "updateBusinessTypeCdValue": "550200040001",
+  "updateBusinessTypeCdValue": "200100040003",
   "deleteBusinessTypeCdValue": "500100050011",
-  "businessTableName": "business_community",
-  "tableName": "s_community",
+  "businessTableName": "business_store_attr",
+  "tableName": "s_store_attr",
   "param": {
-    "communityId": "community_id",
-    "b_id": "bId",
-    "name": "name",
-    "address": "address",
-    "cityCode": "city_code",
-    "nearbyLandmarks": "nearby_landmarks",
-    "mapX": "map_x",
-    "mapY": "map_y",
-    "month": "month",
+    "storeId": "store_id",
+    "bId": "bId",
+    "attrId": "attr_id",
+    "specCd": "spec_cd",
+    "value": "value",
     "createTime": "create_time",
-    "state": "state",
     "statusCd": "status_cd",
     "operate": "operate"
   },
   "required": [
     {
-      "code": "communityId",
-      "msg": "小区id不能为空"
+      "code": "attrId",
+      "msg": "attrId不能为空"
     }
   ]
 }

+ 42 - 0
java110-core/src/main/java/com/java110/core/smo/storeAttr/IStoreAttrInnerServiceSMO.java

@@ -0,0 +1,42 @@
+package com.java110.core.smo.storeAttr;
+
+import com.java110.core.feign.FeignConfiguration;
+import com.java110.dto.store.StoreAttrDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.util.List;
+
+/**
+ * @ClassName IStoreAttrInnerServiceSMO
+ * @Description 商户属性接口类
+ * @Author wuxw
+ * @Date 2019/4/24 9:04
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+@FeignClient(name = "store-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/storeAttrApi")
+public interface IStoreAttrInnerServiceSMO {
+
+    /**
+     * <p>查询小区楼信息</p>
+     *
+     *
+     * @param storeAttrDto 数据对象分享
+     * @return StoreAttrDto 对象数据
+     */
+    @RequestMapping(value = "/queryStoreAttrs", method = RequestMethod.POST)
+    List<StoreAttrDto> queryStoreAttrs(@RequestBody StoreAttrDto storeAttrDto);
+
+    /**
+     * 查询<p>小区楼</p>总记录数
+     *
+     * @param storeAttrDto 数据对象分享
+     * @return 小区下的小区楼记录数
+     */
+    @RequestMapping(value = "/queryStoreAttrsCount", method = RequestMethod.POST)
+    int queryStoreAttrsCount(@RequestBody StoreAttrDto storeAttrDto);
+}

+ 173 - 0
java110-db/src/main/resources/mapper/store/StoreAttrServiceDaoImplMapper.xml

@@ -0,0 +1,173 @@
+<?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="storeAttrServiceDaoImpl">
+
+    <!-- 保存商户属性信息 add by wuxw 2018-07-03 -->
+    <insert id="saveBusinessStoreAttrInfo" parameterType="Map">
+        insert into
+            business_store_attr(attr_id,operate,create_time,spec_cd,store_id,b_id,value)
+            values (#{attrId},#{operate},#{createTime},#{specCd},#{storeId},#{bId},#{value})
+       </insert>
+
+
+    <!-- 查询商户属性信息(Business) add by wuxw 2018-07-03 -->
+    <select id="getBusinessStoreAttrInfo" parameterType="Map" resultType="Map">
+        select t.attr_id,t.attr_id attrId,t.operate,t.create_time,t.create_time createTime,t.spec_cd,t.spec_cd
+        specCd,t.store_id,t.store_id storeId,t.bId,t.value
+        from business_store_attr t
+        where 1 =1
+        <if test="attrId !=null and attrId != ''">
+            and t.attr_id= #{attrId}
+        </if>
+        <if test="operate !=null and operate != ''">
+            and t.operate= #{operate}
+        </if>
+        <if test="createTime !=null and createTime != ''">
+            and t.create_time= #{createTime}
+        </if>
+        <if test="specCd !=null and specCd != ''">
+            and t.spec_cd= #{specCd}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
+        <if test="bId !=null and bId != ''">
+            and t.bId= #{bId}
+        </if>
+        <if test="value !=null and value != ''">
+            and t.value= #{value}
+        </if>
+
+    </select>
+
+
+    <!-- 保存商户属性信息至 instance表中 add by wuxw 2018-07-03 -->
+    <insert id="saveStoreAttrInfoInstance" parameterType="Map">
+        insert into s_store_attr(
+        attr_id,create_time,spec_cd,status_cd,store_id,bId,value
+        ) select t.attr_id,t.create_time,t.spec_cd,'0',t.store_id,t.bId,t.value from business_store_attr t where 1=1
+        <if test="attrId !=null and attrId != ''">
+            and t.attr_id= #{attrId}
+        </if>
+        and t.operate= 'ADD'
+        <if test="createTime !=null and createTime != ''">
+            and t.create_time= #{createTime}
+        </if>
+        <if test="specCd !=null and specCd != ''">
+            and t.spec_cd= #{specCd}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
+        <if test="bId !=null and bId != ''">
+            and t.bId= #{bId}
+        </if>
+        <if test="value !=null and value != ''">
+            and t.value= #{value}
+        </if>
+
+    </insert>
+
+
+    <!-- 查询商户属性信息 add by wuxw 2018-07-03 -->
+    <select id="getStoreAttrInfo" parameterType="Map" resultType="Map">
+        select
+            t.attr_id,t.attr_id attrId,
+            t.create_time,t.create_time createTime,
+            t.spec_cd,t.spec_cd specCd,
+            t.status_cd,t.status_cd statusCd,
+            t.store_id,t.store_id storeId,
+            t.b_id, t.b_id bId,
+            t.value
+        from s_store_attr t
+        where 1 =1
+        <if test="attrId !=null and attrId != ''">
+            and t.attr_id= #{attrId}
+        </if>
+        <if test="createTime !=null and createTime != ''">
+            and t.create_time= #{createTime}
+        </if>
+        <if test="specCd !=null and specCd != ''">
+            and t.spec_cd= #{specCd}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
+        <if test="bId !=null and bId != ''">
+            and t.b_id= #{bId}
+        </if>
+        <if test="value !=null and value != ''">
+            and t.value= #{value}
+        </if>
+        order by t.create_time desc
+        <if test="page != -1 and page != null ">
+            limit #{page}, #{row}
+        </if>
+
+    </select>
+
+
+    <!-- 修改商户属性信息 add by wuxw 2018-07-03 -->
+    <update id="updateStoreAttrInfoInstance" parameterType="Map">
+        update s_store_attr t set t.status_cd = #{statusCd}
+        <if test="newBId != null and newBId != ''">
+            ,t.b_id = #{newBId}
+        </if>
+        <if test="createTime !=null and createTime != ''">
+            , t.create_time= #{createTime}
+        </if>
+        <if test="specCd !=null and specCd != ''">
+            , t.spec_cd= #{specCd}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            , t.store_id= #{storeId}
+        </if>
+        <if test="value !=null and value != ''">
+            , t.value= #{value}
+        </if>
+        where 1=1
+        <if test="attrId !=null and attrId != ''">
+            and t.attr_id= #{attrId}
+        </if>
+        <if test="bId !=null and bId != ''">
+            and t.bId= #{bId}
+        </if>
+
+    </update>
+
+    <!-- 查询商户属性数量 add by wuxw 2018-07-03 -->
+    <select id="queryStoreAttrsCount" parameterType="Map" resultType="Map">
+        select count(1) count
+        from s_store_attr t
+        where 1 =1
+        <if test="attrId !=null and attrId != ''">
+            and t.attr_id= #{attrId}
+        </if>
+        <if test="createTime !=null and createTime != ''">
+            and t.create_time= #{createTime}
+        </if>
+        <if test="specCd !=null and specCd != ''">
+            and t.spec_cd= #{specCd}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
+        <if test="bId !=null and bId != ''">
+            and t.bId= #{bId}
+        </if>
+        <if test="value !=null and value != ''">
+            and t.value= #{value}
+        </if>
+
+
+    </select>
+
+</mapper>

+ 5 - 3
java110-db/src/main/resources/mapper/store/StoreServiceDaoImplMapper.xml

@@ -154,9 +154,11 @@
 
     <!-- 查询商户属性信息 add by wuxw 2018-07-03 -->
     <select id="getStoreAttrs" parameterType="Map" resultType="Map">
-        select sa.b_id,sa.attr_id,sa.attr_id attrId,sa.store_id, sa.store_id storeId,sa.spec_cd,sa.spec_cd
-        specCd,sa.value,sa.status_cd
-        from s_store_attr sa
+        select
+            sa.b_id,sa.attr_id,sa.attr_id attrId,
+            sa.store_id, sa.store_id storeId,sa.spec_cd,sa.spec_cd specCd,sa.value,sa.status_cd,
+            c.name
+        from s_store_attr sa inner join spec c on sa.spec_cd = c.spec_cd
         where
         1=1
         <if test="statusCd != null and statusCd != ''">

+ 4 - 0
java110-utils/src/main/java/com/java110/utils/constant/BusinessTypeConstant.java

@@ -146,6 +146,10 @@ public class BusinessTypeConstant {
      */
     public static final String BUSINESS_TYPE_UPDATE_STORE_INFO = "200100040001";
 
+
+    //修改商户属性
+    public static final String BUSINESS_TYPE_UPDATE_STORE_ATTR = "200100040003";
+
     /**
      * 商户成员退出信息
      */

+ 31 - 0
java110-utils/src/main/java/com/java110/utils/constant/ServiceCodeStoreAttrConstant.java

@@ -0,0 +1,31 @@
+package com.java110.utils.constant;
+
+/**
+ * 商户属性常量类
+ * Created by wuxw on 2017/5/20.
+ */
+public class ServiceCodeStoreAttrConstant {
+
+    /**
+     * 添加 商户属性
+     */
+    public static final String ADD_STOREATTR = "storeAttr.saveStoreAttr";
+
+
+    /**
+     * 修改 商户属性
+     */
+    public static final String UPDATE_STOREATTR = "storeAttr.updateStoreAttr";
+    /**
+     * 删除 商户属性
+     */
+    public static final String DELETE_STOREATTR = "storeAttr.deleteStoreAttr";
+
+
+    /**
+     * 查询 商户属性
+     */
+    public static final String LIST_STOREATTRS = "storeAttr.listStoreAttrs";
+
+
+}