wu 1 месяц назад
Родитель
Сommit
18e63ebff8

+ 8 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/首页医院目标.sql

@@ -0,0 +1,8 @@
+SELECT ifnull(sum(t1.amount), 0) targetamount
+from sales_target_view t1
+         INNER JOIN sys_datateam t2
+                    ON t2.ownertable = 'sa_customers' and t2.ownerid = t1.sa_customersid and t2.isleader = 1
+WHERE t1.siteid = $siteid$
+  and t1.ym >= $start$
+  and t1.ym <= $end$
+  and t2.userid = $userid$

+ 11 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/首页医院金额.sql

@@ -0,0 +1,11 @@
+SELECT IFNULL(sum(t2.amount), 0) saleamount
+from sa_order t1
+         INNER JOIN sa_orderitems t2 ON t2.sa_orderid = t1.sa_orderid
+         INNER JOIN sys_hr t3 ON t3.hrid = t1.saler_hrid
+WHERE t1.siteid = $siteid$
+  and t1.checkdate >= $start$
+  and t1.checkdate < $end$
+  and t3.userid = $userid$
+  and t1.sa_customersid > 0
+  and t1.`status` in ('审核', '关闭')
+  and t1.deleted = 0

+ 11 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/首页经销商目标.sql

@@ -0,0 +1,11 @@
+SELECT ifnull(sum(t1.amount), 0) targetamount
+from sales_target_view t1
+         INNER JOIN sa_agents_hospital t2 ON t2.sa_hospitaldepid = t1.sa_hospitaldepid
+         INNER JOIN (
+         SELECT DISTINCT sa_agentsid,t2.userid,t1.siteid from sys_enterprise_tradefield t1
+                                                             INNER JOIN sys_hr t2 ON t2.hrid=t1.hrid
+         ) t3 ON t3.sa_agentsid=t2.sa_agentsid and t3.siteid=t2.siteid
+WHERE t1.siteid = $siteid$
+  and t1.ym >= $start$
+  and t1.ym <= $end$
+  and t3.userid = $userid$

+ 11 - 0
src/custom/restcontroller/webmanage/sale/salestarget2/SQL/首页经销商金额.sql

@@ -0,0 +1,11 @@
+SELECT IFNULL(sum(t2.amount), 0) saleamount
+from sa_order t1
+         INNER JOIN sa_orderitems t2 ON t2.sa_orderid = t1.sa_orderid
+         INNER JOIN sys_hr t3 ON t3.hrid = t1.saler_hrid
+WHERE t1.siteid = $siteid$
+  and t1.checkdate >= $start$
+  and t1.checkdate < $end$
+  and t3.userid = $userid$
+  and t1.sa_agentsid > 0
+  and t1.`status` in ('审核', '关闭')
+  and t1.deleted = 0

+ 192 - 53
src/custom/restcontroller/webmanage/sale/salestarget2/salestargetstatistics.java

@@ -22,6 +22,7 @@ import restcontroller.sale.customer.ExportExcel;
 import restcontroller.webmanage.sale.order.Order2;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.IsoFields;
