package com.xly.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xly.agent.AgentIdentity;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 表单渲染/校验的**共享内核**(rearch3 §1 分层定案):collectForm(收集信息)与
* previewChange(请求核准)在 LLM 层是两个语义不同的工具,实现层共用这里的
* 表单骨架生成、记录定位读取、字段字典映射、FK 名称→id、类型强转、系统列拒改与 create 载荷构建
* ——预览与保存端点用**同一份校验**,杜绝"预览过、保存拒"的漂移。
*
*
本服务只读不写:唯一的写入口在 {@link OpService}(ai_op_queue)。
*/
@Service
public class FormRenderService {
private static final int MAX_FIELDS = 40;
private final JdbcTemplate jdbc;
private final FormResolverService resolver;
private final ErpClient erp;
private final ObjectMapper mapper;
public FormRenderService(JdbcTemplate jdbc, FormResolverService resolver, ErpClient erp, ObjectMapper mapper) {
this.jdbc = jdbc;
this.resolver = resolver;
this.erp = erp;
this.mapper = mapper;
}
// ---------------------------------------------------------------- 表单骨架
/**
* 某表单的业务录入字段骨架(label/控件类型/fk 来源/选项/提示)。
* 主来源 = 字段字典的业务录入字段(含报价策展),字典没有映射时退回
* {@code gdsconfigformslave} 的可见可写字段(排除系统列)。
*/
public List