Kaynağa Gözat

小程序人员/医院/经销商目标

wu 3 ay önce
ebeveyn
işleme
922d6b0cb0

+ 5 - 0
src/custom/restcontroller/R.java

@@ -7743,6 +7743,11 @@ public class R {
         public static class v1 {
         public static class v1 {
         }
         }
     }
     }
+
+    public static class ID2026010610085402 {
+        public static class v1 {
+        }
+    }
 }
 }
 
 
 
 

+ 20 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/小程序人员目标.sql

@@ -0,0 +1,20 @@
+SELECT
+    sum(ROUND(m1 * price, 2))  m1amount,
+    sum(ROUND(m2 * price, 2))  m2amount,
+    sum(ROUND(m3 * price, 2))  m3amount,
+    sum(ROUND(m4 * price, 2))  m4amount,
+    sum(ROUND(m5 * price, 2))  m5amount,
+    sum(ROUND(m6 * price, 2))  m6amount,
+    sum(ROUND(m7 * price, 2))  m7amount,
+    sum(ROUND(m8 * price, 2))  m8amount,
+    sum(ROUND(m9 * price, 2))  m9amount,
+    sum(ROUND(m10 * price, 2)) m10amount,
+    sum(ROUND(m11 * price, 2)) m11amount,
+    sum(ROUND(m12 * price, 2)) m12amount
+from sa_salestargetbill t1
+         INNER JOIN sa_salestarget t2 ON t2.sa_salestargetbillid = t1.sa_salestargetbillid
+         INNER JOIN sys_hr t3 on t3.userid = t1.createuserid
+         INNER JOIN sa_salearea_hr t4 ON t4.hrid = t3.hrid
+WHERE t1.year = $year$
+  and t1.`status` = '审核'
+  and t1.siteid = $siteid$ and $where$ and t1.createuserid =$userid$

+ 7 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/小程序人员订单.sql

@@ -0,0 +1,7 @@
+SELECT  sum(t2.amount) amount, DATE_FORMAT(t1.checkdate, '%Y-%m') ym
+from sa_order t1
+         INNER JOIN sa_orderitems t2 ON t2.sa_orderid = t1.sa_orderid and t2.siteid = t1.siteid
+         INNER JOIN sys_hr t3 ON t3.hrid=t1.saler_hrid
+         INNER JOIN sa_salearea_hr t4 ON t4.hrid = t3.hrid
+WHERE t1.siteid = $siteid$ and t1.`status` in ('审核', '关闭') and YEAR (t1.checkdate) in ($year$, $befyear$) and $where$ and t3.userid =$userid$
+GROUP BY DATE_FORMAT(t1.checkdate, '%Y-%m')

+ 18 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/小程序医院目标.sql

@@ -0,0 +1,18 @@
+SELECT
+    sum(ROUND(m1 * price, 2))  m1amount,
+    sum(ROUND(m2 * price, 2))  m2amount,
+    sum(ROUND(m3 * price, 2))  m3amount,
+    sum(ROUND(m4 * price, 2))  m4amount,
+    sum(ROUND(m5 * price, 2))  m5amount,
+    sum(ROUND(m6 * price, 2))  m6amount,
+    sum(ROUND(m7 * price, 2))  m7amount,
+    sum(ROUND(m8 * price, 2))  m8amount,
+    sum(ROUND(m9 * price, 2))  m9amount,
+    sum(ROUND(m10 * price, 2)) m10amount,
+    sum(ROUND(m11 * price, 2)) m11amount,
+    sum(ROUND(m12 * price, 2)) m12amount
+from sa_salestargetbill t1
+         INNER JOIN sa_salestarget t2 ON t2.sa_salestargetbillid = t1.sa_salestargetbillid
+WHERE t1.year = $year$
+  and t1.`status` = '审核'
+  and t1.siteid = $siteid$   and t1.sa_customersid>$sa_customersid$

+ 6 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/小程序医院订单.sql

@@ -0,0 +1,6 @@
+SELECT  sum(t2.amount) amount, DATE_FORMAT(t1.checkdate, '%Y-%m') ym
+from sa_order t1
+         INNER JOIN sa_orderitems t2 ON t2.sa_orderid = t1.sa_orderid and t2.siteid = t1.siteid
+
+WHERE t1.siteid = $siteid$ and t1.`status` in ('审核', '关闭') and YEAR (t1.checkdate) in ($year$, $befyear$)  and t1.sa_customersid =$sa_customersid$
+GROUP BY DATE_FORMAT(t1.checkdate, '%Y-%m')

+ 19 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/小程序经销商目标.sql

