1
0
zcb 4 роки тому
батько
коміт
df02367e56

+ 2 - 1
eccs-biz/build.gradle

@@ -10,8 +10,9 @@ dependencies {
     implementation "io.springfox:springfox-swagger-ui:${swagger}"
     implementation "mysql:mysql-connector-java:${mysql}"
     implementation project(':eccs-framework')
+
 }
 
 test {
 
-}
+}

+ 5 - 5
eccs-biz/src/main/java/com/emato/biz/service/impl/MallInveMngServiceImpl.java

@@ -9,7 +9,7 @@ import java.util.Map;
 import com.alibaba.fastjson.JSONArray;
 import com.emato.biz.config.KmallConfig;
 import com.emato.common.utils.DateUtils;
-import com.emato.common.utils.oms.request.OkHttpUtils;
+import com.emato.common.utils.oms.OkHttpUtils;
 import okhttp3.Request;
 import okhttp3.RequestBody;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -128,14 +128,14 @@ public class MallInveMngServiceImpl implements IMallInveMngService
             sPara.put("page", page+"");
             sPara.put("pageSize", pageSize+"");
             //构造RequestBody
-            RequestBody requestBody = OkHttpUtils.buildRequestBody(sPara);
+//            RequestBody requestBody = OkHttpUtils.buildRequestBody(sPara);
 
             //构建Request
             String url =  KmallConfig.getQueryAllInveMngUrl();
-            Request request = OkHttpUtils.buildRequest(url,requestBody);
+            Request request = OkHttpUtils.buildRequest(sPara,url);
 
             // 同步访问,返回结果字符串
-            response = OkHttpUtils.post(request);
+            response = OkHttpUtils.post(request,null);
             List<MallInveMng> mallInveMngs = JSONArray.parseArray(response, MallInveMng.class);
             if(mallInveMngs == null || mallInveMngs.size() == 0){
                 return 0;
@@ -152,7 +152,7 @@ public class MallInveMngServiceImpl implements IMallInveMngService
                 mallInveMng.setGoodsName(mallInveMng.getName());
                 mallInveMngMapper.saveOrUpdate(mallInveMng);
             }
