Преглед изворни кода

邀请注册导出问题处理,批量查询物料信息增加单次大小限制

hejq пре 7 година
родитељ
комит
508095eef3

+ 5 - 6
src/main/java/com/uas/platform/b2b/manage/controller/InviteController.java

@@ -5,6 +5,7 @@ import com.uas.platform.b2b.manage.model.Invite;
 import com.uas.platform.b2b.manage.model.UseType;
 import com.uas.platform.b2b.manage.service.InviteService;
 import com.uas.platform.b2b.manage.service.UseLogService;
+import com.uas.platform.b2b.manage.support.DateFormatUtils;
 import com.uas.platform.b2b.manage.support.JxlsExcelView;
 import com.uas.platform.b2b.manage.support.MyException;
 import com.uas.platform.b2b.manage.web.BaseController;
@@ -24,7 +25,6 @@ import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
@@ -68,22 +68,21 @@ public class InviteController extends BaseController {
      *
      * @param keyword 关键字
      * @param request request
-     * @return
+     * @return ModelAndView
      */
     @RequestMapping(value = "/xls", method = RequestMethod.GET )
     public ModelAndView exportInvites(String keyword, HttpServletRequest request, String fromDate, String endDate) throws ParseException {
         PageParams params = new PageParams();
         params.setPage(1);
         params.setCount(JxlsExcelView.MAX_SIZE);
-        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
         ModelAndView modelAndView = new ModelAndView();
         Page<Invite> invites = findByPageInfo(params, keyword, request, fromDate, endDate);
-        modelAndView.addObject("time", dateFormat.format(new Date(System.currentTimeMillis())));
+        modelAndView.addObject("time", DateFormatUtils.EXPORT_FORMAT.format(new Date(System.currentTimeMillis())));
         modelAndView.addObject("user", SystemSession.getUser().getFullName());
         modelAndView.addObject("count",
                 invites.getTotalElements() > JxlsExcelView.MAX_SIZE ? JxlsExcelView.MAX_SIZE : invites.getTotalElements());
         modelAndView.addObject("data", invites.getContent());
-        modelAndView.addObject("dateFormat", dateFormat);
+        modelAndView.addObject("dateFormat", DateFormatUtils.EXPORT_FORMAT);
         modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/Invite", "邀请注册记录"));
         useLogService.appendLog(UseType.EXPROT_INVITE_DATA.code(), keyword, AgentUtils.getIp(request));
         return modelAndView;
@@ -98,7 +97,7 @@ public class InviteController extends BaseController {
      * @param userUU 邀请用户UU
      * @param enterName 邀请企业名
      * @param enterUU 邀请企业UU
-     * @return
+     * @return ModelMap
      * @throws MyException
      */
     @RequestMapping(value = "/edit", method = RequestMethod.POST)

+ 2 - 0
src/main/java/com/uas/platform/b2b/manage/service/ProductService.java

@@ -6,6 +6,8 @@ import java.util.List;
 import java.util.Map;
 
 /**
+ * 物料服务
+ *
  * @author hejq
  * @date 2018-08-20 15:55
  */

+ 7 - 3
src/main/java/com/uas/platform/b2b/manage/service/impl/InviteServiceImpl.java

@@ -110,9 +110,13 @@ public class InviteServiceImpl extends BaseService implements InviteService {
         }, info);
         Map<Long, InviteProdInfo> map = productService.findByEnUUList(CollectionUtil.getKeyCollection(invites.getContent()));
         for (Invite invite : invites) {
-            InviteProdInfo prodInfo = map.get(invite.getUu());
-            invite.setProductCount(prodInfo.getCount());
-            invite.setLastProductDate(prodInfo.getLastDate());
+            if (null != invite.getUu()) {
+                InviteProdInfo prodInfo = map.get(invite.getUu());
+                if (null != prodInfo) {
+                    invite.setProductCount(prodInfo.getCount());
+                    invite.setLastProductDate(prodInfo.getLastDate());
+                }
+            }
         }
         return invites;
     }

+ 18 - 13
src/main/java/com/uas/platform/b2b/manage/service/impl/ProductServiceImpl.java

@@ -3,6 +3,7 @@ package com.uas.platform.b2b.manage.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.manage.model.InviteProdInfo;
 import com.uas.platform.b2b.manage.service.ProductService;
+import com.uas.platform.b2b.manage.support.CollectionUtil;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import org.apache.commons.collections.map.HashedMap;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +14,8 @@ import java.util.List;
 import java.util.Map;
 
 /**
+ * 物料访问接口方法
+ *
  * @author hejq
  * @date 2018-08-20 15:56
  */
@@ -29,7 +32,7 @@ public class ProductServiceImpl implements ProductService {
     /**
      * 公共物料访问接口
      */
-    private final String PRODUCT_URL = "https://api-product.usoftmall.com/";
+    private static final String PRODUCT_URL = "https://api-product.usoftmall.com/";
 
     /**
      * 通过企业UU号查询企业注册物料信息
@@ -39,19 +42,21 @@ public class ProductServiceImpl implements ProductService {
      */
     @Override
     public Map<Long, InviteProdInfo> findByEnUUList(List<Long> enUUList) {
-        Map<String, String> map = new HashedMap();
-        map.put("enUUList", FlexJsonUtils.toJsonDeep(enUUList));
-        try {
-            String str = restTemplate.getForObject(PRODUCT_URL + "product/get/getCountAndTime?enUUList={enUUList}", String.class, map);
-            List<InviteProdInfo> infoList = JSON.parseArray(str, InviteProdInfo.class);
-            Map<Long, InviteProdInfo> resultMap = new HashedMap();
-            for (InviteProdInfo info : infoList) {
-                resultMap.put(info.getEnUU(), info);
-            }
-            return resultMap;
-        } catch (RuntimeException e) {
+        List<List<Long>> enUULists = CollectionUtil.splitAry(enUUList, CollectionUtil.PRODUCT_MAX_ID_SIZE);
+        Map<Long, InviteProdInfo> resultMap = new HashedMap();
+        for (List<Long> enUUs : enUULists) {
+            Map<String, String> map = new HashedMap();
+            map.put("enUUList", FlexJsonUtils.toJsonDeep(enUUs));
+            try {
+                String str = restTemplate.getForObject(PRODUCT_URL + "product/get/getCountAndTime?enUUList={enUUList}", String.class, map);
+                List<InviteProdInfo> infoList = JSON.parseArray(str, InviteProdInfo.class);
+                for (InviteProdInfo info : infoList) {
+                    resultMap.put(info.getEnUU(), info);
+                }
+            } catch (RuntimeException e) {
 
+            }
         }
-        return null;
+        return resultMap;
     }
 }

+ 28 - 1
src/main/java/com/uas/platform/b2b/manage/support/CollectionUtil.java

@@ -28,8 +28,35 @@ public class CollectionUtil {
                     idList.add(Long.valueOf(val.toString()));
                 }
             }
+        }return idList;
+    }
+
+    /**
+     * 每次请求物料服务数据最多传输id 200个
+     */
+    public final static int PRODUCT_MAX_ID_SIZE = 200;
+
+    /**
+     * 集合大小拆分
+     *
+     * @param ary 原集合
+     * @param subSize 拆分大小
+     * @return 拆分过后的子集合的集合
+     */
+    public static <T> List<List<T>> splitAry(List<T> ary, int subSize) {
+        int count = ary.size() % subSize == 0 ? ary.size() / subSize: ary.size() / subSize + 1;
+        List<List<T>> subAryList = new ArrayList<>();
+        for (int i = 0; i < count; i++) {
+            int index = i * subSize;
+            List<T> list = new ArrayList<>();
+            int j = 0;
+            while (j < subSize && index < ary.size()) {
+                list.add(ary.get(index++));
+                j++;
+            }
+            subAryList.add(list);
         }
-        return idList;
+        return subAryList;
     }
 
 }

+ 5 - 0
src/main/java/com/uas/platform/b2b/manage/support/DateFormatUtils.java

@@ -14,5 +14,10 @@ public class DateFormatUtils {
      * yyyy-MM-dd HH:mm:ss 格式
      */
 	public static final FastDateFormat DATETIME_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
+
+    /**
+     * 导出数据格式
+     */
+	public static final FastDateFormat EXPORT_FORMAT = FastDateFormat.getInstance("yyyy年MM月dd日 HH时mm分");
 	
 }