YDService.java 4.0 KB

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