6c
2025-12-02 216b43c84804b2ce5b1e1b7b808942078f73ee69
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.product.integration.service;
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import com.product.admin.service.PublicService;
import com.product.common.lang.StringUtils;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.integration.config.CmnConst;
import com.product.integration.config.IntegrationCode;
import com.product.integration.service.idel.IInterfaceIntegrationService;
import com.product.util.BaseUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.Arrays;
import java.util.List;
import java.util.Map;
 
/**
 * 实现功能:
 *
 * @author 作者[夜丶光]
 * @version 1.0.00  2025-12-01 11:15
 */
@Service
public class InterfaceIntegrationService implements IInterfaceIntegrationService {
    @Autowired
    private BaseDao baseDao;
    @Autowired
    private PublicService publicService;
 
    /**
     * 查询数据
     * @param fse
     * @return
     */
    public FieldSetEntity find(FieldSetEntity fse) {
        FieldSetEntity integrationFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION, fse.getUUID(), true);
        DataTableEntity responseInfoDte = integrationFse.getSubDataTable(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION_RESPONSE_INFO);
        Map<String, String> acceptKayMap = Maps.newHashMap();
        acceptKayMap.put("uuid", "front_uuid");
        JSONArray arr = BaseUtil.dataTableToTreeData(responseInfoDte, CmnConst.TRICODE, acceptKayMap, null, null);
        integrationFse.removeSubData(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION_RESPONSE_INFO);
        integrationFse.setValue(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION_RESPONSE_INFO, arr.toString());
        return integrationFse;
    }
 
    /**
     * 保存
     * @param fse
     * @return
     */
    @Override
    public String save(FieldSetEntity fse) {
        String responseInfo = fse.getString(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION_RESPONSE_INFO);
 
        // 清理响应结构子表
        String uuid = fse.getUUID();
        if (!StringUtils.isEmpty(uuid)) {
            baseDao.delete(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION_RESPONSE_INFO, String.format("%s=?", CmnConst.PARENT_UUID), new Object[]{uuid});
        }
 
        DataTableEntity responseInfoDte = dealResponseInfo(responseInfo);
        fse.addSubDataTable(responseInfoDte);
        return publicService.saveFieldSetEntity(fse);
    }
    /**
     * 处理响应数据结构
     * @param responseInfo  响应树结构子表信息
     * @return
     */
    private DataTableEntity dealResponseInfo(String responseInfo) {
        DataTableEntity responseInfoDte = new DataTableEntity();
        try {
            if (!StringUtils.isEmpty(responseInfo)) {
                saveDealResponseInfoPart(responseInfoDte, JSONArray.parseArray(responseInfo), "");
            }
        } catch (Exception e) {
            SpringMVCContextHolder.getSystemLogger().error(IntegrationCode.SAVE_DEAL_RESPONSE_INFO);
        }
        return responseInfoDte;
    }
    /**
     * 保存-处理响应数据结构-循环方法
     * @param responseInfoDte   存储容器,响应子表数据dte
     * @param responseInfoArr   响应子表数据待处理数组
     * @param parentCode        父编码
     */
    private void saveDealResponseInfoPart(DataTableEntity responseInfoDte, JSONArray responseInfoArr, String parentCode) {
        for (int i = 0; i < responseInfoArr.size(); i++) {
            JSONObject responseInfoObj = responseInfoArr.getJSONObject(i);
            FieldSetEntity fse = new FieldSetEntity(CmnConst.PRODUCT_SYS_INTERFACE_INTEGRATION_RESPONSE_INFO);
            List<String> passList = Arrays.asList("promptName", "children", "front_uuid");
            List<String> fieldList = Arrays.asList("name", "type", "db_info", "unique_sign");
            String code = String.format("%s%0" + 3 + "d", parentCode, i + 1);
            responseInfoObj.forEach((key, value) -> {
                if (!passList.contains(key)) {
                    fse.setValue(key, value);
                }
            });
            fieldList.forEach(fieldName -> {
                if (StringUtils.isEmpty(fse.getString(fieldName))) {
                    fse.setValue(fieldName, "");
                }
            });
            fse.setValue(CmnConst.TRICODE, code);
            responseInfoDte.addFieldSetEntity(fse);
            saveDealResponseInfoPart(responseInfoDte, responseInfoObj.getJSONArray(CmnConst.CHILDREN), code);
        }
    }
}