Browse Source

修改小区楼开发完成

wuxw 7 years ago
parent
commit
3a7fbbdc34
27 changed files with 948 additions and 574 deletions
  1. 7 6
      Api/src/main/java/com/java110/api/listener/AbstractServiceApiDataFlowListener.java
  2. 121 0
      Api/src/main/java/com/java110/api/listener/floor/EditFloorListener.java
  3. 6 5
      Api/src/main/java/com/java110/api/listener/floor/SaveFloorListener.java
  4. 38 38
      CommunityService/src/main/java/com/java110/community/listener/floor/UpdateFloorInfoListener.java
  5. 41 0
      WebService/src/main/java/com/java110/web/components/floor/EditFloorComponent.java
  6. 33 16
      WebService/src/main/java/com/java110/web/core/VueComponentElement.java
  7. 8 0
      WebService/src/main/java/com/java110/web/smo/IFloorServiceSMO.java
  8. 38 0
      WebService/src/main/java/com/java110/web/smo/impl/FloorServiceSMOImpl.java
  9. 1 1
      WebService/src/main/resources/components/add-floor/addFloor.html
  10. 0 5
      WebService/src/main/resources/components/add-floor/addFloor.js
  11. 32 0
      WebService/src/main/resources/components/edit-floor/editFloor.html
  12. 111 0
      WebService/src/main/resources/components/edit-floor/editFloor.js
  13. 2 1
      WebService/src/main/resources/components/floor/listFloor.html
  14. 3 0
      WebService/src/main/resources/components/floor/listFloor.js
  15. 14 5
      WebService/src/main/resources/components/loading/loading.js
  16. 0 6
      WebService/src/main/resources/components/store-enter-community/storeEnterCommunity.js
  17. 6 0
      WebService/src/main/resources/static/js/core.js
  18. 1 0
      WebService/src/main/resources/views/index.html
  19. 1 0
      WebService/src/main/resources/views/init_company.html
  20. 1 0
      WebService/src/main/resources/views/login.html
  21. 1 0
      WebService/src/main/resources/views/privilege.html
  22. 1 0
      WebService/src/main/resources/views/register.html
  23. 1 0
      WebService/src/main/resources/views/staff.html
  24. 1 0
      WebService/src/main/resources/views/staffPrivilege.html
  25. 2 1
      java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java
  26. 459 475
      java110-common/src/main/java/com/java110/common/util/StringUtil.java
  27. 19 15
      java110-core/src/main/java/com/java110/core/base/smo/BaseServiceSMO.java

+ 7 - 6
Api/src/main/java/com/java110/api/listener/AbstractServiceApiDataFlowListener.java

@@ -15,16 +15,15 @@ import com.java110.event.service.api.ServiceDataFlowListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.*;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.HttpServerErrorException;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.client.HttpStatusCodeException;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * Created by wuxw on 2018/11/15.
@@ -34,6 +33,8 @@ public abstract class AbstractServiceApiDataFlowListener implements ServiceDataF
     private static Logger logger = LoggerFactory.getLogger(AbstractServiceApiDataFlowListener.class);
 
     protected static final int DEFAULT_ORDER = 1;
+    //默认序列
+    protected static final int DEFAULT_SEQ = 1;
 
     @Autowired
     private RestTemplate restTemplate;

+ 121 - 0
Api/src/main/java/com/java110/api/listener/floor/EditFloorListener.java

@@ -0,0 +1,121 @@
+package com.java110.api.listener.floor;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.listener.AbstractServiceApiDataFlowListener;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.CommonConstant;
+import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.util.Assert;
+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 org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * @ClassName EditFloorListener
+ * @Description TODO 编辑小区楼信息
+ * @Author wuxw
+ * @Date 2019/4/28 15:19
+ * @Version 1.0
+ * add by wuxw 2019/4/28
+ **/
+@Java110Listener("editFloorListener")
+public class EditFloorListener extends AbstractServiceApiDataFlowListener {
+
+    private static Logger logger = LoggerFactory.getLogger(EditFloorListener.class);
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_EDIT_FLOOR;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+    @Override
+    public void soService(ServiceDataFlowEvent event) {
+
+        logger.debug("ServiceDataFlowEvent : {}", event);
+
+        DataFlowContext dataFlowContext = event.getDataFlowContext();
+        AppService service = event.getAppService();
+
+        String paramIn = dataFlowContext.getReqData();
+
+        //校验数据
+        validate(paramIn);
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+
+        HttpHeaders header = new HttpHeaders();
+        //dataFlowContext.getRequestCurrentHeaders().put(CommonConstant.HTTP_USER_ID, "-1");
+        dataFlowContext.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+
+
+        //添加小区楼
+        businesses.add(editFloor(paramObj));
+
+
+        JSONObject paramInObj = super.restToCenterProtocol(businesses, dataFlowContext.getRequestCurrentHeaders());
+
+        //将 rest header 信息传递到下层服务中去
+        super.freshHttpHeader(header, dataFlowContext.getRequestCurrentHeaders());
+
+        ResponseEntity<String> responseEntity = this.callService(dataFlowContext, service.getServiceCode(), paramInObj);
+
+        dataFlowContext.setResponseEntity(responseEntity);
+    }
+
+
+    /**
+     * 数据校验
+     *
+     * @param paramIn "communityId": "7020181217000001",
+     *                "memberId": "3456789",
+     *                "memberTypeCd": "390001200001"
+     */
+    private void validate(String paramIn) {
+        Assert.jsonObjectHaveKey(paramIn, "floorId", "请求报文中未包含floorId");
+        Assert.jsonObjectHaveKey(paramIn, "floorName", "请求报文中未包含floorName");
+        Assert.jsonObjectHaveKey(paramIn, "userId", "请求报文中未包含userId");
+        Assert.jsonObjectHaveKey(paramIn, "floorNum", "请求报文中未包含floorNum");
+        Assert.jsonObjectHaveKey(paramIn, "communityId", "请求报文中未包含communityId");
+    }
+
+    /**
+     * 添加小区楼信息
+     *
+     * @param paramInJson 接口调用放传入入参
+     * @return 订单服务能够接受的报文
+     */
+    private JSONObject editFloor(JSONObject paramInJson) {
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_FLOOR_INFO);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessFloor = new JSONObject();
+        businessFloor.put("floorId", paramInJson.getString("floorId"));
+        businessFloor.put("name", paramInJson.getString("name"));
+        businessFloor.put("remark", paramInJson.getString("remark"));
+        businessFloor.put("userId", paramInJson.getString("userId"));
+        businessFloor.put("floorNum", paramInJson.getString("floorNum"));
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessFloor", businessFloor);
+
+        return business;
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+}

+ 6 - 5
Api/src/main/java/com/java110/api/listener/floor/SaveFloorListener.java

