|
|
@@ -123,8 +123,30 @@ public class contractService {
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT set IS_SDT_DEFAULT=0 where ACCOUNT_ID=?", new Object[]{contractBO.getString("ACCOUNT_ID")});
|
|
|
}
|
|
|
|
|
|
- if (idApply)
|
|
|
- SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_APPLY", contractBO);//更新合同
|
|
|
+
|
|
|
+ //2025年10月25日 生成合同编号
|
|
|
+
|
|
|
+ String contractNo = contractBO.getString("NO");
|
|
|
+ if (StringUtils.isBlank(contractNo) || contractNo.indexOf("XHT") != 0) {
|
|
|
+ contractNo = SDK.getRuleAPI().executeAtScript("@sequenceYear(@companyId_contract,5)");
|
|
|
+ String DISTRICT_ID = DBSql.getString("select DISTRICT_ID from BO_EU_DNCRM_ACCOUNT where ID=?", new Object[]{contractBO.getString("ACCOUNT_ID")});
|
|
|
+ String cssx = "SH";//城市缩写
|
|
|
+ if (StringUtils.isNotBlank(DISTRICT_ID)) {
|
|
|
+ RowMap city = DBSql.getMap("SELECT EXTTEXT1,EXTTEXT2 FROM BO_ACT_DICT_KV_ITEM WHERE DICTKEY = 'GB.ADDR' AND ITEMNO= ?", new Object[]{DISTRICT_ID});
|
|
|
+ if (city != null) {
|
|
|
+ cssx = city.getString("EXTTEXT1");
|
|
|
+ if (!cssx.contains("市")) {
|
|
|
+ cssx = city.getString("EXTTEXT2");
|
|
|
+ }
|
|
|
+ //如果 cssx="上海市" 则输出 SH
|
|
|
+ cssx = getCityAbbreviation(cssx);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ contractNo = "XHT-" + cssx + "-" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + "-" + contractNo;
|
|
|
+ contractBO.set("NO", contractNo);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (idApply) SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_APPLY", contractBO);//更新合同
|
|
|
else {
|
|
|
dn.recordFormChanges.record(uc, contractBO, "合同编辑");
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT", contractBO);
|
|
|
@@ -138,8 +160,7 @@ public class contractService {
|
|
|
|
|
|
RowMap dto = new RowMap(contractBO.asMap());//合同对象
|
|
|
|
|
|
- if (idApply)
|
|
|
- insertContract(uc, dto);//创建合同详情,用于提交后查看和修改相关配置项、工单、服务等
|
|
|
+ if (idApply) insertContract(uc, dto);//创建合同详情,用于提交后查看和修改相关配置项、工单、服务等
|
|
|
else {
|
|
|
//更新
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT_RATE set CONTRACT_ID=? where BINDID=?", new Object[]{dto.getString("ID"), dto.getString("BINDID")});
|
|
|
@@ -271,7 +292,31 @@ public class contractService {
|
|
|
//更新
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT_RATE set PROCESSDEFID=?,BINDID=?,CONTRACT_ID=? where BINDID=?", new Object[]{processDefId, contractBINDID, exitsBOID, APPLY_BINDID});
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT_MILESTONE set PROCESSDEFID=?,BINDID=?,CONTRACT_ID=? where BINDID=?", new Object[]{processDefId, contractBINDID, exitsBOID, APPLY_BINDID});
|
|
|
- DBSql.update("update BO_EU_DNCTT_CONTRACT_SERVICE set PROCESSDEFID=?,BINDID=?,CONTRACT_ID=? where BINDID=?", new Object[]{processDefId, contractBINDID, exitsBOID, APPLY_BINDID});
|
|
|
+
|
|
|
+ // DBSql.update("update BO_EU_DNCTT_CONTRACT_SERVICE set PROCESSDEFID=?,BINDID=?,CONTRACT_ID=? where BINDID=?", new Object[]{processDefId, contractBINDID, exitsBOID, APPLY_BINDID});
|
|
|
+
|
|
|
+ // 合同服务
|
|
|
+ List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").addQuery("BINDID =", APPLY_BINDID).list();
|
|
|
+ for (BO service : serviceList) {
|
|
|
+
|
|
|
+ ProcessInstance costServiceProcessInst = SDK.getProcessAPI().createBOProcessInstance("obj_58693e03feac4879901430440b42efd9", uc.getUID(), "合同服务管理");
|
|
|
+
|
|
|
+ Map<String, Object> serviceMap = service.asMap();
|
|
|
+
|
|
|
+ BO serviceBO = new BO();
|
|
|
+ for (String key : excludesArray) {
|
|
|
+ serviceMap.remove(key);
|
|
|
+ }
|
|
|
+ serviceBO.setAll(serviceMap);
|
|
|
+
|
|
|
+ serviceBO.setBindId(costServiceProcessInst.getId());
|
|
|
+ serviceBO.set("CONTRACT_ID", exitsBOID);
|
|
|
+ dn.recordFormChanges.record(uc, serviceBO, "合同服务新增");
|
|
|
+
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE", serviceBO, uc);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT_BLOCK set PROCESSDEFID=?,BINDID=?,CONTRACT_ID=? where BINDID=?", new Object[]{processDefId, contractBINDID, exitsBOID, APPLY_BINDID});
|
|
|
}
|
|
|
|
|
|
@@ -461,8 +506,7 @@ public class contractService {
|
|
|
conn.rollback();
|
|
|
|
|
|
} finally {
|
|
|
- if (conn != null)
|
|
|
- DBSql.close(conn);
|
|
|
+ if (conn != null) DBSql.close(conn);
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
@@ -1979,7 +2023,7 @@ public class contractService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- RowMap ca = DBSql.getMap("select TAX_REGION_ID,IS_TAX_EXEMPT from BO_EU_DNCRM_ACCOUNT where ID=?", new Object[]{cad.get("ACCOUNT_ID")});
|
|
|
+ RowMap ca = DBSql.getMap("select NAME,TAX_REGION_ID,IS_TAX_EXEMPT from BO_EU_DNCRM_ACCOUNT where ID=?", new Object[]{cad.get("ACCOUNT_ID")});
|
|
|
String tax_category_name = null;//税收种类
|
|
|
String tax_region_name = null;//税区
|
|
|
double tax_rate = 0;//税率
|
|
|
@@ -2005,10 +2049,24 @@ public class contractService {
|
|
|
// cad.set("EXTENDED_COST", tax_rate);
|
|
|
// cad.extended_cost = GetCost(id);
|
|
|
|
|
|
+ contractServiceLogger.info("定期服务计算税额");
|
|
|
+ contractServiceLogger.info("是否免税" + ca.get("IS_TAX_EXEMPT"));
|
|
|
+ contractServiceLogger.info(ca.getString("NAME") + cad.get("ACCOUNT_ID") + "是否免税" + ca.get("IS_TAX_EXEMPT"));
|
|
|
//是否免税
|
|
|
- if (!ca.getString("IS_TAX_EXEMPT").equals("1") && ca.get("EXTENDED_PRICE") != null && tax_rate > 0) {
|
|
|
- double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) * (1 - 1 / (1 + tax_rate));//税额
|
|
|
- cad.set("TAX_DOLLARS", tax_dollars);
|
|
|
+ if (ca.get("IS_TAX_EXEMPT") != null && ca.getString("IS_TAX_EXEMPT").equals("1")) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ contractServiceLogger.info("cad.extended_price:" + cad.get("EXTENDED_PRICE"));
|
|
|
+ contractServiceLogger.info("tax_rate:" + tax_rate);
|
|
|
+
|
|
|
+ if (cad.get("EXTENDED_PRICE") != null && tax_rate > 0) {
|
|
|
+ double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) * (1 - 1 / (1 + tax_rate));//税额
|
|
|
+ contractServiceLogger.info("cad.tax_dollars:" + tax_dollars);
|
|
|
+ //截取前四位
|
|
|
+ tax_dollars = Math.round(tax_dollars * 10000) / 10000.0;
|
|
|
+ cad.set("TAX_DOLLARS", tax_dollars);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//计费客户
|
|
|
@@ -2224,21 +2282,29 @@ public class contractService {
|
|
|
throw new RuntimeException("该服务已经生成发票,请先删除发票");
|
|
|
}
|
|
|
|
|
|
- if (bo.get("TYPE_ID").equals(cttConstant.ACCOUNT_DEDUCTION_TYPE_SERVICE)) //类型:服务
|
|
|
+ if (bo.getString("TYPE_ID").equals(String.valueOf(cttConstant.ACCOUNT_DEDUCTION_TYPE_SERVICE))) //类型:服务
|
|
|
{
|
|
|
+ /*
|
|
|
BO ccsp = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD").addQuery("CONTRACT_ID =", bo.getString("CONTRACT_ID")).addQuery("ID =", bo.getString("OBJECT_ID")).detail();
|
|
|
ccsp.set("APPROVE_AND_POST_DATE", null);
|
|
|
ccsp.set("APPROVE_AND_POST_USER_ID", null);
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", ccsp, connUpdate);
|
|
|
+ */
|
|
|
+ DBSql.update(connUpdate, "update BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD set APPROVE_AND_POST_DATE=null,APPROVE_AND_POST_USER_ID=null where ID=?", new Object[]{bo.getString("OBJECT_ID")});
|
|
|
|
|
|
- } else if (bo.get("TYPE_ID").equals(cttConstant.ACCOUNT_DEDUCTION_TYPE_INITIAL_COST)) //类型:初始费用
|
|
|
+ } else if (bo.getString("TYPE_ID").equals(String.valueOf(cttConstant.ACCOUNT_DEDUCTION_TYPE_INITIAL_COST))) //类型:初始费用
|
|
|
{
|
|
|
+ /*
|
|
|
BO ccc = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT").addQuery("ID =", bo.getString("CONTRACT_ID")).detail();
|
|
|
ccc.set("SETUP_FEE_APPROVE_AND_POST_USER_ID", null);
|
|
|
ccc.set("SETUP_FEE_APPROVE_AND_POST_DATE", null);
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT", ccc, connUpdate);
|
|
|
+
|
|
|
+ */
|
|
|
+
|
|
|
+ DBSql.update(connUpdate, "update BO_EU_DNCTT_CONTRACT set SETUP_FEE_APPROVE_AND_POST_USER_ID=null,SETUP_FEE_APPROVE_AND_POST_DATE=null where ID=?", new Object[]{bo.getString("OBJECT_ID")});
|
|
|
}
|
|
|
- bo.set("CLOSED", 1);
|
|
|
+ //bo.set("CLOSED", 1);
|
|
|
dn.recordFormChanges.record(uc, bo, "撤销定期服务");
|
|
|
SDK.getBOAPI().remove("BO_EU_DNCRM_ACCOUNT_DEDUCTION", bo.getId(), connUpdate);
|
|
|
//SDK.getBOAPI().update("BO_EU_DNCRM_ACCOUNT_DEDUCTION", bo, connUpdate);
|