zhangyao 1 месяц назад
Родитель
Сommit
eaded846ab

+ 19 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/invoiceController.java

@@ -136,6 +136,25 @@ public class invoiceController {
 
         }
 
+        /*
+        String sql = "SELECT * FROM APP_ACT_UI_OCR_FILE WHERE BOID=? AND BOFIELDNAME=? ORDER BY CREATEDATE DESC";
+        RowMap rowMap = DBSql.getMap(sql, new Object[]{"boid", "fieldName"});
+
+        DCContext dc = new DCContext(uc, DCProfileManager.getDCProfile(rowMap.getString("APPID"), "!ocr-ui-file-"), rowMap.getString("APPID"), rowMap.getString("ID"),  rowMap.getString("BOFIELDNAME"), rowMap.getString("FILENAME"));
+
+        InputStream is = ReadDCFile.getInstance().read(dc);
+
+
+        FormFileModel ffm = new FormFileModel();
+        ffm.setAppId(rowMap.getString("APPID"));
+        ffm.setBoId(rowMap.getString("BOID"));
+        ffm.setBoItemName(rowMap.getString("BOFIELDNAME"));
+        ffm.setBoName(rowMap.getString("BONAME"));
+        //ffm.setProcessInstId(bindid);
+        ffm.setFileName(rowMap.getString("FILENAME"));
+
+        SDK.getBOAPI().upFile(ffm, is);
+*/
         return ResponseObject.newOkResponse().put("qrContent", qrContent);
     }
 

+ 62 - 34
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractServiceAdj.java

@@ -99,6 +99,11 @@ public class contractServiceAdj {
 
         SDK.getBOAPI().create("BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", editBO, contractInstance, uc);
 
+        if (editBO.get("END_DATE") == null) {
+            DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_SERVICE a JOIN BO_EU_DNCTT_CONTRACT b ON a.CONTRACT_ID=b.ID set a.END_DATE=b.END_DATE WHERE a.END_DATE IS NULL AND a.ID=?", new Object[]{serviceId});
+            DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST a JOIN BO_EU_DNCTT_CONTRACT b ON a.CONTRACT_ID=b.ID set a.END_DATE=b.END_DATE WHERE a.END_DATE IS NULL a.CONTRACT_SERVICE_ID=?", new Object[]{serviceId});
+        }
+
         return contractInstance.getId();
 
     }
@@ -196,6 +201,10 @@ public class contractServiceAdj {
             //获取服务周期
             List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, EFFECTIVE_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, CALC_METHOD_1STPERIOD, "4638", contractService.getString("MONTH_1STQUARTER"));
 
+
+            contractServiceLogger.info("服务周期个数-------" + periodList.size());
+            contractServiceLogger.info(periodList.toString());
+
             SERVICE_UNIT_PRICE = TypeUtil.convert(contractService.get("UNIT_PRICE"), BigDecimal.class);
 
             SERVICE_TOTAL_PRICE = multiply(SERVICE_UNIT_PRICE, contractService.get("QUANTITY"));
