|
|
@@ -12,6 +12,7 @@ import com.awspaas.user.apps.donenow_ctt.PeriodCalculationUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.sql.Connection;
|
|
|
import java.sql.SQLException;
|
|
|
import java.time.LocalDate;
|
|
|
@@ -122,6 +123,26 @@ public class contractServiceAdj {
|
|
|
|
|
|
String PERIOD_TYPE = contractService.getString("PERIOD_TYPE");
|
|
|
|
|
|
+ //一次性收费
|
|
|
+ if (PERIOD_TYPE.equals("609")) {
|
|
|
+
|
|
|
+ BO periodBO = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD").addQuery("CONTRACT_SERVICE_ID =", orgContractService.getId()).detail();
|
|
|
+
|
|
|
+ periodBO.set("PERIOD_PRICE", contractService.get("UNIT_PRICE"));
|
|
|
+ periodBO.set("PARTYA_PERIOD_PRICE", contractService.get("TOTAL_PRICE"));
|
|
|
+ periodBO.set("PERIOD_ADJUSTED_PRICE", contractService.get("QUANTITY"));
|
|
|
+ SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", periodBO);
|
|
|
+
|
|
|
+ orgContractService.set("UNIT_PRICE", contractService.get("UNIT_PRICE"));
|
|
|
+ orgContractService.set("TOTAL_PRICE", contractService.get("TOTAL_PRICE"));
|
|
|
+ orgContractService.set("QUANTITY", contractService.get("QUANTITY"));
|
|
|
+ SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", orgContractService);
|
|
|
+
|
|
|
+ DBSql.update("UPDATE bo_eu_dnctt_contract_service_period a SET a.PERIOD_COST =( SELECT SUM(b.PLAN_AMOUNT) FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN b WHERE a.CONTRACT_SERVICE_ID=? AND b.CONTRACT_SERVICE_ID = a.CONTRACT_SERVICE_ID) WHERE a.CONTRACT_SERVICE_ID=? AND EXISTS ( SELECT 1 FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN b JOIN bo_eu_dnctt_contract_service c ON b.CONTRACT_SERVICE_ID = c.ID WHERE b.CONTRACT_SERVICE_ID = a.CONTRACT_SERVICE_ID AND c.PERIOD_TYPE = 609 AND c.ID=?)", new Object[]{orgContractService.getId(), orgContractService.getId(), orgContractService.getId()});
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
Connection conn = null;
|
|
|
try {
|
|
|
conn = DBSql.open();
|
|
|
@@ -269,7 +290,7 @@ public class contractServiceAdj {
|
|
|
|
|
|
//计算各种不含税金额
|
|
|
// 确定周期对应的月数
|
|
|
- int periodMonths;
|
|
|
+ int periodMonths = 1;
|
|
|
switch (contractService.getString("PERIOD_TYPE")) {
|
|
|
case "610":
|
|
|
periodMonths = 1; // 按月
|
|
|
@@ -290,14 +311,21 @@ public class contractServiceAdj {
|
|
|
|
|
|
|
|
|
//月单价 UNIT_PRICE_MONTH
|
|
|
- orgContractService.set("SERVICE_UNIT_PRICE", SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths)));
|
|
|
+ // orgContractService.set("SERVICE_UNIT_PRICE", SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths)));
|
|
|
+
|
|
|
+ BigDecimal result = SERVICE_UNIT_PRICE.divide(
|
|
|
+ BigDecimal.valueOf(periodMonths),
|
|
|
+ 4, // 精度:保留2位小数
|
|
|
+ RoundingMode.HALF_UP // 舍入模式:四舍五入
|
|
|
+ );
|
|
|
+ orgContractService.set("SERVICE_UNIT_PRICE", result);
|
|
|
|
|
|
RowMap taxCate = DBSql.getMap("SELECT OID,NAME,ORGID,GENERAL_TABLE_ID,EXT1,CLOSED,IS_ACTIVE FROM BO_EU_DND_GENERAL WHERE GENERAL_TABLE_ID=44 AND ORGID=? AND OID=?", new Object[]{uc.getCompanyModel().getId(), orgContractService.getString("TAX_CATEGORY_ID")}); //税种
|
|
|
|
|
|
if (taxCate != null) {
|
|
|
BigDecimal taxRate = new BigDecimal(taxCate.getString("EXT1"));
|
|
|
//月不含税单价 UNIT_PRICE_MONTH_NOTAX
|
|
|
- BigDecimal taxExcluded = SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths)).divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP); // 保留4位小数
|
|
|
+ BigDecimal taxExcluded = SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths), 4, BigDecimal.ROUND_HALF_UP).divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP); // 保留4位小数
|
|
|
orgContractService.set("SERVICE_UNIT_PRICE_NOTAX", taxExcluded);
|
|
|
|
|
|
//周期不含税单价 UNIT_PRICE_NOTAX
|
|
|
@@ -319,7 +347,7 @@ public class contractServiceAdj {
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", orgContractService, conn);
|
|
|
|
|
|
conn.commit();
|
|
|
- return true;
|
|
|
+
|
|
|
} catch (SQLException e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
@@ -328,11 +356,15 @@ public class contractServiceAdj {
|
|
|
} catch (SQLException e1) {
|
|
|
e1.printStackTrace();
|
|
|
}
|
|
|
- return false;
|
|
|
+
|
|
|
} finally {
|
|
|
if (conn != null)
|
|
|
DBSql.close(conn);
|
|
|
}
|
|
|
+
|
|
|
+ //分摊采购成本
|
|
|
+ paySplitServiceMonth(uc, orgContractService.getId());
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -344,6 +376,11 @@ public class contractServiceAdj {
|
|
|
*/
|
|
|
public String editServiceSaleEndDate(UserContext uc, String serviceId, LocalDate newEndDate) {
|
|
|
|
|
|
+ //一次性收费,无需修改
|
|
|
+ if (DBSql.getString("select PERIOD_TYPE from BO_EU_DNCTT_CONTRACT_SERVICE where CONTRACT_SERVICE_ID=?", new Object[]{serviceId}).equals("609")) {
|
|
|
+ return "无需修改";
|
|
|
+ }
|
|
|
+
|
|
|
RowMap lastServicePeriod = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{serviceId});//最后一笔服务周期
|
|
|
|
|
|
|
|
|
@@ -485,13 +522,16 @@ public class contractServiceAdj {
|
|
|
* @return
|
|
|
*/
|
|
|
public String editServicePurchaseEndDate(UserContext uc, String serviceId, LocalDate newEndDate) {
|
|
|
-
|
|
|
RowMap lastServicePeriod = DBSql.getMap("SELECT * FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{serviceId});//最后一笔服务周期
|
|
|
|
|
|
+ //一次性收费,无需修改
|
|
|
+ if (DBSql.getString("select PURCHASE_PERIOD_TYPE from BO_EU_DNCTT_CONTRACT_SERVICE where CONTRACT_SERVICE_ID=?", new Object[]{serviceId}).equals("609")) {
|
|
|
+ return "无需修改";
|
|
|
+ }
|
|
|
+
|
|
|
LocalDate PERIOD_BEGIN_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_BEGIN_DATE"), LocalDate.class);
|
|
|
LocalDate PERIOD_END_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_END_DATE"), LocalDate.class);
|
|
|
|
|
|
-
|
|
|
if (PERIOD_END_DATE.equals(newEndDate))
|
|
|
return "无需修改";
|
|
|
|
|
|
@@ -602,7 +642,8 @@ public class contractServiceAdj {
|
|
|
if (StringUtils.isBlank(boName)) {
|
|
|
boName = "BO_EU_DNIVT_ORDER_PAYMENT_PLAN";
|
|
|
} else {
|
|
|
- PERIOD_TYPE = "610";//按月
|
|
|
+ if (PERIOD_TYPE.equals("609") == false)
|
|
|
+ PERIOD_TYPE = "610";//按月
|
|
|
}
|
|
|
|
|
|
LocalDate EFFECTIVE_DATE = getLocalDate(contractService.get("PURCHASE_START_DATE"));//服务生效日期
|
|
|
@@ -620,7 +661,11 @@ public class contractServiceAdj {
|
|
|
conn.setAutoCommit(false);
|
|
|
|
|
|
//生效日期之后的服务周期删除
|
|
|
- DBSql.update(conn, "DELETE FROM " + boName + " WHERE CONTRACT_SERVICE_ID=? and PERIOD_BEGIN_DATE >=? and (PAY_AMOUNT=0 or PAY_AMOUNT is NULL)", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
|
|
|
+ if (PERIOD_TYPE.equals("609")) {
|
|
|
+ DBSql.update(conn, "DELETE FROM " + boName + " WHERE CONTRACT_SERVICE_ID=? ", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
|
|
|
+ } else {
|
|
|
+ DBSql.update(conn, "DELETE FROM " + boName + " WHERE CONTRACT_SERVICE_ID=? and PERIOD_BEGIN_DATE >=? and (PAY_AMOUNT=0 or PAY_AMOUNT is NULL)", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
|
|
|
+ }
|
|
|
|
|
|
String lastPeriodId = DBSql.getString(conn, "select ID from " + boName + " where CONTRACT_SERVICE_ID=? and PERIOD_END_DATE >=? order by PERIOD_BEGIN_DATE asc", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
|
|
|
|