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 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 passList = Arrays.asList("promptName", "children", "front_uuid"); List 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); } } }