| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- package com.malk.siku.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.malk.server.aliwork.YDConf;
- import com.malk.server.aliwork.YDParam;
- import com.malk.server.common.McException;
- import com.malk.server.dingtalk.DDR_New;
- import com.malk.service.aliwork.YDClient;
- import com.malk.service.dingtalk.DDClient;
- import com.malk.siku.service.SikuTaskService;
- import com.malk.siku.utils.MkBxUtil;
- import com.malk.utils.UtilHttp;
- import com.malk.utils.UtilMap;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- @Slf4j
- @Service
- public class SikuTaskServiceImpl implements SikuTaskService {
- @Autowired
- private YDClient ydClient;
- @Autowired
- private DDClient ddClient;
- @Override
- public void syncLoanManage() {
- try {
- log.info("开始同步借还款台账");
- //删除宜搭借款台账
- List<List<String>> formInstanceIdListList = new ArrayList<>();//实例id集合,每100条
- DDR_New ddrNew = new DDR_New();
- int pageSize = 50;
- int pageNumber = 0;
- do {
- pageNumber++;
- ddrNew = retryQueryData(YDParam.builder()
- .formUuid("FORM-14F79868B683481295062CD1D643E06EVB7B")
- .searchFieldJson("")
- .pageNumber(pageNumber)
- .pageSize(pageSize)
- .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
- formInstanceIdListList.addAll(Collections.singleton((List<String>) ddrNew.getData()));
- // Thread.sleep(1000);
- }while (ddrNew.getPageNumber() * pageSize < ddrNew.getTotalCount());
- for (List<String> formInstanceIdList : formInstanceIdListList) {
- if (!formInstanceIdList.isEmpty()){
- retryOperateData(YDParam.builder()
- .formUuid("FORM-14F79868B683481295062CD1D643E06EVB7B")
- .formInstanceIdList(formInstanceIdList)
- .build(), YDConf.FORM_OPERATION.delete_batch);
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- //查询每刻最新借款台账
- List<Map> loanManageList = MkBxUtil.loanManageList();
- for (Map loanManage : loanManageList) {
- String code = UtilMap.getString(loanManage, "code");//台账编号\
- String formCode = UtilMap.getString(loanManage, "formCode");//借款单单据号
- String legalEntityName = UtilMap.getString(loanManage, "legalEntityName");//所属公司
- String departmentName = UtilMap.getString(loanManage, "departmentName");//借款部门
- String employeeName = UtilMap.getString(loanManage, "employeeName");//借款人
- List<String> employeeDdUser = getDdUserId(employeeName);
- String responseUserName = UtilMap.getString(loanManage, "responseUserName");//负责人
- List<String> responseDdUser = getDdUserId(responseUserName);
- String formName = UtilMap.getString(loanManage, "formName");//事由
- String formSubTypeName = UtilMap.getString(loanManage, "formSubTypeName");//单据类型
- long submittedAt = UtilMap.getLong(loanManage, "submittedAt");//提单时间
- long expectRepaymentTime = UtilMap.getLong(loanManage, "expectRepaymentTime");//预计归还时间
- int loanAge = UtilMap.getInt(loanManage, "loanAge");//账龄
- Double amount = UtilMap.getDouble(UtilMap.getMap(loanManage, "approvedAmount"), "amount");//借款金额
- Double owedAmount = UtilMap.getDouble(UtilMap.getMap(loanManage, "owedAmount"), "amount");//未归还(未核销)
- Double pendingAmount = UtilMap.getDouble(UtilMap.getMap(loanManage, "pendingAmount"), "amount");//核销中金额
- //借款单详情
- Map loanDetailInfo = MkBxUtil.loanDetailInfo(formCode);
- Map customObject = UtilMap.getMap(loanDetailInfo, "customObject");
- Map cf0 = UtilMap.getMap(customObject, "CF0");
- String projectCode = UtilMap.getString(cf0, "detailBusinessCode");//项目流水号
- String projectName = UtilMap.getString(cf0, "text");//项目名称
- long settledAt = UtilMap.getLong(loanDetailInfo, "settledAt");//支付时间
- Map formData = new HashMap();
- formData.put("textField_mnsly3li",code);
- formData.put("textField_mnsly3lb",legalEntityName);
- formData.put("textField_mnsly3lc",departmentName);
- formData.put("employeeField_mnsly3mc",employeeDdUser);
- formData.put("employeeField_mnsly3md",responseDdUser);
- formData.put("textField_mnsm8q6f",projectName);
- formData.put("textField_mnwtwu9z",projectCode);
- formData.put("textareaField_mnsly3ll",formName);
- formData.put("textField_mnsly3lg",formSubTypeName);
- formData.put("dateField_mnsly3lx",submittedAt);
- formData.put("dateField_mnsly3ly",expectRepaymentTime);
- formData.put("dateField_mnsly3m3",settledAt);
- formData.put("numberField_mnsly3m4",loanAge);
- formData.put("numberField_mnsly3m5",amount);
- formData.put("numberField_mnsly3ma",owedAmount);
- formData.put("numberField_mnsly3mb",pendingAmount);
- //同步宜搭借款台账
- ydClient.operateData(YDParam.builder()
- .formUuid("FORM-14F79868B683481295062CD1D643E06EVB7B")
- .formDataJson(JSONObject.toJSONString(formData))
- .build(), YDConf.FORM_OPERATION.create);
- }
- System.out.println("111");
- }
- //自带重试的operateData方法
- private Object retryOperateData(YDParam param, YDConf.FORM_OPERATION formOperation) {
- int maxAttempts = 3; // 尝试的最大次数
- int attempt = 0;
- Object result = null;
- while (attempt < maxAttempts) {
- try {
- result = ydClient.operateData(param, formOperation);
- return result;
- } catch (McException e) {
- log.info("错误信息:{}",e.getMessage());
- if (e.getMessage().equals("The request has failed due to a temporary failure of the server.")) {
- attempt++;
- // 线程睡眠3秒
- try {
- Thread.sleep(5000);
- log.info("尝试第{}次,param:{},FORM_OPERATION:{},异常信息:{}", attempt, JSONObject.toJSONString(param), formOperation,e.getMessage());
- } catch (InterruptedException ie) {
- Thread.currentThread().interrupt(); // 重新设置中断状态
- System.err.println("Sleep interrupted: " + ie.getMessage());
- }
- }
- } catch (Exception e) {
- log.error("操作失败,param:{},FORM_OPERATION:{},异常信息:{}", JSONObject.toJSONString(param), formOperation,e.getMessage());
- throw new RuntimeException(e);
- }
- }
- throw new RuntimeException("超出最大重试次数,param:"+JSONObject.toJSONString(param)+",FORM_OPERATION:{}"+formOperation);
- }
- //自带重试的queryData方法
- private DDR_New retryQueryData(YDParam param, YDConf.FORM_QUERY formQuery) {
- int maxAttempts = 3; // 尝试的最大次数
- int attempt = 0;
- DDR_New result = null;
- while (attempt < maxAttempts) {
- try {
- result = ydClient.queryData(param, formQuery);
- return result;
- } catch (McException e) {
- log.info("错误信息:{}",e.getMessage());
- if (e.getMessage().equals("The request has failed due to a temporary failure of the server.")) {
- attempt++;
- // 线程睡眠3秒
- try {
- Thread.sleep(5000);
- log.info("尝试第{}次,param:{},FORM_QUERY:{},异常信息:{}", attempt, JSONObject.toJSONString(param), formQuery,e.getMessage());
- } catch (InterruptedException ie) {
- Thread.currentThread().interrupt(); // 重新设置中断状态
- System.err.println("Sleep interrupted: " + ie.getMessage());
- }
- }
- } catch (Exception e) {
- log.error("操作失败,param:{},FORM_QUERY:{},异常信息:{}", JSONObject.toJSONString(param), formQuery,e.getMessage());
- throw new RuntimeException(e);
- }
- }
- throw new RuntimeException("超出最大重试次数,param:"+JSONObject.toJSONString(param)+",FORM_QUERY:{}"+formQuery);
- }
- //根据员工名字匹配员工id
- private List<String> getDdUserId(String Name){
- HashMap body = new HashMap();
- body.put("queryWord", Name);
- body.put("offset",0);
- body.put("size",1);
- String s1 = UtilHttp.doPost("https://api.dingtalk.com/v1.0/contact/users/search", ddClient.initTokenHeader(), null, body);
- List<String> list = JSONObject.parseObject(s1).getJSONArray("list").toJavaList(String.class);
- return list;
- }
- }
|