Przeglądaj źródła

Merge branch 'master' of http://210.51.45.41:3000/itcat_admin/aws_donenow

HULEI 1 miesiąc temu
rodzic
commit
51318d5e68

+ 6 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractServiceAdj.java

@@ -580,8 +580,12 @@ public class contractServiceAdj {
                         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.getDayOfMonth()).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
-                        ratio = BigDecimal.ONE.subtract(ratio);
+                        //BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.getDayOfMonth()).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
+                        // ratio = BigDecimal.ONE.subtract(ratio);
+
+                        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);
 

+ 19 - 5
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/ivtOrderController.java

@@ -674,8 +674,12 @@ public class ivtOrderController {
              */
             List<RowMap> taxCateList = DBSql.getMaps("SELECT OID,NAME,ORGID,GENERAL_TABLE_ID,EXT1,CLOSED,IS_ACTIVE FROM BO_EU_DND_GENERAL WHERE  GENERAL_TABLE_ID=44 AND ORGID=? ", new Object[]{uc.getCompanyModel().getId()});
             Map<String, BigDecimal> taxRateMap = new HashMap<>();
+            String zeroTaxTaxCateId = "";
             for (RowMap taxCate : taxCateList) {
                 taxRateMap.put(taxCate.getString("OID"), toBigDecimal(taxCate.getDouble("EXT1")));
+                if (toBigDecimal(taxCate.getDouble("EXT1")).compareTo(BigDecimal.ZERO) == 0) {
+                    zeroTaxTaxCateId = taxCate.getString("OID");
+                }
             }
 
             String[] costIdArr = costIds.split(",");
@@ -781,14 +785,25 @@ public class ivtOrderController {
                 BO purchaseOrderProduct = new BO();
                 purchaseOrderProduct.setBindId(processInstance.getId());
                 String unitCostStr = cost.getString("UNIT_COST");
-                String taxCategoryId = cost.getString("TAX_CATEGORY_ID");
+
                 int purchaseQuantity = cost.getInt("PURCHASE_QUANTITY");
 
-                if (StringUtils.isBlank(unitCostStr) || StringUtils.isBlank(taxCategoryId) || purchaseQuantity <= 0) {
-                    ivtLogger.info("无效计算参数:UNIT_COST=" + unitCostStr + ",TAX_CATEGORY_ID=" + taxCategoryId + ",PURCHASE_QUANTITY=" + purchaseQuantity);
+                if (StringUtils.isBlank(unitCostStr) || purchaseQuantity <= 0) {
+                    ivtLogger.info("无效计算参数:UNIT_COST=" + unitCostStr + ",+PURCHASE_QUANTITY=" + purchaseQuantity);
                     throw new RuntimeException("计算不含税金额失败:参数无效");
                 }
 
+                String taxCategoryId = null;
+                //增值税发票,选择是时,才需要展示税率
+                if (StringUtils.isNotBlank(cost.getString("SERVICE_ID"))) {
+                    RowMap serviceMap = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{cost.getString("SERVICE_ID")});
+                    if (serviceMap.getString("VAT_TAX").equals("1")) {
+                        taxCategoryId = cost.getString("TAX_CATEGORY_ID");
+                    } else {
+                        taxCategoryId = zeroTaxTaxCateId;
+                    }
+                }
+
                 BigDecimal taxRate = taxRateMap.get(taxCategoryId);
                 if (taxRate == null) {
                     System.err.println("未知TAX_CATEGORY_ID:" + taxCategoryId);
@@ -804,7 +819,7 @@ public class ivtOrderController {
                 purchaseOrderProduct.set("PRODUCT_ID", cost.getString("PRODUCT_ID"));
                 purchaseOrderProduct.set("QUANTITY", cost.getString("PURCHASE_QUANTITY"));
                 purchaseOrderProduct.set("UNIT_COST", cost.getString("UNIT_COST"));
-                purchaseOrderProduct.set("TAX_CATEGORY_ID", cost.getString("TAX_CATEGORY_ID"));
+                purchaseOrderProduct.set("TAX_CATEGORY_ID", zeroTaxTaxCateId);
 
                 String warehouseId = DBSql.getString("SELECT ID FROM bo_eu_dnivt_warehouse WHERE CATE_ID=2 AND ORGID=? ", new Object[]{uc.getCompanyModel().getId()});
                 if (warehouseId == null) {
@@ -812,7 +827,6 @@ public class ivtOrderController {
                     throw new RuntimeException("未查询到符合条件的仓库");
                 }
                 purchaseOrderProduct.set("WAREHOUSE_ID", warehouseId);
-
                 purchaseOrderProduct.set("NOTE", cost.getString("DESCRIPTION"));
                 purchaseOrderProduct.set("COST_TOTAL", cost.getString("EXTENDED_COST"));
                 purchaseOrderProduct.set("CONTRACT_ID", cost.getString("CONTRACT_ID"));

+ 5 - 2
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/service/PaymentPlanService.java

@@ -141,8 +141,11 @@ public class PaymentPlanService {
 
                         } else {
                             UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
-                            BigDecimal ratio = new BigDecimal(PERIOD_BEGIN_DATE.getDayOfMonth()).divide(new BigDecimal(PERIOD_BEGIN_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
-                            ratio = BigDecimal.ONE.subtract(ratio);
+
+                            // 计算“日期当天到当月月底”的天数占当月总天数的比例(2025-6-25 对应 6/30)
+                            BigDecimal ratio = new BigDecimal(PERIOD_BEGIN_DATE.lengthOfMonth() - PERIOD_BEGIN_DATE.getDayOfMonth() + 1)
+                                    .divide(new BigDecimal(PERIOD_BEGIN_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
+
                             UNIT_COST_1STMONTH = ratio.multiply(UNIT_COST_1STMONTH);
                             firstPeriodBeginDate = PERIOD_BEGIN_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                             //下月一号