Browse Source

【越加红】纷享销客 样品申请轮询下载功能

wub 3 years ago
parent
commit
31e7b048d2

+ 11 - 0
src/main/java/com/uas/eis/manager/CommonManager.java

@@ -0,0 +1,11 @@
+package com.uas.eis.manager;
+
+import com.uas.eis.beans.result.CrmQueryResult;
+import com.uas.eis.exception.AccessTokenException;
+
+import java.util.List;
+
+public interface CommonManager {
+
+    public CrmQueryResult queryCommon(String field_name, List<String> field_values, String operator, String orderFieldName, Boolean orderAsc, int limit, String dataObjectApiName, Boolean isCustom) throws AccessTokenException;
+}

+ 74 - 0
src/main/java/com/uas/eis/manager/impl/CommonManagerImpl.java

@@ -0,0 +1,74 @@
+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.CommonManager;
+import com.uas.eis.utils.Configuration;
+import com.uas.eis.utils.OpenAPIUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CommonManagerImpl implements CommonManager {
+
+    private final AccessTokenManager accessTokenManager;
+
+    @Resource(name = "configuration")
+    private Configuration configuration;
+
+    public CommonManagerImpl(AccessTokenManager accessTokenManager) {
+        this.accessTokenManager = accessTokenManager;
+    }
+
+    @Override
+    public CrmQueryResult queryCommon(String field_name, List<String> field_values, String operator, String orderFieldName, Boolean orderAsc, int limit, String dataObjectApiName, Boolean isCustom) 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(field_name);
+        filters.setField_values(field_values);
+        filters.setOperator(operator);
+
+        filtersList.add(filters);
+
+        List<CrmQueryReq.Order> orderList = new ArrayList<>();
+        CrmQueryReq.Order order = new CrmQueryReq.Order();
+        order.setAsc(orderAsc);
+        order.setFieldName(orderFieldName);
+        orderList.add(order);
+
+        CrmQueryReq.SearchQuery searchQuery = new CrmQueryReq.SearchQuery();
+        searchQuery.setFilters(filtersList);
+        searchQuery.setLimit(limit);
+        searchQuery.setOrders(orderList);
+
+        CrmQueryReq.DataApiName dataApiName = new CrmQueryReq.DataApiName();
+        dataApiName.setDataObjectApiName(dataObjectApiName);
+        dataApiName.setSearch_query_info(searchQuery);
+
+        CrmQueryReq crmQueryReq = new CrmQueryReq();
+        crmQueryReq.setCorpAccessToken(token.getCorpAccessToken());
+        crmQueryReq.setCorpId(token.getCorpId());
+        crmQueryReq.setCurrentOpenUserId(openUserId);
+        crmQueryReq.setDataApiName(dataApiName);
+        try {
+            if(isCustom){
+                crmQueryResult = OpenAPIUtils.queryCrmCustomData(crmQueryReq);
+            }else{
+                crmQueryResult = OpenAPIUtils.queryCrmData(crmQueryReq);
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        return crmQueryResult;
+    }
+}

+ 174 - 0
src/main/java/com/uas/eis/task/SampleApplyTask.java

@@ -0,0 +1,174 @@
+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.CommonManager;
+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 SampleApplyTask {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Autowired
+    private BaseDao baseDao;
+    @Autowired
+    private CommonManager commonManager;
+
+    @Scheduled(cron = "*/10 * * * * ?")
+    public void syncSampleApply() {
+        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 = commonManager.queryCommon("create_time", field_values, "GT", "create_time", true, 5, "object_83m40__c", true);
+                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("ProdInOutApply", "pi_code='" + 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 cu_code = baseDao.getFieldDataByCondition("customer", "max(cu_code) cu_code", "CU_FXXKID='" + dataList.get(i).get("field_l6W5b__c") + "'");
+                                String cuCode =cu_code == null ? "" : cu_code.toString();
+
+                                Object life_status = dataList.get(i).get("life_status");
+                                Object record_type = dataList.get(i).get("record_type");
+                                String lifeStatus = "normal".equals(life_status) ? "正常": (life_status==null? "" : life_status.toString());
+                                String recordType = "default__c".equals(record_type) ? "预设业务类型": (record_type==null? "" : record_type.toString());
+                                //负责人编号、名称
+                                Map<String,Object> owner__r =(Map<String,Object>) dataList.get(i).get("owner__r");
+                                Object owner_code = baseDao.getFieldDataByCondition("employee", "max(em_code) em_code", "em_name='" + owner__r.get("name") + "'");
+                                //创建人编号、名称
+                                Map<String,Object> created_by__r =(Map<String,Object>) dataList.get(i).get("created_by__r");
+                                Object created_by_code = baseDao.getFieldDataByCondition("employee", "max(em_code) em_code", "em_name='" + created_by__r.get("name") + "'");
+                                //最后更新人编号、名称
+                                Map<String,Object> last_modified_by__r =(Map<String,Object>) dataList.get(i).get("last_modified_by__r");
+                                Object last_modified_by_code = baseDao.getFieldDataByCondition("employee", "max(em_code) em_code", "em_name='" + last_modified_by__r.get("name") + "'");
+                                //申请日期
+                                Long field_lp4Q1__c = Long.parseLong(new BigDecimal(dataList.get(i).get("field_lp4Q1__c").toString()).toPlainString());
+                                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());
+                                //客户联系人:pi_purposename 电话:pi_expresscode
+                                int pi_id = baseDao.getSeqId("PRODINOUTAPPLY_SEQ");
+                                String sql="insert into ProdInOutApply(pi_id,pi_code,pi_class,pi_date,pi_status,pi_statuscode,pi_cardcode,pi_title,pi_emcode,pi_emname,pi_recordman,pi_recorddate," +
+                                        "pi_updateman,pi_updatedate,pi_purposename,pi_expresscode,pi_address,pi_field_Il1e1,pi_record_type,pi_life_status,PI_FXXKID)" +
+                                        "values("+pi_id+",'"+name+"','其它出库申请单',"+DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(field_lp4Q1__c)))+"," +
+                                        "'在录入','ENTERING','"+cuCode+"','"+dataList.get(i).get("field_l6W5b__c__r")+"','"+owner_code+"','"+owner__r.get("name")+"','"+ created_by__r.get("name")+"'," +
+                                        DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(create_time)))+",'"+last_modified_by__r.get("name")+"',"+
+                                        DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(last_modified_time)))+",'" +dataList.get(i).get("field_DzO73__c__r")+"',"+
+                                        "'"+dataList.get(i).get("field_57196__c")+"','"+(dataList.get(i).get("field_6OcTn__c")==null?"":dataList.get(i).get("field_6OcTn__c"))+"','"+dataList.get(i).get("field_Il1e1__c")+"','"+recordType+"','"+lifeStatus+"','"+_id+"')";
+                                baseDao.execute(sql);
+                                //样品申请明细下载
+                                syncSampleApplyDetail(_id.toString(),pi_id);
+                                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();
+        }
+    }
+
+    private void syncSampleApplyDetail(String SampleApply_id,int pi_id){
+        List<String> field_values_Detail = new ArrayList<>();
+        field_values_Detail.add(SampleApply_id);
+        try {
+            CrmQueryResult crmQueryResult = commonManager.queryCommon("field_8019j__c", field_values_Detail, "EQ", "create_time", true, 5, "object_Q55Nj__c", true);
+            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("ProdIOApplyDetail", "pd_code='" + name + "' and pd_piid="+pi_id)){
+                            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 {
+                            //负责人编号、名称
+                            Map<String,Object> owner__r =(Map<String,Object>) dataList.get(i).get("owner__r");
+                            Object owner_code = baseDao.getFieldDataByCondition("employee", "max(em_code) em_code", "em_name='" + owner__r.get("name") + "'");
+
+                            //客户联系人:pi_purposename 电话:pi_expresscode
+                            String sql="insert into ProdIOApplyDetail(pd_id,pd_piid,pd_pdno,pd_code,pd_piclass,pd_picode,pd_ownercode,pd_owner,pd_prodcode,pd_detail,pd_sepc,pd_brand,pd_outqty,YPonhand,PD_FXXKID)" +
+                                    "values(PRODIOAPPLYDETAIL_SEQ.nextval,"+pi_id+","+(i+1)+",'"+name+"','其它出库申请单','"+dataList.get(i).get("field_8019j__c__r")+"'," +
+                                    "'"+owner_code+"','"+owner__r.get("name")+"','"+ (dataList.get(i).get("field_2Lq6Y__c")==null?"":dataList.get(i).get("field_2Lq6Y__c")) +"','"+(dataList.get(i).get(" field_utezf__c__r")==null?"":dataList.get(i).get(" field_utezf__c__r"))+"'," +
+                                    "'"+(dataList.get(i).get("field_21Suz__c")==null?"":dataList.get(i).get("field_21Suz__c"))+"','"+(dataList.get(i).get("field_y5dz2__c")==null?"":dataList.get(i).get("field_y5dz2__c"))+"','" +dataList.get(i).get("field_7uspZ__c")+"',"+
+                                    "'"+dataList.get(i).get("field_lzxe2__c")+"','"+_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();
+        }
+
+    }
+}

+ 10 - 0
src/main/java/com/uas/eis/utils/OpenAPIUtils.java

@@ -170,6 +170,16 @@ public class OpenAPIUtils {
         return doPost(url, req, CrmQueryResult.class);
     }
 
+    /**
+     * CRM自定义对象查询接口
+     * @param req
+     * @return
+     */
+    public static CrmQueryResult queryCrmCustomData(CrmQueryReq req) {
+        String url = prefix + "/cgi/crm/custom/v2/data/query";
+        return doPost(url, req, CrmQueryResult.class);
+    }
+
     /**
      * CRM获取详情 元数据接口
      */