@@ -636,7 +645,8 @@ public class contractServiceAdj {
         if (StringUtils.isBlank(boName)) {
             boName = "BO_EU_DNIVT_ORDER_PAYMENT_PLAN";
         } else {
-            if (PERIOD_TYPE.equals("609") == false) PERIOD_TYPE = "610";//按月
+            if (PERIOD_TYPE.equals("609") == false)
+                PERIOD_TYPE = "610";//按月
         }
 
         LocalDate EFFECTIVE_DATE = getLocalDate(contractService.get("PURCHASE_START_DATE"));//服务生效日期
@@ -648,6 +658,12 @@ public class contractServiceAdj {
         //生效日期之前的一次调整
         RowMap lastContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where  CONTRACT_SERVICE_ID=? and PURCHASE_START_DATE <=? and IS_EFFECTIVE='已执行' order by PURCHASE_START_DATE desc", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
 
+        RowMap costProduct = DBSql.getMap("select * from BO_EU_DNIVT_ORDER_PRODUCT where CONTRACT_SERVICE_ID=?", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
+
+        String orderId = costProduct.getString("ORDER_ID");
+        String CONTRACT_COST_ID = costProduct.getString("CONTRACT_COST_ID");
+        String VENDOR_ACCOUNT_ID = DBSql.getString("select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_ORDER where ID=?", new Object[]{orderId});//供应商账户ID
+
         Connection conn = null;
         try {
             conn = DBSql.open();
@@ -669,64 +685,80 @@ public class contractServiceAdj {
             String teshuchuliBeginDate = null;
             BigDecimal COST_1STMONTH = null;
             LocalDate START_DATE = EFFECTIVE_DATE;
-            if (StringUtils.isNotBlank(lastPeriodId)) {
 
-                //获取第一笔
 
-                //首月成本
-                if (PURCHASE_CALC_METHOD_1STPERIOD.equals("4598") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4595") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4592")) {
+            //获取第一笔
+            //首月成本
+            if (PURCHASE_CALC_METHOD_1STPERIOD.equals("4598") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4595") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4592")) {
 
-                } else {
-                    RowMap firstContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where  CONTRACT_SERVICE_ID=?  and IS_EFFECTIVE='已执行' order by PURCHASE_START_DATE ASC", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
+            } else {
+                //首次调整日期
+                RowMap firstContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where  CONTRACT_SERVICE_ID=?  and IS_EFFECTIVE='已执行' order by PURCHASE_START_DATE ASC", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
+
+                LocalDate firstEFFECTIVE_DATE = getLocalDate(firstContractService.get("PURCHASE_START_DATE"));
 
-                    LocalDate firstEFFECTIVE_DATE = getLocalDate(firstContractService.get("PURCHASE_START_DATE"));
+                //在首月,则要使用首月成本
+                if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
+                    teshuchuli = true;
+                    teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
+                    SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
+                    SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
 
-                    if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
-                        teshuchuli = true;
-                        teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
-                        SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
-                        SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
+                    BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.lengthOfMonth() - EFFECTIVE_DATE.getDayOfMonth() + 1).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
 
-                        BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.lengthOfMonth() - EFFECTIVE_DATE.getDayOfMonth() + 1).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
+                    COST_1STMONTH = SERVICE_TOTAL_COST.multiply(ratio);
 
-                        COST_1STMONTH = SERVICE_TOTAL_COST.multiply(ratio);
+                    EFFECTIVE_DATE = EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1);//下个月1号
 
-                        EFFECTIVE_DATE = EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1);//下个月1号
+                    //首月单独一条
+                    if (boName.equals("BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH") && !PERIOD_TYPE.equals("609")) {
+                        BO paymentPlan = new BO();
+                        paymentPlan.set("ORDER_ID", orderId);
+                        paymentPlan.set("PLAN_AMOUNT", COST_1STMONTH);
+                        paymentPlan.set("PLAN_DATE", teshuchuliBeginDate);
+                        paymentPlan.set("PERIOD_BEGIN_DATE", teshuchuliBeginDate);
+                        paymentPlan.set("PERIOD_END_DATE", EFFECTIVE_DATE.minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                        paymentPlan.set("REMAIN_AMOUNT", paymentPlan.get("PLAN_AMOUNT"));
+                        paymentPlan.set("CONTRACT_COST_ID", CONTRACT_COST_ID);
+                        paymentPlan.set("CONTRACT_SERVICE_ID", orgContractService.getId());
+                        paymentPlan.set("PAY_DESC", orgContractService.getString("NAME"));
+                        paymentPlan.set("ACCOUNT_PAYEE", VENDOR_ACCOUNT_ID);//收款单位
+                        SDK.getBOAPI().createDataBO(boName, paymentPlan, uc, conn);
+
+                        COST_1STMONTH = BigDecimal.ZERO;
+                        teshuchuli = false;
                     }
-                }
 
+                }
+            }
 
+            if (StringUtils.isNotBlank(lastPeriodId)) {
                 // 首月单独计费
                 if (teshuchuli) {
                     SERVICE_UNIT_COST = TypeUtil.convert(lastContractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
                     SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, lastContractService.get("QUANTITY"));
                 } else {
                     SERVICE_UNIT_COST = TypeUtil.convert(lastContractService.get("UNIT_COST"), BigDecimal.class);
-
                     //拆算成月成本
                     if (boName.equals("BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH")) {
                         SERVICE_UNIT_COST = SERVICE_UNIT_COST.divide(new BigDecimal(periodMonths), 10, BigDecimal.ROUND_HALF_UP);
                     }
-
                     SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, lastContractService.get("QUANTITY"));
                 }
 