-        } catch (IOException e) {
+        } catch (Exception e) {
             e.printStackTrace();
 
             return 0;

+ 66 - 14
eccs-biz/src/main/java/com/emato/biz/service/impl/OWbInveMngServiceImpl.java

@@ -1,5 +1,6 @@
 package com.emato.biz.service.impl;
 
+import java.io.IOException;
 import java.util.*;
 
 import com.alibaba.fastjson.JSON;
@@ -7,9 +8,16 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.emato.biz.config.OmsConfig;
 import com.emato.common.utils.DateUtils;
-import com.emato.common.utils.oms.request.OkHttpUtils;
+import com.emato.common.utils.oms.OkHttpUtils;
 import com.emato.common.utils.oms.request.OmsSign;
 import okhttp3.Request;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -137,7 +145,7 @@ public class OWbInveMngServiceImpl implements IOWbInveMngService
         data.put("limit",querySize.toString());
 
 
-        Map<String, String> sParaTemp = new TreeMap<String, String>();
+        Map sParaTemp = new TreeMap();
         sParaTemp.put("data", JSON.toJSONString(data));
         sParaTemp.put("merchId",OmsConfig.getMerchSn());
         String timestamp = String.valueOf(System.currentTimeMillis()/1000);
@@ -150,26 +158,21 @@ public class OWbInveMngServiceImpl implements IOWbInveMngService
         //构建Request
         String  url = OmsConfig.getQueryMngInveUrl();
 //        url = "http://127.0.0.1:8680/al/shop/order/query";
-        Request request = OkHttpUtils.buildRequest(url, JSON.toJSONString(sParaTemp));
+        String jsonParam = JSONObject.toJSONString(sParaTemp);
+        Request request = OkHttpUtils.buildRequest(jsonParam,url,"");
         LOGGER.info("oms的请求报文:" + request);
         // 同步访问,返回结果字符串
         String responseString = null;
         try {
+            url = "http://120.76.26.84:8680/al/queryOmsInfo/queryInveMng";
+            JSONObject jsonObject = httpPost(url,JSONObject.parseObject(jsonParam));
+//            responseString = OkHttpUtils.post(request,null);
 
-            responseString = OkHttpUtils.post(request);
 
-        } catch (Exception e) {
-            e.printStackTrace();
-            LOGGER.error(e.getMessage());
-            return 1;
-//            throw e;
-        }
-
-        try {
-            LOGGER.info("oms的响应报文"+responseString);
+            LOGGER.info("oms的响应报文"+jsonObject.toString());
 
             //解析响应数据
-            JSONObject jsonObject = JSONObject.parseObject(responseString);
+//            JSONObject jsonObject = JSONObject.parseObject(responseString);
             JSONArray result = (JSONArray) jsonObject.get("data");
             Object msg = jsonObject.get("msg");
             Object code = jsonObject.get("code");
@@ -200,4 +203,53 @@ public class OWbInveMngServiceImpl implements IOWbInveMngService
 
         return 0;
     }
+
+
+    public static JSONObject httpPost(String url, JSONObject jsonParam)
+    {
+        // post请求返回结果
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        JSONObject jsonResult = null;
+        HttpPost httpPost = new HttpPost(url);
+        // 设置请求和传输超时时间
+//        httpPost.setConfig(requestConfig);
+        try
+        {
+            if (null != jsonParam)
+            {
+                // 解决中文乱码问题
+                StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
+                entity.setContentEncoding("UTF-8");
+                entity.setContentType("application/json");
+                httpPost.setEntity(entity);
+            }
+            CloseableHttpResponse result = httpClient.execute(httpPost);
+            // 请求发送成功,并得到响应
+            if (result.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
+            {
+                String str = "";
+                try
+                {
+                    // 读取服务器返回过来的json字符串数据
+                    str = EntityUtils.toString(result.getEntity(), "utf-8");
+                    // 把json字符串转换成json对象
+                    jsonResult = JSONObject.parseObject(str);
+                }
+                catch (Exception e)
+                {
+                    LOGGER.error("post请求提交失败:" + url, e);
+                }
+            }
+        }
+        catch (IOException e)
+        {
+            LOGGER.error("post请求提交失败:" + url, e);
+        }
+        finally
+        {
+            httpPost.releaseConnection();
+        }
+        return jsonResult;
+    }
+
 }

+ 37 - 37
eccs-biz/src/main/resources/oms-config.yml

@@ -39,55 +39,55 @@ oms:
 #  queryShopMoveUrl: http://127.0.0.1:8680/al/queryOmsInfo/queryShopMove
   # 测试环境
   # 查询商户信息接口
-  queryMerchantInfoUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryMerchantInfoUrl
-  # 查询第三方商户信息接口
-  queryThirdMerchantInfoUrl:
-  # 查询库存接口
-  queryMngInveUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryInveMng
-  # 查询门店库存接口
-  queryShopMngInveUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopInveMng
-  # 查询入库单接口
-  queryInveReceiptUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryInveReceiptGoods
-  # 查询入库单明细接口
-  queryInveReceiptDetailUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryInveReceiptGoods
-  # 查询结转接口
-  queryAdjustmentUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryAdjustmentRecord
-  # 查询结转明细接口
-  queryAdjustmentDetailUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryAdjustmentDetail
-  # 查询出区接口
-  queryInveShipmentUrl:
-  # 查询出区明细接口
-  queryInveShipmentDetailUrl:
-  # 查询门店进货接口
-  queryShopInUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopIn
-  # 查询门店出场接口
-  queryShopOutUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopOut
-  # 查询门店转移接口
-  queryShopMoveUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopMove
-  # 生产环境 ws.ds-bay.com
-#  # 查询商户信息接口
-#  queryMerchantInfoUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryMerchantInfoUrl
+#  queryMerchantInfoUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryMerchantInfoUrl
 #  # 查询第三方商户信息接口
 #  queryThirdMerchantInfoUrl:
 #  # 查询库存接口
-#  queryMngInveUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryInveMng
+#  queryMngInveUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryInveMng
 #  # 查询门店库存接口
-#  queryShopMngInveUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryShopInveMng
+#  queryShopMngInveUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopInveMng
 #  # 查询入库单接口
-#  queryInveReceiptUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryInveReceiptGoods
+#  queryInveReceiptUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryInveReceiptGoods
 #  # 查询入库单明细接口
-#  queryInveReceiptDetailUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryInveReceiptGoods
+#  queryInveReceiptDetailUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryInveReceiptGoods
 #  # 查询结转接口
-#  queryAdjustmentUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryAdjustmentRecord
+#  queryAdjustmentUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryAdjustmentRecord
 #  # 查询结转明细接口
-#  queryAdjustmentDetailUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryAdjustmentDetail
+#  queryAdjustmentDetailUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryAdjustmentDetail
 #  # 查询出区接口
 #  queryInveShipmentUrl:
 #  # 查询出区明细接口
 #  queryInveShipmentDetailUrl:
 #  # 查询门店进货接口
-#  queryShopInUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryShopIn
+#  queryShopInUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopIn
 #  # 查询门店出场接口
-#  queryShopOutUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryShopOut
+#  queryShopOutUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopOut
 #  # 查询门店转移接口
-#  queryShopMoveUrl: http://ws.ds-bay.com:8680/al/queryOmsInfo/queryShopMove
+#  queryShopMoveUrl: http://183.3.221.143:8680/al/queryOmsInfo/queryShopMove
+  # 生产环境 ws.ds-bay.com
+#  # 查询商户信息接口
+  queryMerchantInfoUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryMerchantInfoUrl
+  # 查询第三方商户信息接口
+  queryThirdMerchantInfoUrl:
+  # 查询库存接口
+  queryMngInveUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryInveMng
+  # 查询门店库存接口
+  queryShopMngInveUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryShopInveMng
+  # 查询入库单接口
+  queryInveReceiptUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryInveReceiptGoods
+  # 查询入库单明细接口
+  queryInveReceiptDetailUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryInveReceiptGoods
+  # 查询结转接口
+  queryAdjustmentUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryAdjustmentRecord
+  # 查询结转明细接口
+  queryAdjustmentDetailUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryAdjustmentDetail
+  # 查询出区接口
+  queryInveShipmentUrl:
+  # 查询出区明细接口
+  queryInveShipmentDetailUrl:
+  # 查询门店进货接口
+  queryShopInUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryShopIn
+  # 查询门店出场接口
+  queryShopOutUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryShopOut
+  # 查询门店转移接口
+  queryShopMoveUrl: http://120.76.26.84:8680/al/queryOmsInfo/queryShopMove

+ 1 - 0
eccs-common/build.gradle

@@ -24,6 +24,7 @@ dependencies {
     compile "javax.servlet:javax.servlet-api:${servlet}"
     compile "org.projectlombok:lombok:${lombok}"
     compile "com.squareup.okhttp3:okhttp:${okhttp}"
+    compile 'org.apache.httpcomponents:httpclient:4.5.13'
 
 
 }

+ 69 - 0
eccs-common/src/main/java/com/emato/common/utils/oms/JacksonStringUnicodeSerializer.java

@@ -0,0 +1,69 @@
+package com.emato.common.utils.oms;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.io.CharTypes;
+import com.fasterxml.jackson.core.json.JsonWriteContext;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+
+/**
+ * jackson处理以unicode方式编码中文
+ */
+public class JacksonStringUnicodeSerializer extends JsonSerializer<String> {
+
+	private final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
+	private final int[] ESCAPE_CODES = CharTypes.get7BitOutputEscapes();
+
+	private void writeUnicodeEscape(JsonGenerator gen, char c) throws IOException {
+		gen.writeRaw('\\');
+		gen.writeRaw('u');
+		gen.writeRaw(HEX_CHARS[(c >> 12) & 0xF]);
+		gen.writeRaw(HEX_CHARS[(c >> 8) & 0xF]);
+		gen.writeRaw(HEX_CHARS[(c >> 4) & 0xF]);
+		gen.writeRaw(HEX_CHARS[c & 0xF]);
+	}
+
+	private void writeShortEscape(JsonGenerator gen, char c) throws IOException {
+		gen.writeRaw('\\');
+		gen.writeRaw(c);
+	}
+
+	@Override
+	public void serialize(String str, JsonGenerator gen,
+                          SerializerProvider provider) throws IOException,
+            JsonProcessingException {
+		int status = ((JsonWriteContext) gen.getOutputContext()).writeValue();
+	    switch (status) {
+	      case JsonWriteContext.STATUS_OK_AFTER_COLON:
+	        gen.writeRaw(':');
+	        break;
+	      case JsonWriteContext.STATUS_OK_AFTER_COMMA:
+	        gen.writeRaw(',');
+	        break;
+	      case JsonWriteContext.STATUS_EXPECT_NAME:
+	        throw new JsonParseException("Can not write string value here", null);
+	    }
+	    gen.writeRaw('"');//写入JSON中字符串的开头引号
+	    for (char c : str.toCharArray()) {
+	      if (c >= 0x80){
+	    	  writeUnicodeEscape(gen, c); // 为所有非ASCII字符生成转义的unicode字符
+	      }else {
+	        // 为ASCII字符中前128个字符使用转义的unicode字符
+	        int code = (c < ESCAPE_CODES.length ? ESCAPE_CODES[c] : 0);
+	        if (code == 0){
+	        	gen.writeRaw(c); // 此处不用转义
+	        }else if (code < 0){
+	        	writeUnicodeEscape(gen, (char) (-code - 1)); // 通用转义字符
+	        }else {
+	        	writeShortEscape(gen, (char) code); // 短转义字符 (\n \t ...)
+	        }
+	      }
+	    }
+	    gen.writeRaw('"');//写入JSON中字符串的结束引号
+	}
+
+}

+ 376 - 0
eccs-common/src/main/java/com/emato/common/utils/oms/JacksonUtils.java

@@ -0,0 +1,376 @@
+package com.emato.common.utils.oms;
+
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * JacksonUtils 工具类
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-09-18 18:42
+ */
+public class JacksonUtils {
+
+    private static final Logger logger = LoggerFactory.getLogger(JacksonUtils.class);
+
+    private static ObjectMapper objectMapper;
+
+    private static final ThreadLocal<JacksonUtils> jacksonUtilThreadLocal = new ThreadLocal<>();
+
+    private static final ThreadLocal<ObjectMapper> objectMapperThreadLocal = new ThreadLocal<>();
+
+    /**
+     * 禁止调用无参构造
+     */
+    private JacksonUtils() {}
+
+    /**
+     * JacksonUtils 工具类实例
+     * @return
+     */
+    public static JacksonUtils instance() {
+        JacksonUtils instance = jacksonUtilThreadLocal.get();
+        if (instance == null) {
+            instance = new JacksonUtils();
+            jacksonUtilThreadLocal.set(instance);
+        }
+        return instance;
+    }
+
+    /**
+     * ObjectMapper实例
+     * @return
+     */
+    public static ObjectMapper objectMapper() {
+        objectMapper = objectMapperThreadLocal.get();
+        if (objectMapper== null){
+            objectMapper= new ObjectMapper();
+
+            // 格式化国家环境指定
+            objectMapper.setLocale(Locale.SIMPLIFIED_CHINESE);
+
+            // 设置可见性
+            // PropertyAccessor: 属性访问器, IS_GETTER, getter-like methods that are named "isXxx" (instead of "getXxx" for getters) and return boolean value
+            // Visibility: 可见性, PUBLIC_ONLY, 仅 public 修饰符 允许
+            objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.PUBLIC_ONLY);
+
+            // 序列化时, 当序列化数据中如果没有对应类型的数据时发生什么, 设置为true(默认),则会抛出异常,设置为false, 则会序列化为空对象
+            objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+
+            // 反序列化时, 数据有值,但类型没有对应属性, 是否抛JsonMappingException异常, 默认为true, 抛出JsonMappingException
+            objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+            // 反序列化时, 允许空值("")是否转换为空对象`null` , 默认false, 不允许
+            objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
+            // 反序列化时, 多态的类型时会发生什么的, true(默认),抛出异常; 如果为false, 则使用null值
+            //objectMapper.disable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE);
+            // 反序列化时, 确定遇到Object Id引用时会发生什么的, 默认true,抛出异常,false, 则不会进行进一步处理
+            //objectMapper.disable(DeserializationFeature.FAIL_ON_UNRESOLVED_OBJECT_IDS);
+            // 反序列化时, 属性注释不存在, 但关联的类型id可用的处理, 默认true, 抛出JsonMappingException
+            objectMapper.disable(DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY);
+
+            // 序列化和反序列化时, 避免转义字符抛出异常情况
+            objectMapper.enable(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS) ;
+            // 序列化和反序列化时, 允许没有引号的字段名(非标准)
+            objectMapper.enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES);
+
+
+            //设置null值不参与序列化(字段不被显示)
+            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+
+//            //注册序列化LocalDateTime模块
+//            objectMapper.registerModule(localDateTimeSerializer());
+//            //注册反序列化LocalDateTime模块
+//            objectMapper.registerModule(localDateTimeDeserializer());
+
+//            //注册序列化Date模块
+//            objectMapper.registerModule(dateTimeSerializer());
+//            //注册反序列化Date模块
+//            objectMapper.registerModule(dateTimeDeserializer());
+
+            //序列化Unicode编码非ASCII字符
+            //objectMapper.registerModule(unicodeSerModule());
+
+            objectMapperThreadLocal.set(objectMapper);
+        }
+        return objectMapper;
+    }
+
+
+    public ObjectMapper getObjectMapper() {
+        return objectMapper();
+    }
+
+
+    /**
+     * 序列化Date
+     * 自定义
+     * @return
+     */
+//    private static SimpleModule dateTimeSerializer(){
+//        SimpleModule module = new SimpleModule();
+//        module.addSerializer(Date.class, new DateTimeSerializer());
+//        return module;
+//    }
+
+    /**
+     * 反列化Date
+     * 自定义
+     * @return
+     */
+//    private static SimpleModule dateTimeDeserializer(){
+//        SimpleModule module = new SimpleModule();
+//        module.addDeserializer(Date.class, new DateTimeDeserializer());
+//        return module;
+//    }
+
+    /**
+     * 序列化LocalDateTime时间
+     * 使用 <code>jackson-datatype-jsr310</code>
+     * @return
+     */
+//    private static SimpleModule localDateTimeSerializer() {
+//        SimpleModule module = new SimpleModule();
+//        module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DateConstant.DATE_MONTH_DAY, Locale.SIMPLIFIED_CHINESE)));
+//        module.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DateConstant.TIME_SECOND, Locale.SIMPLIFIED_CHINESE)));
+//        module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DateConstant.DATE_TIME_SECOND, Locale.SIMPLIFIED_CHINESE)));
+//        return module;
+//    }
+
+    /**
+     * 反序列化LocalDateTime时间
+     * 使用 <code>jackson-datatype-jsr310</code>
+     * @return
+     */
+//    private static SimpleModule localDateTimeDeserializer() {
+//        SimpleModule module = new SimpleModule();
+//        module.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DateConstant.DATE_MONTH_DAY, Locale.SIMPLIFIED_CHINESE)));
+//        module.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DateConstant.TIME_SECOND, Locale.SIMPLIFIED_CHINESE)));
+//        module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DateConstant.DATE_TIME_SECOND, Locale.SIMPLIFIED_CHINESE)));
+//        return module;
+//    }
+
+
+    /**
+     * 序列化Unicode编码非ASCII字符
+     */
+    private static SimpleModule unicodeSerModule() {
+        SimpleModule unicodeSerModule = new SimpleModule();
+        unicodeSerModule.addSerializer(String.class, new JacksonStringUnicodeSerializer());
+        return unicodeSerModule;
+    }
+
+    private static JsonFactory getJsonFactory() {
+        return objectMapper().getFactory();
+    }
+
+
+    // -------------------- to json --------------------
+
+    /**
+     * bject对象序列化为Json字符串
+     * @param obj
+     * @param <T>
+     * @return
+     */
+    public static <T> String toJsonStr(T obj) {
+        return toJsonStr(obj, false);
+    }
+
+    /**
+     * Object对象序列化为Json字符串
+     *
+     * @param obj
+     * @param isPretty 是否美化
+     * @param <T>
+     * @return
+     */
+    public static <T> String toJsonStr(T obj, boolean isPretty) {
+        if (obj == null) {
+            return null;
+        }
+
+        if (obj instanceof String) {
+            return (String) obj;
+        }
+
+        StringWriter sw = new StringWriter();
+        JsonGenerator generator;
+        try {
+            generator = objectMapper().getFactory().createGenerator(sw);
+            if (generator == null) {
+                sw.close();
+                return null;
+            }
+
+            if (isPretty) {
+                generator.useDefaultPrettyPrinter().writeObject(obj);
+            } else {
+                generator.writeObject(obj);
+            }
+
+            generator.close();
+            return sw.toString();
+        } catch (IOException ioe) {
+            logger.error("toJSON序列化失败, 异常类型【IOException】, 错误原因:{}", ioe.getMessage());
+            ioe.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * Object对象序列化为Json字符串
+     *
+     * @param obj
+     * @param isPretty
+     * @param <T>
+     * @return
+     */
+    public static <T> String toJsonStrWithObjectMapper(T obj, boolean isPretty) {
+        if (obj == null){
+            return null;
+        }
+
+        if (obj instanceof String) {
+            return (String) obj;
+        }
+
+        String result;
+        try {
+            if (isPretty) {
+                result = objectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(obj);
+            } else {
+                result = objectMapper().writeValueAsString(obj);
+            }
+
+            return result;
+        } catch (JsonProcessingException jpe) {
+            logger.error("toJSON序列化失败, 异常类型【JsonProcessingException】, 错误原因:{}", jpe.getMessage());
+            jpe.printStackTrace();
+            return null;
+        }
+
+    }
+
+
+    // -------------------- from json --------------------
+
+
+    /**
+     * 将Json Byte反序列化成对象
+     *
+     * @param data
+     * @param clazz
+     * @return
+     */
+    public static <T> T parseJson(byte[] data, Class<T> clazz) {
+        try {
+            JsonParser parser = objectMapper().getFactory().createParser(data);
+            return parser.readValueAs(clazz);
+        } catch (IOException e){
+            logger.error(String.format("fromJson反序列化失败, 异常类型【IOException】, 错误原因:{}", e.getMessage()));
+        }
+        return null;
+    }
+
+    /**
+     * 将Json String反序列化成对象
+     *
+     * @param json
+     * @param clazz
+     * @return
+     */
+    public static <T> T parseJson(String json, Class<T> clazz) {
+        try {
+            JsonParser parser = objectMapper().getFactory().createParser(json);
+            return clazz.equals(String.class) ? (T) json : parser.readValueAs(clazz);
+        } catch (IOException e) {
+            logger.error(String.format("fromJson反序列化失败, 异常类型【IOException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        }
+        return null;
+    }
+
+    /**
+     * 将Json Array或List反序列化为对象
+     *
+     * @param json
+     * @param typeReference 被转对象引用类型
+     * @param <T>
+     * @return
+     */
+    public static <T> T parseJson(String json, TypeReference<T> typeReference) {
+        try {
+            JsonParser parser = objectMapper().getFactory().createParser(json);
+
+            //写成List.class是不行的
+            return (T) (typeReference.getType().equals(String.class) ? json : parser.readValueAs(typeReference));
+
+        }catch (IOException e) {
+            logger.error(String.format("fromJson反序列化失败, 异常类型【IOException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        }
+        return null;
+    }
+
+    /**
+     * string转object 用于转为集合对象
+     * @param json json字符串
+     * @param collectionClass 被转集合class
+     * @param elementClasses 被转集合中对象类型class
+     * @param <T>
+     * @return
+     */
+    public static <T> T parseJson(String json, Class<?> collectionClass, Class<?>... elementClasses){
+        JavaType javaType = objectMapper()
+                .getTypeFactory()
+                .constructParametricType(collectionClass, elementClasses);
+        try {
+            return objectMapper().readValue(json, javaType);
+        } catch (IOException e) {
+            logger.error("Parse String to Object error.");
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+    // -------------------- map to bean --------------------
+
+    /**
+     * map 转 bean
+     * @param map
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T mapToBean(Map map, Class<T> clazz) {
+        return objectMapper().convertValue(map, clazz);
+    }
+
+
+}

+ 499 - 0
eccs-common/src/main/java/com/emato/common/utils/oms/OkHttpUtils.java

@@ -0,0 +1,499 @@
+package com.emato.common.utils.oms;
+
+import okhttp3.*;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * @author Scott Chen
+ * @date 2017/3/13
+ */
+public class OkHttpUtils {
+    private static final Logger logger = LoggerFactory.getLogger(OkHttpUtils.class);
+
+    public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=UTF-8");
+    public static final MediaType MEDIA_TYPE_XML = MediaType.parse("application/xml;charset=UTF-8");
+    public static final MediaType MEDIA_TYPE_TEXT_HTML = MediaType.parse("text/html;charset=UTF-8");
+    private static final MediaType MEDIA_TYPE_FORM= MediaType.parse("application/x-www-form-urlencoded");
+
+    private static final String SSL = "SSL";
+
+
+    public static final int CONNECT_TIME_OUT = 20;
+    public static final int READ_TIME = 30;
+    public static final int WRITE_TIME = 30;
+
+    private static final ThreadLocal<OkHttpClient> okHttpClientThreadLocal = new ThreadLocal<>();
+    private static final ThreadLocal<OkHttpClient> okHttpClientSslThreadLocal = new ThreadLocal<>();
+
+
+    /**
+     * 禁止调用无参构造
+     */
+    private OkHttpUtils() {}
+
+    /**
+     * 默认http
+     * @return
+     */
+    private static OkHttpClient okHttpClient(){
+        return okHttpClient(null);
+    }
+
+    /**
+     * https 和 http
+     * @param ssl 如果需要SSL认证https, ssl值为SSL, 如果ssl为空, 则为http
+     * @return
+     */
+    private static OkHttpClient okHttpClient(String ssl){
+        return StringUtils.isNotBlank(ssl) && SSL.equals(ssl) ? okHttpInstanceSsl() : okHttpInstance();
+    }
+
+    /**
+     * https 和 http
+     * 如果要信息所有证书,
+     *      <code>ssl</code>必须为SSL,
+     *      <code>ignoreHostnameVerifier</code>为true,
+     *      <code>InputStream... certificates</code>为null
+     *
+     * @param ssl
+     * @param ignoreHostnameVerifier 是否忽略Hostname验证
+     * @param certificates 证书流
+     * @return
+     */
+    private static OkHttpClient okHttpClient(String ssl, boolean ignoreHostnameVerifier, InputStream... certificates){
+        return StringUtils.isNotBlank(ssl) && SSL.equals(ssl)
+                ? okHttpInstanceSsl(ignoreHostnameVerifier, certificates)
+                : okHttpInstance();
+    }
+
+    /**
+     * OkHttpClient 实例
+     * @return
+     */
+    private static OkHttpClient okHttpInstance() {
+        OkHttpClient client = okHttpClientThreadLocal.get();
+        if (client == null) {
+            synchronized (OkHttpUtils.class) {
+                OkHttpClient.Builder builder = new OkHttpClient.Builder();
+                builder.connectTimeout(CONNECT_TIME_OUT, TimeUnit.SECONDS)
+                        .readTimeout(READ_TIME, TimeUnit.SECONDS)
+                        .writeTimeout(WRITE_TIME, TimeUnit.SECONDS)
+                        .retryOnConnectionFailure(true);
+                client = builder.build();
+                okHttpClientThreadLocal.set(client);
+            }
+        }
+        return client;
+    }
+
+
+    /**
+     * OkHttpClient ssl 实例
+     * 忽略Hostname验证, 并信息所有证书
+     * @return
+     */
+    private static OkHttpClient okHttpInstanceSsl() {
+        return okHttpInstanceSsl(true, new InputStream[]{});
+    }
+
+    /**
+     * OkHttpClient ssl 实例
+     * 如果要信息所有证书, <code>InputStream... certificates</code>为null
+     * @param ignoreHostnameVerifier 是否忽略Hostname验证
+     * @param certificates 证书流
+     * @return
+     */
+    private static OkHttpClient okHttpInstanceSsl(boolean ignoreHostnameVerifier, InputStream... certificates) {
+        OkHttpClient client = okHttpClientSslThreadLocal.get();
+        if (client == null) {
+            synchronized (OkHttpUtils.class) {
+                X509TrustManager[] trustManager = buildX509TrustManager(certificates);
+                SSLSocketFactory sslSocketFactory = buildSSLSocketFactory(trustManager);
+
+                OkHttpClient.Builder builder = new OkHttpClient.Builder();
+                builder.connectTimeout(CONNECT_TIME_OUT, TimeUnit.SECONDS)
+                        .readTimeout(READ_TIME, TimeUnit.SECONDS)
+                        .writeTimeout(WRITE_TIME, TimeUnit.SECONDS)
+                        .retryOnConnectionFailure(true);
+
+                //是否忽略host验证
+                if (ignoreHostnameVerifier) {
+                    builder.hostnameVerifier(getHostnameVerifier());
+                }
+                builder.sslSocketFactory(sslSocketFactory, trustManager[0])
+                        .retryOnConnectionFailure(true);
+
+                client = builder.build();
+                okHttpClientSslThreadLocal.set(client);
+            }
+        }
+        return client;
+    }
+
+
+    //------------------------------ build RequestBody ------------------------------
+
+
+    public static RequestBody buildRequestBody(MediaType mediaType, String json) {
+        return RequestBody.create(mediaType,json );
+    }
+
+    public static RequestBody buildRequestBody(String key, Object value) {
+        if (org.apache.commons.lang3.StringUtils.isBlank(key)) {
+            return null;
+        }
+        Map<String, Object> param = new HashMap<>();
+        param.put(key, value);
+        return buildRequestBody(param);
+    }
+
+    public static RequestBody buildMapStringRequestBody(Map<String, String> params) {
+        FormBody.Builder builder = new FormBody.Builder();
+        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, String> entry = iterator.next();
+            builder.add(entry.getKey(), entry.getValue());
+        }
+        return builder.build();
+    }
+
+    /**
+     * 构造RequestBody
+     *
+     * @param params
+     * @return
+     */
+    public static RequestBody buildRequestBody(Map<String, Object> params) {
+        FormBody.Builder builder = new FormBody.Builder();
+        Iterator<Map.Entry<String, Object>> iterator = params.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, Object> entry = iterator.next();
+            builder.add(entry.getKey(), JacksonUtils.toJsonStr(entry.getValue()));
+        }
+        return builder.build();
+    }
+
+
+    //------------------------------ build Request ------------------------------
+
+
+    /**
+     * 以字符串数据构建
+     * @param json
+     * @param url
+     * @param type
+     * @return
+     */
+    public static Request buildRequest(String json, String url, String type) {
+        //默认JSON
+        MediaType mediaType = MEDIA_TYPE_JSON;
+
+        type = StringUtils.isBlank(type) ? "" : type;
+        json = StringUtils.isBlank(json) ? "" : json;
+
+        if (type.equalsIgnoreCase("text_html")) {
+            mediaType = MEDIA_TYPE_TEXT_HTML;
+        }else if (type.equalsIgnoreCase("form")) {
+            mediaType = MEDIA_TYPE_FORM;
+        }else if (type.equalsIgnoreCase("xml")) {
+            mediaType = MEDIA_TYPE_XML;
+        }
+
+        RequestBody body = buildRequestBody(mediaType, json);
+        return buildRequest(body, url);
+    }
+
+
+    public static Request buildStringRequest(Map<String, String> param, String url) {
+        return buildRequest(buildMapStringRequestBody(param), url);
+    }
+
+    /**
+     * 构建Request
+     * @param param
+     * @param url
+     * @return
+     */
+    public static Request buildRequest(Map<String, Object> param, String url) {
+        return buildRequest(buildRequestBody(param), url);
+    }
+
+    /**
+     * 构建Request
+     * @param key
+     * @param value
+     * @param url
+     * @return
+     */
+    public static Request buildRequest(String key, Object value, String url) {
+        return buildRequest(buildRequestBody(key, value), url);
+    }
+
+    /**
+     * 构建Request
+     * @param body
+     * @param url
+     * @return
+     */
+    public static Request buildRequest(RequestBody body, String url) {
+        return new Request.Builder()
+                .url(url)
+                .post(body)
+                .build();
+    }
+
+
+    //------------------------------ post ------------------------------
+
+    public static String post(String json, String url, String type, String ssl) {
+        return post(buildRequest(json, url, type), ssl);
+    }
+
+    public static String post(String key, Object value, String url, String ssl) {
+        return post(buildRequest(key, value, url), ssl);
+    }
+
+    public static String postString(Map<String, String> param, String url, String ssl) {
+        return post(buildStringRequest(param, url), ssl);
+    }
+
+    public static String post(Map<String, Object> param, String url, String ssl) {
+        return post(buildRequest(param, url), ssl);
+    }
+
+
+    /**
+     * 同步访问,返回结果字符串
+     * 可能超时
+     *
+     * @param request
+     * @param ssl
+     * @return
+     * @throws IOException
+     */
+    public static String post(Request request, String ssl) {
+        String result = "";
+        try {
+            Response response = okHttpClient(ssl).newCall(request).execute();
+
+            if (response.isSuccessful()) {
+                result = response.body().string();
+            } else {
+                logger.error("okhttp3 post failed.");
+            }
+        } catch (IOException e) {
+            logger.error("okhttp3 post throw IOException, {}", e.getMessage());
+        }
+        return result;
+    }
+
+
+
+    /**
+     * 同步访问,返回Response
+     * 可能超时
+     *
+     * @param request
+     * @param ssl
+     * @return
+     * @throws IOException
+     */
+    public static String postReturnResponse(Request request, String ssl) {
+        try {
+            return okHttpClient(ssl).newCall(request).execute().body().string();
+        } catch (IOException e) {
+            logger.error("okhttp3 post throw IOException, {}", e.getMessage());
+        }
+        return null;
+    }
+
+    /**
+     * 异步访问,回调结果
+     * @param request
+     * @param ssl
+     * @param responseCallback
+     */
+    public static void asyncPostCallback(Request request, String ssl,  Callback responseCallback) {
+        okHttpClient(ssl).newCall(request).enqueue(responseCallback);
+    }
+
+    /**
+     * 异步访问,无结果返回
+     * @param request
+     * @param ssl
+     */
+    public static void asyncPost(Request request, String ssl) {
+        okHttpClient(ssl).newCall(request).enqueue(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+
+            }
+        });
+    }
+
+
+    //------------------------------ ssl ------------------------------
+
+    /**
+     * 获取主机验证 HostnameVerifier
+     * @return
+     */
+    public static HostnameVerifier getHostnameVerifier() {
+        return new HostnameVerifier() {
+            @Override
+            public boolean verify(String s, SSLSession sslSession) {
+                return true;
+            }
+        };
+    }
+
+
+    /**
+     * 自定义证书
+     *
+     * @param certificates
+     * @return
+     */
+    private static KeyStore generateKeyStore(InputStream... certificates) {
+        try {
+            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
+
+            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+            keyStore.load(null);
+
+            int index = 0;
+            if (certificates !=null && certificates.length > 0) {
+                for (InputStream certificate : certificates) {
+                    String certificateAlias = Integer.toString(index++);
+                    keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));
+
+                    try {
+                        if (certificate != null) {
+                            certificate.close();
+                        }
+                    } catch (IOException e) {
+                    }
+                }
+            }
+
+            return keyStore;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 证书管理
+     * 信任所有证书
+     * @return
+     */
+    private static X509TrustManager[] buildX509TrustManager(){
+        return buildX509TrustManager(new InputStream[]{});
+    }
+
+    /**
+     * 证书管理
+     * 如果要信任所有证书,<code>InputStream... certificates</code>为null
+     * @param certificates 证书文件流
+     * @return
+     */
+    private static X509TrustManager[] buildX509TrustManager(InputStream... certificates) {
+        try {
+            if (certificates == null) {
+                // 信任所有证书
+                return new X509TrustManager[]{
+                    new X509TrustManager() {
+                        @Override
+                        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+                        }
+
+                        @Override
+                        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+                        }
+
+                        @Override
+                        public X509Certificate[] getAcceptedIssuers() {
+                            return new X509Certificate[]{};
+                        }
+                    }
+                };
+            }
+
+            // 信任自定义证书
+            KeyStore keyStore = generateKeyStore(certificates);
+
+            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
+                    TrustManagerFactory.getDefaultAlgorithm());
+
+            trustManagerFactory.init(keyStore);
+
+            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
+            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
+                throw new IllegalStateException("Unexpected default trust managers:"
+                        + Arrays.toString(trustManagers));
+            }
+
+            return (X509TrustManager[]) trustManagers;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+
+    private static SSLSocketFactory buildSSLSocketFactory() {
+        return buildSSLSocketFactory((InputStream)null);
+    }
+
+    private static SSLSocketFactory buildSSLSocketFactory(InputStream... certificates) {
+        try {
+            TrustManager[] trustManager = buildX509TrustManager(certificates);
+            return buildSSLSocketFactory(trustManager);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private static SSLSocketFactory buildSSLSocketFactory(TrustManager[] trustManager) {
+        try {
+            if (trustManager == null) {
+                throw new IllegalStateException("TrustManager is null");
+            }
+
+            SSLContext sslContext = SSLContext.getInstance(SSL);
+            sslContext.init(null, trustManager, new SecureRandom());
+
+            return sslContext.getSocketFactory();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}

+ 1 - 0
eccs-common/src/main/java/com/emato/common/utils/oms/request/OkHttpUtils.java

@@ -24,6 +24,7 @@ public class OkHttpUtils {
                 .connectTimeout(CONNEC_TIME, TimeUnit.SECONDS)
                 .readTimeout(READ_TIME, TimeUnit.SECONDS)
                 .writeTimeout(WRITE_TIME, TimeUnit.SECONDS)
+                .retryOnConnectionFailure(true)
                 .build();
     }
 

+ 1 - 0
eccs-framework/build.gradle

@@ -9,6 +9,7 @@ dependencies {
     compile "com.github.penggle:kaptcha:${kaptcha}"
     compile "com.github.oshi:oshi-core:${oshi}"
     compile "org.projectlombok:lombok:${lombok}"
+
     compile project(':eccs-system')
     compile project(':eccs-common')
 }

+ 4 - 0
eccs-ui/src/views/warehouse/adjustmentorder/index.vue

@@ -400,6 +400,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullAdjustmentorder(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     },
     /** 拉取明细按钮操作 */
@@ -420,6 +422,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullAdjustmentorderDetail(adjustmentOrderSns,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }

+ 2 - 0
eccs-ui/src/views/warehouse/invemng/index.vue

@@ -480,6 +480,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullInvemng(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }

+ 2 - 0
eccs-ui/src/views/warehouse/invereceiptgoods/index.vue

@@ -380,6 +380,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullInveReceiptGoods(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }

+ 2 - 0
eccs-ui/src/views/warehouse/shopin/index.vue

@@ -436,6 +436,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullShopInRecord(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }

+ 2 - 0
eccs-ui/src/views/warehouse/shopinve/index.vue

@@ -522,6 +522,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullStoreInvemng(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }

+ 2 - 0
eccs-ui/src/views/warehouse/shopmoverecord/index.vue

@@ -433,6 +433,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullShopMoveRecord(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }

+ 2 - 0
eccs-ui/src/views/warehouse/shopout/index.vue

@@ -422,6 +422,8 @@ export default {
           background: 'rgba(0, 0, 0, 0.7)'
         });
         return pullShopOutRecord(queryParams,loading,_this);
+      }).then(function(){
+        _this.handleQuery();
       })
     }
   }