167 lines
5.7 KiB
Java
167 lines
5.7 KiB
Java
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);
|
||
}
|
||
}
|