@@ -3,15 +3,17 @@ package com.java110.api.listener.floor;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.api.listener.AbstractServiceApiDataFlowListener;
-import com.java110.common.cache.MappingCache;
-import com.java110.common.constant.*;
+import com.java110.common.constant.BusinessTypeConstant;
+import com.java110.common.constant.CommonConstant;
+import com.java110.common.constant.CommunityMemberTypeConstant;
+import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.constant.StatusConstant;
 import com.java110.common.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.AppService;
 import com.java110.event.service.api.ServiceDataFlowEvent;
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpHeaders;
@@ -31,8 +33,7 @@ import org.springframework.http.ResponseEntity;
 public class SaveFloorListener extends AbstractServiceApiDataFlowListener {
 
 
-    //默认序列
-    private static final int DEFAULT_SEQ = 1;
+
     private static final int DEFAULT_SEQ_COMMUNITY_MEMBER = 2;
 
 

+ 38 - 38
CommunityService/src/main/java/com/java110/community/listener/floor/UpdateFloorInfoListener.java

@@ -22,7 +22,7 @@ import java.util.Map;
 
 /**
  * 修改小区楼信息 侦听
- *
+ * <p>
  * 处理节点
  * 1、businessFloor:{} 小区楼基本信息节点
  * 2、businessFloorAttr:[{}] 小区楼属性信息节点
@@ -35,7 +35,7 @@ import java.util.Map;
 @Transactional
 public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlowListener {
 
-    private final static Logger logger = LoggerFactory.getLogger(UpdateFloorInfoListener.class);
+    private static Logger logger = LoggerFactory.getLogger(UpdateFloorInfoListener.class);
     @Autowired
     IFloorServiceDao floorServiceDaoImpl;
 
@@ -51,6 +51,7 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
 
     /**
      * business过程
+     *
      * @param dataFlowContext
      * @param business
      */
@@ -59,25 +60,25 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
 
         JSONObject data = business.getDatas();
 
-        Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理");
+        Assert.notEmpty(data, "没有datas 节点,或没有子节点需要处理");
 
         //处理 businessFloor 节点
-        if(data.containsKey("businessFloor")){
+        if (data.containsKey("businessFloor")) {
             //处理 businessFloor 节点
-            if(data.containsKey("businessFloor")){
+            if (data.containsKey("businessFloor")) {
                 Object _obj = data.get("businessFloor");
                 JSONArray businessFloors = null;
-                if(_obj instanceof JSONObject){
+                if (_obj instanceof JSONObject) {
                     businessFloors = new JSONArray();
                     businessFloors.add(_obj);
-                }else {
-                    businessFloors = (JSONArray)_obj;
+                } else {
+                    businessFloors = (JSONArray) _obj;
                 }
                 //JSONObject businessFloor = data.getJSONObject("businessFloor");
-                for (int _floorIndex = 0; _floorIndex < businessFloors.size();_floorIndex++) {
+                for (int _floorIndex = 0; _floorIndex < businessFloors.size(); _floorIndex++) {
                     JSONObject businessFloor = businessFloors.getJSONObject(_floorIndex);
                     doBusinessFloor(business, businessFloor);
-                    if(_obj instanceof JSONObject) {
+                    if (_obj instanceof JSONObject) {
                         dataFlowContext.addParamOut("floorId", businessFloor.getString("floorId"));
                     }
                 }
@@ -88,8 +89,9 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
 
     /**
      * business to instance 过程
+     *
      * @param dataFlowContext 数据对象
-     * @param business 当前业务对象
+     * @param business        当前业务对象
      */
     @Override
     protected void doBusinessToInstance(DataFlowContext dataFlowContext, Business business) {
@@ -97,17 +99,17 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
         JSONObject data = business.getDatas();
 
         Map info = new HashMap();
-        info.put("bId",business.getbId());
-        info.put("operate",StatusConstant.OPERATE_ADD);
+        info.put("bId", business.getbId());
+        info.put("operate", StatusConstant.OPERATE_ADD);
 
         //小区楼信息
         List<Map> businessFloorInfos = floorServiceDaoImpl.getBusinessFloorInfo(info);
-        if( businessFloorInfos != null && businessFloorInfos.size() >0) {
-            for (int _floorIndex = 0; _floorIndex < businessFloorInfos.size();_floorIndex++) {
+        if (businessFloorInfos != null && businessFloorInfos.size() > 0) {
+            for (int _floorIndex = 0; _floorIndex < businessFloorInfos.size(); _floorIndex++) {
                 Map businessFloorInfo = businessFloorInfos.get(_floorIndex);
-                flushBusinessFloorInfo(businessFloorInfo,StatusConstant.STATUS_CD_VALID);
+                flushBusinessFloorInfo(businessFloorInfo, StatusConstant.STATUS_CD_VALID);
                 floorServiceDaoImpl.updateFloorInfoInstance(businessFloorInfo);
-                if(businessFloorInfo.size() == 1) {
+                if (businessFloorInfo.size() == 1) {
                     dataFlowContext.addParamOut("floorId", businessFloorInfo.get("floor_id"));
                 }
             }
@@ -117,8 +119,9 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
 
     /**
      * 撤单
+     *
      * @param dataFlowContext 数据对象
-     * @param business 当前业务对象
+     * @param business        当前业务对象
      */
     @Override
     protected void doRecover(DataFlowContext dataFlowContext, Business business) {
@@ -126,24 +129,24 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
         String bId = business.getbId();
         //Assert.hasLength(bId,"请求报文中没有包含 bId");
         Map info = new HashMap();
-        info.put("bId",bId);
-        info.put("statusCd",StatusConstant.STATUS_CD_VALID);
+        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);
+        delInfo.put("bId", business.getbId());
+        delInfo.put("operate", StatusConstant.OPERATE_DEL);
         //小区楼信息
         List<Map> floorInfo = floorServiceDaoImpl.getFloorInfo(info);
-        if(floorInfo != null && floorInfo.size() > 0){
+        if (floorInfo != null && floorInfo.size() > 0) {
 
             //小区楼信息
             List<Map> businessFloorInfos = floorServiceDaoImpl.getBusinessFloorInfo(delInfo);
             //除非程序出错了,这里不会为空
-            if(businessFloorInfos == null || businessFloorInfos.size() == 0){
-                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_INNER_ERROR,"撤单失败(floor),程序内部异常,请检查! "+delInfo);
+            if (businessFloorInfos == null || businessFloorInfos.size() == 0) {
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_INNER_ERROR, "撤单失败(floor),程序内部异常,请检查! " + delInfo);
             }
-            for (int _floorIndex = 0; _floorIndex < businessFloorInfos.size();_floorIndex++) {
+            for (int _floorIndex = 0; _floorIndex < businessFloorInfos.size(); _floorIndex++) {
                 Map businessFloorInfo = businessFloorInfos.get(_floorIndex);
-                flushBusinessFloorInfo(businessFloorInfo,StatusConstant.STATUS_CD_VALID);
+                flushBusinessFloorInfo(businessFloorInfo, StatusConstant.STATUS_CD_VALID);
                 floorServiceDaoImpl.updateFloorInfoInstance(businessFloorInfo);
             }
         }
@@ -151,23 +154,23 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
     }
 
 
-
     /**
      * 处理 businessFloor 节点
-     * @param business 总的数据节点
+     *
+     * @param business      总的数据节点
      * @param businessFloor 小区楼节点
      */
-    private void doBusinessFloor(Business business,JSONObject businessFloor){
+    private void doBusinessFloor(Business business, JSONObject businessFloor) {
 
-        Assert.jsonObjectHaveKey(businessFloor,"floorId","businessFloor 节点下没有包含 floorId 节点");
+        Assert.jsonObjectHaveKey(businessFloor, "floorId", "businessFloor 节点下没有包含 floorId 节点");
 
-        if(businessFloor.getString("floorId").startsWith("-")){
-            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR,"floorId 错误,不能自动生成(必须已经存在的floorId)"+businessFloor);
+        if (businessFloor.getString("floorId").startsWith("-")) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR, "floorId 错误,不能自动生成(必须已经存在的floorId)" + businessFloor);
         }
         //自动保存DEL
-        autoSaveDelBusinessFloor(business,businessFloor);
+        autoSaveDelBusinessFloor(business, businessFloor);
 
-        businessFloor.put("bId",business.getbId());
+        businessFloor.put("bId", business.getbId());
         businessFloor.put("operate", StatusConstant.OPERATE_ADD);
         //保存小区楼信息
         floorServiceDaoImpl.saveBusinessFloorInfo(businessFloor);
@@ -175,8 +178,6 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
     }
 
 
-
-
     public IFloorServiceDao getFloorServiceDaoImpl() {
         return floorServiceDaoImpl;
     }
@@ -186,5 +187,4 @@ public class UpdateFloorInfoListener extends AbstractFloorBusinessServiceDataFlo
     }
 
 
-
 }

+ 41 - 0
WebService/src/main/java/com/java110/web/components/floor/EditFloorComponent.java

@@ -0,0 +1,41 @@
+package com.java110.web.components.floor;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IFloorServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName EditFloorComponent
+ * @Description TODO 编辑小区楼信息
+ * @Author wuxw
+ * @Date 2019/4/28 15:10
+ * @Version 1.0
+ * add by wuxw 2019/4/28
+ **/
+
+@Component("editFloor")
+public class EditFloorComponent {
+    @Autowired
+    private IFloorServiceSMO floorServiceSMOImpl;
+
+    /**
+     * 修改小区楼信息
+     *
+     * @param pd 页面数据封装
+     * @return 返回ResponseEntity对象
+     */
+    public ResponseEntity<String> changeFloor(IPageData pd) {
+        return floorServiceSMOImpl.editFloor(pd);
+    }
+
+
+    public IFloorServiceSMO getFloorServiceSMOImpl() {
+        return floorServiceSMOImpl;
+    }
+
+    public void setFloorServiceSMOImpl(IFloorServiceSMO floorServiceSMOImpl) {
+        this.floorServiceSMOImpl = floorServiceSMOImpl;
+    }
+}

+ 33 - 16
WebService/src/main/java/com/java110/web/core/VueComponentElement.java

@@ -1,11 +1,12 @@
 package com.java110.web.core;
 
-import com.alibaba.fastjson.JSONObject;
-import com.java110.web.smo.impl.LoginServiceSMOImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.thymeleaf.Arguments;
-import org.thymeleaf.dom.*;
+import org.thymeleaf.dom.Document;
+import org.thymeleaf.dom.Element;
+import org.thymeleaf.dom.Macro;
+import org.thymeleaf.dom.Node;
 import org.thymeleaf.processor.element.AbstractMarkupSubstitutionElementProcessor;
 import org.thymeleaf.util.DOMUtils;
 
@@ -19,7 +20,9 @@ import java.util.List;
  */
 public class VueComponentElement extends AbstractMarkupSubstitutionElementProcessor {
 
-    private final static Logger logger = LoggerFactory.getLogger(VueComponentElement.class);
+    private static Logger logger = LoggerFactory.getLogger(VueComponentElement.class);
+
+    private static final String DIV_PROPERTY_COMPONENT = "data-component";
 
 
     protected VueComponentElement(String elementName) {
@@ -33,28 +36,31 @@ public class VueComponentElement extends AbstractMarkupSubstitutionElementProces
         List<Node> nodes = new ArrayList<>();
         //获取模板名称
         String componentName = element.getAttributeValue("name");
-        logger.debug("正在解析组件{}",componentName);
-        String html = VueComponentTemplate.findTemplateByComponentCode(componentName+"."+VueComponentTemplate.COMPONENT_HTML);
-        if(html == null){
-            throw new RuntimeException("在缓存中未找到组件【"+componentName+"】");
+        logger.debug("正在解析组件{}", componentName);
+        String html = VueComponentTemplate.findTemplateByComponentCode(componentName + "." + VueComponentTemplate.COMPONENT_HTML);
+        if (html == null) {
+            throw new RuntimeException("在缓存中未找到组件【" + componentName + "】");
         }
         //List<Node> tmpNodes = DOMUtils.getHtml5DOMFor(new StringReader(html)).getChildren();
-        List<Node> tmpNodes = DOMUtils.getLegacyHTML5DOMFor(new StringReader(html)).getChildren();
-        for(Node tmpNode : tmpNodes) {
+        Document tmpDoc = DOMUtils.getLegacyHTML5DOMFor(new StringReader(html));
+        List<Node> tmpNodes = tmpDoc.getChildren();
+
+        addDataComponent(tmpDoc, componentName);
+        for (Node tmpNode : tmpNodes) {
             nodes.add(tmpNode);
         }
         //css
-        String css = VueComponentTemplate.findTemplateByComponentCode(componentName+"."+VueComponentTemplate.COMPONENT_CSS);
-        if(css != null){
-            css = "<style type=\"text/css\">" + css +"</style>";
+        String css = VueComponentTemplate.findTemplateByComponentCode(componentName + "." + VueComponentTemplate.COMPONENT_CSS);
+        if (css != null) {
+            css = "<style type=\"text/css\">" + css + "</style>";
             Node nodeCss = new Macro(css);
             nodes.add(nodeCss);
         }
 
         //js
-        String js = VueComponentTemplate.findTemplateByComponentCode(componentName+"."+VueComponentTemplate.COMPONENT_JS);
-        if(js != null){
-            js = "<script type=\"text/javascript\">//<![CDATA[ \n" + js +"//]]>\n</script>";
+        String js = VueComponentTemplate.findTemplateByComponentCode(componentName + "." + VueComponentTemplate.COMPONENT_JS);
+        if (js != null) {
+            js = "<script type=\"text/javascript\">//<![CDATA[ \n" + js + "//]]>\n</script>";
             Node nodeJs = new Macro(js);
             nodes.add(nodeJs);
         }
@@ -63,6 +69,17 @@ public class VueComponentElement extends AbstractMarkupSubstitutionElementProces
         return nodes;
     }
 
+    /**
+     * 加入组件名称到 HTML中 方便定位问题
+     *
+     * @param tmpDoc        页面节点
+     * @param componentCode 组件编码
+     */
+    private void addDataComponent(Document tmpDoc, String componentCode) {
+        Element tmpElement = tmpDoc.getFirstElementChild();
+        tmpElement.setAttribute(DIV_PROPERTY_COMPONENT, componentCode);
+    }
+
     @Override
     public int getPrecedence() {
         return 1000;

+ 8 - 0
WebService/src/main/java/com/java110/web/smo/IFloorServiceSMO.java

@@ -23,4 +23,12 @@ public interface IFloorServiceSMO {
      * @return 返回 ResponseEntity对象包含 http状态 信息 body信息
      */
     ResponseEntity<String> saveFloor(IPageData pd);
+
+    /**
+     * 编辑小区楼信息
+     *
+     * @param pd 页面数据封装对象
+     * @return 返回 ResponseEntity对象包含 http状态 信息 body信息
+     */
+    ResponseEntity<String> editFloor(IPageData pd);
 }

+ 38 - 0
WebService/src/main/java/com/java110/web/smo/impl/FloorServiceSMOImpl.java

@@ -85,6 +85,9 @@ public class FloorServiceSMOImpl extends BaseComponentSMO implements IFloorServi
 
         validateSaveFloor(pd);
 
+        //校验员工是否有权限操作
+        super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.PRIVILEGE_FLOOR);
+
         JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
         String communityId = paramIn.getString("communityId");
         ResponseEntity responseEntity = super.getStoreInfo(pd, restTemplate);
@@ -106,6 +109,41 @@ public class FloorServiceSMOImpl extends BaseComponentSMO implements IFloorServi
         return responseEntity;
     }
 
+    /**
+     * 编辑小区楼信息
+     *
+     * @param pd 页面数据封装对象
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> editFloor(IPageData pd) {
+
+        validateSaveFloor(pd);
+
+        //校验员工是否有权限操作
+        super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.PRIVILEGE_FLOOR);
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        String communityId = paramIn.getString("communityId");
+        ResponseEntity responseEntity = super.getStoreInfo(pd, restTemplate);
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            return responseEntity;
+        }
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(), "storeId", "根据用户ID查询商户ID失败,未包含storeId节点");
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(), "storeTypeCd", "根据用户ID查询商户类型失败,未包含storeTypeCd节点");
+
+        String storeId = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeId");
+        String storeTypeCd = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeTypeCd");
+        //数据校验是否 商户是否入驻该小区
+        super.checkStoreEnterCommunity(pd, storeId, storeTypeCd, communityId, restTemplate);
+        paramIn.put("userId", pd.getUserId());
+        responseEntity = this.callCenterService(restTemplate, pd, paramIn.toJSONString(),
+                ServiceConstant.SERVICE_API_URL + "/api/floor.editFloor",
+                HttpMethod.POST);
+
+        return responseEntity;
+    }
+
     /**
      * 校验保存小区楼 信息
      *

+ 1 - 1
WebService/src/main/resources/components/add-floor/addFloor.html

@@ -1,4 +1,4 @@
-<div id = "addFloorModel" vc-data="addFloorComponent" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" >
+<div id = "addFloorModel" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" >
     <div class="modal-dialog modal-lg">
         <div class="modal-content">
             <div class="modal-body">

+ 0 - 5
WebService/src/main/resources/components/add-floor/addFloor.js

@@ -58,10 +58,8 @@
                 });
             },
             saveFloorInfo:function(){
-                vc.loading('open');
                 if(!vc.component.addFloorValidate()){
                     vc.component.addFloorInfo.errorInfo = vc.validate.errInfo;
-                    vc.loading('close');
 
                     return ;
                 }
@@ -83,19 +81,16 @@
                             $('#addFloorModel').modal('hide');
                             vc.component.clearAddFloorInfo();
                             vc.emit('listFloor','listFloorData',{});
-                            vc.loading('close');
 
                             return ;
                         }
                         vc.component.addFloorInfo.errorInfo = json;
-                             vc.loading('close');
 
                      },
                      function(errInfo,error){
                         console.log('请求失败处理');
 
                         vc.component.addFloorInfo.errorInfo = errInfo;
-                             vc.loading('close');
 
                      });
             },

+ 32 - 0
WebService/src/main/resources/components/edit-floor/editFloor.html

@@ -0,0 +1,32 @@
+<div id = "editFloorModel" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" >
+    <div class="modal-dialog modal-lg">
+        <div class="modal-content">
+            <div class="modal-body">
+                <h3 class="m-t-none m-b ">添加小区楼</h3>
+                <div class="ibox-content">
+                    <div>
+                        <p style="color:red;">{{editFloorInfo.errorInfo}}</p>
+                        <div>
+                            <div class="form-group row">
+                                <label class="col-sm-2 col-form-label">楼名称</label>
+                                <div class="col-sm-10"><input v-model="editFloorInfo.floorName" type="text" placeholder="必填,请填写名称" class="form-control"></div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-sm-2 col-form-label">楼编号</label>
+                                <div class="col-sm-10"><input v-model="editFloorInfo.floorNum" type="email" placeholder="必填,请填写编号" class="form-control"></div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-sm-2 col-form-label">备注</label>
+                                <div class="col-sm-10"><input v-model="editFloorInfo.remark" type="tel" placeholder="可填,请填写备注" class="form-control"></div>
+                            </div>
+                            <div class="ibox-content">
+                                <button class="btn btn-primary float-right" type="button" v-on:click="editFloorInfo()" ><i class="fa fa-check"></i>&nbsp;修改</button>
+                                <button type="button" class="btn btn-warning float-right" style="margin-right:20px;" data-dismiss="modal">取消</button>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 111 - 0
WebService/src/main/resources/components/edit-floor/editFloor.js

@@ -0,0 +1,111 @@
+(function(vc){
+
+    vc.extends({
+        data:{
+            editFloorInfo:{
+                floorId:'',
+                floorName:'',
+                floorNum:'',
+                remark:'',
+                errorInfo:''
+            }
+        },
+         _initMethod:function(){
+
+         },
+         _initEvent:function(){
+            vc.on('editFloor','openEditFloorModal',function(_floor){
+                vc.component.editFloorInfo = _floor;
+                $('#editFloorModel').modal('show');
+            });
+        },
+        methods:{
+            editFloorValidate(){
+                return vc.validate.validate({
+                    editFloorInfo:vc.component.editFloorInfo
+                },{
+                    'editFloorInfo.floorName':[
+                        {
+                            limit:"required",
+                            param:"",
+                            errInfo:"楼名称不能为空"
+                        },
+                        {
+                            limit:"maxin",
+                            param:"2,10",
+                            errInfo:"楼名称长度必须在2位至10位"
+                        },
+                    ],
+                    'editFloorInfo.floorNum':[
+                        {
+                            limit:"required",
+                            param:"",
+                            errInfo:"楼编号不能为空"
+                        },
+                        {
+                            limit:"num",
+                            param:"",
+                            errInfo:"不是有效的数字"
+                        },
+                    ],
+                    'editFloorInfo.remark':[
+
+                        {
+                            limit:"maxLength",
+                            param:"200",
+                            errInfo:"备注长度不能超过200位"
+                        }
+                    ]
+
+                });
+            },
+            saveFloorInfo:function(){
+
+                if(!vc.component.editFloorValidate()){
+                    vc.component.editFloorInfo.errorInfo = vc.validate.errInfo;
+                    return ;
+                }
+
+                vc.component.editFloorInfo.errorInfo = "";
+
+                vc.component.editFloorInfo.communityId = vc.getCurrentCommunity().communityId;
+                vc.http.post(
+                    'editFloor',
+                    'changeFloor',
+                    JSON.stringify(vc.component.editFloorInfo),
+                    {
+                        emulateJSON:true
+                     },
+                     function(json,res){
+                        //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                        if(res.status == 200){
+                            //关闭model
+                            $('#editFloorModel').modal('hide');
+                            vc.component.clearEditFloorInfo();
+                            vc.emit('listFloor','listFloorData',{});
+
+                            return ;
+                        }
+                        vc.component.editFloorInfo.errorInfo = json;
+
+                     },
+                     function(errInfo,error){
+                        console.log('请求失败处理');
+
+                        vc.component.editFloorInfo.errorInfo = errInfo;
+
+                     });
+            },
+            clearEditFloorInfo:function(){
+                vc.component.editFloorInfo = {
+                                            floorId:'',
+                                            floorName:'',
+                                            floorNum:'',
+                                            remark:'',
+                                            errorInfo:''
+                                        };
+            }
+        }
+    });
+
+})(window.vc);

+ 2 - 1
WebService/src/main/resources/components/floor/listFloor.html

@@ -45,7 +45,7 @@
                             </td>
                             <td class="text-right">
                                 <div class="btn-group">
-                                    <button class="btn-white btn btn-xs" v-on:click="_openDelFloorModel(floor)">修改</button>
+                                    <button class="btn-white btn btn-xs" v-on:click="_openEditFloorModel(floor)">修改</button>
                                 </div>
                                 <div class="btn-group">
                                     <button class="btn-white btn btn-xs" v-on:click="_openDelFloorModel(floor)">删除</button>
@@ -68,5 +68,6 @@
     </div>
 
     <vc:create name="addFloor"></vc:create>
+    <vc:create name="editFloor"></vc:create>
 
 </div>

+ 3 - 0
WebService/src/main/resources/components/floor/listFloor.js

@@ -47,6 +47,9 @@
             },
             _openDelFloorModel:function(_floor){ // 打开删除对话框
 
+            },
+            _openEditFloorModel:function(_floor){
+                vc.emit('editFloor','openEditFloorModal',_floor);
             }
         }
     })

+ 14 - 5
WebService/src/main/resources/components/loading/loading.js

@@ -5,6 +5,7 @@
         data:{
             loadingInfo:{
                 hide:true,
+                count:0,
             }
         },
         mounted:function(){
@@ -16,8 +17,8 @@
     });
 
     vm.$on('loading_openLoading',function(){
-                    console.log("开始加载");
-                    vm.loadingInfo.hide = false;
+        console.log("开始加载");
+        vm.loadingInfo.hide = false;
     });
     vm.$on('loading_closeLoading',function(){
         console.log("结束加载");
@@ -27,12 +28,20 @@
         加载遮罩层
     **/
     vc.loading = function(_flag){
-        console.log('操作加载层');
+
         if(_flag == 'open'){
-            vm.$emit('loading_openLoading',{});
+            vm.loadingInfo.count ++;
+            if(vm.loadingInfo.count == 1){
+                vm.$emit('loading_openLoading',{});
+            }
             return ;
         }
 
-        vm.$emit('loading_closeLoading',{});
+        vm.loadingInfo.count --;
+
+        if(vm.loadingInfo.count == 0){
+            vm.$emit('loading_closeLoading',{});
+        }
+
     }
 })(window.vc)

+ 0 - 6
WebService/src/main/resources/components/store-enter-community/storeEnterCommunity.js

@@ -46,7 +46,6 @@
 //                     });
 //            },
             listNoEnterCommunity:function(){
-                    vc.loading('open');
                     var param = {
                         params:{
                             communityName:vc.component.storeEnterCommunityInfo.searchCommunityName
@@ -59,15 +58,12 @@
                                  param,
                                  function(json,res){
                                     vc.component.storeEnterCommunityInfo.communityInfo=JSON.parse(json);
-                                    vc.loading('close');
                                  },function(errInfo,error){
                                     console.log('请求失败处理');
-                                    vc.loading('close');
                                  }
                    );
              },
             _saveEnterCommunity:function(_communityInfo){
-                vc.loading('open');
                 var _param = {
                     communityId:_communityInfo.communityId
                 };
@@ -84,14 +80,12 @@
                                     });
                                     $('#storeEnterCommunityModel').modal('hide');
 
-                                    vc.loading('close');
                                     return ;
                                 }
                                 vc.component.storeEnterCommunityInfo.errorInfo = json;
                              },function(errInfo,error){
                                 console.log('请求失败处理');
                                 vc.component.storeEnterCommunityInfo.errorInfo = json;
-                                vc.loading('close');
 
                              }
                            );

+ 6 - 0
WebService/src/main/resources/static/js/core.js

@@ -58,19 +58,25 @@
 (function(vc){
     vc.http = {
         post:function(componentCode,componentMethod,param,options,successCallback,errorCallback){
+                vc.loading('open');
                 Vue.http.post('/callComponent/'+componentCode +"/"+componentMethod, param, options)
                 .then(function(res){
                     successCallback(res.bodyText,res);
+                    vc.loading('close');
                 }, function(error){
                     errorCallback(error.bodyText,error);
+                    vc.loading('close');
                 });
         },
         get:function(componentCode,componentMethod,param,successCallback,errorCallback){
+                vc.loading('open');
                 Vue.http.get('/callComponent/'+componentCode +"/"+componentMethod, param)
                 .then(function(res){
                     successCallback(res.bodyText,res);
+                    vc.loading('close');
                 }, function(error){
                     errorCallback(error.bodyText,error);
+                    vc.loading('close');
                 });
         }
 

+ 1 - 0
WebService/src/main/resources/views/index.html

@@ -9,6 +9,7 @@
     <vc:create name="commonTop"></vc:create>
 </head>
 <body>
+<vc:create name="loading"></vc:create>
 <div id="wrapper">
     <vc:create name="menu"></vc:create>
 

+ 1 - 0
WebService/src/main/resources/views/init_company.html

@@ -18,6 +18,7 @@
 </head>
 
 <body class="gray-bg">
+<vc:create name="loading"></vc:create>
 <div >
     <vc:create name="company"></vc:create>
 

+ 1 - 0
WebService/src/main/resources/views/login.html

@@ -17,6 +17,7 @@
 </head>
 
 <body class="gray-bg">
+<vc:create name="loading"></vc:create>
 <div id="component" class="middle-box text-center loginscreen animated fadeInDown">
     <vc:create name="login"></vc:create>
 

+ 1 - 0
WebService/src/main/resources/views/privilege.html

@@ -9,6 +9,7 @@
     <vc:create name="commonTop"></vc:create>
 </head>
 <body>
+<vc:create name="loading"></vc:create>
 <div id="wrapper">
     <vc:create name="menu"></vc:create>
 

+ 1 - 0
WebService/src/main/resources/views/register.html

@@ -16,6 +16,7 @@
 </head>
 
 <body class="gray-bg">
+<vc:create name="loading"></vc:create>
 <div id="component" class="middle-box text-center loginscreen animated fadeInDown">
     <vc:create name="register"></vc:create>
 

+ 1 - 0
WebService/src/main/resources/views/staff.html

@@ -9,6 +9,7 @@
     <vc:create name="commonTop"></vc:create>
 </head>
 <body>
+<vc:create name="loading"></vc:create>
 <div id="wrapper">
     <vc:create name="menu"></vc:create>
 

+ 1 - 0
WebService/src/main/resources/views/staffPrivilege.html

@@ -9,6 +9,7 @@
     <vc:create name="commonTop"></vc:create>
 </head>
 <body>
+<vc:create name="loading"></vc:create>
 <div id="wrapper">
     <vc:create name="menu"></vc:create>
 

+ 2 - 1
java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java

@@ -361,5 +361,6 @@ public class ServiceCodeConstant {
     // 保存小区楼信息
     public static final String SERVICE_CODE_SAVE_FLOOR = "floor.saveFloor";
 
-
+    // 编辑小区楼信息
+    public static final String SERVICE_CODE_EDIT_FLOOR = "floor.editFloor";
 }

+ 459 - 475
java110-common/src/main/java/com/java110/common/util/StringUtil.java

@@ -23,479 +23,463 @@ import java.util.regex.Pattern;
  */
 
 public class StringUtil {
-	/**
-	 * Description: 格式化字符串(用户组建表使用) <br>
-	 *
-	 * @param name
-	 * @return String
-	 */
-	public static String formatString(String name) {
-		String s = "0000000000" + name;
-		return s.substring(s.length() - 10, s.length());
-	}
-
-	/**
-	 * Description:把GBK转码成ISO8859_1 <br>
-	 *
-	 * @param name
-	 * @return String
-	 */
-	public static String getStringByISO(String name) {
-		try {
-			// 防止中文字符出现乱码
-			name = new String(name.getBytes("GBK"), "ISO8859_1");
-		} catch (UnsupportedEncodingException e2) {
-		}
-
-		return name;
-	}
-
-	/**
-	 * Description:获得格式化的url <br>
-	 *
-	 * @param url
-	 * @return String
-	 */
-	public static String getFormatUrl(String url) {
-		if (isNullOrNone(url)) {
-			return "";
-		}
-
-		if (url.indexOf('?') == -1) {
-			return url + '?';
-		} else {
-			return url + '&';
-		}
-	}
-
-	/**
-	 * Description: 获得字符(byte)的实际长度<br>
-	 * 1、…<br>
-	 * 2、…<br>
-	 * 3、…<br>
-	 * 4、…<br>
-	 *
-	 * @param s
-	 * @return int
-	 * @exception/throws
-	 */
-	public static int lengthByte(String s) {
-		int length = 0;
-		for (int i = 0; i < s.length(); i++) {
-			if (s.charAt(i) <= 127) {
-				length++;
-			} else {
-				length = length + 2;
-			}
-		}
-		return length;
-	}
-
-	/**
-	 * Description: 在jdbc用thin客户端连接oracle里面中文算3个字符<br>
-	 *
-	 * @param s
-	 * @return int
-	 * @exception/throws
-	 */
-	public static int lengthByteInPrepared(String s) {
-		int length = 0;
-
-		if (s == null) {
-			return length;
-		}
-
-		for (int i = 0; i < s.length(); i++) {
-			if (s.charAt(i) <= 127) {
-				length++;
-			} else {
-				length = length + 3;
-			}
-		}
-		return length;
-	}
-
-	/**
-	 * Description:判断字段空null <br>
-	 *
-	 * @param s
-	 * @return boolean
-	 */
-	public static boolean isNullOrNone(String s) {
-		if (s == null || "".equals(s.trim())) {
-			return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 *
-	 * Description: 判断对象是否为空<br>
-	 *
-	 * @param obj
-	 * @return boolean
-	 * @exception/throws [违例类型] [违例说明]
-	 */
-	public static boolean isNullOrNone(Object obj) {
-		if (obj == null) {
-			return true;
-		}
-		if (obj instanceof String) {
-			return isNullOrNone((String) obj);
-		}
-		return false;
-	}
-
-	/**
-	 * Description:判断字段空null <br>
-	 *
-	 * @param ss
-	 * @return boolean
-	 */
-	public static boolean isNullOrNone(String[] ss) {
-		if (ss == null || ss.length == 0) {
-			return true;
-		}
-
-		for (int i = 0; i < ss.length; i++) {
-			if (ss[i] == null || "".equals(ss[i].trim())) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	public static int countChar(String src, char c) {
-		if (isNullOrNone(src)) {
-			return 0;
-		}
-
-		int k = 0;
-		for (int i = 0; i < src.length(); i++) {
-			if (src.charAt(i) == c) {
-				k++;
-			}
-		}
-
-		return k;
-	}
-
-	/**
-	 * 把'变成 ''
-	 *
-	 * @param src
-	 * @return
-	 */
-	public static String oracleString(String src) {
-		if (isNullOrNone(src)) {
-			return "";
-		}
-
-		return src.replaceAll("'", "''");
-	}
-
-	/**
-	 * 替换函数
-	 *
-	 * @param
-	 *            source
-	 * @param
-	 *            find
-	 * @param
-	 *            rep
-	 * @return String
-	 */
-	public static String replace(String source, String find, String rep) {
-		String result = source;
-		String begin = "";
-		String end = "";
-		int flag;
-
-		flag = result.indexOf(find, 0);
-
-		while (flag != -1) {
-			begin = result.substring(0, flag);
-			end = result.substring(flag + (find.length()), result.length());
-			result = begin + rep + end;
-			flag = result.indexOf(find, flag + rep.length());
-		}
-		return result;
-	}
-
-	/**
-	 * 保护截断
-	 *
-	 * @param s
-	 * @param begin
-	 * @param end
-	 * @return
-	 */
-	public static String truncate(String s, int begin, int end) {
-		if (isNullOrNone(s)) {
-			return "";
-		}
-
-		if (begin < 0) {
-			return "";
-		}
-
-		if (begin >= end) {
-			return "";
-		}
-
-		s = s.trim();
-		if (begin >= s.length()) {
-			return "";
-		}
-
-		if (end >= s.length()) {
-			return s;
-		} else {
-			return s.substring(begin, end);
-		}
-	}
-
-	/**
-	 *
-	 * Description: 判断是否为数字<br>
-	 * 1、…<br>
-	 * 2、…<br>
-	 * 3、…<br>
-	 * 4、…<br>
-	 *
-	 * @param str
-	 * @return boolean
-	 * @exception/throws [违例类型] [违例说明]
-	 */
-	public static boolean isNumber(String str) {
-		if (null == str || "".equals(str)) {
-			return false;
-		} else {
-			return Pattern.matches("^[0-9]+$", str);
-		}
-	}
-
-	/**
-	 * Description: 获得字符(byte)的实际长度<br>
-	 * 1、…<br>
-	 * 2、…<br>
-	 * 3、…<br>
-	 * 4、…<br>
-	 *
-	 * @param s
-	 * @return int
-	 * @exception/throws
-	 */
-	public static int realLength(String s) {
-		if (null == s || "".equals(s)) {
-			return 0;
-		} else {
-			return s.getBytes().length;
-		}
-	}
-
-	/**
-	 * Description: 检查非法字符<br>
-	 */
-	public static boolean isUnlawfulChar(String s) {
-		if (null == s || "".equals(s)) {
-			return false;
-		} else {
-			return Pattern.matches("^[^`~@#\\$%\\^&\\*\\(\\)=\\!\\+\\\\/\\|<>\\?;\\:\\.'\"\\{\\}\\[\\]??, ]*$", s);
-		}
-	}
-
-	/**
-	 *
-	 * Description: 判断是否为字母<br>
-	 * 1、…<br>
-	 * 2、…<br>
-	 * 3、…<br>
-	 * 4、…<br>
-	 *
-	 * @param str
-	 * @return boolean
-	 * @exception/throws [违例类型] [违例说明]
-	 */
-	public static boolean isLetter(String str) {
-		if (null == str || "".equals(str)) {
-			return false;
-		} else {
-			return Pattern.matches("^[A-Za-z]+$", str);
-		}
-	}
-
-	/**
-	 * (source != null) ? source : "";相当于oracle的nvl函数
-	 *
-	 * @param source
-	 * @return String
-	 */
-	public static String nvl(String source) {
-		return (source != null) ? source.trim() : "";
-	}
-
-	/**
-	 * Method nvl.
-	 *
-	 * @param source
-	 *            String
-	 * @param defaultString
-	 *            String
-	 * @return String
-	 */
-	public static String nvl(String source, String defaultString) {
-		return (source != null) ? source.trim() : defaultString;
-	}
-
-	/**
-	 * 实现对符合条件的字符串的反转
-	 *
-	 * @param str
-	 *            原始字符串
-	 * @return 经过反转处理后的字符串
-	 */
-	public static String reverseString(String str) {
-		StringBuffer resultStringBuffer = new StringBuffer();
-		String[] allStr = str.split(" ");
-		StringBuffer sb = new StringBuffer(); // 保存需要进行反转的字符串
-		for (int i = 0; i < allStr.length; i++) {
-			if (meetReverseCondition(allStr[i])) {
-				sb.delete(0, sb.length());
-
-				// 将需要反转的字符串反转后添加到结果字符串
-				resultStringBuffer.append(sb.append(allStr[i]).reverse()).append(" ");
-			} else {
-				resultStringBuffer.append(allStr[i]).append(" ");
-			}
-		}
-
-		return resultStringBuffer.deleteCharAt(resultStringBuffer.length() - 1).toString();
-	}
-
-	/**
-	 * 判断字符串是否符合反转条件 本函数被reverseString(String str)调用
-	 *
-	 * @param str
-	 *            需要进行反转处理的字符串
-	 * @return true 符合反转条件 false 不符合反转条件
-	 */
-	private static boolean meetReverseCondition(String str) {
-		// 如果字符串是以'*'开头并且长度大于1,并且第二个字符是英文,汉字或数字
-		return (str.charAt(0) == '*') && (str.length() > 1) && Character.isLetterOrDigit(str.charAt(1));
-	}
-
-	/**
-	 *
-	 * 取字符串的前maxLength长度的字串(一个中文字符为2个长度)
-	 *
-	 *
-	 * @param str
-	 * @param maxLength
-	 * @return String throws
-	 */
-	public static String splitStr(String str, int maxLength) {
-		if (maxLength <= 0) {
-			return "";
-		}
-		String result = str;
-		byte[] bytes = str.getBytes();
-		if (bytes.length > maxLength) {
-
-			result = new String(bytes, 0, maxLength);
-			if (!result.substring(result.length() - 1).equals(str.substring(result.length() - 1, result.length()))) {
-				result = new String(bytes, 0, maxLength - 1);
-			}
-		}
-
-		return result;
-	}
-
-	/**
-	 * 判断是否存在
-	 *
-	 * @param filterStr
-	 * @param id
-	 * @return boolean
-	 */
-	public static boolean isExists(String filterStr, String id) {
-		String[] filterTag = filterStr.split(",");
-		for (int i = 0; i < filterTag.length; i++) {
-			if (id.equals(filterTag[i])) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * 格式化时间
-	 *
-	 * @param
-	 *            dt
-	 * @param
-	 *            format
-	 * @return String
-	 */
-	public static String getTime(Date dt, String format) {
-		String time = null;
-		java.text.DateFormat df = new java.text.SimpleDateFormat(format);
-		time = df.format(dt);
-
-		return time;
-	}
-
-	public static String[] stringToArray(String str, String start, String end, String split) {
-		if (null == str || "".equals(str))
-			return null;
-		if (str.indexOf(start) == -1 || str.indexOf(end) == -1 || str.indexOf(split) == -1)
-			return new String[] { str };
-		return str.substring(str.indexOf(start) + 1, str.indexOf(end)).split(split);
-	}
-
-	/**
-	 * 判断字符串是否为null或者空
-	 *
-	 * @param str
-	 * @return
-	 */
-	public static boolean isEmpty(String str) {
-		return str == null || "".equals(str);
-	}
-
-	/**
-	 * 获取指定长度(按字节长度获取)的字符串,中文算2个字节长度,兼容oracle的 varchar2长度计算方式
-	 *
-	 * @param src
-	 *            源字符串
-	 * @param length
-	 *            长度
-	 * @return
-	 */
-	public static String getSubStr(String src, int length) {
-		if (StringUtil.isEmpty(src)) {
-			return null;
-		}
-		byte[] b = src.getBytes();
-		if (b.length > length) {
-			byte[] s = new byte[length];
-			for (int i = 0; i < length; i++) {
-				s[i] = b[i];
-			}
-			return new String(s);
-		} else {
-			return src;
-		}
-	}
-
-	public static String truncateMessage(String description, int length) {
-		org.springframework.util.Assert.state(length > 0);
-		if ((description != null) && (description.length() > length)) {
-			return description.substring(0, length);
-		}
-
-		return description;
-	}
+    /**
+     * Description: 格式化字符串(用户组建表使用) <br>
+     *
+     * @param name
+     * @return String
+     */
+    public static String formatString(String name) {
+        String s = "0000000000" + name;
+        return s.substring(s.length() - 10, s.length());
+    }
+
+    /**
+     * Description:把GBK转码成ISO8859_1 <br>
+     *
+     * @param name
+     * @return String
+     */
+    public static String getStringByISO(String name) {
+        try {
+            // 防止中文字符出现乱码
+            name = new String(name.getBytes("GBK"), "ISO8859_1");
+        } catch (UnsupportedEncodingException e2) {
+        }
+
+        return name;
+    }
+
+    /**
+     * Description:获得格式化的url <br>
+     *
+     * @param url
+     * @return String
+     */
+    public static String getFormatUrl(String url) {
+        if (isNullOrNone(url)) {
+            return "";
+        }
+
+        if (url.indexOf('?') == -1) {
+            return url + '?';
+        } else {
+            return url + '&';
+        }
+    }
+
+    /**
+     * Description: 获得字符(byte)的实际长度<br>
+     * 1、…<br>
+     * 2、…<br>
+     * 3、…<br>
+     * 4、…<br>
+     *
+     * @param s
+     * @return int
+     * @exception/throws
+     */
+    public static int lengthByte(String s) {
+        int length = 0;
+        for (int i = 0; i < s.length(); i++) {
+            if (s.charAt(i) <= 127) {
+                length++;
+            } else {
+                length = length + 2;
+            }
+        }
+        return length;
+    }
+
+    /**
+     * Description: 在jdbc用thin客户端连接oracle里面中文算3个字符<br>
+     *
+     * @param s
+     * @return int
+     * @exception/throws
+     */
+    public static int lengthByteInPrepared(String s) {
+        int length = 0;
+
+        if (s == null) {
+            return length;
+        }
+
+        for (int i = 0; i < s.length(); i++) {
+            if (s.charAt(i) <= 127) {
+                length++;
+            } else {
+                length = length + 3;
+            }
+        }
+        return length;
+    }
+
+    /**
+     * Description:判断字段空null <br>
+     *
+     * @param s
+     * @return boolean
+     */
+    public static boolean isNullOrNone(String s) {
+        if (s == null || "".equals(s.trim())) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Description: 判断对象是否为空<br>
+     *
+     * @param obj
+     * @return boolean
+     * @exception/throws [违例类型] [违例说明]
+     */
+    public static boolean isNullOrNone(Object obj) {
+        if (obj == null) {
+            return true;
+        }
+        if (obj instanceof String) {
+            return isNullOrNone((String) obj);
+        }
+        return false;
+    }
+
+    /**
+     * Description:判断字段空null <br>
+     *
+     * @param ss
+     * @return boolean
+     */
+    public static boolean isNullOrNone(String[] ss) {
+        if (ss == null || ss.length == 0) {
+            return true;
+        }
+
+        for (int i = 0; i < ss.length; i++) {
+            if (ss[i] == null || "".equals(ss[i].trim())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public static int countChar(String src, char c) {
+        if (isNullOrNone(src)) {
+            return 0;
+        }
+
+        int k = 0;
+        for (int i = 0; i < src.length(); i++) {
+            if (src.charAt(i) == c) {
+                k++;
+            }
+        }
+
+        return k;
+    }
+
+    /**
+     * 把'变成 ''
+     *
+     * @param src
+     * @return
+     */
+    public static String oracleString(String src) {
+        if (isNullOrNone(src)) {
+            return "";
+        }
+
+        return src.replaceAll("'", "''");
+    }
+
+    /**
+     * 替换函数
+     *
+     * @param source
+     * @param find
+     * @param rep
+     * @return String
+     */
+    public static String replace(String source, String find, String rep) {
+        String result = source;
+        String begin = "";
+        String end = "";
+        int flag;
+
+        flag = result.indexOf(find, 0);
+
+        while (flag != -1) {
+            begin = result.substring(0, flag);
+            end = result.substring(flag + (find.length()), result.length());
+            result = begin + rep + end;
+            flag = result.indexOf(find, flag + rep.length());
+        }
+        return result;
+    }
+
+    /**
+     * 保护截断
+     *
+     * @param s
+     * @param begin
+     * @param end
+     * @return
+     */
+    public static String truncate(String s, int begin, int end) {
+        if (isNullOrNone(s)) {
+            return "";
+        }
+
+        if (begin < 0) {
+            return "";
+        }
+
+        if (begin >= end) {
+            return "";
+        }
+
+        s = s.trim();
+        if (begin >= s.length()) {
+            return "";
+        }
+
+        if (end >= s.length()) {
+            return s;
+        } else {
+            return s.substring(begin, end);
+        }
+    }
+
+    /**
+     * Description: 判断是否为数字<br>
+     * 1、…<br>
+     * 2、…<br>
+     * 3、…<br>
+     * 4、…<br>
+     *
+     * @param str
+     * @return boolean
+     * @exception/throws [违例类型] [违例说明]
+     */
+    public static boolean isNumber(String str) {
+        if (null == str || "".equals(str)) {
+            return false;
+        } else {
+            return Pattern.matches("^[0-9]+$", str);
+        }
+    }
+
+    /**
+     * Description: 获得字符(byte)的实际长度<br>
+     * 1、…<br>
+     * 2、…<br>
+     * 3、…<br>
+     * 4、…<br>
+     *
+     * @param s
+     * @return int
+     * @exception/throws
+     */
+    public static int realLength(String s) {
+        if (null == s || "".equals(s)) {
+            return 0;
+        } else {
+            return s.getBytes().length;
+        }
+    }
+
+    /**
+     * Description: 检查非法字符<br>
+     */
+    public static boolean isUnlawfulChar(String s) {
+        if (null == s || "".equals(s)) {
+            return false;
+        } else {
+            return Pattern.matches("^[^`~@#\\$%\\^&\\*\\(\\)=\\!\\+\\\\/\\|<>\\?;\\:\\.'\"\\{\\}\\[\\]??, ]*$", s);
+        }
+    }
+
+    /**
+     * Description: 判断是否为字母<br>
+     * 1、…<br>
+     * 2、…<br>
+     * 3、…<br>
+     * 4、…<br>
+     *
+     * @param str
+     * @return boolean
+     * @exception/throws [违例类型] [违例说明]
+     */
+    public static boolean isLetter(String str) {
+        if (null == str || "".equals(str)) {
+            return false;
+        } else {
+            return Pattern.matches("^[A-Za-z]+$", str);
+        }
+    }
+
+    /**
+     * (source != null) ? source : "";相当于oracle的nvl函数
+     *
+     * @param source
+     * @return String
+     */
+    public static String nvl(String source) {
+        return (source != null) ? source.trim() : "";
+    }
+
+    /**
+     * Method nvl.
+     *
+     * @param source        String
+     * @param defaultString String
+     * @return String
+     */
+    public static String nvl(String source, String defaultString) {
+        return (source != null) ? source.trim() : defaultString;
+    }
+
+    /**
+     * 实现对符合条件的字符串的反转
+     *
+     * @param str 原始字符串
+     * @return 经过反转处理后的字符串
+     */
+    public static String reverseString(String str) {
+        StringBuffer resultStringBuffer = new StringBuffer();
+        String[] allStr = str.split(" ");
+        StringBuffer sb = new StringBuffer(); // 保存需要进行反转的字符串
+        for (int i = 0; i < allStr.length; i++) {
+            if (meetReverseCondition(allStr[i])) {
+                sb.delete(0, sb.length());
+
+                // 将需要反转的字符串反转后添加到结果字符串
+                resultStringBuffer.append(sb.append(allStr[i]).reverse()).append(" ");
+            } else {
+                resultStringBuffer.append(allStr[i]).append(" ");
+            }
+        }
+
+        return resultStringBuffer.deleteCharAt(resultStringBuffer.length() - 1).toString();
+    }
+
+    /**
+     * 判断字符串是否符合反转条件 本函数被reverseString(String str)调用
+     *
+     * @param str 需要进行反转处理的字符串
+     * @return true 符合反转条件 false 不符合反转条件
+     */
+    private static boolean meetReverseCondition(String str) {
+        // 如果字符串是以'*'开头并且长度大于1,并且第二个字符是英文,汉字或数字
+        return (str.charAt(0) == '*') && (str.length() > 1) && Character.isLetterOrDigit(str.charAt(1));
+    }
+
+    /**
+     * 取字符串的前maxLength长度的字串(一个中文字符为2个长度)
+     *
+     * @param str
+     * @param maxLength
+     * @return String throws
+     */
+    public static String splitStr(String str, int maxLength) {
+        if (maxLength <= 0) {
+            return "";
+        }
+        String result = str;
+        byte[] bytes = str.getBytes();
+        if (bytes.length > maxLength) {
+
+            result = new String(bytes, 0, maxLength);
+            if (!result.substring(result.length() - 1).equals(str.substring(result.length() - 1, result.length()))) {
+                result = new String(bytes, 0, maxLength - 1);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 判断是否存在
+     *
+     * @param filterStr
+     * @param id
+     * @return boolean
+     */
+    public static boolean isExists(String filterStr, String id) {
+        String[] filterTag = filterStr.split(",");
+        for (int i = 0; i < filterTag.length; i++) {
+            if (id.equals(filterTag[i])) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 格式化时间
+     *
+     * @param dt
+     * @param format
+     * @return String
+     */
+    public static String getTime(Date dt, String format) {
+        String time = null;
+        java.text.DateFormat df = new java.text.SimpleDateFormat(format);
+        time = df.format(dt);
+
+        return time;
+    }
+
+    public static String[] stringToArray(String str, String start, String end, String split) {
+        if (null == str || "".equals(str))
+            return null;
+        if (str.indexOf(start) == -1 || str.indexOf(end) == -1 || str.indexOf(split) == -1)
+            return new String[]{str};
+        return str.substring(str.indexOf(start) + 1, str.indexOf(end)).split(split);
+    }
+
+    /**
+     * 判断字符串是否为null或者空
+     *
+     * @param str
+     * @return
+     */
+    public static boolean isEmpty(String str) {
+        return str == null || "".equals(str);
+    }
+
+    /**
+     * 获取指定长度(按字节长度获取)的字符串,中文算2个字节长度,兼容oracle的 varchar2长度计算方式
+     *
+     * @param src    源字符串
+     * @param length 长度
+     * @return
+     */
+    public static String getSubStr(String src, int length) {
+        if (StringUtil.isEmpty(src)) {
+            return null;
+        }
+        byte[] b = src.getBytes();
+        if (b.length > length) {
+            byte[] s = new byte[length];
+            for (int i = 0; i < length; i++) {
+                s[i] = b[i];
+            }
+            return new String(s);
+        } else {
+            return src;
+        }
+    }
+
+    public static String truncateMessage(String description, int length) {
+        org.springframework.util.Assert.state(length > 0);
+        if ((description != null) && (description.length() > length)) {
+            return description.substring(0, length);
+        }
+
+        return description;
+    }
 }

+ 19 - 15
java110-core/src/main/java/com/java110/core/base/smo/BaseServiceSMO.java

@@ -4,6 +4,7 @@ package com.java110.core.base.smo;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.common.constant.CommonConstant;
 import com.java110.common.util.ProtocolUtil;
+import com.java110.common.util.StringUtil;
 import com.java110.core.base.AppBase;
 import com.java110.core.context.AppContext;
 import com.java110.core.context.IPageData;
@@ -30,8 +31,9 @@ public class BaseServiceSMO extends AppBase {
 
     /**
      * 主键生成
+     *
      * @param iPrimaryKeyService 主键生成服务对象
-     * @param type 主键类型 如 OL_ID , CUST_ID
+     * @param type               主键类型 如 OL_ID , CUST_ID
      * @return
      * @throws Exception
      */
@@ -43,13 +45,13 @@ public class BaseServiceSMO extends AppBase {
         //要求接口返回 {"RESULT_CODE":"0000","RESULT_INFO":{"user_id":"7020170411000041"},"RESULT_MSG":"成功"}
         String custIdJSONStr = iPrimaryKeyService.queryPrimaryKey(data.toJSONString());
         JSONObject custIdJSONTmp = JSONObject.parseObject(custIdJSONStr);
-        if(custIdJSONTmp.containsKey("RESULT_CODE")
+        if (custIdJSONTmp.containsKey("RESULT_CODE")
                 && ProtocolUtil.RETURN_MSG_SUCCESS.equals(custIdJSONTmp.getString("RESULT_CODE"))
-                && custIdJSONTmp.containsKey("RESULT_INFO")){
+                && custIdJSONTmp.containsKey("RESULT_INFO")) {
             //从接口生成olId
-            targetId =  custIdJSONTmp.getJSONObject("RESULT_INFO").getString(type);
+            targetId = custIdJSONTmp.getJSONObject("RESULT_INFO").getString(type);
         }
-        if("-1".equals(targetId)) {
+        if ("-1".equals(targetId)) {
             throw new RuntimeException("调用主键生成服务服务失败," + custIdJSONStr);
         }
 
@@ -58,26 +60,27 @@ public class BaseServiceSMO extends AppBase {
 
     /**
      * 调用中心服务
+     *
      * @return
      */
-    protected ResponseEntity<String> callCenterService(RestTemplate restTemplate,IPageData pd, String param, String url, HttpMethod httpMethod){
+    protected ResponseEntity<String> callCenterService(RestTemplate restTemplate, IPageData pd, String param, String url, HttpMethod httpMethod) {
         ResponseEntity<String> responseEntity = null;
         HttpHeaders header = new HttpHeaders();
         header.add(CommonConstant.HTTP_APP_ID.toLowerCase(), CommonConstant.HC_WEB_APP_ID);
-        header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), CommonConstant.ORDER_DEFAULT_USER_ID);
+        header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), StringUtil.isEmpty(pd.getUserId()) ? CommonConstant.ORDER_DEFAULT_USER_ID : pd.getUserId());
         header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), pd.getTransactionId());
         header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), pd.getRequestTime());
         header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
         HttpEntity<String> httpEntity = new HttpEntity<String>(param, header);
-        logger.debug("请求中心服务信息,{}",httpEntity);
-        try{
+        logger.debug("请求中心服务信息,{}", httpEntity);
+        try {
             responseEntity = restTemplate.exchange(url, httpMethod, httpEntity, String.class);
-        }catch (HttpStatusCodeException e){ //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
-            responseEntity = new ResponseEntity<String>("请求下游系统异常,"+e.getResponseBodyAsString(),e.getStatusCode());
-        }catch (Exception e){
+        } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
+            responseEntity = new ResponseEntity<String>("请求下游系统异常," + e.getResponseBodyAsString(), e.getStatusCode());
+        } catch (Exception e) {
             responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }finally {
-            logger.debug("请求中心服务信息,{}",responseEntity);
+        } finally {
+            logger.debug("请求中心服务信息,{}", responseEntity);
             return responseEntity;
         }
 
@@ -86,9 +89,10 @@ public class BaseServiceSMO extends AppBase {
 
     /**
      * 创建上下文对象
+     *
      * @return
      */
-    protected AppContext createApplicationContext(){
+    protected AppContext createApplicationContext() {
         return AppContext.newInstance();
     }