@@ -0,0 +1,19 @@
+SELECT
+    sum(ROUND(m1 * price, 2))  m1amount,
+    sum(ROUND(m2 * price, 2))  m2amount,
+    sum(ROUND(m3 * price, 2))  m3amount,
+    sum(ROUND(m4 * price, 2))  m4amount,
+    sum(ROUND(m5 * price, 2))  m5amount,
+    sum(ROUND(m6 * price, 2))  m6amount,
+    sum(ROUND(m7 * price, 2))  m7amount,
+    sum(ROUND(m8 * price, 2))  m8amount,
+    sum(ROUND(m9 * price, 2))  m9amount,
+    sum(ROUND(m10 * price, 2)) m10amount,
+    sum(ROUND(m11 * price, 2)) m11amount,
+    sum(ROUND(m12 * price, 2)) m12amount
+from sa_salestargetbill t1
+         INNER JOIN sa_salestarget t2 ON t2.sa_salestargetbillid = t1.sa_salestargetbillid
+         INNER JOIN sa_agents_hospital t3 on t3.sa_hospitaldepid=t2.sa_hospitaldepid
+WHERE t1.year = $year$
+  and t1.`status` = '审核'
+  and t1.siteid = $siteid$  and t3.sa_agentsid =$sa_agentsid$

+ 5 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/小程序经销商订单.sql

@@ -0,0 +1,5 @@
+SELECT  sum(t2.amount) amount, DATE_FORMAT(t1.checkdate, '%Y-%m') ym
+from sa_order t1
+         INNER JOIN sa_orderitems t2 ON t2.sa_orderid = t1.sa_orderid and t2.siteid = t1.siteid
+WHERE t1.siteid = $siteid$ and t1.`status` in ('审核', '关闭') and YEAR (t1.checkdate) in ($year$, $befyear$)  and t1.sa_agentsid =$sa_agentsid$
+GROUP BY DATE_FORMAT(t1.checkdate, '%Y-%m')

+ 110 - 3
src/custom/restcontroller/webmanage/sale/salestarget2/salestargetstatistics.java