@@ -118,11 +119,7 @@ public class salestargetstatistics extends Controller {
         int befyear = year - 1;
         Long sa_saleareaid = content.getLongValue("sa_saleareaid");
 
-        Rows arearows = dbConnect.runSqlQuery(" SELECT t1.*,t3.`name`,t3.userid FROM view_areas t1 " +
-                " INNER JOIN sa_salearea_hr t2 ON t2.sa_saleareaid=t1.sa_saleareaid " +
-                " INNER JOIN sys_hr t3 ON t3.hrid=t2.hrid " +
-                " WHERE t1.siteid='" + siteid + "' AND t1.parentid=" + sa_saleareaid +
-                " ORDER BY t1.parentid,t1.sa_saleareaid");
+        Rows arearows = dbConnect.runSqlQuery(" SELECT t1.*,t3.`name`,t3.userid FROM view_areas t1 " + " INNER JOIN sa_salearea_hr t2 ON t2.sa_saleareaid=t1.sa_saleareaid " + " INNER JOIN sys_hr t3 ON t3.hrid=t2.hrid " + " WHERE t1.siteid='" + siteid + "' AND t1.parentid=" + sa_saleareaid + " ORDER BY t1.parentid,t1.sa_saleareaid");
 
 
         SQLFactory sqlFactory = new SQLFactory(this, "按人员分组统计订单");
@@ -174,11 +171,7 @@ public class salestargetstatistics extends Controller {
         int befyear = year - 1;
         Long sa_saleareaid = content.getLongValue("sa_saleareaid");
 
-        Rows arearows = dbConnect.runSqlQuery("SELECT t1.*,t3.`enterprisename` hospitalname,t2.sa_customersid FROM view_areas t1 " +
-                " INNER JOIN sa_customers t2 ON t2.sa_saleareaid=t1.sa_saleareaid " +
-                " INNER JOIN sys_enterprise t3 ON t3.sys_enterpriseid=t2.sys_enterpriseid " +
-                " WHERE t1.siteid='" + siteid + "' AND t1.parentid= " + sa_saleareaid + " " +
-                " ORDER BY t1.parentid,t1.sa_saleareaid ");
+        Rows arearows = dbConnect.runSqlQuery("SELECT t1.*,t3.`enterprisename` hospitalname,t2.sa_customersid FROM view_areas t1 " + " INNER JOIN sa_customers t2 ON t2.sa_saleareaid=t1.sa_saleareaid " + " INNER JOIN sys_enterprise t3 ON t3.sys_enterpriseid=t2.sys_enterpriseid " + " WHERE t1.siteid='" + siteid + "' AND t1.parentid= " + sa_saleareaid + " " + " ORDER BY t1.parentid,t1.sa_saleareaid ");
 
 
         SQLFactory sqlFactory = new SQLFactory(this, "按医院分组统计订单");
@@ -230,11 +223,7 @@ public class salestargetstatistics extends Controller {
         int befyear = year - 1;
         Long sa_saleareaid = content.getLongValue("sa_saleareaid");
 
-        Rows arearows = dbConnect.runSqlQuery("SELECT t1.*,t3.enterprisename,t2.sa_agentsid FROM view_areas t1 " +
-                " INNER JOIN sys_enterprise_tradefield t2 ON t2.sa_saleareaid=t1.sa_saleareaid " +
-                " INNER JOIN sys_enterprise t3 ON t3.sys_enterpriseid=t2.sys_enterpriseid " +
-                " WHERE t1.siteid='" + siteid + "' AND t1.parentid= " + sa_saleareaid + " " +
-                " ORDER BY t1.parentid,t1.sa_saleareaid ");
+        Rows arearows = dbConnect.runSqlQuery("SELECT t1.*,t3.enterprisename,t2.sa_agentsid FROM view_areas t1 " + " INNER JOIN sys_enterprise_tradefield t2 ON t2.sa_saleareaid=t1.sa_saleareaid " + " INNER JOIN sys_enterprise t3 ON t3.sys_enterpriseid=t2.sys_enterpriseid " + " WHERE t1.siteid='" + siteid + "' AND t1.parentid= " + sa_saleareaid + " " + " ORDER BY t1.parentid,t1.sa_saleareaid ");
 
 
         SQLFactory sqlFactory = new SQLFactory(this, "按经销商分组统计订单");
@@ -535,14 +524,10 @@ public class salestargetstatistics extends Controller {
         Long sa_agentsid = content.getLongValue("sa_agentsid");
 
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems",
-                "*");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t2", "t2.sa_orderid=t1.sa_orderid and t2.siteid=t1.siteid",
-                "sonum", "checkdate");
-        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid and t3.isshow=1",
-                "orderminqty_auxunit", "orderminqty", "orderaddqty_auxunit", "orderaddqty", "assistance", "goodstype", "explains");
-        querySQL.addJoinTable(JOINTYPE.left, "plm_itemextend", "t4", "t4.itemid = t1.itemid and t4.siteid = t1.siteid",
-                "erpitemname", "erpitemno");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "*");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t2", "t2.sa_orderid=t1.sa_orderid and t2.siteid=t1.siteid", "sonum", "checkdate");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid and t3.isshow=1", "orderminqty_auxunit", "orderminqty", "orderaddqty_auxunit", "orderaddqty", "assistance", "goodstype", "explains");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_itemextend", "t4", "t4.itemid = t1.itemid and t4.siteid = t1.siteid", "erpitemname", "erpitemno");
         querySQL.addJoinTable(JOINTYPE.left, "sys_hr", "t6", "t6.hrid=t2.saler_hrid and t6.siteid=t2.siteid");
 
         querySQL.addQueryFields("salename", "t6.name");
