YDService.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.malk.service.aliwork;
  2. import com.malk.server.aliwork.YDConf;
  3. import com.malk.server.aliwork.YDParam;
  4. import java.util.List;
  5. import java.util.Map;
  6. public interface YDService {
  7. // todo: 批量创建接口异常; 查询子表超过50自动查询全量; 查询表单全部数据, 避免第一次重复查询优化, 添加直接返回formData, 兼容formInstId; upsert方法
  8. // todo 0402 批量更新 / 删除
  9. /**
  10. * 操作数据 [异步]
  11. */
  12. Object operateData(YDParam param, YDConf.FORM_OPERATION type);
  13. /**
  14. * 操作数据 [异步]
  15. */
  16. Object operateData2(Map data, Map update, YDParam param, YDConf.FORM_OPERATION type);
  17. /**
  18. * 查询数据 [子表] todo 参数控制
  19. * <p>
  20. * .formUuid("FORM-TD966Z81I9ODTCY66GH345S03VW03JJF6EQLL5")
  21. * .formInstanceId(data.get("formInstanceId").toString())
  22. * .tableFieldId("tableField_llqe7fgb")
  23. */
  24. List<Map> queryDetails(YDParam ydParam);
  25. /**
  26. * 查询全部 [主表] todo 合并formData, 或data, putAll
  27. * <p>
  28. * .stream().map(item -> {
  29. * item.putAll( (Map) item.get("formData"));
  30. * return item;
  31. * }).collect(Collectors.toList());
  32. */
  33. List<Map> queryAllFormData(YDParam YDParam);
  34. // todo: 宜搭大数据量处理会有异常, 可结合排序, 或失败记录进行处理 (避免更新后, 数据重新查询排序导致未全量同步)
  35. List<Map> queryFormData_all(YDParam YDParam);
  36. // ppExt: 查询100后再进分页, 且转为formData内数据, todo Process待完成 [bug]
  37. List<Map> queryFormData_all_advance(YDParam ydParam, YDConf.FORM_QUERY type);
  38. /**
  39. * 查询宜搭数据
  40. */
  41. List<Map> queryDataList_FormData(String formUuid, Map conditions);
  42. /**
  43. * 查询宜搭数据 [精确匹配]
  44. */
  45. List queryFormData(String formUuid, String conditions);
  46. /**
  47. * 字段复制 [服务注册传递参数都是 string 格式]
  48. * -
  49. * fixme: 服务注册
  50. * 1. 在提交校验,因为数据还未执行, 除 #{_yida_all_data} 外,绝大部分字段都是为空,且若是子表字段数据:会拆为为单一字段,数据为该字段下明细数据数组
  51. * 2. 但在在业务规则内配置,可以正常获取. 若是子表单, 除返回提交下该字段明细数据数组外, 也会返回子表组件, 及子表内对应的数据 [可有效避免触发何查询操作]
  52. * 业务规则场景: 若是写入关联表单,自关联后,通过自动化传递。若是数据全表复制,可获取全量数据进行写入操作
  53. * ppExt: 组件格式
  54. * 1. { "cur": "目标表, 主表组件ID[包含子表组件ID]", "src": "当前表, 主表组件ID[包含子表组件ID]", "子表组件ID + cur/src": "子表内的组件ID" }
  55. * 2. 所有组件通过英文逗号 + 空格区分, 子表组件为避免组件id相同但子表内组件不一致的情况, 在单独子表组件ID后添加 src/cur 区分来源
  56. */
  57. Object copyFormData(Map data);
  58. /**
  59. * 全表复制 [两张表组件完全一致]
  60. */
  61. Object mirrorFormData(String instanceId, String formUuid, String processCode, Map updateData, String updateInstanceId);
  62. /**
  63. * upsert方法 [todo: 优化 批量的数据兼容]
  64. *
  65. * @param lambda 查询数据回调, 传递查询结果list, 接收回调返回map传递钉到formData内, 若返回为空则不支持Upsert
  66. */
  67. Object upsertFormData(String formUuid, Map condition, Map formData, UpsertLambda lambda);
  68. /**
  69. * ppExt 函数式编程:Stream类、Lambda表达式和函数接口(Functional Inteface)
  70. * -
  71. * 自定义Lambda是为了更好的代码提示和数据类型定义: @FunctionalInterface,该接口为函数接口,一个函数接口只能存在一个方法
  72. * 特别注意,非异步情况下,和网络请求一致,回调默认同步等待【回调方式可自定义:如兼容并发可有,同步单次回调、同步累积回调、并发异步执行、并发累积回调】
  73. * 函数编程的最大好处,是可传入执行逻辑,而无需等待全部数据结果,尤其并发和异步情况下【异步效果优于Future】
  74. * -
  75. * 结合异步与并发, @Async说明和配置详见core/AsyncConfig
  76. */
  77. @FunctionalInterface
  78. interface UpsertLambda {
  79. Map dataList(List<Map> list);
  80. }
  81. }