use of com.baomidou.mybatisplus.core.conditions.segments.NormalSegmentList in project chao-cloud by chaojunzi.
the class DateTableNameHandler method parseDate.
private List<Date> parseDate(SqlCommandType type, String table, Object parameter) {
String column = rule.getColumn();
List<Date> dateList = CollUtil.newArrayList();
if (type == SqlCommandType.INSERT) {
// insert默认解析对象
TableInfo tableInfo = TableInfoHelper.getTableInfo(table);
if (tableInfo == null) {
return dateList;
}
if (tableInfo.getEntityType() == ClassUtil.getClass(parameter)) {
List<TableFieldInfo> fieldList = tableInfo.getFieldList();
TableFieldInfo field = CollUtil.findOne(fieldList, f -> StrUtil.equals(f.getColumn(), column));
if (field == null) {
log.warn("[{}]: 分片字段无效 {}", table, column);
return dateList;
}
Object v = BeanUtil.getFieldValue(parameter, field.getProperty());
dateList.add((Date) v);
return dateList;
}
}
// 参数解析
if (parameter instanceof ParamMap) {
ParamMap paramMap = (ParamMap) parameter;
Collection values = paramMap.values();
for (Object val : values) {
if (val instanceof AbstractWrapper) {
AbstractWrapper wrapper = (AbstractWrapper) val;
MergeSegments segments = wrapper.getExpression();
if (segments == null || segments.getNormal() == null) {
continue;
}
NormalSegmentList segmentList = segments.getNormal();
for (int i = 0; i < segmentList.size(); i++) {
String dbColumn = segmentList.get(i).getSqlSegment();
if (StrUtil.equalsIgnoreCase(dbColumn, column)) {
// 匹配到参数
i++;
ISqlSegment keyword = CollUtil.get(segmentList, i);
if (CollUtil.contains(supportSqlKeywords, keyword)) {
// 获取到值索引
i++;
ISqlSegment keySegment = CollUtil.get(segmentList, i);
// 索引越界
if (keySegment == null) {
continue;
}
// 构造dateList
dateList.addAll(getDateByParam(parameter, keySegment));
// between ? and ? -> (跳2格)
i = i + 2;
if (keyword == SqlKeyword.BETWEEN) {
keySegment = CollUtil.get(segmentList, i);
dateList.addAll(getDateByParam(parameter, keySegment));
}
}
}
}
break;
}
}
}
return dateList;
}
Aggregations