瀏覽代碼

月,季度指标部分字段逻辑修改

hu 1 月之前
父節點
當前提交
2523cf3c3b
共有 1 個文件被更改,包括 86 次插入18 次删除
  1. 86 18
      src/custom/restcontroller/webmanage/sale/salestarget_cucu/performancetargetboard.java

+ 86 - 18
src/custom/restcontroller/webmanage/sale/salestarget_cucu/performancetargetboard.java

@@ -127,7 +127,7 @@ public class performancetargetboard extends Controller {
         }
         SQLFactory paymentsqlFactory = new SQLFactory(this, "账户回款统计");
         paymentsqlFactory.addParameter("year", year);
-        paymentsqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid));
+        paymentsqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid).add(sa_saleareaid));
         paymentsqlFactory.addParameter_SQL("where"," 1=1 ");
         paymentsqlFactory.addParameter("siteid", siteid);
         Rows paymentRows = dbConnect.runSqlQuery(paymentsqlFactory.getSQL());
@@ -135,7 +135,7 @@ public class performancetargetboard extends Controller {
 
         SQLFactory rebatesqlFactory = new SQLFactory(this, "账户返利统计");
         rebatesqlFactory.addParameter("year", year);
-        rebatesqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid));
+        rebatesqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid).add(sa_saleareaid));
         rebatesqlFactory.addParameter_SQL("where"," 1=1 ");
         rebatesqlFactory.addParameter("siteid", siteid);
         Rows rebateRows = dbConnect.runSqlQuery(rebatesqlFactory.getSQL());
