diff --git a/code/springboot/newBank/src/main/java/demo/zhangjie/Qrydebit.java b/code/springboot/newBank/src/main/java/demo/zhangjie/Qrydebit.java index 60d2cf026..ec1e683a3 100644 --- a/code/springboot/newBank/src/main/java/demo/zhangjie/Qrydebit.java +++ b/code/springboot/newBank/src/main/java/demo/zhangjie/Qrydebit.java @@ -38,4 +38,30 @@ public class Qrydebit { return list; } + + + + @RequestMapping("/qryhis") + public List> qryhis(HttpServletRequest request) { + // 第一步,取下前端的字段 + String debitNo = request.getParameter("debitNo"); + String CustomerName = request.getParameter("CustomerName"); + + // 参数检查 + if (debitNo == null || CustomerName == null) { + return java.util.Collections.emptyList(); + } + + // 第二步,写sql,使用预编译语句 + String sql = "SELECT * FROM debit WHERE debitNo = ? AND CustomerName = ?"; + + // 第三步,执行sql + try { + List> list = jdbcTemplate.queryForList(sql, debitNo, CustomerName); + return list; + } catch (Exception e) { + System.err.println("查询历史记录出错: " + e.getMessage()); + return java.util.Collections.emptyList(); + } + } } diff --git a/code/springboot/newBank/src/main/java/demo/zhangjie/acceptdebit.java b/code/springboot/newBank/src/main/java/demo/zhangjie/acceptdebit.java index 300fcb257..5fe50f34d 100644 --- a/code/springboot/newBank/src/main/java/demo/zhangjie/acceptdebit.java +++ b/code/springboot/newBank/src/main/java/demo/zhangjie/acceptdebit.java @@ -6,12 +6,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.UUID; -import java.time.LocalDate; // 新增日期类 -import java.time.format.DateTimeFormatter; // 新增日期格式化类 @RestController public class acceptdebit { @@ -19,39 +20,122 @@ public class acceptdebit { @Autowired private JdbcTemplate jdbcTemplate; - @RequestMapping("/acceptdebitA") - public Object acceptdebit2(HttpServletRequest request) { + @RequestMapping("/acceptdebit") + public Map acceptDebit(HttpServletRequest request) { + Map response = new HashMap<>(); + try { + // 1. 获取所有必填字段 + String CertificatesNo = getRequiredParameter(request, "CertificatesNo"); + String debitTp = getRequiredParameter(request, "debitTp"); + String debitBank = getRequiredParameter(request, "debitBank"); + String debitAmount = getRequiredParameter(request, "debitAmount"); + String debitTerm = getRequiredParameter(request, "debitTerm"); +// String corp = request.getParameter( "corp"); + String CertificatesTp = getRequiredParameter(request, "CertificatesTp"); + String CustomerName = getRequiredParameter(request, "CustomerName"); + String CustomerGender = getRequiredParameter(request, "CustomerGender"); + String CustomerBirthday = request.getParameter( "CustomerBirthday"); + String address = getRequiredParameter(request, "address"); + String ifmaterialComplete = getRequiredParameter(request, "ifmaterialComplete"); + String paydebitTp = getRequiredParameter(request, "paydebitTp"); + String submissionTime = request.getParameter("SubmissionTime"); // 允许为空 - //第一步,取下前端的字段 - String CertificatesNo=request.getParameter("CertificatesNo");//贷款人(证件号码) - String debitTp =request.getParameter("debitTp");//贷款类型 (1-住房类、2-消费类、3-经营类) - String debitBank =request.getParameter("debitBank");//贷款银行 - String debitAmount =request.getParameter("debitAmount");//贷款金额 - String debitTerm =request.getParameter("debitTerm");//贷款期限(1-一年、2-两年、5-五年) + // 2. 参数校验 + validateCode("贷款类型", debitTp, 1,2, 3); + validateCode("贷款期限", debitTerm, 1, 2, 3); +// validateCode("性别", CustomerGender, 0, 1); + validateCode("材料状态", ifmaterialComplete, 1,2); + validateCode("还款类型", paydebitTp, 1,2,3); - UUID uuid=UUID.randomUUID(); - String fullSeq=uuid.toString(); + // 3. 生成业务数据 + String debitNo = generateDebitNo(); + LocalDateTime debitDate = parseDateTime(submissionTime); // 使用传入时间或当前时间 + LocalDate birthDate = parseBirthDate(CustomerBirthday); + // 4. 使用参数化SQL防止注入 + String sql = "INSERT INTO newbank.debit (" + + "debitNo, CertificatesNo, debitTp, debitBank, debitAmount, " + + "debitTerm, state, CertificatesTp, CustomerName, " + + "CustomerGender, CustomerBirthday, address, ifmaterialComplete, " + + "paydebitTp, SubmissionTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; - LocalDate currentDate = LocalDate.now(); // 获取当前日期 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); - String formattedDate = currentDate.format(formatter); // 格式化为字符串 + int result = jdbcTemplate.update(sql, + debitNo, + CertificatesNo, +// corp, + debitTp, + debitBank, + debitAmount, + debitTerm, - //第二步,写sql - String sql ="INSERT INTO newbank.debit\n" + - "(debitNo, CertificatesNo, corp, debitTp, debitBank, debitAmount, debitTerm, debitDate, payAmount, leftDate, state, payDate)\n" + - "VALUES('"+fullSeq+"', '"+CertificatesNo+"', NULL, '"+debitTp+"', '"+debitBank+"', '"+debitAmount+"', '"+debitTerm+"', '"+formattedDate+"', NULL, NULL, '0', NULL);"; + 0, // 初始状态为受理 + CertificatesTp, + CustomerName, + CustomerGender, + birthDate, + address, + ifmaterialComplete, + paydebitTp, + debitDate // 使用统一时间字段 + ); + // 5. 返回结果 + response.put("debitNo", debitNo); + response.put("status", 0); + response.put("success", result == 1); - //第三步,执行sql - int result=jdbcTemplate.update(sql); + } catch (IllegalArgumentException e) { + response.put("error", e.getMessage()); + response.put("success", false); + } catch (Exception e) { + response.put("error", "系统处理异常"); + response.put("success", false); + } - HashMap map = new HashMap<>(); - map.put("debitNo", fullSeq); - map.put("result", result); - //第四步,返回 - return map; + return response; + } + + private String getRequiredParameter(HttpServletRequest request, String param) { + String value = request.getParameter(param); + if (value == null || value.trim().isEmpty()) { + throw new IllegalArgumentException("缺少必要参数: " + param); + } + return value.trim(); + } + + private void validateCode(String fieldName, String value, int... validCodes) { + try { + int code = Integer.parseInt(value); + for (int valid : validCodes) { + if (code == valid) return; + } + throw new IllegalArgumentException(fieldName + "代码无效"); + } catch (NumberFormatException e) { + throw new IllegalArgumentException(fieldName + "格式错误"); + } + } + + private String generateDebitNo() { + return "LOAN-" + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE) + + "-" + UUID.randomUUID().toString().substring(0, 6).toUpperCase(); + } + private LocalDateTime parseDateTime(String datetimeStr) { + if (datetimeStr == null || datetimeStr.isEmpty()) { + return LocalDateTime.now(); + } + try { + return LocalDateTime.parse(datetimeStr, DateTimeFormatter.ISO_DATE_TIME); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("时间格式错误,请使用ISO格式(如:2023-01-01T10:00:00)"); + } } -} + private LocalDate parseBirthDate(String birthDateStr) { + try { + return LocalDate.parse(birthDateStr, DateTimeFormatter.ISO_DATE); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("生日格式错误,请使用yyyy-MM-dd格式"); + } + } +} \ No newline at end of file diff --git a/code/springboot/newBank/src/main/java/demo/zhangjie/approvalsubmit.java b/code/springboot/newBank/src/main/java/demo/zhangjie/approvalsubmit.java index c0d43427c..7dfce35e9 100644 --- a/code/springboot/newBank/src/main/java/demo/zhangjie/approvalsubmit.java +++ b/code/springboot/newBank/src/main/java/demo/zhangjie/approvalsubmit.java @@ -131,7 +131,7 @@ public class approvalsubmit { } // 3. 查询贷款信息(使用悲观锁保证数据一致性) - String querySql = "SELECT debitAmount, state FROM debit WHERE debitNo = ? AND CertificatesNo = ? FOR UPDATE"; + String querySql = "SELECT debitAmount, state,submissionTime FROM debit WHERE debitNo = ? AND CertificatesNo = ? FOR UPDATE"; List> records = jdbcTemplate.queryForList( querySql, debitNo,