DDFormComponentDto.java 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.malk.server.dingtalk;
  2. import com.alibaba.fastjson.JSON;
  3. import com.malk.utils.UtilMap;
  4. import lombok.AllArgsConstructor;
  5. import lombok.Builder;
  6. import lombok.Data;
  7. import lombok.NoArgsConstructor;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * 钉钉组件要求
  14. * -
  15. * 1. 数字组件不能传null或空, 计算字段会自动计算, 不用传值有可. 但打印不支持会不显示
  16. * 2. 撤回和提交字段必填设置, 接口调用也会受控. 但若发起页面只读, 审批节点必填则不影响
  17. */
  18. @Data
  19. @Builder
  20. @AllArgsConstructor
  21. @NoArgsConstructor
  22. public class DDFormComponentDto {
  23. /**
  24. * 组件名称
  25. */
  26. private String name;
  27. /**
  28. * 组件的值
  29. */
  30. private String value;
  31. /**
  32. * todo: 钉钉回调, 数字组件不能传null或空, 文本组件null过滤为空; 计算字段胡自动计算, 不用传值, 日期仅支持为年月日或年月日时分两种格式, 人员组件JSON.toJSONString(Arrays.asList(userId))))
  33. * 快速格式化, 若value非直接取值需预处理好
  34. *
  35. * @param formData 表单数据源, 若Value类型为list, 则触发ruleDetail
  36. * @param formRule 表单数据格式: { 字段名: 组件名 }
  37. * @param detailRule 表单明细数据格式: 单子表 { 字段名: 组件名 }; 多明细 { 明细字段: { 字段名: 组件名 } }, 明细字段保持和数据字段一致
  38. */
  39. public static List<DDFormComponentDto> formatComponentValues(Map<String, ?> formData, Map<String, String> formRule, Map detailRule) {
  40. // 审批流表单参数,设置各表单项值
  41. Map<String, String> ruleDetail = detailRule;
  42. List<DDFormComponentDto> formComponentValues = new ArrayList<>();
  43. for (String key : formRule.keySet()) {
  44. if (formData.get(key) instanceof List) {
  45. // 明细组件: 每一个组件都是集合, table为集合嵌套集合
  46. List<List<DDFormComponentDto>> formComponentDetailsValues = new ArrayList<>();
  47. List<Map> details = (List<Map>) formData.get(key);
  48. if (detailRule.get(key) instanceof Map) {
  49. ruleDetail = (Map<String, String>) detailRule.get(key);
  50. }
  51. for (Map detail : details) {
  52. List<DDFormComponentDto> detailComponentValues = new ArrayList<>();
  53. for (String sub : ruleDetail.keySet()) {
  54. detailComponentValues.add(DDFormComponentDto.builder().name(ruleDetail.get(sub)).value(String.valueOf(detail.get(sub))).build());
  55. }
  56. formComponentDetailsValues.add(detailComponentValues);
  57. }
  58. formComponentValues.add(DDFormComponentDto.builder().name(formRule.get(key)).value(JSON.toJSONString(formComponentDetailsValues)).build());
  59. } else {
  60. formComponentValues.add(DDFormComponentDto.builder().name(formRule.get(key)).value(String.valueOf(formData.get(key))).build());
  61. }
  62. }
  63. return formComponentValues;
  64. }
  65. /**
  66. * 快速格式化, 上传釘盘的文件转为OA审批对象
  67. */
  68. public static String formatAttachment(Map dentry) {
  69. Map data = UtilMap.map("spaceId, fileName, fileSize, fileType, fileId", "spaceId, name, size, extension, id", dentry);
  70. return JSON.toJSONString(Arrays.asList(data));
  71. }
  72. }