@@ -24,9 +24,8 @@ import java.math.BigDecimal;
 import java.time.YearMonth;
 import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.IsoFields;
 import java.time.temporal.IsoFields;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 public class salestargetstatistics extends Controller {
 public class salestargetstatistics extends Controller {
     /**
     /**
@@ -787,6 +786,17 @@ public class salestargetstatistics extends Controller {
         return ym.minusYears(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
         return ym.minusYears(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
     }
     }
 
 
+    public static ArrayList<String> getMonths(int year, int month_start, int month_end) {
+        YearMonth ymstart = YearMonth.of(year, month_start);
+        YearMonth ymend = YearMonth.of(year, month_end);
+        ArrayList<String> months = new ArrayList<>();
+        for (YearMonth ym = ymstart; !ym.isAfter(ymend); ym = ym.plusMonths(1)) {
+            months.add(ym.toString());                   // 本期
+        }
+
+        return months;
+    }
+
     @API(title = "小程序人员目标概况", apiversion = R.ID2026010509531602.v1.class)
     @API(title = "小程序人员目标概况", apiversion = R.ID2026010509531602.v1.class)
     public String mAPeopleInfo() throws YosException {
     public String mAPeopleInfo() throws YosException {
         int year = content.getIntValue("year");
         int year = content.getIntValue("year");
@@ -864,6 +874,103 @@ public class salestargetstatistics extends Controller {
         return getSucReturnObject().setData(arearows).toString();
         return getSucReturnObject().setData(arearows).toString();
     }
     }
 
 
+    @API(title = "小程序人员/医院/经销商目标", apiversion = R.ID2026010610085402.v1.class)
+    public String mATarget() throws YosException {
+        int type = content.getIntValue("type", 1);
+        int year = content.getIntValue("year");
+        int befyear = year - 1;
+        int month_start = content.getIntValue("month_start");
+        int month_end = content.getIntValue("month_end");
+        String yearMonthStr = year + "-12";
+        Long sa_saleareaid = content.getLongValue("sa_saleareaid");
+        Long userid = content.getLongValue("userid");
+        Long sa_customersid = content.getLongValue("sa_customersid");
+        Long sa_agentsid = content.getLongValue("sa_agentsid");
+
+        ArrayList<Long> sa_saleareaids = new ArrayList<>();
+        if (sa_saleareaid == 0) {
+            Rows rows = dbConnect.runSqlQuery("SELECT sa_saleareaid from sa_salearea_hr  WHERE  siteid='" + siteid + "' and hrid=" + hrid);
+            sa_saleareaids = rows.toArrayList("sa_saleareaid", new ArrayList<>());
+            if (sa_saleareaids.size() == 0) {
+                rows = dbConnect.runSqlQuery("SELECT sa_saleareaid from sa_salearea  WHERE  siteid='" + siteid + "' and level=1");
+                sa_saleareaids = rows.toArrayList("sa_saleareaid", new ArrayList<>());
+            }
+        } else {
+            sa_saleareaids.add(sa_saleareaid);
+        }
+
+        ArrayList<Long> subSaleAreaIds = SaleArea.getSubSaleAreaIds(this, sa_saleareaids);
+        subSaleAreaIds.add(sa_saleareaid);
+        StringBuffer where = new StringBuffer(" 1=1 ");
+        String sql = " and t4.sa_saleareaid in " + subSaleAreaIds + " ";
+        sql = sql.replace("[", "(").replace("]", ")");
+        where.append(sql);
+
+        Rows arearows = new Rows();
+        Row temprow = new Row();
+        temprow.put("year", year);
+        temprow.put("month_start", month_start);
+        temprow.put("month_end", month_end);
+        arearows.add(temprow);
+        SQLFactory sqlFactory = new SQLFactory(this, "小程序人员订单");
+        if (type == 1) {
+            sqlFactory = new SQLFactory(this, "小程序人员订单");
+            sqlFactory.addParameter_SQL("where", where);
+            sqlFactory.addParameter("userid", userid);
+        }
+        if (type == 2) {
+            sqlFactory = new SQLFactory(this, "小程序医院订单");
+            sqlFactory.addParameter("sa_customersid", sa_customersid);
+        }
+        if (type == 3) {
+            sqlFactory = new SQLFactory(this, "小程序经销商订单");
+            sqlFactory.addParameter("sa_agentsid", sa_agentsid);
+        }
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("year", year);
+        sqlFactory.addParameter("befyear", befyear);
+        Rows rows = dbConnect.runSqlQuery(sqlFactory);
+        RowsMap salesRowsMap = rows.toRowsMap("ym");
+
+        sqlFactory = new SQLFactory(this, "小程序人员目标");
+        if (type == 1) {
+            sqlFactory = new SQLFactory(this, "小程序人员目标");
+            sqlFactory.addParameter_SQL("where", where);
+            sqlFactory.addParameter("userid", userid);
+        }
+        if (type == 2) {
+            sqlFactory = new SQLFactory(this, "小程序医院目标");
+            sqlFactory.addParameter("sa_customersid", sa_customersid);
+        }
+        if (type == 3) {
+            sqlFactory = new SQLFactory(this, "小程序经销商目标");
+            sqlFactory.addParameter("sa_agentsid", sa_agentsid);
+        }
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("year", year);
+        Rows targetrows = dbConnect.runSqlQuery(sqlFactory);
+
+        ArrayList<String> alldates = yearToDate(yearMonthStr);
+        Rows datas = new Rows();
+
+        for (String date : alldates) {
+            Rows dateDate = salesRowsMap.getOrDefault(date, new Rows());
+            Row row = new Row();
+            row.put("date", date);
+            processDataRows(datas, row, dateDate, targetrows, date);
+        }
+
+        RowsMap dataRowsMap = datas.toRowsMap("tempMonth");
+
+        for (Row arearow : arearows) {
+            Rows dataRows = dataRowsMap.getOrDefault(arearow.getString("tempMonth"), new Rows());
+            //计算范围
+            calculate("m", arearow, dataRows, getMonths(year, month_start, month_end));
+        }
+
+        return getSucReturnObject().setData(arearows).toString();
+    }
+
     @API(title = "查询当前账号的营销区域", apiversion = R.ID2026010513574702.v1.class)
     @API(title = "查询当前账号的营销区域", apiversion = R.ID2026010513574702.v1.class)
     public String queryCurrentUserarea() throws YosException {
     public String queryCurrentUserarea() throws YosException {
         Rows rows = dbConnect.runSqlQuery("SELECT t1.*FROM sa_salearea t1 INNER JOIN sa_salearea_hr t2 ON t2.sa_saleareaid=t1.sa_saleareaid WHERE t2.hrid=" + hrid + " and t1.siteid='" + siteid + "'");
         Rows rows = dbConnect.runSqlQuery("SELECT t1.*FROM sa_salearea t1 INNER JOIN sa_salearea_hr t2 ON t2.sa_saleareaid=t1.sa_saleareaid WHERE t2.hrid=" + hrid + " and t1.siteid='" + siteid + "'");