|
@@ -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();
|
|
|
}
|
|
|
|