hu 2 år sedan
förälder
incheckning
cbb1eb5597

+ 4 - 2
src/custom/restcontroller/R.java

@@ -5209,8 +5209,10 @@ public class R {
         public static class v1 {
         }
     }
-
-
+    public static class ID20230802111003 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 29 - 0
src/custom/restcontroller/webmanage/sale/databoard/DataTrans.java

@@ -6,8 +6,10 @@ public class DataTrans {
 
 
     private  String name;
+    private  String type;
     private  String year;
     private  String month;
+    private  String day;
     private BigDecimal value;
 
     public String getName() {
@@ -41,4 +43,31 @@ public class DataTrans {
     public void setValue(BigDecimal value) {
         this.value = value;
     }
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDay() {
+        return day;
+    }
+
+    public void setDay(String day) {
+        this.day = day;
+    }
+
+    @Override
+    public String toString() {
+        return "DataTrans{" +
+                "name='" + name + '\'' +
+                ", type='" + type + '\'' +
+                ", year='" + year + '\'' +
+                ", month='" + month + '\'' +
+                ", day='" + day + '\'' +
+                ", value=" + value +
+                '}';
+    }
 }

+ 1 - 2
src/custom/restcontroller/webmanage/sale/databoard/SQL/财务统计_季.sql

@@ -1,2 +1 @@
-select  DATE_FORMAT(t1.checkdate,'%Y') y,DATE_FORMAT(t1.checkdate,'%m') m,cast(ifnull(sum(if(t2.isclose,t2.deliedqty*t2.price,t2.amount)),0) AS DECIMAL(16,6)) typestatistics  from sa_order t1 inner join sa_orderitems t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.siteid=$siteid$ and t1.status not in('新建','提交') group by  DATE_FORMAT(t1.checkdate,'%Y'),DATE_FORMAT(t1.checkdate,'%m')
-
+ select   type,DATE_FORMAT(checkdate,'%Y') y,DATE_FORMAT(checkdate,'%m') m,sum(amount) typestatistics from sa_cashbill where status='审核' and $where$ and siteid =$siteid$  group by  type,DATE_FORMAT(checkdate,'%Y'),DATE_FORMAT(checkdate,'%m')

+ 0 - 2
src/custom/restcontroller/webmanage/sale/databoard/SQL/财务统计_年.sql

@@ -1,2 +0,0 @@
-select  DATE_FORMAT(t1.checkdate,'%Y') y,DATE_FORMAT(t1.checkdate,'%m') m,cast(ifnull(sum(if(t2.isclose,t2.deliedqty*t2.price,t2.amount)),0) AS DECIMAL(16,6)) typestatistics  from sa_order t1 inner join sa_orderitems t2 on t1.sa_orderid=t2.sa_orderid and t1.siteid=t2.siteid where t1.siteid=$siteid$ and t1.status not in('新建','提交') group by  DATE_FORMAT(t1.checkdate,'%Y'),DATE_FORMAT(t1.checkdate,'%m')
-

+ 1 - 0
src/custom/restcontroller/webmanage/sale/databoard/SQL/财务统计_年度.sql

@@ -0,0 +1 @@
+ select   type,DATE_FORMAT(checkdate,'%Y') y,DATE_FORMAT(checkdate,'%m') m,sum(amount) typestatistics from sa_cashbill where status='审核' and $where$ and siteid =$siteid$  group by  type,DATE_FORMAT(checkdate,'%Y'),DATE_FORMAT(checkdate,'%m')

+ 1 - 0
src/custom/restcontroller/webmanage/sale/databoard/SQL/财务统计_月.sql

@@ -0,0 +1 @@
+ select DATE_FORMAT(checkdate,'%Y') y,DATE_FORMAT(checkdate,'%d') d,sum(amount) typestatistics,type from sa_cashbill where status='审核' and $where$ and siteid =$siteid$  group by type,DATE_FORMAT(checkdate,'%Y'),DATE_FORMAT(checkdate,'%d')

+ 270 - 20
src/custom/restcontroller/webmanage/sale/databoard/databoard.java

@@ -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 {
     }
 
 
-
 }