From d9a37c3a026ea14b0fd2bfc904f2e09d2b7df107 Mon Sep 17 00:00:00 2001 From: fujie <405295521@qq.com> Date: Sun, 14 Jan 2018 09:45:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=8F=90=E4=BA=A4=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/DataSetGroupDateFunction.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetGroupDateFunction.java diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetGroupDateFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetGroupDateFunction.java new file mode 100644 index 0000000..40cfb4a --- /dev/null +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetGroupDateFunction.java @@ -0,0 +1,95 @@ +package org.tinygroup.tinyscript.dataset.function; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.tinygroup.tinyscript.ScriptContext; +import org.tinygroup.tinyscript.ScriptException; +import org.tinygroup.tinyscript.ScriptSegment; +import org.tinygroup.tinyscript.dataset.AbstractDataSet; +import org.tinygroup.tinyscript.dataset.DynamicDataSet; +import org.tinygroup.tinyscript.dataset.GroupDataSet; +import org.tinygroup.tinyscript.dataset.impl.MultiLevelGroupDataSet; +import org.tinygroup.tinyscript.function.date.DateEnum; +import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; + +public class DataSetGroupDateFunction extends AbstractGroupFunction { + + @Override + public String getNames() { + return "groupDate"; + } + + public Object execute(ScriptSegment segment, ScriptContext context, Object... parameters) throws ScriptException { + try { + if (parameters == null || parameters.length == 0) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); + } else if (parameters.length >= 2) { + DateEnum datePart = DateEnum.valueOf(((getValue(parameters[1]).toString()).toUpperCase())); + DynamicDataSet dataSet = (DynamicDataSet) getValue(parameters[0]); + String[] fields = new String[parameters.length - 2]; + for (int i = 0; i < fields.length; i++) { + String expression = convertExpression(getExpression(parameters[i + 2])); + fields[i] = (String) getScriptEngine().execute(expression, context); + } + return groups(dataSet, fields, datePart); + } else { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); + } + } catch (ScriptException e) { + throw e; + } catch (Exception e) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); + } + } + + /** + * 多级分组 + * + * @param dataSet + * @param fields + * @return + * @throws Exception + */ + private GroupDataSet groups(DynamicDataSet dataSet, String[] fields, DateEnum datePart) throws Exception { + try { + if (dataSet instanceof MultiLevelGroupDataSet) { + // 某一级序表进行分组 + MultiLevelGroupDataSet multiLevelGroupDataSet = (MultiLevelGroupDataSet) dataSet; + List subDataSetList = multiLevelGroupDataSet.getUnGroups(); + for (MultiLevelGroupDataSet subDataSet : subDataSetList) { + List list = group(subDataSet.getSource(), fields, datePart); + subDataSet.setGroups(list); + } + updateAggregateResult(subDataSetList, multiLevelGroupDataSet.getAggregateResultList()); + return multiLevelGroupDataSet; + } else { + // 首次分组 + List list = group(dataSet, fields, datePart); + MultiLevelGroupDataSet multiLevelGroupDataSet = new MultiLevelGroupDataSet(dataSet, list); + return multiLevelGroupDataSet; + } + } catch (ScriptException e) { + throw e; + } catch (Exception e) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); + } + } + + @Override + protected Object createKey(int showRow, int[] showColumns, AbstractDataSet dataSet, Object... params) + throws Exception { + DateEnum datePart = (DateEnum) params[0]; + Calendar calendar = Calendar.getInstance(); + List keys = new ArrayList(); + for (int showColumn : showColumns) { + calendar.setTime((Date) dataSet.getData(showRow, showColumn)); + keys.add(calendar.get(datePart.getCalendarId())); + } + return keys; + + } + +} -- Gitee