소스 검색

查询联系人

HULEI 1 개월 전
부모
커밋
f3a897be63

+ 1 - 0
com.awspaas.user.apps.donenow_crm/src/com/awspaas/user/apps/donenow_crm/controller/accountController.java

@@ -474,6 +474,7 @@ public class accountController extends BaseController {
                 result.put("productId", null);
                 result.put("productName", null);
             } else {
+                result.put("contractServiceExists", true);
                 result.put("contractServiceExists", true);
                 String objectId = contractServiceInfo.get("OBJECT_ID").toString();
                 String serviceSql = "SELECT PRODUCT_ID FROM BO_EU_DNIVT_SERVICE WHERE id = ?";

+ 122 - 5
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractApproveController.java

@@ -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);
+            }
+        }
+    }
+
 }
 

+ 74 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/testForm.java

@@ -0,0 +1,74 @@
+package com.awspaas.user.apps.donenow_crm.event;
+
+import com.actionsoft.bpms.dw.design.event.DataWindowFormatSQLEventInterface;
+import com.actionsoft.bpms.dw.exec.component.DataView;
+import com.actionsoft.bpms.server.UserContext;
+import com.actionsoft.sdk.local.SDK;
+import com.actionsoft.sdk.local.api.Logger;
+import com.alibaba.fastjson.JSON;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+public class testForm implements DataWindowFormatSQLEventInterface {
+    private static final Logger LOGGER = SDK.getLogAPI().getLogger(testForm.class);
+
+    @Override
+    public String formatSQL(UserContext userContext, DataView dataView, String sql) {
+        try {
+            Map<String, Object> sqlParam = dataView.getDatagrid().getSqlParams();
+            LOGGER.info("【初始SQL】" + sql);
+            LOGGER.info("【查询参数】" + JSON.toJSONString(sqlParam));
+
+            String paramName = "SEARCH_KEY"; // 自定义参数名,需与前端保持一致
+            // 处理参数值:自动添加前后%实现模糊匹配
+            if (sqlParam.containsKey(paramName)) {
+                String paramValue = sqlParam.get(paramName).toString().trim();
+                if (!paramValue.contains("%")) {
+                    sqlParam.put(paramName, "%" + paramValue + "%");
+                    LOGGER.info("【处理后参数】" + JSON.toJSONString(sqlParam));
+                }
+            }
+
+            // 定义需要进行模糊匹配的目标字段列表
+            List<String> targetFields = Arrays.asList(
+                    "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.CONTRACT_NO",
+                    "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.CUSTOMER_NAME",
+                    "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.CONTRACT_NAME",
+                    "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.REMARK",
+                    "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.EXT_FIELD1",
+                    "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.EXT_FIELD2"
+                    // 可根据实际视图字段继续补充
+            );
+
+            if (sqlParam.containsKey(paramName)) {
+                // 移除原SQL中可能存在的单字段精确条件(示例,需根据实际SQL调整)
+                String oldCondition = "AND VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.SEARCH_FIELD = :" + paramName;
+                sql = sql.replace(oldCondition, "");
+                LOGGER.info("【删除旧条件后SQL】" + sql);
+
+                // 拼接多字段OR的模糊匹配条件
+                StringBuilder orConditions = new StringBuilder();
+                for (int i = 0; i < targetFields.size(); i++) {
+                    String field = targetFields.get(i);
+                    orConditions.append("UPPER(").append(field).append(") LIKE :").append(paramName);
+                    if (i != targetFields.size() - 1) {
+                        orConditions.append(" OR ");
+                    }
+                }
+
+                // 将多字段OR条件追加到SQL中
+                sql = sql + " AND (" + orConditions + ")";
+            }
+
+            LOGGER.info("【最终拼接后SQL】" + sql);
+
+        } catch (Exception e) {
+            LOGGER.error("SQL条件拼接失败", e);
+            e.printStackTrace();
+        }
+
+        return sql;
+    }
+}