| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package jnpf.base.service.impl;
- import com.google.common.base.CaseFormat;
- import jnpf.base.model.ai.VisualAiModel;
- import jnpf.base.service.VisualAiService;
- import jnpf.constant.GenerateConstant;
- import jnpf.constant.MsgCode;
- import jnpf.constants.AiConstants;
- import jnpf.exception.DataException;
- import jnpf.model.ai.AiFormFieldModel;
- import jnpf.model.ai.AiFormModel;
- import jnpf.service.OpenAiService;
- import jnpf.util.AiLimitUtil;
- import jnpf.util.StringUtil;
- import jnpf.util.UserProvider;
- import jnpf.util.visiual.JnpfKeyConsts;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Objects;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * 在线开发ai实现
- *
- * @author JNPF开发平台组
- * @version v5.1.0
- * @copyright 引迈信息技术有限公司
- * @date 2024/12/2 10:05:25
- */
- @Service
- public class VisualAiServiceImpl implements VisualAiService {
- @Autowired
- private OpenAiService openAiService;
- @Override
- public VisualAiModel form(String keyword) {
- if(!AiLimitUtil.tryAcquire(UserProvider.getUser().getUserId())){
- throw new DataException(MsgCode.SYS182.get());
- }
- VisualAiModel visualAiModel = new VisualAiModel();
- List<AiFormModel> aiModelList = new ArrayList<>();
- List<AiFormModel> list = openAiService.generatorModelVO(keyword);
- if (CollectionUtils.isNotEmpty(list)) {
- for (int i = 0; i < list.size(); i++) {
- AiFormModel aiFormModel = list.get(i);
- if (Objects.equals(0, i)) {
- String enCode = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, aiFormModel.getTableName());
- visualAiModel.setFullName(aiFormModel.getTableTitle());
- visualAiModel.setEnCode(enCode);
- aiFormModel.setIsMain(true);
- } else {
- aiFormModel.setIsMain(false);
- }
- List<AiFormFieldModel> fields = new ArrayList<>();
- List<AiFormFieldModel> fieldList = aiFormModel.getFields();
- if (CollectionUtils.isNotEmpty(fieldList)) {
- int index = 1;
- for (int j = 0; j < fieldList.size(); j++) {
- AiFormFieldModel aiFormFieldModel = fieldList.get(j);
- String fieldName = aiFormFieldModel.getFieldName();
- String jnpfKey = aiFormFieldModel.getFieldComponent();
- if (containsChinese(fieldName) || GenerateConstant.containKeyword(fieldName)) {
- String formatIndex = String.format("%03d", index);
- String suffix = "_num" + formatIndex;
- aiFormFieldModel.setFieldName(jnpfKey + suffix);
- index++;
- }
- List<String> jnpfKeyList = new ArrayList<>();
- for (String s : AiConstants.GEN_MODEL_COMPNENT.split("-")) {
- if (StringUtil.isNotBlank(s)) jnpfKeyList.add(s.trim());
- }
- if (!jnpfKeyList.contains(jnpfKey)) {
- aiFormFieldModel.setFieldComponent(JnpfKeyConsts.COM_INPUT);
- }
- //子表控件处理
- if (!aiFormModel.getIsMain()) {
- //子表不能有单选框,多选框-调整成下拉框
- List<String> childNotRadio = new ArrayList<>();
- childNotRadio.add(JnpfKeyConsts.RADIO);
- childNotRadio.add(JnpfKeyConsts.CHECKBOX);
- //子表不能有的其他控件
- List<String> childNotOther = new ArrayList<>();
- childNotOther.add(JnpfKeyConsts.TEXTAREA);
- childNotOther.add(JnpfKeyConsts.LINK);
- childNotOther.add(JnpfKeyConsts.BUTTON);
- childNotOther.add(JnpfKeyConsts.ALERT);
- childNotOther.add(JnpfKeyConsts.BARCODE);
- childNotOther.add(JnpfKeyConsts.QR_CODE);
- childNotOther.add(JnpfKeyConsts.EDITOR);
- if (childNotRadio.contains(jnpfKey)) {
- aiFormFieldModel.setFieldComponent(JnpfKeyConsts.SELECT);
- } else if (childNotOther.contains(jnpfKey)) {
- aiFormFieldModel.setFieldComponent(JnpfKeyConsts.COM_INPUT);
- }
- }
- if (containsKeyWord(aiFormFieldModel.getFieldName())) {
- fields.add(aiFormFieldModel);
- }
- }
- }
- aiFormModel.setFields(fields);
- aiModelList.add(aiFormModel);
- }
- }
- visualAiModel.setAiModelList(aiModelList);
- return visualAiModel;
- }
- /**
- * 判断是否包含中文(字段空或者包含中文字段名称重命名)
- *
- * @param str
- * @return
- */
- private static boolean containsChinese(String str) {
- if (StringUtil.isEmpty(str)) return true;
- Pattern pattern = Pattern.compile("[\u4E00-\u9FA5]");
- Matcher matcher = pattern.matcher(str);
- return matcher.find();
- }
- /**
- * 字段是否包含特定(用于过滤掉不要的字段如:以_fk结尾是外键,本系统内已自动生成外键)
- *
- * @param str
- * @return
- */
- private static boolean containsKeyWord(String str) {
- if (str.toLowerCase().endsWith("_fk")) {
- return false;
- }
- return true;
- }
- }
|