Browse Source

【越加红】纷享销客 客户资料轮询下载功能

wub 3 years ago
parent
commit
9b141e0434

+ 69 - 103
src/main/java/com/uas/eis/beans/req/CrmQueryReq.java

@@ -2,7 +2,6 @@ package com.uas.eis.beans.req;
 
 import com.google.common.base.MoreObjects;
 
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -15,9 +14,15 @@ public class CrmQueryReq extends BaseReq{
 
     private String currentOpenUserId;
 
-    private String apiName;
+    private DataApiName data;
 
-    private SearchQuery searchQuery;
+    public DataApiName getDataApiName() {
+        return data;
+    }
+
+    public void setDataApiName(DataApiName dataApiName) {
+        this.data = dataApiName;
+    }
 
     public String getCurrentOpenUserId() {
         return currentOpenUserId;
@@ -27,28 +32,11 @@ public class CrmQueryReq extends BaseReq{
         this.currentOpenUserId = currentOpenUserId;
     }
 
-    public String getApiName() {
-        return apiName;
-    }
-
-    public void setApiName(String apiName) {
-        this.apiName = apiName;
-    }
-
-    public SearchQuery getSearchQuery() {
-        return searchQuery;
-    }
-
-    public void setSearchQuery(SearchQuery searchQuery) {
-        this.searchQuery = searchQuery;
-    }
-
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
                 .add("currentOpenUserId", currentOpenUserId)
-                .add("apiName", apiName)
-                .add("searchQuery", searchQuery)
+                .add("data", data)
                 .toString();
     }
 
@@ -57,11 +45,9 @@ public class CrmQueryReq extends BaseReq{
         private int offset = 0;
 
         //获取数据条数,取最大值1000
-        private int limit = 500;
-
-        private DataProjection dataProjection;
+        private int limit = 100;
 
-        private List<RangeCondition> rangeConditions;
+        private List<Filters> filters;
 
         private List<Order> orders;
 
@@ -81,20 +67,13 @@ public class CrmQueryReq extends BaseReq{
             this.limit = limit;
         }
 
-        public DataProjection getDataProjection() {
-            return dataProjection;
-        }
-
-        public void setDataProjection(DataProjection dataProjection) {
-            this.dataProjection = dataProjection;
-        }
 
-        public List<RangeCondition> getRangeConditions() {
-            return rangeConditions;
+        public List<Filters> getFilters() {
+            return filters;
         }
 
-        public void setRangeConditions(List<RangeCondition> rangeConditions) {
-            this.rangeConditions = rangeConditions;
+        public void setFilters(List<Filters> filters) {
+            this.filters = filters;
         }
 
         public List<Order> getOrders() {
@@ -110,124 +89,111 @@ public class CrmQueryReq extends BaseReq{
             return MoreObjects.toStringHelper(this)
                     .add("offset", offset)
                     .add("limit", limit)
-                    .add("dataProjection", dataProjection)
-                    .add("rangeConditions", rangeConditions)
+                    .add("filters", filters)
                     .add("orders", orders)
                     .toString();
         }
     }
-    public static class DataProjection{
-        private List<String> fieldNames = Arrays.asList("_id","name","last_modified_time");
 
-        public List<String> getFieldNames() {
-            return fieldNames;
+    public static class DataApiName{
+        public String getDataObjectApiName() {
+            return dataObjectApiName;
         }
 
-        public void setFieldNames(List<String> fieldNames) {
-            this.fieldNames = fieldNames;
+        public void setDataObjectApiName(String dataObjectApiName) {
+            this.dataObjectApiName = dataObjectApiName;
         }
 
-        @Override
-        public String toString() {
-            return MoreObjects.toStringHelper(this)
-                    .add("fieldNames", fieldNames)
-                    .toString();
+        public SearchQuery getSearch_query_info() {
+            return search_query_info;
         }
-    }
-
-    public static class RangeCondition{
-        private String fieldName = "last_modified_time";
-
-        private Long from;
-
-        //默认不包含最低值
-        private boolean includeLower = false;
-
-        private Long to = 4102358400000L;
 
-        private boolean includeUpper = false;
+        public void setSearch_query_info(SearchQuery search_query_info) {
+            this.search_query_info = search_query_info;
+        }
 
+        private String dataObjectApiName;
 
-        public String getFieldName() {
-            return fieldName;
-        }
+        public SearchQuery search_query_info;
 
-        public void setFieldName(String fieldName) {
-            this.fieldName = fieldName;
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(this)
+                    .add("dataObjectApiName", dataObjectApiName)
+                    .add("search_query_info", search_query_info)
+                    .toString();
         }
+    }
 
-        public Long getFrom() {
-            return from;
-        }
+    public static class Filters{
 
-        public void setFrom(Long from) {
-            this.from = from;
-        }
+        private String field_name;
+        private List<String> field_values;
+        private String operator;
 
-        public boolean isIncludeLower() {
-            return includeLower;
+        public String getField_name() {
+            return field_name;
         }
 
-        public void setIncludeLower(boolean includeLower) {
-            this.includeLower = includeLower;
+        public void setField_name(String field_name) {
+            this.field_name = field_name;
         }
 
-        public Long getTo() {
-            return to;
+        public List<String> getField_values() {
+            return field_values;
         }
 
-        public void setTo(Long to) {
-            this.to = to;
+        public void setField_values(List<String> field_values) {
+            this.field_values = field_values;
         }
 
-        public boolean isIncludeUpper() {
-            return includeUpper;
+        public String getOperator() {
+            return operator;
         }
 
-        public void setIncludeUpper(boolean includeUpper) {
-            this.includeUpper = includeUpper;
+        public void setOperator(String operator) {
+            this.operator = operator;
         }
 
         @Override
         public String toString() {
             return MoreObjects.toStringHelper(this)
-                    .add("fieldName", fieldName)
-                    .add("from", from)
-                    .add("includeLower", includeLower)
-                    .add("to", to)
-                    .add("includeUpper", includeUpper)
+                    .add("field_name", field_name)
+                    .add("field_values", field_values)
+                    .add("operator", operator)
                     .toString();
         }
     }
 
     public static class Order{
         //降序
-        private boolean ascending = false;
-
-        //字段,默认按照最后更新时间排序
-        private String field = "last_modified_time";
+        private boolean isAsc = true;
 
-        public boolean isAscending() {
-            return ascending;
+        public boolean isAsc() {
+            return isAsc;
         }
 
-        public void setAscending(boolean ascending) {
-            this.ascending = ascending;
+        public void setAsc(boolean asc) {
+            isAsc = asc;
         }
 
-        public String getField() {
-            return field;
+        public String getFieldName() {
+            return fieldName;
         }
 
-        public void setField(String field) {
-            this.field = field;
+        public void setFieldName(String fieldName) {
+            this.fieldName = fieldName;
         }
 
+        //字段,默认按照最后更新时间排序
+        private String fieldName = "create_time";
+
+
         @Override
         public String toString() {
             return MoreObjects.toStringHelper(this)
-                    .add("ascending", ascending)
-                    .add("field", field)
+                    .add("isAsc", isAsc)
+                    .add("fieldName", fieldName)
                     .toString();
         }
     }

+ 8 - 18
src/main/java/com/uas/eis/beans/result/CrmQueryResult.java

@@ -2,7 +2,6 @@ package com.uas.eis.beans.result;
 
 import com.google.common.base.MoreObjects;
 
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -13,31 +12,22 @@ public class CrmQueryResult extends BaseResult {
 
     private static final long serialVersionUID = -2706748557128822040L;
 
-    private int totalNumber;
+    private Map<String, Object> data;
 
-    private List<Map<String, Object>> datas;
-
-    public int getTotalNumber() {
-        return totalNumber;
-    }
-
-    public void setTotalNumber(int totalNumber) {
-        this.totalNumber = totalNumber;
-    }
-
-    public List<Map<String, Object>> getDatas() {
-        return datas;
+    public Map<String, Object> getData() {
+        return data;
     }
 
-    public void setDatas(List<Map<String, Object>> datas) {
-        this.datas = datas;
+    public void setData(Map<String, Object> data) {
+        this.data = data;
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
-                .add("totalNumber", totalNumber)
-                .add("datas", datas)
+                .add("data", data)
+                .add("errorCode", errorCode)
+                .add("errorMessage", errorMessage)
                 .toString();
     }
 }

+ 26 - 0
src/main/java/com/uas/eis/manager/CustomerManager.java

@@ -0,0 +1,26 @@
+package com.uas.eis.manager;
+
+
+import com.uas.eis.beans.result.CrmQueryResult;
+import com.uas.eis.exception.AccessTokenException;
+
+import java.util.List;
+
+/**
+ *
+ * 
+ * @author
+ * @date
+ */
+public interface CustomerManager {
+
+    /**
+     * 添加商品
+     *
+     * @param
+     * @return
+     * @throws AccessTokenException
+     */
+    public CrmQueryResult queryCustomer(List<String> field_values) throws AccessTokenException;
+
+}

+ 76 - 0
src/main/java/com/uas/eis/manager/impl/CustomerManagerImpl.java

@@ -0,0 +1,76 @@
+package com.uas.eis.manager.impl;
+
+import com.uas.eis.beans.CorpAccessToken;
+import com.uas.eis.beans.req.CrmQueryReq;
+import com.uas.eis.beans.result.CrmQueryResult;
+import com.uas.eis.exception.AccessTokenException;
+import com.uas.eis.manager.AccessTokenManager;
+import com.uas.eis.manager.CustomerManager;
+import com.uas.eis.manager.OpenUserIdManager;
+import com.uas.eis.utils.Configuration;
+import com.uas.eis.utils.OpenAPIUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("customerManager")
+public class CustomerManagerImpl implements CustomerManager {
+
+    private final AccessTokenManager accessTokenManager;
+
+    public CustomerManagerImpl(AccessTokenManager accessTokenManager, OpenUserIdManager openUserIdManager) {
+        this.accessTokenManager = accessTokenManager;
+        this.openUserIdManager = openUserIdManager;
+    }
+
+    private final OpenUserIdManager openUserIdManager;
+
+    @Resource(name = "configuration")
+    private Configuration configuration;
+
+    @Override
+    public CrmQueryResult queryCustomer(List<String> field_values) throws AccessTokenException {
+        CrmQueryResult crmQueryResult = new CrmQueryResult();
+
+        CorpAccessToken token = accessTokenManager.getCorpAccessToken();
+        String openUserId = configuration.getOpenUserId();
+
+        List<CrmQueryReq.Filters> filtersList = new ArrayList<>();
+
+        CrmQueryReq.Filters filters = new CrmQueryReq.Filters();
+        filters.setField_name("create_time");
+        filters.setField_values(field_values);
+        filters.setOperator("GT");
+
+        filtersList.add(filters);
+
+        List<CrmQueryReq.Order> orderList = new ArrayList<>();
+        CrmQueryReq.Order order = new CrmQueryReq.Order();
+        order.setAsc(true);
+        order.setFieldName("create_time");
+        orderList.add(order);
+
+        CrmQueryReq.SearchQuery searchQuery = new CrmQueryReq.SearchQuery();
+        searchQuery.setFilters(filtersList);
+        searchQuery.setLimit(5);
+        searchQuery.setOrders(orderList);
+
+        CrmQueryReq.DataApiName dataApiName = new CrmQueryReq.DataApiName();
+        dataApiName.setDataObjectApiName("AccountObj");
+        dataApiName.setSearch_query_info(searchQuery);
+
+        CrmQueryReq crmQueryReq = new CrmQueryReq();
+        crmQueryReq.setCorpAccessToken(token.getCorpAccessToken());
+        crmQueryReq.setCorpId(token.getCorpId());
+        crmQueryReq.setCurrentOpenUserId(openUserId);
+        crmQueryReq.setDataApiName(dataApiName);
+        try {
+            crmQueryResult = OpenAPIUtils.queryCrmData(crmQueryReq);
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        return crmQueryResult;
+    }
+}

+ 104 - 0
src/main/java/com/uas/eis/task/CustomerTask.java

@@ -0,0 +1,104 @@
+package com.uas.eis.task;
+
+import com.uas.eis.beans.result.CrmQueryResult;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.manager.CustomerManager;
+import com.uas.eis.utils.Constant;
+import com.uas.eis.utils.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Component
+@EnableAsync
+@EnableScheduling
+public class CustomerTask {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Autowired
+    private BaseDao baseDao;
+    @Autowired
+    private CustomerManager customerManager;
+
+    @Scheduled(cron = "*/10 * * * * ?")
+    public void syncCustomers() {
+        try {
+            List<String> field_values = new ArrayList<>();
+            SqlRowList rs = baseDao.queryForRowSet("select ml_syncTime from (select * from FXXKDockingErrorlog where 1=2 and nvl(ML_TYPE,' ')='客户资料下载' and ML_SYNCTIME is not null order by ml_date desc) where rownum=1");
+            if(rs.next()){
+                String ml_syncTime = rs.getGeneralString("ml_syncTime");
+                field_values.add(ml_syncTime);
+                CrmQueryResult crmQueryResult = customerManager.queryCustomer(field_values);
+                int errorCode = crmQueryResult.getErrorCode();
+                if(errorCode == 0){
+                    Map<String, Object> data = crmQueryResult.getData();
+                    List<Map<String, Object>> dataList = (List<Map<String,Object>>) data.get("dataList");
+                    //m:成功条数 n:失败条数
+                    int m=0,n=0;
+                    if(dataList.size()>0){
+                        //最后(即最近)一次同步时间
+                        Long create_time_Last = Long.parseLong(new BigDecimal(dataList.get(dataList.size()-1).get("create_time").toString()).toPlainString());
+                        for (int i = 0; i < dataList.size(); i++) {
+                            Object _id = dataList.get(i).get("_id");
+                            Object name = dataList.get(i).get("name");
+                            SimpleDateFormat sdf = new SimpleDateFormat(Constant.YMD_HMS);
+                            if(baseDao.checkIf("customer", "cu_name='" + name + "'")){
+                                baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'客户名称已存在','客户资料下载','"+name+"')");
+                                logger.info("异常信息:客户名称已存在");
+                                n++;
+                                continue;
+                            }
+                            try {
+                                Object em_code = baseDao.getFieldDataByCondition("employee", "max(em_code) em_code", "em_name='" + dataList.get(i).get("field_w9e4q__c") + "'");
+                            /*Object[] pa_code = baseDao.getFieldsDataByCondition("Payments", new String[]{"max(pa_id) pa_id","max(pa_code) pa_code" }, "pa_name='" + dataList.get(i).get("UDSSel1__c") + "'");
+                            int cu_paymentid= 0;
+                            String cu_paymentscode= "";
+                            if(pa_code != null && pa_code[0]!=null && pa_code[1]!=null){
+                                cu_paymentid=Integer.parseInt(pa_code[0].toString());
+                                cu_paymentscode=pa_code[1].toString();
+                            }*/
+                                Long create_time = Long.parseLong(new BigDecimal(dataList.get(i).get("create_time").toString()).toPlainString());
+                                Long last_modified_time = Long.parseLong(new BigDecimal(dataList.get(i).get("last_modified_time").toString()).toPlainString());
+                                String sql="insert into customer(cu_id,cu_code,cu_name,cu_shortname,cu_add2,cu_sellercode,cu_sellername,cu_kind," +
+                                        //"cu_paymentid,cu_paymentscode,cu_payments," +
+                                        "cu_mobile,cu_email,cu_recordman,cu_recorddate,cu_lastdate,cu_auditstatus,cu_auditstatuscode,CU_FXXKID)" +
+                                        "values(CUSTOMER_SEQ.nextval,'"+dataList.get(i).get("account_no")+"','"+name+"','"+dataList.get(i).get("UDSText3__c")+"','"+ dataList.get(i).get("address")+"'," +
+                                        "'"+em_code+"','"+dataList.get(i).get("field_w9e4q__c")+"','"+dataList.get(i).get("account_type")+"'," +
+                                        //cu_paymentid+",'"+cu_paymentscode+"','"+dataList.get(i).get("UDSSel1__c")+"'," +
+                                        "'"+dataList.get(i).get("tel")+"','"+dataList.get(i).get("email")+"'," +
+                                        "'"+dataList.get(i).get("created_by")+"',"+DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(create_time)))+"," +
+                                        DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(last_modified_time)))+",'在录入','ENTERING','"+_id+"')";
+                                baseDao.execute(sql);
+                                m++;
+                            }catch (Exception e){
+                                baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmQueryResult.getErrorMessage()+"','客户资料下载','"+name+"')");
+                                logger.info("异常信息:"+e);
+                                n++;
+                            }
+                        }
+                        baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_syncTime) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'下载记录"+dataList.size()+"条,成功"+m+"条,失败"+n+"条','客户资料下载','"+create_time_Last+"')");
+                    }
+                }else{
+                    baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmQueryResult.getErrorMessage()+"','客户资料下载','')");
+                    logger.info("异常信息:"+crmQueryResult.getErrorMessage());
+                }
+            }
+        }catch (Exception e){
+            baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+e.getMessage()+"','客户资料下载','')");
+            logger.info("异常信息:"+e.getMessage());
+            e.printStackTrace();
+        }
+    }
+}

+ 1 - 3
src/main/java/com/uas/eis/utils/OpenAPIUtils.java

@@ -11,8 +11,6 @@ import com.uas.eis.exception.BaseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
-
 /**
  * 开放平台Api调用的工具类
  * 
@@ -168,7 +166,7 @@ public class OpenAPIUtils {
      * CRM查询列表 元数据接口
      */
     public static CrmQueryResult queryCrmData(CrmQueryReq req) {
-        String url = prefix + "/cgi/crm/data/query";
+        String url = prefix + "/cgi/crm/v2/data/query";
         return doPost(url, req, CrmQueryResult.class);
     }
 

+ 22 - 5
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,8 +1,10 @@
 package com.uas.eis;
 
+import com.uas.eis.beans.result.CrmQueryResult;
 import com.uas.eis.beans.result.Goods;
 import com.uas.eis.exception.AccessTokenException;
 import com.uas.eis.listener.UasProdInOutListener;
+import com.uas.eis.manager.CustomerManager;
 import com.uas.eis.manager.ProductManager;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -24,10 +26,18 @@ public class UasEisApplicationTests {
 	@Autowired
 	private ProductManager productManager;
 
+	@Autowired
+	private CustomerManager customerManager;
+
 	@Test
 	public void Test() {
 
-		List<Map<String,Object>> sku = new ArrayList<>();
+		//客户下载
+		List<String> field_values = new ArrayList<>();
+        field_values.add("1641895200000");
+
+		//商品新增
+		/*List<Map<String,Object>> sku = new ArrayList<>();
 		Map<String,Object> map = new HashMap<>();
 		List spec_and_value = new ArrayList();
 		map.put("spec_and_value",spec_and_value);
@@ -43,14 +53,21 @@ public class UasEisApplicationTests {
 		goods.setName("测试新增202201210077");
 		goods.setCategory("6");
 		//新增时
-		//goods.setSku(sku);
+		//goods.setSku(sku);*/
 
 		//修改时必要参数
-		goods.set_id("61ea66a4f6c2910001540093");
+		//goods.set_id("61ea66a4f6c2910001540093");
 		try {
+			CrmQueryResult crmQueryResult = customerManager.queryCustomer(field_values);
+			Map<String, Object> data = crmQueryResult.getData();
+			List<Map<String,Object>> dataList = (List<Map<String,Object>>) data.get("dataList");
+			Object name = dataList.get(0).get("name");
+			Object id = dataList.get(0).get("_id");
+			System.out.println(name);
+			System.out.println(id);
 			//productManager.addGoods(goods);
-			productManager.updateGoods(goods);
-		}catch (AccessTokenException e) {
+			//productManager.updateGoods(goods);
+		}catch (Exception e) {
 			e.printStackTrace();
 		}
 	}