@@ -149,23 +149,44 @@ public class performancetargetboard extends Controller {
         BigDecimal previousfanli=rebateRowsMap.containsKey(previousmonthstr)?rebateRowsMap.get(previousmonthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO;
         //回款完成额
         jsonObject.put("completedamount",xainjin.add(huodong).add(fanli));
+
+        BigDecimal previousexceed=BigDecimal.ZERO;
+        BigDecimal completedamountexceed100=BigDecimal.ZERO;
+        for(int i=1;i<=month;i++){
+            previousexceed=completedamountexceed100;
+            BigDecimal looprw_month=salestargetrows.isNotEmpty()?salestargetrows.get(0).getBigDecimal("m"+i+"l"):BigDecimal.ZERO;
+            BigDecimal loopxainjin=paymentRowsMap.containsKey("现金账户")?paymentRowsMap.get("现金账户").toRowsMap("month").containsKey(String.valueOf(i))?paymentRowsMap.get("现金账户").toRowsMap("month").get(String.valueOf(i)).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+            BigDecimal loophuodong=paymentRowsMap.containsKey("活动预存账户")?paymentRowsMap.get("活动预存账户").toRowsMap("month").containsKey(String.valueOf(i))?paymentRowsMap.get("活动预存账户").toRowsMap("month").get(String.valueOf(i)).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+            BigDecimal loopfanli=rebateRowsMap.containsKey(String.valueOf(i))?rebateRowsMap.get(String.valueOf(i)).get(0).getBigDecimal("amount"):BigDecimal.ZERO;
+
+            BigDecimal loopgcgc=paymentRowsMap.containsKey("GC工程现金账户")?paymentRowsMap.get("GC工程现金账户").toRowsMap("month").containsKey(String.valueOf(i))?paymentRowsMap.get("GC工程现金账户").toRowsMap("month").get(String.valueOf(i)).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+            BigDecimal loopzzgc=paymentRowsMap.containsKey("整装工程现金账户")?paymentRowsMap.get("整装工程现金账户").toRowsMap("month").containsKey(String.valueOf(i))?paymentRowsMap.get("整装工程现金账户").toRowsMap("month").get(String.valueOf(i)).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+
+            completedamountexceed100=loopxainjin.add(loophuodong).add(loopfanli).add(previousexceed)
+                    .add(loopgcgc.max(looprw_month.multiply(gcproportion).multiply(BigDecimal.valueOf(10000))))
+                    .add(loopzzgc.max(looprw_month.multiply(zzproportion).multiply(BigDecimal.valueOf(10000))))
+                    .subtract(looprw_month.multiply(BigDecimal.valueOf(10000)));
+
+        }
+
+
         //上月完成额超出部分
-        jsonObject.put("previousexceed",month==1?0:previousxainjin.add(previoushuodong).add(previousfanli).subtract(rw_previousmonth));
+        jsonObject.put("previousexceed",previousexceed);
 
         BigDecimal gcgc=paymentRowsMap.containsKey("GC工程现金账户")?paymentRowsMap.get("GC工程现金账户").toRowsMap("month").containsKey(monthstr)?paymentRowsMap.get("GC工程现金账户").toRowsMap("month").get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
         //GC工程完成额
-        jsonObject.put("gccompletedamount",gcgc.max(rw_month.multiply(gcproportion)));
+        jsonObject.put("gccompletedamount",gcgc.max(rw_month.multiply(gcproportion).multiply(BigDecimal.valueOf(10000))));
         //GC工程超出部分
-        jsonObject.put("gccompletedamountexceed",gcgc.subtract(rw_month.multiply(gcproportion)).compareTo(BigDecimal.ZERO)>0?gcgc.subtract(rw_month.multiply(gcproportion)):0);
+        jsonObject.put("gccompletedamountexceed",gcgc.subtract(rw_month.multiply(gcproportion).multiply(BigDecimal.valueOf(10000))).compareTo(BigDecimal.ZERO)>0?gcgc.subtract(rw_month.multiply(gcproportion).multiply(BigDecimal.valueOf(10000))):0);
 
         BigDecimal zzgc=paymentRowsMap.containsKey("整装工程现金账户")?paymentRowsMap.get("整装工程现金账户").toRowsMap("month").containsKey(monthstr)?paymentRowsMap.get("整装工程现金账户").toRowsMap("month").get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
         //整装工程完成额
-        jsonObject.put("zzcompletedamount",zzgc.max(rw_month.multiply(zzproportion)));
+        jsonObject.put("zzcompletedamount",zzgc.max(rw_month.multiply(zzproportion).multiply(BigDecimal.valueOf(10000))));
         //整装工程超出部分
-        jsonObject.put("zzcompletedamountexceed",zzgc.subtract(rw_month.multiply(zzproportion)).compareTo(BigDecimal.ZERO)>0?zzgc.subtract(rw_month.multiply(zzproportion)):0);
+        jsonObject.put("zzcompletedamountexceed",zzgc.subtract(rw_month.multiply(zzproportion).multiply(BigDecimal.valueOf(10000))).compareTo(BigDecimal.ZERO)>0?zzgc.subtract(rw_month.multiply(zzproportion).multiply(BigDecimal.valueOf(10000))):0);
 
         //完成额超出100%部分
-        jsonObject.put("completedamountexceed100",jsonObject.getBigDecimal("completedamount").add(jsonObject.getBigDecimal("previousexceed")).add(jsonObject.getBigDecimal("gccompletedamount")).add(jsonObject.getBigDecimal("zzcompletedamount")).subtract(rw_month));
+        jsonObject.put("completedamountexceed100",completedamountexceed100);
         //实际完成额
         jsonObject.put("actualcompletedamount",jsonObject.getBigDecimal("completedamount").add(jsonObject.getBigDecimal("gccompletedamount")).add(jsonObject.getBigDecimal("zzcompletedamount")));
         //实际完成百分比
@@ -227,7 +248,7 @@ public class performancetargetboard extends Controller {
         jsonObject.put("rw_quarter",rw_quarter);
         SQLFactory paymentsqlFactory = new SQLFactory(this, "账户回款统计");
         paymentsqlFactory.addParameter("year", year);
-        paymentsqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid));
+        paymentsqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid).add(sa_saleareaid));
         paymentsqlFactory.addParameter_SQL("where"," 1=1 ");
         paymentsqlFactory.addParameter("siteid", siteid);
         Rows paymentRows = dbConnect.runSqlQuery(paymentsqlFactory.getSQL());