@@ -723,9 +708,7 @@ public class salestargetstatistics extends Controller {
         }
         try {
             // 计算达成率:(saleamount / targetamount) * 100
-            BigDecimal rate = saleamount.divide(targetamount, 10, BigDecimal.ROUND_HALF_UP)
-                    .multiply(BigDecimal.valueOf(100))
-                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal rate = saleamount.divide(targetamount, 10, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
             return rate + "%";
         } catch (ArithmeticException e) {
             // 处理除法结果为无限循环小数的情况
@@ -743,8 +726,7 @@ public class salestargetstatistics extends Controller {
             // 计算比率,使用指定精度避免无限循环小数
             BigDecimal rate = difference.divide(saleamount2, 10, BigDecimal.ROUND_HALF_UP);
             // 乘以100转换为百分比并保留2位小数
-            BigDecimal percentage = rate.multiply(BigDecimal.valueOf(100))
-                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal percentage = rate.multiply(BigDecimal.valueOf(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
             return percentage + "%";
         }
     }
@@ -787,6 +769,16 @@ public class salestargetstatistics extends Controller {
         return ym.minusYears(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
     }
 
+    public static String getNextMonth(String yyyyMM) {
+        YearMonth ym = YearMonth.parse(yyyyMM);
+        return ym.plusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
+    }
+
+    public static String getBeforeMonth(String yyyyMM) {
+        YearMonth ym = YearMonth.parse(yyyyMM);
+        return ym.minusMonths(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);
@@ -1165,21 +1157,15 @@ public class salestargetstatistics extends Controller {
             endMonth = year + "-" + ((month_end + 1) > 9 ? (month_end + 1) : "0" + (month_end + 1)) + "-01";
         }
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_order",
-                        "sa_orderid", "sonum", "type", "status", "shoppingtype", "checkdate", "remarks", "billdate", "createdate")
-                .setTableAlias("t1");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_customers", "t2", "t2.sa_customersid=t1.sa_customersid and t2.siteid=t1.siteid",
-                "sa_customersid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_order", "sa_orderid", "sonum", "type", "status", "shoppingtype", "checkdate", "remarks", "billdate", "createdate").setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_customers", "t2", "t2.sa_customersid=t1.sa_customersid and t2.siteid=t1.siteid", "sa_customersid");
         querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t3", "t3.sys_enterpriseid=t2.sys_enterpriseid and t3.siteid=t2.siteid");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.sa_agentsid=t1.sa_agentsid and t4.siteid=t1.siteid",
-                "sa_agentsid");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.sa_agentsid=t1.sa_agentsid and t4.siteid=t1.siteid", "sa_agentsid");
         querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t5", "t5.sys_enterpriseid=t4.sys_enterpriseid and t5.siteid=t4.siteid");
         querySQL.addJoinTable(JOINTYPE.left, "sys_hr", "t6", "t6.hrid=t1.saler_hrid and t6.siteid=t1.siteid");
         querySQL.addJoinTable(JOINTYPE.left, new Order2(content).getAmountQuerySQL(), "t7", "t7.sa_orderid = t1.sa_orderid");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_salearea", "t8", "t8.sa_saleareaid = t1.sa_saleareaid and t8.siteid = t1.siteid",
-                "areaname");
-        querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t9", "t9.contactsid = t1.rec_contactsid and t9.siteid = t1.siteid",
-                "name", "province", "city", "county", "address");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_salearea", "t8", "t8.sa_saleareaid = t1.sa_saleareaid and t8.siteid = t1.siteid", "areaname");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t9", "t9.contactsid = t1.rec_contactsid and t9.siteid = t1.siteid", "name", "province", "city", "county", "address");
 
         querySQL.addQueryFields("hospitalname", "t3.enterprisename");
         querySQL.addQueryFields("agentname", "t5.enterprisename");
