| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package com.malk.server.dingtalk;
- import com.alibaba.fastjson.JSON;
- import com.malk.utils.UtilMap;
- import lombok.AllArgsConstructor;
- import lombok.Builder;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- /**
- * 钉钉组件要求
- * -
- * 1. 数字组件不能传null或空, 计算字段会自动计算, 不用传值有可. 但打印不支持会不显示
- * 2. 撤回和提交字段必填设置, 接口调用也会受控. 但若发起页面只读, 审批节点必填则不影响
- */
- @Data
- @Builder
- @AllArgsConstructor
- @NoArgsConstructor
- public class DDFormComponentDto {
- /**
- * 组件名称
- */
- private String name;
- /**
- * 组件的值
- */
- private String value;
- /**
- * todo: 钉钉回调, 数字组件不能传null或空, 文本组件null过滤为空; 计算字段胡自动计算, 不用传值, 日期仅支持为年月日或年月日时分两种格式, 人员组件JSON.toJSONString(Arrays.asList(userId))))
- * 快速格式化, 若value非直接取值需预处理好
- *
- * @param formData 表单数据源, 若Value类型为list, 则触发ruleDetail
- * @param formRule 表单数据格式: { 字段名: 组件名 }
- * @param detailRule 表单明细数据格式: 单子表 { 字段名: 组件名 }; 多明细 { 明细字段: { 字段名: 组件名 } }, 明细字段保持和数据字段一致
- */
- public static List<DDFormComponentDto> formatComponentValues(Map<String, ?> formData, Map<String, String> formRule, Map detailRule) {
- // 审批流表单参数,设置各表单项值
- Map<String, String> ruleDetail = detailRule;
- List<DDFormComponentDto> formComponentValues = new ArrayList<>();
- for (String key : formRule.keySet()) {
- if (formData.get(key) instanceof List) {
- // 明细组件: 每一个组件都是集合, table为集合嵌套集合
- List<List<DDFormComponentDto>> formComponentDetailsValues = new ArrayList<>();
- List<Map> details = (List<Map>) formData.get(key);
- if (detailRule.get(key) instanceof Map) {
- ruleDetail = (Map<String, String>) detailRule.get(key);
- }
- for (Map detail : details) {
- List<DDFormComponentDto> detailComponentValues = new ArrayList<>();
- for (String sub : ruleDetail.keySet()) {
- detailComponentValues.add(DDFormComponentDto.builder().name(ruleDetail.get(sub)).value(String.valueOf(detail.get(sub))).build());
- }
- formComponentDetailsValues.add(detailComponentValues);
- }
- formComponentValues.add(DDFormComponentDto.builder().name(formRule.get(key)).value(JSON.toJSONString(formComponentDetailsValues)).build());
- } else {
- formComponentValues.add(DDFormComponentDto.builder().name(formRule.get(key)).value(String.valueOf(formData.get(key))).build());
- }
- }
- return formComponentValues;
- }
- /**
- * 快速格式化, 上传釘盘的文件转为OA审批对象
- */
- public static String formatAttachment(Map dentry) {
- Map data = UtilMap.map("spaceId, fileName, fileSize, fileType, fileId", "spaceId, name, size, extension, id", dentry);
- return JSON.toJSONString(Arrays.asList(data));
- }
- }
|