@@ -235,7 +256,7 @@ public class performancetargetboard extends Controller {
 
         SQLFactory rebatesqlFactory = new SQLFactory(this, "账户返利统计");
         rebatesqlFactory.addParameter("year", year);
-        rebatesqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid));
+        rebatesqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid).add(sa_saleareaid));
         rebatesqlFactory.addParameter_SQL("where"," 1=1 ");
         rebatesqlFactory.addParameter("siteid", siteid);
         Rows rebateRows = dbConnect.runSqlQuery(rebatesqlFactory.getSQL());
@@ -258,14 +279,48 @@ public class performancetargetboard extends Controller {
             BigDecimal previousfanli=rebateRowsMap.containsKey(previousmonthstr)?rebateRowsMap.get(previousmonthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO;
             previouscompletedamount=previouscompletedamount.add(previousxainjin).add(previoushuodong).add(previousfanli);
         }
+
+
+        BigDecimal previousexceed=BigDecimal.ZERO;
+        BigDecimal completedamountexceed100=BigDecimal.ZERO;
+        int quarter = getQuarterByMonth(selectmonth);
+        for(int i=1;i<=quarter;i++){
+            previousexceed=completedamountexceed100;
+            List<Integer> loopmonths = getCurrentQuarterMonths(i*3-2);
+            BigDecimal looprw_quarter=BigDecimal.ZERO;
+            BigDecimal loopcompletedamount=BigDecimal.ZERO;
+            BigDecimal loopgcgccompletedamount=BigDecimal.ZERO;
+            BigDecimal loopzzgccompletedamount=BigDecimal.ZERO;
+            if(salestargetrows.isNotEmpty()){
+                for(int month : loopmonths){
+                    looprw_quarter=looprw_quarter.add(salestargetrows.get(0).getBigDecimal("m"+month+"l"));
+                }
+            }
+            for(int month : loopmonths){
+                String monthstr = String.format("%02d", month);
+                BigDecimal loopxainjin=paymentRowsMap.containsKey("现金账户")?paymentRowsMap.get("现金账户").toRowsMap("month").containsKey(monthstr)?paymentRowsMap.get("现金账户").toRowsMap("month").get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+                BigDecimal loophuodong=paymentRowsMap.containsKey("活动预存账户")?paymentRowsMap.get("活动预存账户").toRowsMap("month").containsKey(monthstr)?paymentRowsMap.get("活动预存账户").toRowsMap("month").get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+                BigDecimal loopfanli=rebateRowsMap.containsKey(monthstr)?rebateRowsMap.get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO;
+                BigDecimal loopgcgc=paymentRowsMap.containsKey("GC工程现金账户")?paymentRowsMap.get("GC工程现金账户").toRowsMap("month").containsKey(monthstr)?paymentRowsMap.get("GC工程现金账户").toRowsMap("month").get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+                BigDecimal loopzzgc=paymentRowsMap.containsKey("整装工程现金账户")?paymentRowsMap.get("整装工程现金账户").toRowsMap("month").containsKey(monthstr)?paymentRowsMap.get("整装工程现金账户").toRowsMap("month").get(monthstr).get(0).getBigDecimal("amount"):BigDecimal.ZERO:BigDecimal.ZERO;
+                loopgcgccompletedamount=loopgcgccompletedamount.add(loopgcgc);
+                loopzzgccompletedamount=loopzzgccompletedamount.add(loopzzgc);
+                loopcompletedamount=loopcompletedamount.add(loopxainjin).add(loophuodong).add(loopfanli);
+            }
+
+            completedamountexceed100=loopcompletedamount.add(previousexceed).add(loopgcgccompletedamount)
+                    .add(loopzzgccompletedamount).subtract(looprw_quarter.multiply(BigDecimal.valueOf(10000)));
+
+        }
+
         //回款完成额
         jsonObject.put("completedamount",completedamount);
         //上季完成额超出部分
-        jsonObject.put("previousexceed",previouscompletedamount.subtract(rw_previousquarter));
+        jsonObject.put("previousexceed",previousexceed);
         //GC工程完成额
-        jsonObject.put("gccompletedamount",gcgccompletedamount.max(rw_quarter.multiply(gcproportion)));
+        jsonObject.put("gccompletedamount",gcgccompletedamount);
         //整装工程完成额
-        jsonObject.put("zzcompletedamount",zzgccompletedamount.max(rw_quarter.multiply(zzproportion)));
+        jsonObject.put("zzcompletedamount",zzgccompletedamount);
         //季度完成额
         jsonObject.put("actualcompletedamount",jsonObject.getBigDecimal("completedamount").add(jsonObject.getBigDecimal("previousexceed")).add(jsonObject.getBigDecimal("gccompletedamount")).add(jsonObject.getBigDecimal("zzcompletedamount")));
         //季度百分比
@@ -322,7 +377,7 @@ public class performancetargetboard extends Controller {
         jsonObject.put("rw_all",rw_all);
         SQLFactory paymentsqlFactory = new SQLFactory(this, "账户回款统计");
         paymentsqlFactory.addParameter("year", year);
-        paymentsqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid));
+        paymentsqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid).add(sa_saleareaid));
         paymentsqlFactory.addParameter_SQL("where"," 1=1 ");
         paymentsqlFactory.addParameter("siteid", siteid);
         Rows paymentRows = dbConnect.runSqlQuery(paymentsqlFactory.getSQL());
