package com.example.controller; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import com.example.common.PageResult; import com.example.common.Result; import com.example.entity.DataExcel; import com.example.excel.DataExcelImport; import com.example.security.UserContext; import com.example.service.DataExcelService; import com.example.service.DepartmentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/api/data-excel") public class DataExcelController { @Autowired private DataExcelService dataExcelService; @Autowired private DepartmentService departmentService; @GetMapping("/page") public Result> page( @RequestParam(defaultValue = "1") Long current, @RequestParam(defaultValue = "10") Long size, @RequestParam(required = false) String unitName, @RequestParam(required = false) String transactionNo, @RequestParam(required = false) String accountingPeriod) { String currentDeptCode = UserContext.getCurrentDeptCode(); List permissionDeptCodes = departmentService.getChildDeptCodes(currentDeptCode); IPage page = dataExcelService.getDataExcelPage(current, size, unitName, transactionNo, accountingPeriod, permissionDeptCodes); return Result.success(new PageResult<>(page.getTotal(), current, size, page.getRecords())); } @GetMapping("/{id}") public Result getById(@PathVariable Long id) { DataExcel dataExcel = dataExcelService.getById(id); if (dataExcel == null) { return Result.error("数据不存在"); } String currentDeptCode = UserContext.getCurrentDeptCode(); List permissionDeptCodes = departmentService.getChildDeptCodes(currentDeptCode); if (!permissionDeptCodes.contains(dataExcel.getUnitCode())) { return Result.error("无权限查看该数据"); } return Result.success(dataExcel); } @PostMapping public Result save(@RequestBody DataExcel dataExcel) { String currentDeptCode = UserContext.getCurrentDeptCode(); List permissionDeptCodes = departmentService.getChildDeptCodes(currentDeptCode); if (!permissionDeptCodes.contains(dataExcel.getUnitCode())) { return Result.error("无权限在该部门创建数据"); } return Result.success(dataExcelService.save(dataExcel)); } @PutMapping public Result update(@RequestBody DataExcel dataExcel) { DataExcel existData = dataExcelService.getById(dataExcel.getId()); if (existData == null) { return Result.error("数据不存在"); } String currentDeptCode = UserContext.getCurrentDeptCode(); List permissionDeptCodes = departmentService.getChildDeptCodes(currentDeptCode); if (!permissionDeptCodes.contains(existData.getUnitCode())) { return Result.error("无权限修改该数据"); } if (!permissionDeptCodes.contains(dataExcel.getUnitCode())) { return Result.error("无权限将数据修改到该部门"); } return Result.success(dataExcelService.updateById(dataExcel)); } @DeleteMapping("/{id}") public Result delete(@PathVariable Long id) { DataExcel dataExcel = dataExcelService.getById(id); if (dataExcel == null) { return Result.error("数据不存在"); } String currentDeptCode = UserContext.getCurrentDeptCode(); List permissionDeptCodes = departmentService.getChildDeptCodes(currentDeptCode); if (!permissionDeptCodes.contains(dataExcel.getUnitCode())) { return Result.error("无权限删除该数据"); } return Result.success(dataExcelService.removeById(id)); } @PostMapping("/import") public Result importData(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return Result.error("上传文件不能为空"); } String currentDeptCode = UserContext.getCurrentDeptCode(); List permissionDeptCodes = departmentService.getChildDeptCodes(currentDeptCode); String result = dataExcelService.importData(file, permissionDeptCodes); if (result.startsWith("成功")) { return Result.success(result); } else { return Result.error(result); } } @GetMapping("/template") public void downloadTemplate(HttpServletResponse response) throws IOException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("交易流水数据导入模版", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); List templateData = new ArrayList<>(); DataExcelImport example = new DataExcelImport(); example.setSortNo(1); example.setSeqNo(1); example.setSecondaryUnit("集团本部"); example.setUnitCode("001001"); example.setUnitName("冀中能源集团有限责任公司"); example.setTransactionNo("202501172200276"); example.setSummary("财务公司户转农发行广支户"); example.setAmount(new BigDecimal("50000000.00")); example.setAccountingPeriod("2025-01"); example.setVoucherNo("银行-33"); example.setBpContractNo("#N/A"); example.setContractCenterNo("#N/A"); example.setBpInvoiceNo("#N/A"); example.setGkInvoiceNo("#N/A"); example.setBusinessRelation("#N/A"); example.setRemark(""); templateData.add(example); EasyExcel.write(response.getOutputStream(), DataExcelImport.class) .sheet("交易流水数据") .doWrite(templateData); } }