From 29f42ec056bf95db569bb20c3396e1e67ec95b82 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Mon, 15 Dec 2025 17:50:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=96=87=E4=BB=B6=E5=B9=B6?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/controller/ImportController.java | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/main/java/com/zmzm/finance/common/controller/ImportController.java diff --git a/src/main/java/com/zmzm/finance/common/controller/ImportController.java b/src/main/java/com/zmzm/finance/common/controller/ImportController.java new file mode 100644 index 0000000..a3009e1 --- /dev/null +++ b/src/main/java/com/zmzm/finance/common/controller/ImportController.java @@ -0,0 +1,122 @@ +package com.zmzm.finance.common.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zmzm.finance.common.entity.Import; +import com.zmzm.finance.common.entity.Payment; +import com.zmzm.finance.common.service.IImportService; +import com.zmzm.finance.common.service.IPaymentService; +import com.zmzm.finance.util.ExcelUtil; +import com.zmzm.finance.util.FileUtil; +import com.zmzm.finance.util.R; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.time.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; +import java.math.BigDecimal; +import java.util.*; + +/** + *

+ * 导入文件表 前端控制器 + *

+ * + * @author baomidou + * @since 2025-12-15 + */ +@RestController +@RequestMapping("/common/import") +public class ImportController { + + @Autowired + private IImportService importService; + @Autowired + private IPaymentService paymentService; + + //导入文件列表 + @RequestMapping("/getImportList") + public R getImportList(@RequestBody Map params){ + List importList = importService.list(new LambdaQueryWrapper() + .eq(StringUtils.isNotEmpty(params.get("year").toString()),Import::getYear,params.get("year")) + .eq(StringUtils.isNotEmpty(params.get("month").toString()),Import::getMonth,params.get("month"))); + return R.ok().putData("importList",importList); + } + + //导入数据 + @RequestMapping("/importData") + @Transactional + public R importData(@RequestParam("file") MultipartFile file, @RequestParam("type") int type, + @RequestParam("year") int year, @RequestParam("month") int month) { + //删除之前上的的数据 + Import imp = importService.getOne(new LambdaQueryWrapper() + .eq(Import::getYear, year).eq(Import::getMonth, month)); + if(imp != null){ + List oldPayments = paymentService.list(new LambdaQueryWrapper() + .eq(Payment::getImportId,imp.getId()).eq(Payment::getType, type)); + paymentService.removeBatchByIds(oldPayments); + }else { + imp = new Import(); + imp.setYear(year); + imp.setMonth(month); + } + //上传文件 + FileUtil fileUtil = new FileUtil(); + String url = fileUtil.uploadFile(file); + if(0==type){ + imp.setWechatFile(url); + }else if(1==type){ + imp.setAlipayFile(url); + }else if(2==type){ + imp.setBankFile(url); + } + importService.saveOrUpdate(imp); + //导入新数据 + int num = 0; + try (InputStream fis = file.getInputStream()) { + //解析数据 + ExcelUtil example = new ExcelUtil(); + example.processOneSheet(fis); + LinkedHashMap map = example.getRowContents(); + Iterator> it = map.entrySet().iterator(); + //处理数据 + int count = 0; + List list = new ArrayList<>(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + String pos = entry.getKey(); + String rowNo = pos.replaceAll("[a-zA-Z]", ""); + count = Integer.parseInt(rowNo); + } + for (int i=2;i<=count;i++){ + Payment payment = new Payment(); + payment.setImportId(imp.getId()); + payment.setType(map.containsKey("A"+i)?Integer.valueOf(map.get("A"+i)):0); + payment.setFinanceSn(map.getOrDefault("B" + i, "")); + payment.setTransactionSn(map.getOrDefault("C" + i, "")); + payment.setRelationSn(map.getOrDefault("D" + i, "")); + payment.setFee(new BigDecimal(map.get("E" + i))); + payment.setCtime(DateUtils.parseDate(map.get("F"+i), new String[]{"yyyy-MM-dd HH:mm:ss"})); + payment.setPaymentName(map.getOrDefault("G" + i, "")); + payment.setPaymentType(map.getOrDefault("H" + i, "")); + payment.setRemark(map.getOrDefault("I" + i, "")); + list.add(payment); + num++; + } + paymentService.saveBatch(list); + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return R.error(e.getMessage()); + } + return R.ok("导入成功"+num+"条"); + } + + + +}