|
|
@@ -56,11 +56,14 @@ public class contractServiceAdj {
|
|
|
* @return
|
|
|
*/
|
|
|
public String editServiceSale(UserContext uc, String serviceId, String remark) {
|
|
|
- RowMap contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='未执行' ", new Object[]{serviceId});
|
|
|
|
|
|
- //存在未完成的调整单,继续编辑
|
|
|
- if (contractService != null) {
|
|
|
- return contractService.getString("BINDID");
|
|
|
+ RowMap contractService = null;
|
|
|
+ if (remark == null || !remark.equals("修改结束日期")) {
|
|
|
+ contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='未执行' ", new Object[]{serviceId});
|
|
|
+ //存在未完成的调整单,继续编辑
|
|
|
+ if (contractService != null) {
|
|
|
+ return contractService.getString("BINDID");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='已执行' ORDER BY CREATEDATE DESC ", new Object[]{serviceId});
|
|
|
@@ -101,7 +104,7 @@ public class contractServiceAdj {
|
|
|
|
|
|
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});
|
|
|
+ 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 AND a.CONTRACT_SERVICE_ID=?", new Object[]{serviceId});
|
|
|
}
|
|
|
|
|
|
return contractInstance.getId();
|
|
|
@@ -123,6 +126,37 @@ public class contractServiceAdj {
|
|
|
//合同服务
|
|
|
BO orgContractService = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", contractService.getString("CONTRACT_SERVICE_ID"));
|
|
|
|
|
|
+ LocalDate YS_EFFECTIVE_DATE = EFFECTIVE_DATE;
|
|
|
+ LocalDate YS_END_DATE = EFFECTIVE_END_DATE;
|
|
|
+ String CALC_METHOD_1STPERIOD = contractService.getString("CALC_METHOD_1STPERIOD");
|
|
|
+
|
|
|
+ if (CALC_METHOD_1STPERIOD.equals("4598") || CALC_METHOD_1STPERIOD.equals("4595") || CALC_METHOD_1STPERIOD.equals("4592")) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //固定价格,按照整个月计算
|
|
|
+ if (orgContractService.getString("FIXED_PRICE").equals("1")) {
|
|
|
+ //需要判断是当月1号,还是下月1号 合同开始日期
|
|
|
+
|
|
|
+ String minPERIOD_BEGIN_DATE = DBSql.getString("select min(PERIOD_BEGIN_DATE) PERIOD_BEGIN_DATE from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where CONTRACT_SERVICE_ID=?", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
|
|
|
+
|
|
|
+ minPERIOD_BEGIN_DATE = minPERIOD_BEGIN_DATE.substring(0, 10);
|
|
|
+ if (minPERIOD_BEGIN_DATE.compareTo(LocalDateYYYYMMDD(EFFECTIVE_DATE)) >= 0) {
|
|
|
+ EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
|
|
|
+ } else {
|
|
|
+ if (DBSql.getInt("select count(1) CNT from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where PERIOD_BEGIN_DATE<? and CONTRACT_SERVICE_ID=?", new Object[]{LocalDateYYYYMMDD(EFFECTIVE_DATE), contractService.get("CONTRACT_SERVICE_ID")}) > 0 && EFFECTIVE_DATE.getDayOfMonth() > 1) {
|
|
|
+ //下月1号
|
|
|
+ EFFECTIVE_DATE = (EFFECTIVE_DATE.plusMonths(1)).withDayOfMonth(1);
|
|
|
+ } else {
|
|
|
+ EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
|
|
|
+ }
|
|
|
+ YS_EFFECTIVE_DATE = EFFECTIVE_DATE;
|
|
|
+ }
|
|
|
+
|
|
|
+ EFFECTIVE_END_DATE = EFFECTIVE_END_DATE.withDayOfMonth(EFFECTIVE_END_DATE.lengthOfMonth()); //当月最后一天;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
//生效日期之前的一次调整
|
|
|
RowMap lastContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST where CONTRACT_SERVICE_ID=? and EFFECTIVE_DATE <=? and IS_EFFECTIVE='已执行' order by EFFECTIVE_DATE desc", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
|
|
|
|
|
|
@@ -197,7 +231,7 @@ public class contractServiceAdj {
|
|
|
|
|
|
}
|
|
|
|
|
|
- String CALC_METHOD_1STPERIOD = contractService.getString("CALC_METHOD_1STPERIOD");
|
|
|
+
|
|
|
//获取服务周期
|
|
|
List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, EFFECTIVE_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, CALC_METHOD_1STPERIOD, "4638", contractService.getString("MONTH_1STQUARTER"));
|
|
|
|
|
|
@@ -225,6 +259,10 @@ public class contractServiceAdj {
|
|
|
sbsList = Arrays.asList(serviceIds.split(","));
|
|
|
}
|
|
|
|
|
|
+ //周期原来的开始日期和结束日期
|
|
|
+ //periodList.get(0).setPeriodBeginDate(YS_EFFECTIVE_DATE);
|
|
|
+ periodList.get(periodList.size() - 1).setPeriodEndDate(YS_END_DATE);
|
|
|
+
|
|
|
//首月+3个月、首月+6个月、首月+12个月 的情况,需要把前两条 合并成一条
|
|
|
if (periodList.size() > 1) {
|
|
|
if (CALC_METHOD_1STPERIOD.equals("4597") || CALC_METHOD_1STPERIOD.equals("4594") || CALC_METHOD_1STPERIOD.equals("4591")) {
|
|
|
@@ -325,7 +363,10 @@ public class contractServiceAdj {
|
|
|
BigDecimal result = SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths), 4, // 精度:保留2位小数
|
|
|
RoundingMode.HALF_UP // 舍入模式:四舍五入
|
|
|
);
|
|
|
- orgContractService.set("SERVICE_UNIT_PRICE", result);
|
|
|
+ // orgContractService.set("SERVICE_UNIT_PRICE", result);
|
|
|
+
|
|
|
+ orgContractService.set("UNIT_PRICE_MONTH", 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")}); //税种
|
|
|
|
|
|
@@ -339,6 +380,9 @@ public class contractServiceAdj {
|
|
|
|
|
|
orgContractService.set("UNIT_PRICE_NOTAX", SERVICE_UNIT_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP));
|
|
|
|
|
|
+ //月不含税单价 UNIT_PRICE_MONTH_NOTAX
|
|
|
+ orgContractService.set("UNIT_PRICE_MONTH_NOTAX", SERVICE_UNIT_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP).divide(BigDecimal.valueOf(periodMonths), 4, BigDecimal.ROUND_HALF_UP));
|
|
|
+
|
|
|
//周期不含税总价 TOTAL_PRICE_NOTAX
|
|
|
orgContractService.set("TOTAL_PRICE_NOTAX", SERVICE_TOTAL_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP));
|
|
|
} else {
|
|
|
@@ -483,13 +527,18 @@ public class contractServiceAdj {
|
|
|
* @return
|
|
|
*/
|
|
|
public String editServicePurchase(UserContext uc, String serviceId, String remark) {
|
|
|
- RowMap contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='未执行' ", new Object[]{serviceId});
|
|
|
|
|
|
- //存在未完成的调整单,继续编辑
|
|
|
- if (contractService != null) {
|
|
|
- return contractService.getString("BINDID");
|
|
|
+ RowMap contractService = null;
|
|
|
+ if (remark == null || !remark.equals("修改结束日期")) {
|
|
|
+ contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='未执行' ", new Object[]{serviceId});
|
|
|
+
|
|
|
+ //存在未完成的调整单,继续编辑
|
|
|
+ if (contractService != null) {
|
|
|
+ return contractService.getString("BINDID");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='已执行' ORDER BY CREATEDATE DESC ", new Object[]{serviceId});
|
|
|
|
|
|
String processDefId = "obj_b147ad05008546058736a06bc6205313";//采购
|
|
|
@@ -580,7 +629,7 @@ public class contractServiceAdj {
|
|
|
EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE CONTRACT_SERVICE_ID=? AND PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
|
|
|
EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
|
|
|
EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
|
|
|
- // EFFECTIVE_DATE1 = EFFECTIVE_DATE1.plusDays(1);
|
|
|
+ // EFFECTIVE_DATE1 = EFFECTIVE_DATE1.plusDays(1);
|
|
|
} else {
|
|
|
EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
|
|
|
|
|
|
@@ -677,6 +726,36 @@ public class contractServiceAdj {
|
|
|
//合同服务
|
|
|
BO orgContractService = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", contractService.getString("CONTRACT_SERVICE_ID"));
|
|
|
|
|
|
+
|
|
|
+ LocalDate YS_EFFECTIVE_DATE = EFFECTIVE_DATE;
|
|
|
+ LocalDate YS_END_DATE = EFFECTIVE_END_DATE;
|
|
|
+
|
|
|
+ if (PURCHASE_CALC_METHOD_1STPERIOD.equals("4598") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4595") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4592")) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //固定价格,按照整个月计算
|
|
|
+ if (orgContractService.getString("FIXED_PRICE").equals("1")) {
|
|
|
+ //需要判断是当月1号,还是下月1号 合同开始日期
|
|
|
+
|
|
|
+ String minPERIOD_BEGIN_DATE = DBSql.getString("select min(PERIOD_BEGIN_DATE) PERIOD_BEGIN_DATE from " + boName + " where CONTRACT_SERVICE_ID=?", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
|
|
|
+
|
|
|
+ minPERIOD_BEGIN_DATE = minPERIOD_BEGIN_DATE.substring(0, 10);
|
|
|
+ if (minPERIOD_BEGIN_DATE.compareTo(LocalDateYYYYMMDD(EFFECTIVE_DATE)) >= 0) {
|
|
|
+ EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
|
|
|
+ } else {
|
|
|
+ if (DBSql.getInt("select count(1) CNT from " + boName + " where PERIOD_BEGIN_DATE<? and CONTRACT_SERVICE_ID=?", new Object[]{LocalDateYYYYMMDD(EFFECTIVE_DATE), contractService.get("CONTRACT_SERVICE_ID")}) > 0 && EFFECTIVE_DATE.getDayOfMonth() > 1) {
|
|
|
+ //下月1号
|
|
|
+ EFFECTIVE_DATE = (EFFECTIVE_DATE.plusMonths(1)).withDayOfMonth(1);
|
|
|
+ } else {
|
|
|
+ EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
|
|
|
+ }
|
|
|
+ YS_EFFECTIVE_DATE = EFFECTIVE_DATE;
|
|
|
+ }
|
|
|
+
|
|
|
+ EFFECTIVE_END_DATE = EFFECTIVE_END_DATE.withDayOfMonth(EFFECTIVE_END_DATE.lengthOfMonth()); //当月最后一天;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//生效日期之前的一次调整
|
|
|
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)});
|
|
|
|
|
|
@@ -708,7 +787,6 @@ public class contractServiceAdj {
|
|
|
BigDecimal COST_1STMONTH = null;
|
|
|
LocalDate START_DATE = EFFECTIVE_DATE;
|
|
|
|
|
|
-
|
|
|
//获取第一笔
|
|
|
//首月成本
|
|
|
if (PURCHASE_CALC_METHOD_1STPERIOD.equals("4598") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4595") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4592")) {
|
|
|
@@ -723,6 +801,11 @@ public class contractServiceAdj {
|
|
|
if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
|
|
|
teshuchuli = true;
|
|
|
teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
|
|
|
+
|
|
|
+ if (orgContractService.getString("FIXED_PRICE").equals("1")) {
|
|
|
+ teshuchuliBeginDate = LocalDateYYYYMMDD(YS_EFFECTIVE_DATE);
|
|
|
+ }
|
|
|
+
|
|
|
SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
|
|
|
SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
|
|
|
|
|
|
@@ -817,6 +900,8 @@ public class contractServiceAdj {
|
|
|
|
|
|
if (periodList != null && periodList.size() > 0) {
|
|
|
|
|
|
+ periodList.get(periodList.size() - 1).setPeriodEndDate(YS_END_DATE);
|
|
|
+
|
|
|
int i = 0;
|
|
|
for (PeriodCalculationUtil.Period period : periodList) {
|
|
|
i++;
|