update 字段类型判断

This commit is contained in:
liao
2023-08-25 09:49:05 +08:00
parent 941003abac
commit c7743f9abb
3 changed files with 85 additions and 52 deletions
@@ -0,0 +1,34 @@
package com.jero.modules.laws.common.constant;
import com.jero.modules.tag.enums.LawsFieldTypeEnum;
import java.util.Arrays;
import java.util.List;
/**
* @Author: liao
* @Date: 2023/8/25 9:08
* @Description: 字段常量
*/
public class FieldCommon {
private FieldCommon() {}
// 字符串like查询字段
public static final List<String> TYPE_LIKE = Arrays.asList(
LawsFieldTypeEnum.TEXT_MANY.getValue(), // 多行文本
LawsFieldTypeEnum.TEXT_BOX.getValue() // 文本框
);
// 字符串切割后like和in查询字段
public static final List<String> TYPE_LIKE_IN = Arrays.asList(
LawsFieldTypeEnum.USER_SINGLE.getValue(), // 单选用户弹框
LawsFieldTypeEnum.GROUP_SINGLE.getValue(), // 单选组织机构弹框
LawsFieldTypeEnum.BOX_MANY.getValue(), // 多选标准弹框
LawsFieldTypeEnum.GROUP_MANY.getValue(), // 多选组织机构弹框
LawsFieldTypeEnum.FILE_UP.getValue(), // 上传文件
LawsFieldTypeEnum.OPTION_SINGLE.getValue(), // 下拉单选
LawsFieldTypeEnum.OPTION_MANY.getValue() // 下拉多选
);
}
@@ -7,7 +7,7 @@ import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.MessageUtils;
import com.jero.modules.document.enums.FieldTypeEnum;
import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.common.constant.ResultCommon;
import com.jero.modules.laws.common.mapper.LawsCommonMapper;
import com.jero.modules.laws.common.service.ILawsCommonService;
@@ -342,7 +342,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
* @Description: 对数据值做格式处理
**/
private String setValue(String fieldShowType, String value) {
if (LawsFieldTypeEnum.SINGLE_DATE_SELECTION.getValue().equals(fieldShowType)) {
if (LawsFieldTypeEnum.DATE_SINGLE.getValue().equals(fieldShowType)) {
// 如果是单日期格式,做格式处理
value = "str_to_date('" + value + "','%Y-%m-%d %H:%i:%s')";
} else {
@@ -386,7 +386,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
.equals(lawsTag.getIsShowForm().toString())).collect(Collectors.toList());
}
// 筛选获取日期类型字段
List<String> dateFieldList = fieldList.stream().filter(lawsTag -> LawsFieldTypeEnum.SINGLE_DATE_SELECTION.getValue()
List<String> dateFieldList = fieldList.stream().filter(lawsTag -> LawsFieldTypeEnum.DATE_SINGLE.getValue()
.equals(lawsTag.getFieldShowType())).collect(Collectors.toList())
.stream().map(LawsTag::getDbFieldName).collect(Collectors.toList());
// 获取全部的字段列表
@@ -463,53 +463,52 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
}
}
/**
* @Author: liao
* @Date: 2023/8/23 17:57
* @Description: 组装单个查询条件
**/
private void jointSelectCondition(List<LawsTag> fieldList, StringBuilder selectCondition, String key, String value) {
for (LawsTag lawsTag : fieldList) {
// 获取字段名
String dbFieldName = lawsTag.getDbFieldName();
if (Objects.equals(key, dbFieldName)) {
// 获取字段类型
String fieldShowType = lawsTag.getFieldShowType();
if (LawsFieldTypeEnum.TEXT_BOX.getValue().equals(fieldShowType)
|| LawsFieldTypeEnum.MULTILINE_TEXT.getValue().equals(fieldShowType)) {
if (value.contains("%")) {
// 字段内容可能包含%,是转义字符,做一下处理
value = value.replace("%", "/%");
}
selectCondition.append(" and " + key + " like concat(concat('%','" + value + "'),'%')");
} else if (LawsFieldTypeEnum.SELECT_A_USER.getValue().equals(fieldShowType)
|| LawsFieldTypeEnum.SELECT_ORGANIZATION_BOX.getValue().equals(fieldShowType)
|| LawsFieldTypeEnum.SELECT_MULTIPLE_ORGANIZATIONS.getValue().equals(fieldShowType)
|| LawsFieldTypeEnum.MULTIPLE_SELECTION_STANDARD_BOX.getValue().equals(fieldShowType)
|| LawsFieldTypeEnum.DROP_DOWN_RADIO_OPTION.getValue().equals(fieldShowType)
|| LawsFieldTypeEnum.DROP_DOWN_MULTIPLE_SELECTION.getValue().equals(fieldShowType)) {
StringBuilder valueSb = new StringBuilder();
StringBuilder condition = new StringBuilder();
for (String valueTemp : value.split(",")) {
valueSb.append("'" + valueTemp + "',");
condition.append(" or " + key + " like binary concat(concat('%','" + valueTemp + "'),'%')");
}
condition.append(")");
String substring = valueSb.substring(0, valueSb.length() - 1);
//下拉单选或下拉多选
selectCondition.append(" and (" + key + " in(" + substring + ")" + condition);
} else if (LawsFieldTypeEnum.SINGLE_DATE_SELECTION.getValue().equals(fieldShowType)) {
//日期(区分单日期还时间范围)
if (value.contains(",")) {
selectCondition.append(" and " + "date_format(" + key + ",'%Y-%m-%d') >= '" + value.split(",")[0] + "'"
+ " and " + "date_format(" + key + ",'%Y-%m-%d') <= '" + value.split(",")[1] + "'");
} else {
selectCondition.append(" and " + "date_format(" + key + ",'%Y-%m-%d') = '" + value + "'");
}
if (FieldCommon.TYPE_LIKE.contains(fieldShowType)) {
processLikeTypeCondition(selectCondition, key, value);
} else if (FieldCommon.TYPE_LIKE_IN.contains(fieldShowType)) {
processLikeInTypeCondition(selectCondition, key, value);
} else if (LawsFieldTypeEnum.DATE_SINGLE.getValue().equals(fieldShowType)) {
processDateSingleTypeCondition(selectCondition, key, value);
}
// 处理其他类型
}
}
}
private void processLikeTypeCondition(StringBuilder selectCondition, String key, String value) {
if (value.contains("%")) {
value = value.replace("%", "/%");
}
selectCondition.append(" and " + key + " like concat(concat('%','" + value + "'),'%')");
}
private void processLikeInTypeCondition(StringBuilder selectCondition, String key, String value) {
StringBuilder valueSb = new StringBuilder();
StringBuilder condition = new StringBuilder();
for (String valueTemp : value.split(",")) {
valueSb.append("'").append(valueTemp).append("',");
condition.append(" or ").append(key).append(" like binary concat(concat('%','").append(valueTemp).append("'),'%')");
}
condition.append(")");
String substring = valueSb.substring(0, valueSb.length() - 1);
selectCondition.append(" and (").append(key).append(" in(").append(substring).append(")").append(condition);
}
private void processDateSingleTypeCondition(StringBuilder selectCondition, String key, String value) {
if (value.contains(",")) {
String startDate = value.split(",")[0];
String endDate = value.split(",")[1];
selectCondition.append(" and date_format(").append(key).append(",'%Y-%m-%d') >= '").append(startDate)
.append("' and date_format(").append(key).append(",'%Y-%m-%d') <= '").append(endDate).append("'");
} else {
selectCondition.append(" and date_format(").append(key).append(",'%Y-%m-%d') = '").append(value).append("'");
}
}
}
@@ -7,17 +7,17 @@ package com.jero.modules.tag.enums;
*/
public enum LawsFieldTypeEnum {
SINGLE_DATE_SELECTION("单日期选择","1"),
SELECT_A_USER("单选用户弹框","2"),
SELECT_ORGANIZATION_BOX("单选组织机构弹框","3"),
MULTIPLE_DATE_SELECTION("多日期选择","4"),
MULTILINE_TEXT("多行文本","5"),
MULTIPLE_SELECTION_STANDARD_BOX("多选标准弹框","6"),
SELECT_MULTIPLE_ORGANIZATIONS("多选组织机构弹框","7"),
UPLOAD_FILE("上传文件","8"),
DATE_SINGLE("单日期选择","1"),
USER_SINGLE("单选用户弹框","2"),
GROUP_SINGLE("单选组织机构弹框","3"),
DATE_MANY("多日期选择","4"),
TEXT_MANY("多行文本","5"),
BOX_MANY("多选标准弹框","6"),
GROUP_MANY("多选组织机构弹框","7"),
FILE_UP("上传文件","8"),
TEXT_BOX("文本框","9"),
DROP_DOWN_RADIO_OPTION("下拉单选","10"),
DROP_DOWN_MULTIPLE_SELECTION("下拉多选","11");
OPTION_SINGLE("下拉单选","10"),
OPTION_MANY("下拉多选","11");
String name;
String value;