@@ -1244,9 +1230,7 @@ public class salestargetstatistics extends Controller {
                 Long sa_saleareaid = whereObject.getLong("sa_saleareaid");
                 ArrayList<Long> sa_saleareaids = SaleArea.getSubSaleAreaIds(this, sa_saleareaid);
                 sa_saleareaids.add(sa_saleareaid);
-                Rows rows = dbConnect.runSqlQuery("SELECT DISTINCT t2.userid from sa_salearea_hr t1 " +
-                        "inner join sys_hr t2 ON t2.hrid=t1.hrid and t2.siteid=t1.siteid " +
-                        "WHERE  t1.siteid='" + siteid + "' and t1.sa_saleareaid in(" + StringUtils.join(sa_saleareaids, ",") + ") and t2.userid>0");
+                Rows rows = dbConnect.runSqlQuery("SELECT DISTINCT t2.userid from sa_salearea_hr t1 " + "inner join sys_hr t2 ON t2.hrid=t1.hrid and t2.siteid=t1.siteid " + "WHERE  t1.siteid='" + siteid + "' and t1.sa_saleareaid in(" + StringUtils.join(sa_saleareaids, ",") + ") and t2.userid>0");
                 HashSet<Long> userIds = new HashSet<>(rows.toArrayList("userid", new ArrayList<>()));
                 userIds.add(-1L);
                 where.append(" and(");
@@ -1259,8 +1243,7 @@ public class salestargetstatistics extends Controller {
         where.append(" and ( t1.datastatus in (0,2) )");
 
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_customers", "sa_customersid", "createby", "createdate",
-                "sys_enterpriseid", "status", "type", "tradingstatus", "datastatus", "billno", "province", "city", "county", "address", "stagename", "grade", "sa_saleareaid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_customers", "sa_customersid", "createby", "createdate", "sys_enterpriseid", "status", "type", "tradingstatus", "datastatus", "billno", "province", "city", "county", "address", "stagename", "grade", "sa_saleareaid");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t2.sys_enterpriseid = t1.sys_enterpriseid AND t2.siteid = t1.siteid", "enterprisename");
         querySQL.addJoinTable(JOINTYPE.left, "sa_salearea", "t3", "t3.sa_saleareaid = t1.sa_saleareaid AND t3.siteid = t1.siteid", "areaname");
@@ -1384,15 +1367,10 @@ public class salestargetstatistics extends Controller {
         SQLFactory sqlFactory = new SQLFactory(this, "查询经销商业务员");
         sqlFactory.addParameter("siteid", siteid);
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_agents",
-                        "sa_agentsid", "sys_enterpriseid", "gmname", "gmphonenumber", "agentnum", "cooperatetype", "remarks", "status", "createdate", "scale", "mainproducts").
-                setTableAlias("t1");
-        querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.siteid = t2.siteid and t1.sys_enterpriseid = t2.sys_enterpriseid",
-                "enterprisename", "province", "city", "county", "address");
-        querySQL.addJoinTable(JOINTYPE.left, "sys_dataextend", "t3", "t1.sys_enterpriseid = t3.ownerid and ownertable = 'sys_enterprise' and t1.siteid = t3.siteid",
-                "erpagentnum");
-        querySQL.addJoinTable(JOINTYPE.left, "sys_dataextend", "t4", "t1.siteid = t4.siteid and t1.sa_agentsid = t4.ownerid and t4.ownertable = 'sa_agents'",
-                "deletereason");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_agents", "sa_agentsid", "sys_enterpriseid", "gmname", "gmphonenumber", "agentnum", "cooperatetype", "remarks", "status", "createdate", "scale", "mainproducts").setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.siteid = t2.siteid and t1.sys_enterpriseid = t2.sys_enterpriseid", "enterprisename", "province", "city", "county", "address");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_dataextend", "t3", "t1.sys_enterpriseid = t3.ownerid and ownertable = 'sys_enterprise' and t1.siteid = t3.siteid", "erpagentnum");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_dataextend", "t4", "t1.siteid = t4.siteid and t1.sa_agentsid = t4.ownerid and t4.ownertable = 'sa_agents'", "deletereason");
         querySQL.addJoinTable(JOINTYPE.left, sqlFactory, "t5", "t5.sa_agentsid = t1.sa_agentsid", "salernames");
         querySQL.addQueryFields("deletechangedate", "t4.changedate");
         querySQL.addQueryFields("deletechangeby", "t4.changeby");
