E9-bmj/src/com/engine/secret/util/FieldConvertUtil.java

167 lines
5.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.secret.util;
import com.weaver.formmodel.data.model.Formfield;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.validator.GenericValidator;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.definedfield.HrmFieldManager;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author:dxfeng
* @createTime: 2025/04/02
* @version: 1.0
*/
public class FieldConvertUtil {
/**
* 转换存入数据库的值
*
* @param formfield
* @param value
* @return
* @throws Exception
*/
public static Object getReallyValue(Formfield formfield, String value) throws Exception {
if (StringUtils.isBlank(value)) {
return null;
}
RecordSet rs = new RecordSet();
Object object = null;
String type = Util.null2String(formfield.getType());
switch (formfield.getFieldhtmltype()) {
case "1":
// INPUT
if ("2".equals(type)) {
object = new BigDecimal(value).intValue();
} else if ("3".equals(type)) {
object = new BigDecimal(value).floatValue();
} else if ("1".equals(type)) {
object = value;
} else {
try {
object = new BigDecimal(value).toPlainString();
} catch (NumberFormatException ignore) {
object = value;
}
}
break;
case "3":
// BROWSER
org.json.JSONObject jsonObject = new org.json.JSONObject();
jsonObject.put("fieldhtmltype", formfield.getFieldhtmltype());
jsonObject.put("type", type);
jsonObject.put("fieldvalue", value);
if ("161".equals(type) || "162".equals(type)) {
jsonObject.put("dmlurl", formfield.getFielddbtype());
} else {
jsonObject.put("dmlurl", type);
}
jsonObject.put("fieldid", 0);
object = HrmFieldManager.getReallyFieldvalue(jsonObject);
// 如果是日期,校验日期的合法性
if ("2".equals(type)) {
boolean isDate = GenericValidator.isDate(Util.null2String(object), "yyyy-MM-dd", true);
if (!isDate) {
rs.writeLog("日期格式校验失败object==" + Util.null2String(object));
object = "";
}
}
break;
case "5":
// 区分单选、复选、下拉框
switch (type) {
case "1":
case "3":
// 下拉框、单选框
object = ModeUtil.getSelectValue(formfield, value);
if (StringUtils.isBlank(Util.null2String(object))) {
if (isNumberOrCommaSeparatedNumbers(value)) {
object = value;
}
}
break;
case "2":
if (StringUtils.isNotBlank(value)) {
List<String> selectValues = new ArrayList<>();
// 兼容分隔符
String separator = ",";
if (value.contains("")) {
separator = "";
}
String[] split = value.split(separator);
for (String s : split) {
selectValues.add(ModeUtil.getSelectValue(formfield, s));
}
object = StringUtils.join(selectValues, ",");
if (StringUtils.isBlank(Util.null2String(object))) {
if (isNumberOrCommaSeparatedNumbers(value)) {
object = value;
}
}
}
break;
default:
break;
}
break;
case "4":
// CHECKBOX
case "6":
// FILEUPLOAD
break;
case "7":
// TEXT
case "2":
// TEXTAREA
default:
object = value;
break;
}
return object;
}
/**
* 执行转换SQL
*
* @param convertSql
* @param value
* @return
*/
public static String executeConvertSql(String convertSql, String value) {
RecordSet rs = new RecordSet();
value = Util.null2String(value);
long count = convertSql.chars().filter(c -> c == '?').count();
List<String> paramsList = new ArrayList<>();
for (int i = 0; i < count; i++) {
paramsList.add(value);
}
rs.executeQuery(convertSql, paramsList);
if (rs.next()) {
return rs.getString(1);
}
return "";
}
/**
* 校验字符串是否为纯数字或逗号分隔的数字
*
* @param str
* @return
*/
public static boolean isNumberOrCommaSeparatedNumbers(String str) {
// 正则表达式匹配纯数字或逗号分隔的数字
// 允许前后有空格,数字之间用逗号分隔
String regex = "^\\s*\\d+(\\s*,\\s*\\d+)*\\s*$";
return str.matches(regex);
}
}