|
|
@@ -4,6 +4,7 @@ import beans.itemclass.ItemClass;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.sun.org.apache.bcel.internal.generic.NEW;
|
|
|
+import com.sun.tools.internal.xjc.reader.gbind.ElementSets;
|
|
|
import common.Controller;
|
|
|
import common.YosException;
|
|
|
import common.annotation.API;
|
|
|
@@ -14,6 +15,7 @@ import common.data.RowsMap;
|
|
|
import common.data.SQLFactory;
|
|
|
import restcontroller.R;
|
|
|
|
|
|
+import javax.naming.InsufficientResourcesException;
|
|
|
import javax.swing.tree.RowMapper;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
@@ -239,16 +241,16 @@ public class databoard extends Controller {
|
|
|
|
|
|
for (Row row : rows) {
|
|
|
DataTrans dataTrans = new DataTrans();
|
|
|
- if(row.getString("y").equals(year) || row.getString("y").equals(lastyear)){
|
|
|
- dataTrans.setName(row.getString("y")+"-"+ row.getString("m"));
|
|
|
+ if (row.getString("y").equals(year) || row.getString("y").equals(lastyear)) {
|
|
|
+ dataTrans.setName(row.getString("y") + "-" + row.getString("m"));
|
|
|
dataTrans.setMonth(row.getString("m"));
|
|
|
dataTrans.setYear(row.getString("y"));
|
|
|
dataTrans.setValue(row.getBigDecimal("typestatistics"));
|
|
|
list.add(dataTrans);
|
|
|
}
|
|
|
}
|
|
|
- list=supplementDate(Integer.parseInt(year),list);
|
|
|
- list=supplementDate(Integer.parseInt(lastyear),list);
|
|
|
+ list = supplementDate(Integer.parseInt(year), list);
|
|
|
+ list = supplementDate(Integer.parseInt(lastyear), list);
|
|
|
|
|
|
return getSucReturnObject().setData(list).toString();
|
|
|
}
|
|
|
@@ -447,6 +449,115 @@ public class databoard extends Controller {
|
|
|
return getSucReturnObject().setData(topItemclassRows).toString();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 财务统计分析
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @API(title = "财务统计分析", apiversion = R.ID20230802111003.v1.class)
|
|
|
+ @CACHEING
|
|
|
+ public String financialStatistics() throws Exception {
|
|
|
+
|
|
|
+ String datetype = content.getStringValue("datetype");
|
|
|
+ String begindate = "";
|
|
|
+ String enddate = "";
|
|
|
+ StringBuffer where = new StringBuffer(" 1=1 ");
|
|
|
+ SQLFactory factory;
|
|
|
+ switch (datetype) {
|
|
|
+ case "月":
|
|
|
+ factory = new SQLFactory(this, "财务统计_月");
|
|
|
+ begindate = getMonthFirstDay();
|
|
|
+ enddate = getMonthLastDay();
|
|
|
+ break;
|
|
|
+ case "年":
|
|
|
+ factory = new SQLFactory(this, "财务统计_年度");
|
|
|
+ begindate = new SimpleDateFormat("yyyy").format(new Date()) + "-01-01";
|
|
|
+ enddate = new SimpleDateFormat("yyyy").format(new Date()) + "-12-31";
|
|
|
+ break;
|
|
|
+ case "季":
|
|
|
+ factory = new SQLFactory(this, "财务统计_季");
|
|
|
+ begindate = sdf.format(getQuarterStart(new Date()).getTime());
|
|
|
+ enddate = sdf.format(getQuarterEnd(new Date()).getTime());
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ factory = new SQLFactory(this, "财务统计_月");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ * 过滤条件设置
|
|
|
+ */
|
|
|
+ if (content.containsKey("where")) {
|
|
|
+ JSONObject whereObject = content.getJSONObject("where");
|
|
|
+ if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
|
|
|
+ begindate = whereObject.getString("begindate");
|
|
|
+ }
|
|
|
+ if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
|
|
|
+ enddate = whereObject.getString("enddate");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (begindate != "") {
|
|
|
+ where.append(" and DATE_FORMAT(checkdate, '%Y-%m-%d') >='").append(begindate).append("' ");
|
|
|
+ }
|
|
|
+ if (enddate != "") {
|
|
|
+ where.append(" and DATE_FORMAT(checkdate, '%Y-%m-%d') <='").append(enddate).append("' ");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ factory.addParameter("siteid", siteid);
|
|
|
+ factory.addParameter_SQL("where", where);
|
|
|
+ Rows rows = dbConnect.runSqlQuery(factory.getSQL(false));
|
|
|
+ List<DataTrans> list = new ArrayList();
|
|
|
+
|
|
|
+ switch (datetype) {
|
|
|
+ case "月":
|
|
|
+ for (Row row : rows) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ if (row.getString("y").equals(new SimpleDateFormat("yyyy").format(new Date()))) {
|
|
|
+ dataTrans.setName(row.getString("y") + "-" + row.getString("d") + "-" + row.getString("type"));
|
|
|
+ dataTrans.setType(row.getString("type"));
|
|
|
+ dataTrans.setDay(row.getString("d"));
|
|
|
+ dataTrans.setYear(row.getString("y"));
|
|
|
+ dataTrans.setValue(row.getBigDecimal("typestatistics"));
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list = supplementDate_cashbill_month(Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date())), list);
|
|
|
+ break;
|
|
|
+ case "年":
|
|
|
+ for (Row row : rows) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ if (row.getString("y").equals(new SimpleDateFormat("yyyy").format(new Date()))) {
|
|
|
+ dataTrans.setName(row.getString("y") + "-" + row.getString("m") + "-" + row.getString("type"));
|
|
|
+ dataTrans.setType(row.getString("type"));
|
|
|
+ dataTrans.setMonth(row.getString("m"));
|
|
|
+ dataTrans.setYear(row.getString("y"));
|
|
|
+ dataTrans.setValue(row.getBigDecimal("typestatistics"));
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list = supplementDate_cashbill(Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date())), list);
|
|
|
+ break;
|
|
|
+ case "季":
|
|
|
+ for (Row row : rows) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ if (row.getString("y").equals(new SimpleDateFormat("yyyy").format(new Date()))) {
|
|
|
+ dataTrans.setName(row.getString("y") + "-" + row.getString("m") + "-" + row.getString("type"));
|
|
|
+ dataTrans.setType(row.getString("type"));
|
|
|
+ dataTrans.setMonth(row.getString("m"));
|
|
|
+ dataTrans.setYear(row.getString("y"));
|
|
|
+ dataTrans.setValue(row.getBigDecimal("typestatistics"));
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list = supplementDate_cashbill_quarter(Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date())), list);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return getSucReturnObject().setData(list).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 新品销售占比
|
|
|
*
|
|
|
@@ -534,25 +645,24 @@ public class databoard extends Controller {
|
|
|
SQLFactory factory = new SQLFactory(this, "新品销售走势");
|
|
|
String year = new SimpleDateFormat("yyyy").format(new Date());
|
|
|
factory.addParameter("siteid", siteid);
|
|
|
- factory.addParameter_SQL("year",year);
|
|
|
+ factory.addParameter_SQL("year", year);
|
|
|
Rows rows = dbConnect.runSqlQuery(factory.getSQL(false));
|
|
|
List<DataTrans> list = new ArrayList();
|
|
|
for (Row row : rows) {
|
|
|
DataTrans dataTrans = new DataTrans();
|
|
|
- if(row.getString("y").equals(year)){
|
|
|
- dataTrans.setName(row.getString("y")+"-"+ row.getString("m"));
|
|
|
+ if (row.getString("y").equals(year)) {
|
|
|
+ dataTrans.setName(row.getString("y") + "-" + row.getString("m"));
|
|
|
dataTrans.setMonth(row.getString("m"));
|
|
|
dataTrans.setYear(row.getString("y"));
|
|
|
dataTrans.setValue(row.getBigDecimal("typestatistics"));
|
|
|
list.add(dataTrans);
|
|
|
}
|
|
|
}
|
|
|
- list=supplementDate(Integer.parseInt(year),list);
|
|
|
+ list = supplementDate(Integer.parseInt(year), list);
|
|
|
return getSucReturnObject().setData(list).toString();
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 战区数据分析
|
|
|
*
|
|
|
@@ -621,8 +731,6 @@ public class databoard extends Controller {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* @Description: 获取季度第一天
|
|
|
* 1.根据给定日期计算当前季度的第一个月份
|
|
|
@@ -653,31 +761,174 @@ public class databoard extends Controller {
|
|
|
return endCalendar;
|
|
|
}
|
|
|
|
|
|
- public static List<DataTrans> supplementDate(int year,List<DataTrans> params){
|
|
|
+ public static List<DataTrans> supplementDate(int year, List<DataTrans> params) {
|
|
|
String[] monthAndDay = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
|
|
|
List<DataTrans> list = new ArrayList<>();
|
|
|
- for (DataTrans data:params){
|
|
|
- list.add(data);
|
|
|
- for (String s:monthAndDay){
|
|
|
+ if (params.isEmpty()) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
DataTrans dataTrans = new DataTrans();
|
|
|
- String date = year+"-"+s;
|
|
|
- if (!date.equals(data.getName())){
|
|
|
+ String date = year + "-" + s;
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setMonth(s);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (DataTrans data : params) {
|
|
|
+ list.add(data);
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s;
|
|
|
+ if (!date.equals(data.getName())) {
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setMonth(s);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 集合中相同属性去重、值合并
|
|
|
+ return merge(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static List<DataTrans> supplementDate_cashbill(int year, List<DataTrans> params) {
|
|
|
+ String[] monthAndDay = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
|
|
|
+ String[] types = new String[]{"0", "1"};
|
|
|
+ List<DataTrans> list = new ArrayList<>();
|
|
|
+ if (params.isEmpty()) {
|
|
|
+ for (String type : types) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s + "-" + type;
|
|
|
dataTrans.setName(date);
|
|
|
- dataTrans.setMonth(s);
|
|
|
+ dataTrans.setDay(s);
|
|
|
+ dataTrans.setType(type);
|
|
|
dataTrans.setYear(String.valueOf(year));
|
|
|
dataTrans.setValue(BigDecimal.ZERO);
|
|
|
list.add(dataTrans);
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ for (DataTrans data : params) {
|
|
|
+ list.add(data);
|
|
|
+ for (String type : types) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s + "-" + type;
|
|
|
+ if (!date.equals(data.getName())) {
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setMonth(s);
|
|
|
+ dataTrans.setType(type);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
// 集合中相同属性去重、值合并
|
|
|
return merge(list);
|
|
|
}
|
|
|
+
|
|
|
+ public static List<DataTrans> supplementDate_cashbill_month(int year, List<DataTrans> params) {
|
|
|
+ String[] monthAndDay = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
|
|
|
+ String[] types = new String[]{"0", "1"};
|
|
|
+ List<DataTrans> list = new ArrayList<>();
|
|
|
+ if (params.isEmpty()) {
|
|
|
+ for (String type : types) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s + "-" + type;
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setDay(s);
|
|
|
+ dataTrans.setType(type);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (DataTrans data : params) {
|
|
|
+ list.add(data);
|
|
|
+ for (String type : types) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s + "-" + type;
|
|
|
+ if (!date.equals(data.getName())) {
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setDay(s);
|
|
|
+ dataTrans.setType(type);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 集合中相同属性去重、值合并
|
|
|
+ return merge(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static List<DataTrans> supplementDate_cashbill_quarter(int year, List<DataTrans> params) {
|
|
|
+ String[] monthAndDay = new String[3];
|
|
|
+ Calendar startCalendar = Calendar.getInstance();
|
|
|
+ startCalendar.setTime(new Date());
|
|
|
+ //get方法:获取给定日历属性的值,如 endCalendar.get(Calendar.MONTH) 获取日历的月份
|
|
|
+ //计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第一个月份只需 月份 / 3 * 3
|
|
|
+ int current = (((int) startCalendar.get(Calendar.MONTH)) / 3) * 3;
|
|
|
+ for (int i = 1; i <= 3; i++) {
|
|
|
+ monthAndDay[i - 1] = String.format("%02d", current + i);
|
|
|
+ }
|
|
|
+ String[] types = new String[]{"0", "1"};
|
|
|
+ List<DataTrans> list = new ArrayList<>();
|
|
|
+ if (params.isEmpty()) {
|
|
|
+ for (String type : types) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s + "-" + type;
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setDay(s);
|
|
|
+ dataTrans.setType(type);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (DataTrans data : params) {
|
|
|
+ list.add(data);
|
|
|
+ for (String type : types) {
|
|
|
+ for (String s : monthAndDay) {
|
|
|
+ DataTrans dataTrans = new DataTrans();
|
|
|
+ String date = year + "-" + s + "-" + type;
|
|
|
+ if (!(date.equals(data.getName()) && type.equals(data.getType()))) {
|
|
|
+ dataTrans.setName(date);
|
|
|
+ dataTrans.setMonth(s);
|
|
|
+ dataTrans.setType(type);
|
|
|
+ dataTrans.setYear(String.valueOf(year));
|
|
|
+ dataTrans.setValue(BigDecimal.ZERO);
|
|
|
+ list.add(dataTrans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 集合中相同属性去重、值合并
|
|
|
+ return merge(list);
|
|
|
+ }
|
|
|
+
|
|
|
public static List<DataTrans> merge(List<DataTrans> list) {
|
|
|
List<DataTrans> result = list.stream()
|
|
|
// 表示name为key,接着如果有重复的,那么从DataTrans对象o1与o2中筛选出一个,这里选择o1,
|
|
|
// 并把name重复,需要将value与o1进行合并的o2, 赋值给o1,最后返回o1
|
|
|
- .collect(Collectors.toMap(DataTrans::getName, a -> a, (o1, o2)-> {
|
|
|
+ .collect(Collectors.toMap(DataTrans::getName, a -> a, (o1, o2) -> {
|
|
|
o1.setValue(o1.getValue().add(o2.getValue()));
|
|
|
return o1;
|
|
|
})).values().stream().collect(Collectors.toList());
|
|
|
@@ -685,5 +936,4 @@ public class databoard extends Controller {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
}
|