Browse Source

no message

master
weiyichi 2 weeks ago
parent
commit
c1be9265f1
  1. 172
      code/springboot/newBank/src/main/java/demo/weiyichi/controller/TranferAccount.java
  2. 70
      code/springboot/newBank/src/main/java/demo/weiyichi/model/TransferDTO.java

172
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<Map<String, Object>> 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<String> transfer(@RequestBody TransferDTO transferDTO) {
// 验证转出账户
if (!verifyAccountPassword(transferDTO.getFromCardNo(), transferDTO.getPassword())) {
return ResponseEntity.badRequest().body("密码错误");
}
// 查询转出账户
List<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> 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<Object> 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<Double> 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<String> 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("销户失败");
}
}

70
code/springboot/newBank/src/main/java/demo/weiyichi/model/TransferDTO.java

@ -4,54 +4,24 @@ package demo.weiyichi.model;
* 转账操作数据传输对象 * 转账操作数据传输对象
*/ */
public class TransferDTO { public class TransferDTO {
/** private String fromCardNo; // 转出卡号
* 转出账户卡号 private String toCardNo; // 转入卡号
*/ private Double money; // 转账金额
private String outCardNo; private String password; // 交易密码
/** private String staffNo; // 员工编号
* 转入账户卡号 private String organiNm; // 机构名称
*/
private String inCardNo; // getters and setters
/** public String getFromCardNo() { return fromCardNo; }
* 转账金额 public void setFromCardNo(String fromCardNo) { this.fromCardNo = fromCardNo; }
*/ public String getToCardNo() { return toCardNo; }
private Double amount; 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; }
private String password; public void setPassword(String password) { this.password = password; }
public String getStaffNo() { return staffNo; }
public void setStaffNo(String staffNo) { this.staffNo = staffNo; }
// Getter 和 Setter 方法 public String getOrganiNm() { return organiNm; }
public String getOutCardNo() { public void setOrganiNm(String organiNm) { this.organiNm = organiNm; }
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;
}
} }
Loading…
Cancel
Save