From c1be9265f173f1b3873a3056d2106741a791dd51 Mon Sep 17 00:00:00 2001 From: weiyichi Date: Sun, 6 Apr 2025 16:38:31 +0800 Subject: [PATCH 1/3] no message --- .../weiyichi/controller/TranferAccount.java | 172 ++++++++++++++++++ .../java/demo/weiyichi/model/TransferDTO.java | 70 ++----- 2 files changed, 192 insertions(+), 50 deletions(-) create mode 100644 code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java diff --git a/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java b/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java new file mode 100644 index 000000000..df785b550 --- /dev/null +++ b/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java @@ -0,0 +1,172 @@ +package demo.weiyichi.controller; + + +import demo.weiyichi.model.RecordTable; +import demo.weiyichi.model.TransferDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.http.ResponseEntity; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/weiyichi") +public class tranferAccount { + @Autowired + private JdbcTemplate jdbcTemplate; + private Boolean verifyAccountPassword(String cardNo, String password) { + String sql = "SELECT * FROM account_tab WHERE cardNo = ? AND password = ?"; + return !jdbcTemplate.queryForList(sql, cardNo, password).isEmpty(); + } + + // 查询账户信息 + private List> getAccount(String cardNo) { + String sql = "SELECT * FROM account_tab WHERE cardNo = ?"; + return jdbcTemplate.queryForList(sql, cardNo); + } + + // 生成流水号 + private String getRecordNo(String staffNo, String organiNm) { + String formattedTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String sql = "SELECT COUNT(*) FROM recordtable"; + int count = jdbcTemplate.queryForObject(sql, Integer.class) + 1; + String sequence = String.format("%06d", count); + return formattedTime + organiNm + staffNo + sequence; + } + + // 保存流水记录 + private void saveRecordTable(RecordTable record) { + String sql = "INSERT INTO recordtable (date, cardNo, money, serviceTy, balance, recordNo) VALUES (?, ?, ?, ?, ?, ?)"; + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + jdbcTemplate.update(sql, date, record.getCardNo(), record.getMoney(), record.getServiceTy(), record.getBalance(), record.getRecordNo()); + } + // 转账接口 + @PostMapping("/transfer") + @Transactional + public ResponseEntity transfer(@RequestBody TransferDTO transferDTO) { + // 验证转出账户 + if (!verifyAccountPassword(transferDTO.getFromCardNo(), transferDTO.getPassword())) { + return ResponseEntity.badRequest().body("密码错误"); + } + + // 查询转出账户 + List> fromAccount = getAccount(transferDTO.getFromCardNo()); + if (CollectionUtils.isEmpty(fromAccount)) { + return ResponseEntity.badRequest().body("转出账户不存在"); + } + Double fromBalance = Double.parseDouble(fromAccount.get(0).get("balance").toString()); + + // 验证余额 + if (fromBalance < transferDTO.getMoney()) { + return ResponseEntity.badRequest().body("余额不足"); + } + + // 查询转入账户 + List> toAccount = getAccount(transferDTO.getToCardNo()); + if (CollectionUtils.isEmpty(toAccount)) { + return ResponseEntity.badRequest().body("转入账户不存在"); + } + + // 更新转出账户 + String updateFromSql = "UPDATE account_tab SET balance = balance - ? WHERE cardNo = ?"; + jdbcTemplate.update(updateFromSql, transferDTO.getMoney(), transferDTO.getFromCardNo()); + + // 更新转入账户 + String updateToSql = "UPDATE account_tab SET balance = balance + ? WHERE cardNo = ?"; + jdbcTemplate.update(updateToSql, transferDTO.getMoney(), transferDTO.getToCardNo()); + + // 生成流水记录(转出) + createTransferRecord(transferDTO.getFromCardNo(), transferDTO.getMoney(), "2", + Double.parseDouble(fromAccount.get(0).get("balance").toString()) - transferDTO.getMoney(), + transferDTO.getStaffNo(), transferDTO.getOrganiNm()); + + // 生成流水记录(转入) + createTransferRecord(transferDTO.getToCardNo(), transferDTO.getMoney(), "1", + Double.parseDouble(toAccount.get(0).get("balance").toString()) + transferDTO.getMoney(), + transferDTO.getStaffNo(), transferDTO.getOrganiNm()); + + return ResponseEntity.ok("转账成功"); + } + + private void createTransferRecord(String cardNo, Double amount, String serviceTy, + Double balance, String staffNo, String organiNm) { + RecordTable record = new RecordTable(); + record.setCardNo(cardNo); + record.setMoney(amount); + record.setServiceTy(serviceTy); + record.setBalance(balance); + record.setRecordNo(getRecordNo(staffNo, organiNm)); + saveRecordTable(record); + } + @GetMapping("/getTransactions") + public List> getTransactions( + @RequestParam String cardNo, + @RequestParam(required = false) String startDate, + @RequestParam(required = false) String endDate) { + + StringBuilder sql = new StringBuilder( + "SELECT date, money, serviceTy, balance, recordNo FROM recordtable WHERE cardNo = ?"); + + List params = new ArrayList<>(); + params.add(cardNo); + + if (StringUtils.hasText(startDate)) { + sql.append(" AND date >= ?"); + params.add(startDate + " 00:00:00"); + } + if (StringUtils.hasText(endDate)) { + sql.append(" AND date <= ?"); + params.add(endDate + " 23:59:59"); + } + sql.append(" ORDER BY date DESC"); + + return jdbcTemplate.queryForList(sql.toString(), params.toArray()); + } + + @GetMapping("/getBalance") + public ResponseEntity getBalance(@RequestParam String cardNo) { + String sql = "SELECT balance FROM account_tab WHERE cardNo = ?"; + try { + Double balance = jdbcTemplate.queryForObject(sql, Double.class, cardNo); + return ResponseEntity.ok(balance); + } catch (EmptyResultDataAccessException e) { + return ResponseEntity.notFound().build(); + } + } + @PostMapping("/closeAccount") + public ResponseEntity closeAccount( + @RequestParam String cardNo, + @RequestParam String password) { + + // 验证账户 + if (!verifyAccountPassword(cardNo, password)) { + return ResponseEntity.badRequest().body("密码错误"); + } + + // 检查余额 + Double balance = jdbcTemplate.queryForObject( + "SELECT balance FROM account_tab WHERE cardNo = ?", Double.class, cardNo); + + if (balance > 0) { + return ResponseEntity.badRequest().body("账户余额不为零,请先结清"); + } + + // 更新账户状态 + int updated = jdbcTemplate.update( + "UPDATE account_tab SET status = '2' WHERE cardNo = ?", cardNo); + + if (updated > 0) { + return ResponseEntity.ok("销户成功"); + } + return ResponseEntity.badRequest().body("销户失败"); + } +} \ No newline at end of file diff --git a/code/springboot/newBank/src/main/java/demo/weiyichi/model/TransferDTO.java b/code/springboot/newBank/src/main/java/demo/weiyichi/model/TransferDTO.java index dcd876072..e0265a40f 100644 --- a/code/springboot/newBank/src/main/java/demo/weiyichi/model/TransferDTO.java +++ b/code/springboot/newBank/src/main/java/demo/weiyichi/model/TransferDTO.java @@ -4,54 +4,24 @@ package demo.weiyichi.model; * 转账操作数据传输对象 */ public class TransferDTO { - /** - * 转出账户卡号 - */ - private String outCardNo; - /** - * 转入账户卡号 - */ - private String inCardNo; - /** - * 转账金额 - */ - private Double amount; - /** - * 转出账户密码 - */ - private String password; - - - // Getter 和 Setter 方法 - public String getOutCardNo() { - return outCardNo; - } - - public void setOutCardNo(String outCardNo) { - this.outCardNo = outCardNo; - } - - public String getInCardNo() { - return inCardNo; - } - - public void setInCardNo(String inCardNo) { - this.inCardNo = inCardNo; - } - - public Double getAmount() { - return amount; - } - - public void setAmount(Double amount) { - this.amount = amount; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } + private String fromCardNo; // 转出卡号 + private String toCardNo; // 转入卡号 + private Double money; // 转账金额 + private String password; // 交易密码 + private String staffNo; // 员工编号 + private String organiNm; // 机构名称 + + // getters and setters + public String getFromCardNo() { return fromCardNo; } + public void setFromCardNo(String fromCardNo) { this.fromCardNo = fromCardNo; } + public String getToCardNo() { return toCardNo; } + public void setToCardNo(String toCardNo) { this.toCardNo = toCardNo; } + public Double getMoney() { return money; } + public void setMoney(Double money) { this.money = money; } + public String getPassword() { return password; } + public void setPassword(String password) { this.password = password; } + public String getStaffNo() { return staffNo; } + public void setStaffNo(String staffNo) { this.staffNo = staffNo; } + public String getOrganiNm() { return organiNm; } + public void setOrganiNm(String organiNm) { this.organiNm = organiNm; } } \ No newline at end of file From 4c9d032ca42abe7e1989ea999e87748c98c44ef5 Mon Sep 17 00:00:00 2001 From: weiyichi Date: Sun, 6 Apr 2025 16:48:59 +0800 Subject: [PATCH 2/3] no message --- .../src/main/java/demo/weiyichi/controller/TranferAccount.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java b/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java index df785b550..9ee7b97e5 100644 --- a/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java +++ b/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java @@ -20,7 +20,7 @@ import java.util.Map; @RestController @RequestMapping("/weiyichi") -public class tranferAccount { +public class TranferAccount { @Autowired private JdbcTemplate jdbcTemplate; private Boolean verifyAccountPassword(String cardNo, String password) { From a5400fda8b0db729dc7a22af2a6f7a5b923fd6fe Mon Sep 17 00:00:00 2001 From: weiyichi Date: Sun, 6 Apr 2025 16:50:22 +0800 Subject: [PATCH 3/3] no message --- .../weiyichi/controller/TransferAccount.java | 178 ------------------ 1 file changed, 178 deletions(-) delete mode 100644 code/springboot/newBank/src/main/java/demo/weiyichi/controller/TransferAccount.java diff --git a/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TransferAccount.java b/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TransferAccount.java deleted file mode 100644 index 649eb5e75..000000000 --- a/code/springboot/newBank/src/main/java/demo/weiyichi/controller/TransferAccount.java +++ /dev/null @@ -1,178 +0,0 @@ -package demo.weiyichi.controller; - - -import demo.weiyichi.model.AccountTab; -import demo.weiyichi.model.ApiResponse; -import demo.weiyichi.model.RecordTable; -import demo.weiyichi.model.WithdrawMoneyDTO; -import demo.weiyichi.model.TransferDTO; -import demo.weiyichi.model.QueryDTO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.EmptyResultDataAccessException; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.math.BigDecimal; - -@RestController -@RequestMapping("/weiyichi") -public class transferAccount { - @Autowired - private JdbcTemplate jdbcTemplate; - private Boolean verifyAccountPassword(String cardNo, String password) { - String sql = "SELECT * FROM account_tab WHERE cardNo = ? AND password = ?"; - return !jdbcTemplate.queryForList(sql, cardNo, password).isEmpty(); - } - - // 查询账户信息 - private List> getAccount(String cardNo) { - String sql = "SELECT * FROM account_tab WHERE cardNo = ?"; - return jdbcTemplate.queryForList(sql, cardNo); - } - - // 生成流水号 - private String getRecordNo(String staffNo, String organiNm) { - String formattedTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - String sql = "SELECT COUNT(*) FROM recordtable"; - int count = jdbcTemplate.queryForObject(sql, Integer.class) + 1; - String sequence = String.format("%06d", count); - return formattedTime + organiNm + staffNo + sequence; - } - - // 保存流水记录 - private void saveRecordTable(RecordTable record) { - String sql = "INSERT INTO recordtable (date, cardNo, money, serviceTy, balance, recordNo) VALUES (?, ?, ?, ?, ?, ?)"; - String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - jdbcTemplate.update(sql, date, record.getCardNo(), record.getMoney(), record.getServiceTy(), record.getBalance(), record.getRecordNo()); - } - // 转账接口 - @PostMapping("/transfer") - @Transactional - public ResponseEntity transfer(@RequestBody TransferDTO transferDTO) { - // 验证转出账户 - if (!verifyAccountPassword(transferDTO.getFromCardNo(), transferDTO.getPassword())) { - return ResponseEntity.badRequest().body("密码错误"); - } - - // 查询转出账户 - List> fromAccount = getAccount(transferDTO.getFromCardNo()); - if (CollectionUtils.isEmpty(fromAccount)) { - return ResponseEntity.badRequest().body("转出账户不存在"); - } - Double fromBalance = Double.parseDouble(fromAccount.get(0).get("balance").toString()); - - // 验证余额 - if (fromBalance < transferDTO.getMoney()) { - return ResponseEntity.badRequest().body("余额不足"); - } - - // 查询转入账户 - List> toAccount = getAccount(transferDTO.getToCardNo()); - if (CollectionUtils.isEmpty(toAccount)) { - return ResponseEntity.badRequest().body("转入账户不存在"); - } - - // 更新转出账户 - String updateFromSql = "UPDATE account_tab SET balance = balance - ? WHERE cardNo = ?"; - jdbcTemplate.update(updateFromSql, transferDTO.getMoney(), transferDTO.getFromCardNo()); - - // 更新转入账户 - String updateToSql = "UPDATE account_tab SET balance = balance + ? WHERE cardNo = ?"; - jdbcTemplate.update(updateToSql, transferDTO.getMoney(), transferDTO.getToCardNo()); - - // 生成流水记录(转出) - createTransferRecord(transferDTO.getFromCardNo(), transferDTO.getMoney(), "2", - Double.parseDouble(fromAccount.get(0).get("balance").toString()) - transferDTO.getMoney(), - transferDTO.getStaffNo(), transferDTO.getOrganiNm()); - - // 生成流水记录(转入) - createTransferRecord(transferDTO.getToCardNo(), transferDTO.getMoney(), "1", - Double.parseDouble(toAccount.get(0).get("balance").toString()) + transferDTO.getMoney(), - transferDTO.getStaffNo(), transferDTO.getOrganiNm()); - - return ResponseEntity.ok("转账成功"); - } - - private void createTransferRecord(String cardNo, Double amount, String serviceTy, - Double balance, String staffNo, String organiNm) { - RecordTable record = new RecordTable(); - record.setCardNo(cardNo); - record.setMoney(amount); - record.setServiceTy(serviceTy); - record.setBalance(balance); - record.setRecordNo(getRecordNo(staffNo, organiNm)); - saveRecordTable(record); - } - @GetMapping("/getTransactions") - public List> getTransactions( - @RequestParam String cardNo, - @RequestParam(required = false) String startDate, - @RequestParam(required = false) String endDate) { - - StringBuilder sql = new StringBuilder( - "SELECT date, money, serviceTy, balance, recordNo FROM recordtable WHERE cardNo = ?"); - - List params = new ArrayList<>(); - params.add(cardNo); - - if (StringUtils.hasText(startDate)) { - sql.append(" AND date >= ?"); - params.add(startDate + " 00:00:00"); - } - if (StringUtils.hasText(endDate)) { - sql.append(" AND date <= ?"); - params.add(endDate + " 23:59:59"); - } - sql.append(" ORDER BY date DESC"); - - return jdbcTemplate.queryForList(sql.toString(), params.toArray()); - } - - @GetMapping("/getBalance") - public ResponseEntity getBalance(@RequestParam String cardNo) { - String sql = "SELECT balance FROM account_tab WHERE cardNo = ?"; - try { - Double balance = jdbcTemplate.queryForObject(sql, Double.class, cardNo); - return ResponseEntity.ok(balance); - } catch (EmptyResultDataAccessException e) { - return ResponseEntity.notFound().build(); - } - } - @PostMapping("/closeAccount") - public ResponseEntity closeAccount( - @RequestParam String cardNo, - @RequestParam String password) { - - // 验证账户 - if (!verifyAccountPassword(cardNo, password)) { - return ResponseEntity.badRequest().body("密码错误"); - } - - // 检查余额 - Double balance = jdbcTemplate.queryForObject( - "SELECT balance FROM account_tab WHERE cardNo = ?", Double.class, cardNo); - - if (balance > 0) { - return ResponseEntity.badRequest().body("账户余额不为零,请先结清"); - } - - // 更新账户状态 - int updated = jdbcTemplate.update( - "UPDATE account_tab SET status = '2' WHERE cardNo = ?", cardNo); - - if (updated > 0) { - return ResponseEntity.ok("销户成功"); - } - return ResponseEntity.badRequest().body("销户失败"); - } -} \ No newline at end of file