浏览代码

卡倍亿二期v2.0

wzy 8 月之前
父节点
当前提交
29927201cf
共有 1 个文件被更改,包括 119 次插入33 次删除
  1. 119 33
      mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/impl/KabeiyiServiceImpl.java

+ 119 - 33
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/impl/KabeiyiServiceImpl.java

@@ -16,6 +16,7 @@ import com.malk.kabeiyi.util.RecognizeAllText;
 import com.malk.kabeiyi.util.U8Util;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
 import com.malk.server.common.McR;
 import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDR;
@@ -25,6 +26,7 @@ import com.malk.service.aliwork.YDService;
 import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Workflow;
 import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
 import com.malk.utils.UtilToken;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -90,27 +92,40 @@ public class KabeiyiServiceImpl implements KabeiyiService {
     @Value("${u8.appSecret}")
     private String u8AppSecret;
 
-    //u8数据源库序号
-    private static final int[] DS_SEQUENCES = {2,3,5,8,9,10,12,14};
-
     //审批实例url前缀(卡倍亿)
     private static final String PROC_INST_PREFIX_URL = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=dingc3a744cb591a7346f2c783f7214b6d69#/plainapproval?procInstId=";
+
     //宜搭-关联数据(卡倍亿)
     private static final String RELATION = "FORM-230C40137ED94524B4D4C94F8B23A8D2F8PF";
 
     //审批实例url前缀(特充)
     private static final String PROC_INST_PREFIX_URL2 = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=ding3ea249a3b5b466d0f2c783f7214b6d69#/plainapproval?procInstId=";
+
     //宜搭-关联数据(特充)
     private static final String RELATION2 = "FORM-51E17EFB52C14C9CB9E00168FED2BC18LQ6H";
+
     //问题整改表
     private static final String QUESTION = "FORM-89F515967FF94C62A9031F28EF6000B1YV5Q";
+
     //问题整改表流程code
     private static final String QUESTION_PROC_CODE = "TPROC--DP5660A1LEXNP1S37P7KU9GCHD5U3HB6C360M5";
+
     //审核表
     private static final String CHECK = "FORM-F4ED246EADD8427381BC13C4F0FEF7FDYMKJ";
+
     //审核表流程code
     private static final String CHECK_PROC_CODE = "TPROC--4XC66Y61XWWNZNJKBZD4VAB5BQAJ2YANX160M5";
-    //关联表单(卡倍亿)
+
+    //审核计划
+    private static final String CHECK_PLAN = "FORM-A9A7991EEB7D41FDAADADB9B1E1750FE0K5K";
+
+    //内部交易客户
+    private static final String INTERNAL_CUSTOMER = "FORM-A4CD6904046E4BB793F3B40B51E310B657YZ";
+
+    //内部工厂
+    private static final String INTERNAL_FACTORY = "FORM-CE17FDE72A8541B48D04FD64E89E7C630AQF";
+
+     //关联表单(卡倍亿)
     private static final Map<String,String> SCHEMA_MAP = new HashMap<>();
     static{
         SCHEMA_MAP.put("工厂用章流程","1.1、工厂用章流程(除采购营销人事)");
@@ -351,9 +366,7 @@ public class KabeiyiServiceImpl implements KabeiyiService {
         Map formData = ddrNew.getFormData();
 
         List<String> reviewerUserIds = (List<String>) formData.get("employeeField_m061zye5_id");//审核人
-        List<String> deptManagerUserIds = (List<String>) formData.get("employeeField_m10d5uqj_id");//部门经理
-        String area = formData.get("selectField_m0w4kilf").toString();//审核区域
-
+        String area = formData.get("selectField_m0w4kilf").toString();
         List<Map> details = (List<Map>) formData.get("tableField_m0kqtqoy");
         String[] yida = McProject.getYida("1009");
         for (Map detail : details) {
@@ -366,23 +379,9 @@ public class KabeiyiServiceImpl implements KabeiyiService {
                 question.put("attachmentField_m061zyep",detail.get("attachmentField_m061zyep"));//问题证据
                 question.put("textareaField_m063drgz",detail.get("textareaField_m063drgz"));//问题描述
                 question.put("dateField_m061zyev",detail.get("dateField_m061zyev"));//整改截止时间
-                question.put("employeeField_m10dns9c",deptManagerUserIds);//部门经理
-
-                //根据userId获取部门id
-                List<String> rectificationUserIds = (List<String>) detail.get("employeeField_m061zyeq_id");
-                question.put("employeeField_m061zyeq",rectificationUserIds);//责任整改人
+                question.put("employeeField_m10dns9c",detail.get("employeeField_m10d5uqj_id"));//部门经理
                 question.put("selectField_m0w4kilf",area);//审核区域
 
-                Map body2 = new HashMap<>();
-                body2.put("userid", rectificationUserIds.get(0));
-
-                DDR_New ddrNew1 = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/department/listparentbyuser", null, ddClient.initTokenParams(), body2, DDR_New.class);
-                Map result2 = (Map) ddrNew1.getResult();
-                List<Map> parentList = (List<Map>) result2.get("parent_list");
-                List<Long> parentDeptIdList = (List<Long>) parentList.get(0).get("parent_dept_id_list");
-                String deptId = parentDeptIdList.get(0) + "";
-                question.put("departmentSelectField_m0p0tbyo",new String[]{deptId});//部门
-
                 Map<String,Object> body = new HashMap<>();
                 body.put("appType",yida[0]);
                 body.put("systemToken",yida[1]);
@@ -506,7 +505,9 @@ public class KabeiyiServiceImpl implements KabeiyiService {
                 break;
             default:break;
         }
-
+        //获取所有子表明细(大于50条)
+        List<Map> details = getInnerTable(CHECK_PLAN,formInstId,"tableField_m0kqtqoy",1,50);
+        formData.put("tableField_m0kqtqoy",details);
         //每个审批人发起审批
         for (String reviewerUserId : reviewerUserIds) {
             //根据userId获取部门id
@@ -547,15 +548,63 @@ public class KabeiyiServiceImpl implements KabeiyiService {
         return McR.success();
     }
 
+    private List<Map> getInnerTable(String formUuid, String formInstId, String tableField, int pageNumber, int pageSize) {
+        List<Map> details = new ArrayList<>();
+        DDR_New ddrNew = new DDR_New();
+
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder()
+                    .formUuid(formUuid)
+                    .formInstId(formInstId)
+                    .tableFieldId(tableField)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize)
+                    .build(), YDConf.FORM_QUERY.retrieve_details);
+            details.addAll((List<Map>)ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > pageSize * ddrNew.getPageNumber());
+
+        return details;
+    }
+
     @Override
     public McR getDeliveryInfo() {
+        //todo 同步近一个月内的数据 upsert
+        //现在时间戳
+        long beginTime = System.currentTimeMillis();
+
         MDC.put("MDC_KEY_PID","1009");
 
-        for (int dsSequence : DS_SEQUENCES) {
+        //内部交易客户
+        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                .formUuid(INTERNAL_CUSTOMER)
+                .build(), YDConf.FORM_QUERY.retrieve_list);
+        List<Map> data = (List<Map>) ddrNew.getData();
+
+        Set<String> cusCodes = new HashSet<>();
+        for (Map map : data) {
+            Map formData = (Map) map.get("formData");
+            cusCodes.add(getString(formData.get("textField_m1g1tp7i")));
+        }
+
+        //数据源对应工厂
+        Map<Integer,String> factory = new HashMap<>();
+        DDR_New ddrNew2 = ydClient.queryData(YDParam.builder()
+                .formUuid(INTERNAL_FACTORY)
+                .build(), YDConf.FORM_QUERY.retrieve_list);
+        List<Map> data2 = (List<Map>) ddrNew2.getData();
+        for (Map map : data2) {
+            Map formData = (Map) map.get("formData");
+            int dqNumber = (int) formData.get("numberField_m1fvucmc");//数据源序号
+            String factoryName = getString(formData.get("textField_m1fvucmd"));//工厂名称
+            factory.put(dqNumber,factoryName);
+        }
+
+        for (Integer dsSequence : factory.keySet()) {
             //获取昨天所有发货单
             DateTime dateTime = DateUtil.offsetDay(new Date(), -1);
             String yesterday = dateTime.toString("yyyy-MM-dd");
-//            String yesterday = dateTime.toString("2024-07-01");
+//            String yesterday = dateTime.toString("2024-09-22");
 
             Map<String,Object> param = new HashMap<>();
             param.put("from_account",fromAccount);
@@ -569,6 +618,10 @@ public class KabeiyiServiceImpl implements KabeiyiService {
             param.put("date_end", yesterday);
 
             Map<String, Object> map = get("https://api.yonyouup.com/api/consignmentlist/batch_get", param, null);
+            if (!getString(map.get("errcode")).equals("0")){
+                log.error("获取发货单失败:{}",map.get("errmsg"));
+                continue;
+            }
             if (!map.get("page_count").equals("1")){
                 Integer rowCount = Integer.valueOf(map.get("row_count").toString());
                 param.put("rows_per_page",rowCount);
@@ -592,15 +645,22 @@ public class KabeiyiServiceImpl implements KabeiyiService {
                 Map consignment2 = (Map) map2.get("consignment");
 
                 Map formData = new HashMap();
+                //若为内部交易客户,则不同步
+                String cusCode = getString(consignment2.get("custcode"));
+                if (cusCodes.contains(cusCode)){
+                    continue;
+                }
+
+                formData.put("textField_m18nvp7y",getString(consignment2.get("cusname")));//客户名称
                 formData.put("textField_m18qfuiz",getString(consignment2.get("operation_type")));//操作类型
                 formData.put("textField_m18qfuj0",getString(consignment2.get("saletypename")));//销售类型
                 formData.put("textField_m18nvp87",getString(consignment2.get("code")));//发货单code
                 formData.put("dateField_m18nvp7x",DateUtil.parseDate(yesterday).getTime());//发货日期
-                formData.put("textField_m18nvp7y",getString(consignment2.get("cusname")));//客户名称
                 formData.put("textField_m18nvp7z",getString(consignment2.get("deptname")));//部门
                 formData.put("textField_m18nvp81",getString(consignment2.get("maker")));//生产员
-                formData.put("textField_m18nvp80",getString(consignment2.get("verifier")));//生产员
-                formData.put("numberField_m18wkih7",dsSequence);//生产员
+                formData.put("textField_m18nvp80",getString(consignment2.get("verifier")));//质检员
+                formData.put("numberField_m18wkih7",dsSequence);//数据源序号
+                formData.put("textField_m1er3scl",factory.get(dsSequence));//工厂名称
 
                 List<Map> entry = (List<Map>) consignment2.get("entry");
                 List<Map> collect = entry.stream().map(item -> {
@@ -623,14 +683,40 @@ public class KabeiyiServiceImpl implements KabeiyiService {
                 }).collect(Collectors.toList());
 
                 formData.put("tableField_m18nvp82",collect);//发货明细
+                int i=1;
+                boolean flag = false;
+                while (i<=5 && !flag){
+                    try{
+                        ydClient.operateData(YDParam.builder()
+                                .formUuid("FORM-BE542784AAC04206BD46AF3D9CD1F12DYSKF")
+                                .searchCondition(JSON.toJSONString(UtilMap.map("textField_m18nvp87",getString(consignment2.get("code")))))
+                                .formDataJson(JSON.toJSONString(formData))
+                                .build(), YDConf.FORM_OPERATION.upsert);
+                        flag = true;
+                    }catch (McException e){
+                        if (e.getMessage().contains("The request has failed due to a temporary failure of the server.")){
+                            log.info("请求失败,尝试次数:{}",i);
+                            i++;
+                            try {
+                                Thread.sleep(3000);
+                            } catch (InterruptedException ex) {
+                                throw new RuntimeException(ex);
+                            }
+                        }
+                    }catch (Exception e){
+                        log.error("发货单:{} 同步失败 失败原因:{}",getString(consignment2.get("code")) , e.getMessage());
+                        flag = true;
+                    }
+                }
+                if (i>5){
+                    log.error("发货单:{} 同步失败 失败原因:{}",getString(consignment2.get("code")) , "重试次数过多");
+                }
+
 
-                ydClient.operateData(YDParam.builder()
-                        .formUuid("FORM-BE542784AAC04206BD46AF3D9CD1F12DYSKF")
-                        .formDataJson(JSON.toJSONString(formData))
-                        .build(), YDConf.FORM_OPERATION.create);
             }
         }
-
+        long endTime = System.currentTimeMillis();
+        log.info("同步完成,耗时:{}秒", (endTime - beginTime) / 1000.0);
         return McR.success();
     }