YITCustomerTask.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. package com.uas.eis.task;
  2. import com.uas.eis.beans.req.CrmQueryReq;
  3. import com.uas.eis.beans.result.BaseResult;
  4. import com.uas.eis.beans.result.CrmQueryResult;
  5. import com.uas.eis.beans.result.Customer;
  6. import com.uas.eis.dao.BaseDao;
  7. import com.uas.eis.dao.SqlRowList;
  8. import com.uas.eis.manager.CommonManager;
  9. import com.uas.eis.manager.CustomerManager;
  10. import com.uas.eis.utils.Constant;
  11. import com.uas.eis.utils.DateUtil;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.scheduling.annotation.EnableAsync;
  16. import org.springframework.scheduling.annotation.EnableScheduling;
  17. import org.springframework.scheduling.annotation.Scheduled;
  18. import org.springframework.stereotype.Component;
  19. import java.math.BigDecimal;
  20. import java.text.SimpleDateFormat;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.Map;
  24. @Component
  25. @EnableAsync
  26. @EnableScheduling
  27. public class YITCustomerTask {
  28. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  29. @Autowired
  30. private BaseDao baseDao;
  31. @Autowired
  32. private CustomerManager customerManager;
  33. @Autowired
  34. private CommonManager commonManager;
  35. @Scheduled(cron = "0 0/5 * * * ?")
  36. public void syncCustomers() {
  37. String Master ="YIT.";
  38. try {
  39. //List<String> field_values = new ArrayList<>();
  40. SqlRowList rs = baseDao.queryForRowSet("select ml_syncTime from (select * from "+Master+"FXXKDockingErrorlog where nvl(ML_TYPE,' ')='客户资料下载' and ML_SYNCTIME is not null order by ml_date desc) where rownum=1");
  41. if(rs.next()){
  42. List<CrmQueryReq.Filters> filtersList = new ArrayList<>();
  43. List<String> field_values = new ArrayList<>();
  44. String ml_syncTime = rs.getGeneralString("ml_syncTime");
  45. field_values.add(ml_syncTime);
  46. CrmQueryReq.Filters filters = new CrmQueryReq.Filters();
  47. filters.setField_name("last_modified_time");
  48. filters.setField_values(field_values);
  49. filters.setOperator("GT");
  50. filtersList.add(filters);
  51. List<String> field_values2 = new ArrayList<>();
  52. field_values2.add("广东奥莱敏控技术有限公司");
  53. CrmQueryReq.Filters filters2 = new CrmQueryReq.Filters();
  54. filters2.setField_name("name");
  55. filters2.setField_values(field_values2);
  56. filters2.setOperator("EQ");
  57. //filtersList.add(filters2);
  58. //isCustom 参数应该为false
  59. CrmQueryResult crmQueryResult = commonManager.multiQueryCommon(filtersList, "last_modified_time", true, 100, "AccountObj", false);
  60. /*String ml_syncTime = rs.getGeneralString("ml_syncTime");
  61. field_values.add(ml_syncTime);
  62. CrmQueryResult crmQueryResult = customerManager.queryCustomer(field_values);*/
  63. int errorCode = crmQueryResult.getErrorCode();
  64. if(errorCode == 0){
  65. Map<String, Object> data = crmQueryResult.getData();
  66. List<Map<String, Object>> dataList = (List<Map<String,Object>>) data.get("dataList");
  67. //m:成功条数 n:失败条数
  68. int m=0,n=0,k=0;
  69. if(dataList.size()>0){
  70. //最后(即最近)一次同步时间
  71. //Long create_time_Last = Long.parseLong(new BigDecimal(dataList.get(dataList.size()-1).get("create_time").toString()).toPlainString());
  72. Long last_modified_time_sync = Long.parseLong(new BigDecimal(dataList.get(dataList.size()-1).get("last_modified_time").toString()).toPlainString());
  73. for (int i = 0; i < dataList.size(); i++) {
  74. Object _id = dataList.get(i).get("_id");
  75. Object name = dataList.get(i).get("name");
  76. SimpleDateFormat sdf = new SimpleDateFormat(Constant.YMD_HMS);
  77. //判断是否为易探客户 根据负责人是否存在于易探人员资料名称中 CRM负责人名称字段:owner__r
  78. Map<String,Object> owner__r = (Map<String,Object>) dataList.get(i).get("owner__r");
  79. String cu_industry = getDisplayField(dataList, i, "field_00Ijp__c", "所属行业");
  80. //负责人姓名
  81. String owner = owner__r==null ? "" : owner__r.get("name").toString();
  82. boolean checkEmstatuscode = baseDao.checkIf(Master + "employee", "nvl(em_statuscode,' ')='AUDITED' and nvl(em_name,' ')= '" + owner + "'");
  83. if(!checkEmstatuscode && !"LED行业".equals(cu_industry) && !"智能家居和安防行业".equals(cu_industry) ){
  84. k++;
  85. continue;
  86. }
  87. if(baseDao.checkIf(Master+"PreCustomer", "cu_name='" + name + "'")){
  88. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'客户名称已存在','客户资料下载','"+name+"')");
  89. logger.info("异常信息:客户名称已存在");
  90. n++;
  91. continue;
  92. }
  93. try {
  94. Object em_code = baseDao.getFieldDataByCondition(Master+"employee", "max(em_code) em_code", "em_name='" + dataList.get(i).get("field_w9e4q__c") + "'");
  95. Object cu_sellercode = baseDao.getFieldDataByCondition(Master+"employee", "max(em_code) em_code", "em_name='" + owner + "'");
  96. Long create_time = Long.parseLong(new BigDecimal(dataList.get(i).get("create_time").toString()).toPlainString());
  97. Long last_modified_time = Long.parseLong(new BigDecimal(dataList.get(i).get("last_modified_time").toString()).toPlainString());
  98. String cuKind = getDisplayField(dataList, i, "account_type", "客户类型");
  99. String wbsk_user = getDisplayField(dataList, i, "UDSSel1__c", "收款方式");//外部收款方式
  100. Object[] pa_data = baseDao.getFieldsDataByCondition(Master+"Payments", new String[]{"pa_id","pa_code"}, "nvl(pa_class,' ')='收款方式' and pa_name='" + wbsk_user + "'");//获取收款方式编号
  101. String paID = (pa_data == null || pa_data[0] == null) ? "" : pa_data[0].toString();
  102. String paCode = (pa_data == null || pa_data[1] == null) ? "" : pa_data[1].toString();
  103. String cu_level = getDisplayField(dataList, i, "account_level", "客户级别");
  104. String cu_turnSAP = getDisplayField(dataList, i, "field_RYzRf__c", "是否转正式客户在SAP内建档");
  105. String cu_currency = getDisplayField(dataList, i, "field_e2HeP__c", "货币");
  106. String cu_recordType = getDisplayField(dataList, i, "record_type", "业务类型");
  107. //String cu_industry = getDisplayField(dataList, i, "field_00Ijp__c", "所属行业");
  108. String cu_taxrate = getDisplayField(dataList, i, "field_nhi2w__c", "税率");
  109. String cu_code = baseDao.sGetMaxNumber(Master+"PreCustomer", 2);
  110. //field_giBJk__c:收货人 UDSText5__c:送货地址 UDSText1__c:法定代表人 UDSText2__c:注册资金
  111. String sql="insert into "+Master+"PreCustomer(cu_id,cu_code,cu_name,cu_shortname,cu_add2,cu_sellercode,cu_sellername,cu_servicecode,cu_servicename,cu_kind," +
  112. "cu_contact,cu_add1,cu_lawman,cu_regamount,cu_rate,cu_wbsk_user,cu_paymentid,cu_paymentscode,cu_payments,cu_level,cu_industry,cu_mainbusiness,cu_turnSAP,cu_currency,cu_taxrate," +
  113. "cu_dealstatus,cu_Shipmentamount,cu_receivable,cu_businessRegister,cu_recordType," +
  114. "cu_mobile,cu_email,cu_recordman,cu_recorddate,cu_lastdate,cu_auditstatus,cu_auditstatuscode,cu_remark,CU_FXXKID)" +
  115. "values("+Master+"PRECUSTOMER_SEQ.nextval,'"+cu_code+"','"+name+"','"+dataList.get(i).get("UDSText3__c")+"','"+ dataList.get(i).get("address")+"'," +
  116. "'"+(cu_sellercode==null?"":cu_sellercode)+"','"+owner+"','"+em_code+"','"+dataList.get(i).get("field_w9e4q__c")+"','"+cuKind+"'," +
  117. "'"+getNotNull(dataList,i,"field_giBJk__c")+"','"+getNotNull(dataList,i,"UDSText5__c")+"'," +
  118. "'"+getNotNull(dataList,i,"UDSText1__c")+"','"+getNotNull(dataList,i,"UDSText2__c")+"','" +
  119. getNotNull(dataList,i,"field_1l3xo__c")+"','"+wbsk_user+"','"+paID+"','"+paCode+"','"+wbsk_user+"','"+cu_level+"','"+cu_industry+"'," +
  120. "'"+getNotNull(dataList,i,"UDSText4__c")+"','"+cu_turnSAP+"','"+cu_currency+"',"+cu_taxrate+",'"+getNotNull(dataList,i,"deal_status")+"'," +
  121. "'"+getNotNull(dataList,i,"field_Ezg0w__c")+"','"+getNotNull(dataList,i,"field_59oLF__c")+"','"+getNotNull(dataList,i,"biz_reg_name")+"','"+cu_recordType+"',"+
  122. "'"+dataList.get(i).get("tel")+"','"+dataList.get(i).get("email")+"'," +
  123. "'CRM',"+DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(create_time)))+"," +
  124. DateUtil.parseDateToOracleString(Constant.YMD_HMS,sdf.parse(sdf.format(last_modified_time)))+",'已审核','AUDITED','"+getNotNull(dataList,i,"remark")+"','"+_id+"')";
  125. baseDao.execute(sql);
  126. m++;
  127. }catch (Exception e){
  128. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmQueryResult.getErrorMessage()+"','客户资料下载','"+name+"')");
  129. logger.info("异常信息:"+e);
  130. n++;
  131. }
  132. }
  133. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_syncTime) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'下载记录"+dataList.size()+"条,成功"+m+"条,失败"+n+"条,非易探客户"+k+"条','客户资料下载','"+last_modified_time_sync+"')");
  134. }
  135. }else{
  136. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmQueryResult.getErrorMessage()+"','客户资料下载','')");
  137. logger.info("异常信息:"+crmQueryResult.getErrorMessage());
  138. }
  139. }
  140. }catch (Exception e){
  141. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+e.getMessage()+"','客户资料下载','')");
  142. logger.info("异常信息:"+e.getMessage());
  143. e.printStackTrace();
  144. }
  145. }
  146. @Scheduled(cron = "0 0 23 * * ?")
  147. public void syncUpdateCustomers() {
  148. String Master ="YIT.";
  149. SqlRowList rs = baseDao.queryForRowSet("select * from (select distinct cui_code from "+Master+"customerUpdInfo where CUI_UPDATEDATE is null and nvl(cui_type,' ')='普通变更' and trunc(cui_date)=trunc(sysdate)) left join "+Master+"customer on cui_code=cu_code where nvl(cu_name,' ')<>' ' order by cu_id");
  150. while (rs.next()){
  151. try {
  152. Customer customer = new Customer();
  153. String valueField = getValueField("客户资料", "客户级别", rs.getGeneralString("cu_level"));
  154. customer.setDataObjectApiName("AccountObj");
  155. customer.set_id(rs.getGeneralString("cu_fxxkid"));
  156. customer.setName(rs.getGeneralString("cu_name"));
  157. customer.setAccount_level(valueField);
  158. customer.setField_w9e4q__c(rs.getGeneralString("cu_servicename"));
  159. BaseResult baseResult = customerManager.updateCustomer(customer);
  160. int errorCode = baseResult.getErrorCode();
  161. if(errorCode == 0){
  162. baseDao.execute("update "+Master+"customerUpdInfo set cui_updatestatus='已更新',cui_updatedate=sysdate where nvl(cui_type,' ')='普通变更' and cui_code='"+rs.getGeneralString("cui_code")+"' and trunc(cui_date)=trunc(sysdate)");
  163. }else{
  164. baseDao.execute("update "+Master+"customerUpdInfo set cui_error='"+baseResult.getErrorMessage()+"' where nvl(cui_type,' ')='普通变更' and cui_code='"+rs.getGeneralString("cui_code")+"' and trunc(cui_date)=trunc(sysdate)");
  165. logger.info("异常信息:"+baseResult.getErrorMessage());
  166. }
  167. }catch (Exception e){
  168. baseDao.execute("update "+Master+"customerUpdInfo set cui_error='"+e.getMessage()+"' where nvl(cui_type,' ')='普通变更' and cui_code='"+rs.getGeneralString("cui_code")+"' and trunc(cui_date)=trunc(sysdate)");
  169. logger.info("异常信息:"+e.getMessage());
  170. e.printStackTrace();
  171. }
  172. }
  173. }
  174. /**
  175. * 同步人员资料crm唯一id
  176. */
  177. @Scheduled(cron = "0 0/1 * * * ?")
  178. public void syncEmployeeFXXKID() {
  179. String Master ="YIT.";
  180. SqlRowList rs = baseDao.queryForRowSet("select em_id,em_name,em_code from "+Master+"employee where nvl(EM_FXXKID,' ')=' ' and nvl(EM_ISSYNCFXXKID,0)=-1 order by em_id");
  181. while (rs.next()){
  182. try {
  183. List<String> field_values = new ArrayList<>();
  184. field_values.add(rs.getGeneralString("em_name"));
  185. CrmQueryResult crmQueryResult = commonManager.queryCommon("name", field_values, "EQ", "name", true, 50, "PersonnelObj", true);
  186. int errorCode = crmQueryResult.getErrorCode();
  187. if(errorCode == 0) {
  188. Map<String, Object> data = crmQueryResult.getData();
  189. List<Map<String, Object>> dataList = (List<Map<String, Object>>) data.get("dataList");
  190. if(dataList.size()>0){
  191. Object user_id = dataList.get(0).get("user_id");
  192. if(user_id!=null){
  193. baseDao.execute("update "+Master+"employee set em_fxxkid='"+user_id+"' where em_id="+rs.getGeneralInt("em_id"));
  194. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'人员资料纷享销客主键下载成功','人员资料纷享销客主键下载','"+rs.getGeneralString("em_code")+"')");
  195. }else{
  196. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmQueryResult.getErrorMessage()+"','人员资料纷享销客主键下载','"+rs.getGeneralString("em_code")+"')");
  197. logger.info("异常信息:crm不存在该人员资料");
  198. }
  199. }
  200. }else{
  201. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmQueryResult.getErrorMessage()+"','人员资料纷享销客主键下载','"+rs.getGeneralString("em_code")+"')");
  202. logger.info("异常信息:"+crmQueryResult.getErrorMessage());
  203. }
  204. }catch (Exception e){
  205. baseDao.execute("insert into "+Master+"FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values("+Master+"FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+e.getMessage()+"','人员资料纷享销客主键下载','"+rs.getGeneralString("em_code")+"')");
  206. logger.info("异常信息:"+e.getMessage());
  207. e.printStackTrace();
  208. }
  209. }
  210. }
  211. private String getDisplayField(List<Map<String, Object>> dataList, int i, String Field, String APINAME){
  212. String Master ="YIT.";
  213. String ValueField ="";
  214. Object account_type = dataList.get(i).get(Field);
  215. if(account_type !=null && !"".equals(account_type.toString())){
  216. Object DISPLAYFIELD = baseDao.getFieldDataByCondition(Master+"comboData", "DISPLAYFIELD", "VALUEFIELD='" + account_type + "' and APINAME='"+APINAME+"' and MODULEAPINAME='客户资料'");
  217. ValueField= DISPLAYFIELD==null? "" :DISPLAYFIELD.toString();
  218. }
  219. return ValueField;
  220. }
  221. private String getValueField(String MODULEAPINAME, String APINAME, String DISPLAYFIELD){
  222. String Master ="YIT.";
  223. String result ="";
  224. if(DISPLAYFIELD !=null && !"".equals(DISPLAYFIELD)){
  225. Object VALUEFIELD = baseDao.getFieldDataByCondition(Master+"comboData", "VALUEFIELD", "MODULEAPINAME='" + MODULEAPINAME + "' and APINAME='"+APINAME+"' and DISPLAYFIELD='"+DISPLAYFIELD+"'");
  226. result = VALUEFIELD==null? "" :VALUEFIELD.toString();
  227. }
  228. return result;
  229. }
  230. private String getNotNull(List<Map<String, Object>> dataList, int i, String Field){
  231. return (dataList.get(i).get(Field)==null?"":dataList.get(i).get(Field)).toString();
  232. }
  233. }