-
                 BO lastServicePeriod = SDK.getBOAPI().get(boName, lastPeriodId);
-
                 LocalDate last_period_begin_date = getLocalDate(lastServicePeriod.get("PERIOD_BEGIN_DATE"));
-
-                lastServicePeriod.set("PERIOD_END_DATE", EFFECTIVE_DATE.minusDays(1));
-
                 BigDecimal periodRate = getDateRate(last_period_begin_date, EFFECTIVE_DATE.minusDays(1), false);
-
-                lastServicePeriod.set("PLAN_AMOUNT", multiply(SERVICE_TOTAL_COST, periodRate));
-                lastServicePeriod.set("REMAIN_AMOUNT", lastServicePeriod.get("PLAN_AMOUNT"));
-
-                SDK.getBOAPI().update(boName, lastServicePeriod, conn);
+                if (periodRate.compareTo(BigDecimal.ZERO) > 0) {
+                    lastServicePeriod.set("PERIOD_END_DATE", EFFECTIVE_DATE.minusDays(1));
+                    lastServicePeriod.set("PLAN_AMOUNT", multiply(SERVICE_TOTAL_COST, periodRate));
+                    lastServicePeriod.set("REMAIN_AMOUNT", lastServicePeriod.get("PLAN_AMOUNT"));
+                    SDK.getBOAPI().update(boName, lastServicePeriod, conn);
+                } else {
+                    SDK.getBOAPI().remove(boName, lastPeriodId, conn);
+                }
             }
 
-
             //获取服务周期
             List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, START_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, contractService.getString("PURCHASE_CALC_METHOD_1STPERIOD"), "4638", contractService.getString("MONTH_1STQUARTER"));
 
@@ -738,11 +770,7 @@ public class contractServiceAdj {
             }
 
             SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
-            RowMap costProduct = DBSql.getMap("select * from BO_EU_DNIVT_ORDER_PRODUCT where CONTRACT_SERVICE_ID=?", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
 
-            String orderId = costProduct.getString("ORDER_ID");
-            String CONTRACT_COST_ID = costProduct.getString("CONTRACT_COST_ID");
-            String VENDOR_ACCOUNT_ID = DBSql.getString("select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_ORDER where ID=?", new Object[]{orderId});//供应商账户ID
             if (periodList != null && periodList.size() > 0) {
 
                 int i = 0;

+ 19 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/service/PaymentPlanService.java

@@ -239,6 +239,25 @@ public class PaymentPlanService {
             firstPeriodBeginDate = PERIOD_BEGIN_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
             //下月一号
             PERIOD_BEGIN_DATE = PERIOD_BEGIN_DATE.plusMonths(1).withDayOfMonth(1);
+
+
+            //首月单独一条
+            if (boName.equals("BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH") && !RULE_CATE.equals("609")) {
+                BO paymentPlan = new BO();
+                paymentPlan.set("ORDER_ID", orderId);
+                paymentPlan.set("PLAN_AMOUNT", UNIT_COST_1STMONTH);
+                paymentPlan.set("PLAN_DATE", firstPeriodBeginDate);
+                paymentPlan.set("PERIOD_BEGIN_DATE", firstPeriodBeginDate);
+                paymentPlan.set("PERIOD_END_DATE", PERIOD_BEGIN_DATE.minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                paymentPlan.set("REMAIN_AMOUNT", paymentPlan.get("PLAN_AMOUNT"));
+                paymentPlan.set("CONTRACT_COST_ID", orderProduct.getString("CONTRACT_COST_ID"));
+                paymentPlan.set("CONTRACT_SERVICE_ID", service.getId());
+                paymentPlan.set("PAY_DESC", orderProduct.getString("NAME"));
+                paymentPlan.set("ACCOUNT_PAYEE", VENDOR_ACCOUNT_ID);//收款单位
+
+                SDK.getBOAPI().createDataBO(boName, paymentPlan, uc, conn);
+                UNIT_COST_1STMONTH = BigDecimal.ZERO;
+            }
         }
 
         List<PeriodCalculationUtil.Period> periods = PeriodCalculationUtil.getPeriodListByConfig(RULE_CATE, START_DATE, PERIOD_BEGIN_DATE, PERIOD_END_DATE, PURCHASE_CALC_METHOD_1STPERIOD, service.getString("CALC_METHOD_1STYEAR"), service.getString("MONTH_1STQUARTER"));