|
|
@@ -2099,10 +2099,26 @@ public class contractApproveController {
|
|
|
if(DBSql.getInt("select count(1) from wfc_task where processinstid=?",new Object[]{existingBindId})==0)
|
|
|
SDK.getProcessAPI().startById(existingBindId);
|
|
|
|
|
|
-
|
|
|
return responseObject;
|
|
|
}
|
|
|
|
|
|
+ // 新增:计算所有选中计划的PLAN_AMOUNT总和
|
|
|
+ BigDecimal requestAmountTotal = BigDecimal.ZERO;
|
|
|
+ for (String pid : planIds) {
|
|
|
+ String amountSql = "SELECT PLAN_AMOUNT FROM VIEW_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE ID = ?";
|
|
|
+ Map<String, Object> amountData = DBSql.getMap(amountSql, new Object[]{pid});
|
|
|
+ if (amountData != null && amountData.get("PLAN_AMOUNT") != null) {
|
|
|
+ // 兼容不同数字类型(BigDecimal/Double等)
|
|
|
+ if (amountData.get("PLAN_AMOUNT") instanceof BigDecimal) {
|
|
|
+ requestAmountTotal = requestAmountTotal.add((BigDecimal) amountData.get("PLAN_AMOUNT"));
|
|
|
+ } else if (amountData.get("PLAN_AMOUNT") instanceof Number) {
|
|
|
+ requestAmountTotal = requestAmountTotal.add(
|
|
|
+ BigDecimal.valueOf(((Number) amountData.get("PLAN_AMOUNT")).doubleValue())
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
String payRequestId = planId;
|
|
|
ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance(
|
|
|
"obj_8cf0923593b7465490c4e1f73e98d4d3",
|
|
|
@@ -2110,20 +2126,23 @@ public class contractApproveController {
|
|
|
"支付请求单-" + payRequestId
|
|
|
);
|
|
|
|
|
|
+ // 创建主表时设置REQUEST_AMOUNT字段(存总和)
|
|
|
BO mainPayRequestBO = new BO();
|
|
|
mainPayRequestBO.setBindId(processInstance.getId());
|
|
|
- SDK.getBOAPI().create("BO_EU_DNIVT_PAY_REQUEST", mainPayRequestBO, processInstance, uc);
|
|
|
+ mainPayRequestBO.set("REQUEST_AMOUNT", requestAmountTotal); // 关键修改:存入总和
|
|
|
|
|
|
+ SDK.getBOAPI().create("BO_EU_DNIVT_PAY_REQUEST", mainPayRequestBO, processInstance, uc);
|
|
|
SDK.getProcessAPI().start(processInstance);
|
|
|
|
|
|
String mainRecordId = mainPayRequestBO.getId();
|
|
|
String mainBindId = mainPayRequestBO.getBindId();
|
|
|
List<String> detailIds = new ArrayList<>();
|
|
|
|
|
|
+ // 明细创建逻辑保持不变
|
|
|
for (String pid : planIds) {
|
|
|
String querySql = "SELECT " +
|
|
|
"PROJECT_LOCATION, PERIOD_BEGIN_DATE, PERIOD_END_DATE, LOCATION, " +
|
|
|
- "PAY_DESC, PLAN_AMOUNT, PLAN_DATE, PAY_AMOUNT, REMARK, " +
|
|
|
+ "PAY_DESC, PLAN_AMOUNT, PURCHASE_ORDER_NO, REFERENCE_NUMBER, PLAN_DATE, PAY_AMOUNT, REMARK, " +
|
|
|
"PLAN_NO, ORDER_ID, CONTRACT_SERVICE_ID, CONTRACT_COST_ID " +
|
|
|
"FROM VIEW_EU_DNIVT_ORDER_PAYMENT_PLAN " +
|
|
|
"WHERE ID = ?";
|
|
|
@@ -2140,12 +2159,14 @@ public class contractApproveController {
|
|
|
detailBO.set("PAY_DESC", planData.get("PAY_DESC"));
|
|
|
detailBO.set("PLAN_AMOUNT", planData.get("PLAN_AMOUNT"));
|
|
|
detailBO.set("PLAN_DATE", planData.get("PLAN_DATE"));
|
|
|
- detailBO.set("AMOUNT", planData.get("PAY_AMOUNT"));
|
|
|
+ detailBO.set("AMOUNT", planData.get("PLAN_AMOUNT"));
|
|
|
detailBO.set("REMARK", planData.get("REMARK"));
|
|
|
detailBO.set("PLAN_NO", planData.get("PLAN_NO"));
|
|
|
detailBO.set("ORDER_ID", planData.get("ORDER_ID"));
|
|
|
detailBO.set("CONTRACT_SERVICE_ID", planData.get("CONTRACT_SERVICE_ID"));
|
|
|
detailBO.set("CONTRACT_COST_ID", planData.get("CONTRACT_COST_ID"));
|
|
|
+ detailBO.set("ORDER_NO", planData.get("PURCHASE_ORDER_NO"));
|
|
|
+ detailBO.set("EXTTEXT3", planData.get("REFERENCE_NUMBER"));
|
|
|
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNIVT_PAY_REQUEST_DETAIL", detailBO, uc);
|
|
|
detailIds.add(detailBO.getId());
|
|
|
@@ -2157,7 +2178,8 @@ public class contractApproveController {
|
|
|
result.put("mainRecordId", mainRecordId);
|
|
|
result.put("mainBindId", mainBindId);
|
|
|
result.put("detailRecordIds", detailIds);
|
|
|
- result.put("message", "成功创建支付请求单及" + detailIds.size() + "条明细记录。");
|
|
|
+ result.put("requestAmountTotal", requestAmountTotal); // 新增:返回总和
|
|
|
+ result.put("message", "成功创建支付请求单及" + detailIds.size() + "条明细记录,请求总金额:" + requestAmountTotal);
|
|
|
|
|
|
ResponseObject responseObject = ResponseObject.newOkResponse();
|
|
|
responseObject.setData(result);
|
|
|
@@ -2169,5 +2191,100 @@ public class contractApproveController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Mapping("com.awspaas.user.apps.donenow_ctt.getAllPaymentAmounts")
|
|
|
+ public ResponseObject getAllPaymentAmounts(UserContext uc) throws SQLException {
|
|
|
+ Connection conn = null;
|
|
|
+ try {
|
|
|
+ // 1. 执行查询(获取所有付款计划数据)
|
|
|
+ String querySql = "SELECT " +
|
|
|
+ "PLAN_AMOUNT AS 计划付款金额, " +
|
|
|
+ "PAY_AMOUNT AS 实际付款金额 " +
|
|
|
+ "FROM VIEW_EU_DNV_PAYMENT_PLAN";
|
|
|
+
|
|
|
+ List<RowMap> paymentRecords = DBSql.getMaps(querySql, new Object[]{});
|
|
|
+ System.out.println("查询到付款记录数量:" + (paymentRecords != null ? paymentRecords.size() : 0));
|
|
|
+
|
|
|
+ // 2. 处理空结果
|
|
|
+ if (paymentRecords == null || paymentRecords.isEmpty()) {
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("totalCount", 0);
|
|
|
+ result.put("message", "未找到任何付款计划数据");
|
|
|
+ ResponseObject responseObject = ResponseObject.newOkResponse();
|
|
|
+ responseObject.setData(result);
|
|
|
+ return responseObject;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 初始化连接(保持事务控制风格,此处仅查询用)
|
|
|
+ conn = DBSql.open();
|
|
|
+ conn.setAutoCommit(false); // 保持事务控制代码结构
|
|
|
+
|
|
|
+ // 4. 循环计算总额
|
|
|
+ BigDecimal totalPlan = BigDecimal.ZERO;
|
|
|
+ BigDecimal totalPay = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ for (RowMap record : paymentRecords) {
|
|
|
+ // 统一处理键值(转为大写)
|
|
|
+ for (String key : record.keySet()) {
|
|
|
+ record.put(key.toUpperCase(), record.get(key) == null ? "" : record.get(key));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取计划付款金额(处理空值和类型转换)
|
|
|
+ Double planDouble = record.getDouble("计划付款金额");
|
|
|
+ BigDecimal planAmount = planDouble != null
|
|
|
+ ? BigDecimal.valueOf(planDouble)
|
|
|
+ : BigDecimal.ZERO;
|
|
|
+
|
|
|
+ // 提取实际付款金额(处理空值和类型转换)
|
|
|
+ Double payDouble = record.getDouble("实际付款金额");
|
|
|
+ BigDecimal payAmount = payDouble != null
|
|
|
+ ? BigDecimal.valueOf(payDouble)
|
|
|
+ : BigDecimal.ZERO;
|
|
|
+
|
|
|
+ // 累加总额
|
|
|
+ totalPlan = totalPlan.add(planAmount);
|
|
|
+ totalPay = totalPay.add(payAmount);
|
|
|
+ System.out.println("累计计划付款:" + totalPlan + ",累计实际付款:" + totalPay);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 计算待付款金额(确保非负)
|
|
|
+ BigDecimal totalPending = totalPlan.subtract(totalPay);
|
|
|
+ if (totalPending.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ totalPending = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 6. 提交事务(保持代码结构完整性)
|
|
|
+ conn.commit();
|
|
|
+
|
|
|
+ // 7. 组装响应结果
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("totalPlanAmount", totalPlan);
|
|
|
+ result.put("totalPayAmount", totalPay);
|
|
|
+ result.put("totalPendingAmount", totalPending);
|
|
|
+ result.put("totalCount", paymentRecords.size());
|
|
|
+ result.put("message", "付款金额汇总完成");
|
|
|
+
|
|
|
+ ResponseObject responseObject = ResponseObject.newOkResponse();
|
|
|
+ responseObject.setData(result);
|
|
|
+ return responseObject;
|
|
|
+
|
|
|
+ } catch (SQLException e) {
|
|
|
+ // 异常回滚处理
|
|
|
+ if (conn != null && !conn.isClosed()) {
|
|
|
+ try {
|
|
|
+ conn.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ e.printStackTrace();
|
|
|
+ return ResponseObject.newErrResponse("处理失败:" + e.getMessage());
|
|
|
+ } finally {
|
|
|
+ // 关闭连接
|
|
|
+ if (conn != null && !conn.isClosed()) {
|
|
|
+ DBSql.close(conn);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|