@@ -330,7 +385,7 @@ public class performancetargetboard extends Controller {
 
         SQLFactory rebatesqlFactory = new SQLFactory(this, "账户返利统计");
         rebatesqlFactory.addParameter("year", year);
-        rebatesqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid));
+        rebatesqlFactory.addParameter_in("sa_saleareaids", getSubSaleAreaIds(this,sa_saleareaid).add(sa_saleareaid));
         rebatesqlFactory.addParameter_SQL("where"," 1=1 ");
         rebatesqlFactory.addParameter("siteid", siteid);
         Rows rebateRows = dbConnect.runSqlQuery(rebatesqlFactory.getSQL());
@@ -349,9 +404,9 @@ public class performancetargetboard extends Controller {
         //回款完成额
         jsonObject.put("completedamount",completedamount);
         //GC工程完成额
-        jsonObject.put("gccompletedamount",gcgccompletedamount.max(rw_all.multiply(gcproportion)));
+        jsonObject.put("gccompletedamount",gcgccompletedamount.max(rw_all.multiply(gcproportion).multiply(BigDecimal.valueOf(10000))));
         //整装工程完成额
-        jsonObject.put("zzcompletedamount",zzgccompletedamount.max(rw_all.multiply(zzproportion)));
+        jsonObject.put("zzcompletedamount",zzgccompletedamount.max(rw_all.multiply(zzproportion).multiply(BigDecimal.valueOf(10000))));
         //总完成额
         jsonObject.put("actualcompletedamount",jsonObject.getBigDecimal("completedamount").add(jsonObject.getBigDecimal("gccompletedamount")).add(jsonObject.getBigDecimal("zzcompletedamount")));
         //百分比
@@ -361,7 +416,7 @@ public class performancetargetboard extends Controller {
             jsonObject.put("actualcompletedpercentage",jsonObject.getBigDecimal("actualcompletedamount").divide((rw_all.multiply(BigDecimal.valueOf(10000))),4, RoundingMode.HALF_UP));
         }
         //和年度任务的差额
-        jsonObject.put("differenceamount",rw_year.subtract(jsonObject.getBigDecimal("actualcompletedamount")));
+        jsonObject.put("differenceamount",rw_all.multiply(BigDecimal.valueOf(7000)).subtract(jsonObject.getBigDecimal("actualcompletedamount")));
 
         return getSucReturnObject().setData(jsonObject).toString();
 
@@ -490,6 +545,19 @@ public class performancetargetboard extends Controller {
 
         return quarterMonths;
     }
+    public  int getQuarterByMonth(int month) {
+        if (month >= 1 && month <= 3) {
+            return 1;
+        } else if (month >= 4 && month <= 6) {
+            return 2;
+        } else if (month >= 7 && month <= 9) {
+            return 3;
+        } else if (month >= 10 && month <= 12) {
+            return 4;
+        } else {
+            throw new IllegalArgumentException("月份必须在 1-12 之间: " + month);
+        }
+    }
 
     public List<Integer> getPreviousQuarterMonthsCalendar(int currentMonth) {
         int currentQuarter = (currentMonth - 1) / 3 + 1;