@@ -1422,5 +1400,166 @@ public class salestargetstatistics extends Controller {
         return subSaleAreaIds;
     }
 
+    private static String getQuarterStartMonth(int year, int quarter) {
+        int month = (quarter - 1) * 3 + 1; // Q1→1, Q2→4, Q3→7, Q4→10
+        return String.format("%d-%02d", year, month);
+    }
+
+    // 返回 "yyyy-MM" 格式的季度结束月份
+    private static String getQuarterEndMonth(int year, int quarter) {
+        int month = quarter * 3; // Q1→3, Q2→6, Q3→9, Q4→12
+        return String.format("%d-%02d", year, month);
+    }
+
+    @API(title = "首页目标", apiversion = R.ID2026011013200502.v1.class)
+    public String homeTarget() throws YosException {
+        LocalDate now = LocalDate.now();
+        int currentYear = now.getYear();
+        int month = now.getMonthValue();
+        int quarter = now.get(IsoFields.QUARTER_OF_YEAR);
+        String currentMonth = currentYear + "-" + (month > 9 ? month : "0" + month);
+        int type = content.getIntValue("type", 1);
+        String startMonth = "";
+        String endMonth = "";
+        switch (type) {
+            //本年
+            case 1:
+                startMonth = currentYear + "-01";
+                endMonth = currentYear + "-12";
+                break;
+            //本季
+            case 2:
+                startMonth = getQuarterStartMonth(currentYear, quarter);
+                endMonth = getQuarterEndMonth(currentYear, quarter);
+                break;
+            //本月
+            case 3:
+                startMonth = currentMonth;
+                endMonth = startMonth;
+                break;
+            //上月
+            case 4:
+                startMonth = getBeforeMonth(currentMonth);
+                endMonth = startMonth;
+                break;
+            //上季度
+            case 5:
+                int prevYear = (quarter == 1) ? currentYear - 1 : currentYear;
+                int prevQuarter = (quarter == 1) ? 4 : quarter - 1;
+                startMonth = getQuarterStartMonth(prevYear, prevQuarter);
+                endMonth = getQuarterEndMonth(prevYear, prevQuarter);
+                break;
+            //去年
+            case 6:
+                startMonth = (currentYear - 1) + "-01";
+                endMonth = (currentYear - 1) + "-12";
+                break;
+            default:
+                startMonth = content.getStringValueForDate("startMonth", "yyyy-MM", "");
+                endMonth = content.getStringValueForDate("endMonth", "yyyy-MM", "");
+                if (startMonth.isEmpty() || endMonth.isEmpty()) {
+                    return getErrReturnObject().setErrMsg("请选择月份").toString();
+                }
+                break;
+        }
+
+        //医院目标
+        SQLFactory sqlFactory = new SQLFactory(this, "首页医院目标");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", startMonth);
+        sqlFactory.addParameter("end", endMonth);
+        sqlFactory.addParameter("userid", userid);
+        BigDecimal targetamount = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("targetamount");
+
+        //医院订单金额
+        sqlFactory = new SQLFactory(this, "首页医院金额");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", startMonth + "-01");
+        sqlFactory.addParameter("end", getNextMonth(endMonth) + "-01");
+        sqlFactory.addParameter("userid", userid);
+        BigDecimal saleamount = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("saleamount");
+
+        //医院订单金额yoy
+        sqlFactory = new SQLFactory(this, "首页医院金额");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", getYoyMonth(startMonth) + "-01");
+        sqlFactory.addParameter("end", getNextMonth(getYoyMonth(endMonth)) + "-01");
+        sqlFactory.addParameter("userid", userid);
+        BigDecimal saleamount_yoy = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("saleamount");
+
+        //医院订单金额yoy
+        sqlFactory = new SQLFactory(this, "首页医院金额");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", getMomMonth(startMonth) + "-01");
+        sqlFactory.addParameter("end", getNextMonth(getMomMonth(endMonth)) + "-01");
+        sqlFactory.addParameter("userid", userid);
+        BigDecimal saleamount_mom = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("saleamount");
+
+        Row detailrow = new Row();
+
+        Row hospitalrow = new Row();
+        hospitalrow.put("targetamount", targetamount);
+        hospitalrow.put("saleamount", saleamount);
+        hospitalrow.put("saleamount_yoy", saleamount_yoy);
+        hospitalrow.put("saleamount_mom", saleamount_mom);
+        hospitalrow.putIfAbsent("balanceamount", saleamount.subtract(targetamount));
+        //计算达成率
+        hospitalrow.put("rate_achieve", calculateAchieveRate(saleamount, targetamount));
+        //计算环比
+        hospitalrow.put("rate_mom", calculateRate(saleamount, saleamount_mom));
+        //计算同比
+        hospitalrow.put("rate_yoy", calculateRate(saleamount, saleamount_yoy));
+        detailrow.put("hospital", hospitalrow);
+
+        //经销商目标
+        sqlFactory = new SQLFactory(this, "首页经销商目标");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", startMonth);
+        sqlFactory.addParameter("end", endMonth);
+        sqlFactory.addParameter("userid", userid);
+        targetamount = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("targetamount");
+
+        //经销商订单金额
+        sqlFactory = new SQLFactory(this, "首页经销商金额");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", startMonth + "-01");
+        sqlFactory.addParameter("end", getNextMonth(endMonth) + "-01");
+        sqlFactory.addParameter("userid", userid);
+        saleamount = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("saleamount");
+
+        //经销商订单金额yoy
+        sqlFactory = new SQLFactory(this, "首页经销商金额");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", getYoyMonth(startMonth) + "-01");
+        sqlFactory.addParameter("end", getNextMonth(getYoyMonth(endMonth)) + "-01");
+        sqlFactory.addParameter("userid", userid);
+        saleamount_yoy = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("saleamount");
+
+        //经销商订单金额yoy
+        sqlFactory = new SQLFactory(this, "首页经销商金额");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("start", getMomMonth(startMonth) + "-01");
+        sqlFactory.addParameter("end", getNextMonth(getMomMonth(endMonth)) + "-01");
+        sqlFactory.addParameter("userid", userid);
+        saleamount_mom = dbConnect.runSqlQuery(sqlFactory).get(0).getBigDecimal("saleamount");
+
+        Row agentrow = new Row();
+        agentrow.put("targetamount", targetamount);
+        agentrow.put("saleamount", saleamount);
+        agentrow.put("saleamount_yoy", saleamount_yoy);
+        agentrow.put("saleamount_mom", saleamount_mom);
+        agentrow.putIfAbsent("balanceamount", saleamount.subtract(targetamount));
+        //计算达成率
+        agentrow.put("rate_achieve", calculateAchieveRate(saleamount, targetamount));
+        //计算环比
+        agentrow.put("rate_mom", calculateRate(saleamount, saleamount_mom));
+        //计算同比
+        agentrow.put("rate_yoy", calculateRate(saleamount, saleamount_yoy));
+        detailrow.put("agent", agentrow);
+
+
+        return getSucReturnObject().setData(detailrow).toString();
+    }
+
 
 }