From 6bd1dc0b355e279b709bc49dda5207121e9b41a9 Mon Sep 17 00:00:00 2001 From: liding <756868258@qq.com> Date: 星期四, 15 五月 2025 15:41:26 +0800 Subject: [PATCH] 1.来票台账优化 2.上传优化 --- src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java | 4 src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java | 10 src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java | 215 ++++++++++++++++++- src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java | 4 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 19 src/main/java/com/ruoyi/sales/service/ICommonFileService.java | 15 + src/main/java/com/ruoyi/other/pojo/TempFile.java | 1 src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java | 63 +++++ src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java | 3 src/main/java/com/ruoyi/other/controller/TempFileController.java | 6 /dev/null | 22 -- src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java | 2 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 22 +- src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java | 54 +++- src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java | 69 ++++++ src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 19 src/main/java/com/ruoyi/other/service/TempFileService.java | 2 src/main/java/com/ruoyi/sales/pojo/CommonFile.java | 15 + src/main/java/com/ruoyi/sales/controller/CommonFileController.java | 32 ++ src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java | 8 src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java | 33 ++ 21 files changed, 513 insertions(+), 105 deletions(-) diff --git a/src/main/java/com/ruoyi/other/controller/TempFileController.java b/src/main/java/com/ruoyi/other/controller/TempFileController.java index 6834d13..59d4e75 100644 --- a/src/main/java/com/ruoyi/other/controller/TempFileController.java +++ b/src/main/java/com/ruoyi/other/controller/TempFileController.java @@ -18,10 +18,10 @@ private TempFileService tempFileService; @PostMapping("/upload") - public AjaxResult uploadFile(MultipartFile file) { + public AjaxResult uploadFile(MultipartFile file, String type) { try { - return AjaxResult.success(tempFileService.uploadFile(file)); - }catch (Exception e) { + return AjaxResult.success(tempFileService.uploadFile(file, type)); + } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } diff --git a/src/main/java/com/ruoyi/other/pojo/TempFile.java b/src/main/java/com/ruoyi/other/pojo/TempFile.java index 26ace93..d3b0e51 100644 --- a/src/main/java/com/ruoyi/other/pojo/TempFile.java +++ b/src/main/java/com/ruoyi/other/pojo/TempFile.java @@ -16,4 +16,5 @@ private String originalName; // 鍘熷鏂囦欢鍚� private String tempPath; // 涓存椂瀛樺偍璺緞 private LocalDateTime expireTime; // 杩囨湡鏃堕棿 + private String type; // 鍏宠仈琛ㄧ被鍨� } diff --git a/src/main/java/com/ruoyi/other/service/TempFileService.java b/src/main/java/com/ruoyi/other/service/TempFileService.java index 756a8c5..32dba44 100644 --- a/src/main/java/com/ruoyi/other/service/TempFileService.java +++ b/src/main/java/com/ruoyi/other/service/TempFileService.java @@ -6,5 +6,5 @@ import java.io.IOException; public interface TempFileService { - TempFile uploadFile(MultipartFile file) throws IOException; + TempFile uploadFile(MultipartFile file,String type) throws IOException; } diff --git a/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java b/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java index f228680..fc041bb 100644 --- a/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java +++ b/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java @@ -32,7 +32,7 @@ // 涓婁紶鍒颁复鏃剁洰褰� @Override - public TempFile uploadFile(MultipartFile file) throws IOException { + public TempFile uploadFile(MultipartFile file,String type) throws IOException { // 1. 鐢熸垚涓存椂鏂囦欢ID鍜岃矾寰� String tempId = UUID.randomUUID().toString(); Path tempFilePath = Paths.get(tempDir, tempId + "_" + file.getOriginalFilename()); @@ -52,6 +52,7 @@ tempFileRecord.setOriginalName(file.getOriginalFilename()); tempFileRecord.setTempPath(tempFilePath.toString()); tempFileRecord.setExpireTime(LocalDateTime.now().plusHours(2)); // 2灏忔椂鍚庤繃鏈� + tempFileRecord.setType(type); tempFileMapper.insert(tempFileRecord); return tempFileRecord; diff --git a/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java b/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java index 256f9c5..8cd6b5b 100644 --- a/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java +++ b/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java @@ -1,23 +1,22 @@ package com.ruoyi.purchase.controller; -import java.util.List; -import javax.servlet.http.HttpServletResponse; - import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.purchase.pojo.InvoicePurchase; -import com.ruoyi.purchase.service.IInvoicePurchaseService; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; +import com.ruoyi.purchase.dto.InvoicePurchaseDto; +import com.ruoyi.purchase.pojo.InvoicePurchase; +import com.ruoyi.purchase.service.IInvoicePurchaseService; +import com.ruoyi.sales.service.ICommonFileService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; /** * 鍙戠エ淇℃伅Controller @@ -32,13 +31,15 @@ private IInvoicePurchaseService invoicePurchaseService; + private ICommonFileService commonFileService; + /** * 鏌ヨ鍙戠エ淇℃伅鍒楄〃 */ @GetMapping("/list") - public TableDataInfo list(InvoicePurchase invoicePurchase) { + public TableDataInfo list(InvoicePurchaseDto invoicePurchaseDto) { startPage(); - List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchase); + List<InvoicePurchaseDto> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchaseDto); return getDataTable(list); } @@ -48,18 +49,26 @@ @Log(title = "鍙戠エ淇℃伅", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, InvoicePurchase invoicePurchase) { - List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchase); + List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseLists(invoicePurchase); ExcelUtil<InvoicePurchase> util = new ExcelUtil<InvoicePurchase>(InvoicePurchase.class); util.exportExcel(response, list, "鍙戠エ淇℃伅鏁版嵁"); + } + + /** + * 鏌ヨ鍙戠エ淇℃伅 + */ + @GetMapping("/getInvoiceById") + public InvoicePurchaseDto getInvoiceById(InvoicePurchaseDto invoicePurchaseDto) { + return invoicePurchaseService.getInvoiceById(invoicePurchaseDto); } /** * 鏂板淇敼鍙戠エ淇℃伅 */ @Log(title = "鍙戠エ淇℃伅", businessType = BusinessType.INSERT) - @PostMapping ("/addOrUpdateInvoice") - public AjaxResult addOrUpdateInvoice(@RequestBody InvoicePurchase invoicePurchase) { - return toAjax(invoicePurchaseService.addOrUpdateInvoice(invoicePurchase)); + @PostMapping("/addOrUpdateInvoice") + public AjaxResult addOrUpdateInvoice(@RequestBody InvoicePurchaseDto invoicePurchaseDto) throws IOException { + return toAjax(invoicePurchaseService.addOrUpdateInvoice(invoicePurchaseDto)); } /** @@ -70,4 +79,13 @@ public AjaxResult remove(@RequestBody Long[] ids) { return toAjax(invoicePurchaseService.delInvoice(ids)); } + + @PostMapping("/upload") + public AjaxResult uploadFile(MultipartFile file, Long id, String type) { + try { + return AjaxResult.success(commonFileService.uploadFile(file, id, type)); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } } diff --git a/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java b/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java index 8a51b96..c8a8671 100644 --- a/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java +++ b/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java @@ -1,7 +1,76 @@ package com.ruoyi.purchase.dto; +import com.ruoyi.sales.pojo.CommonFile; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; @Data public class InvoicePurchaseDto { + + private Long id; + + /** + * 閲囪喘鍙拌处id + */ + private Long purchaseLedgerId; + + /** + * 閲囪喘鍚堝悓鍙� + */ + private String purchaseContractNo; + + /** + * 鍏宠仈閿�鍞彴璐︿富琛ㄤ富閿� + */ + private Long salesLedgerId; + + /** + * 閿�鍞悎鍚屽彿 + */ + private String salesContractNo; + + /** + * 渚涘簲鍟嗗悕绉� + */ + private String supplierName; + + /** + * 鍙戠エ鍙� + */ + private String invoiceNumber; + + /** + * 鍙戠エ閲戦锛堝厓锛� + */ + private BigDecimal invoiceAmount; + + /** + * 绋庣巼 + */ + private BigDecimal taxRate; + + /** + * 寮�绁ㄤ汉ID + */ + private Long issUerId; + + /** + * 寮�绁ㄤ汉 + */ + private String issUer; + + /** + * 寮�绁ㄦ棩鏈� + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate issueDate; + + private List<String> tempFileIds; + private List<CommonFile> CommonFiles; + + private String fileName; } diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java index cddb7b8..ff81462 100644 --- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java +++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java @@ -1,7 +1,7 @@ package com.ruoyi.purchase.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.sales.pojo.SalesLedgerFile; +import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.Data; @@ -90,7 +90,7 @@ private List<String> tempFileIds; - private List<SalesLedgerFile> SalesLedgerFiles; + private List<CommonFile> SalesLedgerFiles; /** * 涓氬姟鍛樻墜鏈哄彿 */ diff --git a/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java b/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java index 5097798..bcc868d 100644 --- a/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java +++ b/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java @@ -1,12 +1,13 @@ package com.ruoyi.purchase.pojo; -import java.math.BigDecimal; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Date; /** * 鍙戠エ淇℃伅瀵硅薄 invoice_purchase @@ -26,10 +27,20 @@ private Long id; /** + * 閲囪喘鍙拌处id + */ + private Long purchaseLedgerId; + + /** * 閲囪喘鍚堝悓鍙� */ @Excel(name = "閲囪喘鍚堝悓鍙�") private String purchaseContractNo; + + /** + * 鍏宠仈閿�鍞彴璐︿富琛ㄤ富閿� + */ + private Long salesLedgerId; /** * 閿�鍞悎鍚屽彿 @@ -52,32 +63,36 @@ /** * 鍙戠エ閲戦锛堝厓锛� */ - @Excel(name = "鍙戠エ閲戦", readConverterExp = "鍏�=") + @Excel(name = "鍙戠エ閲戦(鍏�)") private BigDecimal invoiceAmount; /** * 绋庣巼 */ - @Excel(name = "绋庣巼") + @Excel(name = "绋庣巼(%)") private BigDecimal taxRate; + + /** + * 寮�绁ㄤ汉ID + */ + private Long issUerId; /** * 寮�绁ㄤ汉 */ @Excel(name = "寮�绁ㄤ汉") - private String issuer; + private String issUer; /** * 寮�绁ㄦ棩鏈� */ - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd" ,timezone = "GMT+8") @Excel(name = "寮�绁ㄦ棩鏈�", width = 30, dateFormat = "yyyy-MM-dd") - private Date issueDate; + private LocalDate issueDate; /** * 鍙戠エ鏂囦欢锛圥DF鏍煎紡锛� */ - @Excel(name = "鍙戠エ鏂囦欢", readConverterExp = "P=DF鏍煎紡") private String invoiceFile; /** diff --git a/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java b/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java index ae99e9d..fe664f8 100644 --- a/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java +++ b/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.purchase.dto.InvoicePurchaseDto; import com.ruoyi.purchase.pojo.InvoicePurchase; +import java.io.IOException; import java.util.List; /** @@ -13,9 +15,13 @@ * @date 2025-05-14 */ public interface IInvoicePurchaseService extends IService<InvoicePurchase> { - List<InvoicePurchase> selectInvoicePurchaseList(InvoicePurchase invoicePurchase); + List<InvoicePurchaseDto> selectInvoicePurchaseList(InvoicePurchaseDto invoicePurchaseDto); int delInvoice(Long[] ids); - int addOrUpdateInvoice(InvoicePurchase invoicePurchase); + int addOrUpdateInvoice(InvoicePurchaseDto invoicePurchaseDto) throws IOException; + + InvoicePurchaseDto getInvoiceById(InvoicePurchaseDto invoicePurchaseDto); + + List<InvoicePurchase> selectInvoicePurchaseLists(InvoicePurchase invoicePurchase); } diff --git a/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java index f9a2487..5a0a9b4 100644 --- a/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java +++ b/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java @@ -2,15 +2,38 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.other.mapper.TempFileMapper; +import com.ruoyi.other.pojo.TempFile; +import com.ruoyi.project.system.domain.SysUser; +import com.ruoyi.project.system.mapper.SysUserMapper; +import com.ruoyi.purchase.dto.InvoicePurchaseDto; import com.ruoyi.purchase.mapper.InvoicePurchaseMapper; +import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.InvoicePurchase; +import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.service.IInvoicePurchaseService; -import lombok.AllArgsConstructor; +import com.ruoyi.sales.mapper.CommonFileMapper; +import com.ruoyi.sales.pojo.CommonFile; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; -import java.util.Arrays; -import java.util.List; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; /** * 鍙戠エ淇℃伅Service涓氬姟灞傚鐞� @@ -19,14 +42,80 @@ * @date 2025-05-14 */ @Service -@AllArgsConstructor +@RequiredArgsConstructor +@Slf4j public class InvoicePurchaseServiceImpl extends ServiceImpl<InvoicePurchaseMapper, InvoicePurchase> implements IInvoicePurchaseService { - private InvoicePurchaseMapper invoicePurchaseMapper; + private final InvoicePurchaseMapper invoicePurchaseMapper; + + private final PurchaseLedgerMapper purchaseLedgerMapper; + + private final SysUserMapper userMapper; + + private final CommonFileMapper commonFileMapper; + + private final TempFileMapper tempFileMapper; + + @Value("${file.upload-dir}") + private String uploadDir; @Override - public List<InvoicePurchase> selectInvoicePurchaseList(InvoicePurchase invoicePurchase) { - return invoicePurchaseMapper.selectList(new LambdaQueryWrapper<>()); + public List<InvoicePurchaseDto> selectInvoicePurchaseList(InvoicePurchaseDto invoicePurchaseDto) { + // 鏋勫缓鍙戠エ鏌ヨ鏉′欢 + LambdaQueryWrapper<InvoicePurchase> queryWrapper = new LambdaQueryWrapper<>(); + Optional.ofNullable(invoicePurchaseDto) + .ifPresent(dto -> { + if (StringUtils.hasText(dto.getPurchaseContractNo())) { + queryWrapper.like(InvoicePurchase::getPurchaseContractNo, dto.getPurchaseContractNo()); + } + if (StringUtils.hasText(dto.getSupplierName())) { + queryWrapper.like(InvoicePurchase::getSupplierName, dto.getSupplierName()); + } + // 澶勭悊鏃ユ湡绫诲瀷瀛楁 + if (dto.getIssueDate() != null) { + queryWrapper.eq(InvoicePurchase::getIssueDate,invoicePurchaseDto.getIssueDate()); + } + }); + + // 鏌ヨ鍙戠エ鍒楄〃 + List<InvoicePurchase> invoiceList = invoicePurchaseMapper.selectList(queryWrapper); + + // 濡傛灉娌℃湁鏌ヨ鍒板彂绁紝鐩存帴杩斿洖绌哄垪琛� + if (CollectionUtils.isEmpty(invoiceList)) { + return Collections.emptyList(); + } + + // 鎻愬彇鎵�鏈夊彂绁↖D + List<Long> invoiceIds = invoiceList.stream() + .map(InvoicePurchase::getId) + .collect(Collectors.toList()); + + // 鎵归噺鏌ヨ杩欎簺鍙戠エ鍏宠仈鐨勬枃浠朵俊鎭� + LambdaQueryWrapper<CommonFile> fileQueryWrapper = new LambdaQueryWrapper<>(); + fileQueryWrapper.in(CommonFile::getCommonId, invoiceIds) + .eq(CommonFile::getType,"3"); + List<CommonFile> fileList = commonFileMapper.selectList(fileQueryWrapper); + + // 灏嗘枃浠朵俊鎭槧灏勫埌瀵瑰簲鐨勫彂绁↖D + Map<Long, String> fileMap = fileList.stream() + .collect(Collectors.toMap( + CommonFile::getCommonId, + CommonFile::getName, + (existing, replacement) -> existing // 濡傛灉鏈夊涓枃浠讹紝鍙栫涓�涓� + )); + + // 灏嗘枃浠朵俊鎭缃埌鍙戠エDTO涓� + List<InvoicePurchaseDto> resultList = new ArrayList<>(); + for (InvoicePurchase invoice : invoiceList) { + InvoicePurchaseDto dto = new InvoicePurchaseDto(); + // 灏咺nvoicePurchase鐨勫睘鎬у鍒跺埌DTO + BeanUtils.copyProperties(invoice, dto); + // 璁剧疆鏂囦欢鍚嶏紝濡傛灉瀛樺湪鐨勮瘽 + dto.setFileName(fileMap.getOrDefault(invoice.getId(), null)); + resultList.add(dto); + } + + return resultList; } @Override @@ -35,11 +124,115 @@ } @Override - public int addOrUpdateInvoice(InvoicePurchase invoicePurchase) { - if (invoicePurchase.getId() == null) { - return invoicePurchaseMapper.insert(invoicePurchase); + public int addOrUpdateInvoice(InvoicePurchaseDto invoicePurchaseDto) throws IOException { + int i; + PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(invoicePurchaseDto.getPurchaseLedgerId()); + InvoicePurchase invoicePurchase = new InvoicePurchase(); + BeanUtils.copyProperties(invoicePurchaseDto, invoicePurchase); + invoicePurchase.setPurchaseContractNo(purchaseLedger.getPurchaseContractNumber()); + invoicePurchase.setSalesContractNo(purchaseLedger.getSalesContractNo()); + SysUser sysUser = userMapper.selectUserById(invoicePurchase.getIssUerId()); + invoicePurchase.setIssUer(sysUser.getNickName()); + invoicePurchase.setTenantId(purchaseLedger.getTenantId()); + if (invoicePurchaseDto.getId() == null) { + i = invoicePurchaseMapper.insert(invoicePurchase); } else { - return invoicePurchaseMapper.updateById(invoicePurchase); + i = invoicePurchaseMapper.updateById(invoicePurchase); } + + // 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰� + if (invoicePurchaseDto.getTempFileIds() != null && !invoicePurchaseDto.getTempFileIds().isEmpty()) { + migrateTempFilesToFormal(invoicePurchase.getId(), invoicePurchaseDto.getTempFileIds()); + } + + return i; + } + + /** + * 灏嗕复鏃舵枃浠惰縼绉诲埌姝e紡鐩綍 + * + * @param businessId 涓氬姟ID锛堥攢鍞彴璐D锛� + * @param tempFileIds 涓存椂鏂囦欢ID鍒楄〃 + * @throws IOException 鏂囦欢鎿嶄綔寮傚父 + */ + private void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds) throws IOException { + if (CollectionUtils.isEmpty(tempFileIds)) { + return; + } + + // 鏋勫缓姝e紡鐩綍璺緞锛堟寜涓氬姟绫诲瀷鍜屾棩鏈熷垎缁勶級 + String formalDir = uploadDir + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); + + Path formalDirPath = Paths.get(formalDir); + + // 纭繚姝e紡鐩綍瀛樺湪锛堥�掑綊鍒涘缓锛� + if (!Files.exists(formalDirPath)) { + Files.createDirectories(formalDirPath); + } + + for (String tempFileId : tempFileIds) { + // 鏌ヨ涓存椂鏂囦欢璁板綍 + TempFile tempFile = tempFileMapper.selectById(tempFileId); + if (tempFile == null) { + log.warn("涓存椂鏂囦欢涓嶅瓨鍦紝璺宠繃澶勭悊: {}", tempFileId); + continue; + } + + // 鏋勫缓姝e紡鏂囦欢鍚嶏紙鍖呭惈涓氬姟ID鍜屾椂闂存埑锛岄伩鍏嶅啿绐侊級 + String originalFilename = tempFile.getOriginalName(); + String fileExtension = FilenameUtils.getExtension(originalFilename); + String formalFilename = businessId + "_" + + System.currentTimeMillis() + "_" + + UUID.randomUUID().toString().substring(0, 8) + + (com.ruoyi.common.utils.StringUtils.hasText(fileExtension) ? "." + fileExtension : ""); + + Path formalFilePath = formalDirPath.resolve(formalFilename); + + try { + // 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級 + Files.move( + Paths.get(tempFile.getTempPath()), + formalFilePath, + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.ATOMIC_MOVE + ); + log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); + + // 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛� + CommonFile fileRecord = new CommonFile(); + fileRecord.setCommonId(businessId); + fileRecord.setName(originalFilename); + fileRecord.setUrl(formalFilePath.toString()); + fileRecord.setCreateTime(LocalDateTime.now()); + fileRecord.setType(tempFile.getType()); + commonFileMapper.insert(fileRecord); + + log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); + } catch (IOException e) { + log.error("鏂囦欢杩佺Щ澶辫触: {}", tempFile.getTempPath(), e); + // 鍙�夋嫨鍥炴粴浜嬪姟鎴栬褰曞け璐ユ枃浠� + throw new IOException("鏂囦欢杩佺Щ寮傚父", e); + } + } + } + + @Override + public InvoicePurchaseDto getInvoiceById(InvoicePurchaseDto invoicePurchaseDto) { + InvoicePurchase invoicePurchase = invoicePurchaseMapper.selectById(invoicePurchaseDto.getId()); + InvoicePurchaseDto resultDto = new InvoicePurchaseDto(); + BeanUtils.copyProperties(invoicePurchase, resultDto); + + // 鏌ヨ涓婁紶鏂囦欢 + LambdaQueryWrapper<CommonFile> commonFileLambdaQueryWrapper = new LambdaQueryWrapper<>(); + commonFileLambdaQueryWrapper.eq(CommonFile::getCommonId, invoicePurchaseDto.getId()) + .eq(CommonFile::getType, "3"); + List<CommonFile> commonFiles = commonFileMapper.selectList(commonFileLambdaQueryWrapper); + resultDto.setCommonFiles(commonFiles); + return resultDto; + } + + @Override + public List<InvoicePurchase> selectInvoicePurchaseLists(InvoicePurchase invoicePurchase) { + return invoicePurchaseMapper.selectList(new LambdaQueryWrapper<>()); } } diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java index f49faf8..35ea9f5 100644 --- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java @@ -14,11 +14,11 @@ import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.service.IPurchaseLedgerService; -import com.ruoyi.sales.mapper.SalesLedgerFileMapper; +import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; +import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedger; -import com.ruoyi.sales.pojo.SalesLedgerFile; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -59,7 +59,7 @@ private final TempFileMapper tempFileMapper; - private final SalesLedgerFileMapper salesLedgerFileMapper; + private final CommonFileMapper commonFileMapper; @Value("${file.upload-dir}") private String uploadDir; @@ -207,12 +207,13 @@ log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); // 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛� - SalesLedgerFile fileRecord = new SalesLedgerFile(); - fileRecord.setLedgerId(businessId); + CommonFile fileRecord = new CommonFile(); + fileRecord.setCommonId(businessId); fileRecord.setName(originalFilename); fileRecord.setUrl(formalFilePath.toString()); fileRecord.setCreateTime(LocalDateTime.now()); - salesLedgerFileMapper.insert(fileRecord); + fileRecord.setType("2"); + commonFileMapper.insert(fileRecord); // 鍒犻櫎涓存椂鏂囦欢璁板綍 tempFileMapper.deleteById(tempFile); @@ -246,9 +247,9 @@ List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); // 3.鏌ヨ涓婁紶鏂囦欢 - LambdaQueryWrapper<SalesLedgerFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); - salesLedgerFileWrapper.eq(SalesLedgerFile::getLedgerId, purchaseLedger.getId()); - List<SalesLedgerFile> salesLedgerFiles = salesLedgerFileMapper.selectList(salesLedgerFileWrapper); + LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); + salesLedgerFileWrapper.eq(CommonFile::getCommonId, purchaseLedger.getId()); + List<CommonFile> salesLedgerFiles = commonFileMapper.selectList(salesLedgerFileWrapper); // 4. 杞崲 DTO PurchaseLedgerDto resultDto = new PurchaseLedgerDto(); diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java index 4e39558..d67b5fb 100644 --- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java +++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java @@ -38,7 +38,7 @@ private SalesLedgerProductMapper salesLedgerProductMapper; - private final SysUserMapper userMapper; + private SysUserMapper userMapper; @Override diff --git a/src/main/java/com/ruoyi/sales/controller/CommonFileController.java b/src/main/java/com/ruoyi/sales/controller/CommonFileController.java new file mode 100644 index 0000000..beb2df9 --- /dev/null +++ b/src/main/java/com/ruoyi/sales/controller/CommonFileController.java @@ -0,0 +1,32 @@ +package com.ruoyi.sales.controller; + +import com.ruoyi.framework.aspectj.lang.annotation.Log; +import com.ruoyi.framework.aspectj.lang.enums.BusinessType; +import com.ruoyi.framework.web.controller.BaseController; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.sales.service.ICommonFileService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/commonFile") +@AllArgsConstructor +public class CommonFileController extends BaseController { + + private ICommonFileService commonFileService; + + /** + * 闄勪欢鍒犻櫎 + */ + @Log(title = "闄勪欢鍒犻櫎", businessType = BusinessType.DELETE) + @DeleteMapping("/delCommonFile") + public AjaxResult delCommonFile(@RequestBody Long[] ids) { + if (ids == null || ids.length == 0) { + return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D"); + } + return toAjax(commonFileService.delCommonFileByIds(ids)); + } +} diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java index ace01c0..fae38e5 100644 --- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java +++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java @@ -1,20 +1,20 @@ package com.ruoyi.sales.controller; -import java.util.*; -import javax.servlet.http.HttpServletResponse; - import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.sales.dto.SalesLedgerDto; -import com.ruoyi.sales.pojo.SalesLedger; -import com.ruoyi.sales.service.ISalesLedgerFileService; -import com.ruoyi.sales.service.ISalesLedgerService; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.*; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; +import com.ruoyi.sales.dto.SalesLedgerDto; +import com.ruoyi.sales.pojo.SalesLedger; +import com.ruoyi.sales.service.ICommonFileService; +import com.ruoyi.sales.service.ISalesLedgerService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 閿�鍞彴璐ontroller @@ -29,7 +29,7 @@ private ISalesLedgerService salesLedgerService; - private ISalesLedgerFileService salesLedgerFileService; + private ICommonFileService commonFileService; /** * 鏌ヨ閿�鍞彴璐﹀垪琛� @@ -101,6 +101,6 @@ if (ids == null || ids.length == 0) { return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D"); } - return toAjax(salesLedgerFileService.deleteSalesLedgerByIds(ids)); + return toAjax(commonFileService.deleteSalesLedgerByIds(ids)); } } diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java index af98858..1e79daa 100644 --- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java +++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java @@ -1,7 +1,7 @@ package com.ruoyi.sales.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.sales.pojo.SalesLedgerFile; +import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.Data; @@ -25,7 +25,7 @@ private Boolean hasChildren = false; private List<SalesLedgerProduct> productData; private List<String> tempFileIds; - private List<SalesLedgerFile> SalesLedgerFiles; + private List<CommonFile> SalesLedgerFiles; private Integer Type; } diff --git a/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java b/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java new file mode 100644 index 0000000..fa2fc39 --- /dev/null +++ b/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java @@ -0,0 +1,8 @@ +package com.ruoyi.sales.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.sales.pojo.CommonFile; + +public interface CommonFileMapper extends BaseMapper<CommonFile> { +} diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerFileMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerFileMapper.java deleted file mode 100644 index a5cf660..0000000 --- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerFileMapper.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ruoyi.sales.mapper; - - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.sales.pojo.SalesLedgerFile; - -public interface SalesLedgerFileMapper extends BaseMapper<SalesLedgerFile> { -} diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java b/src/main/java/com/ruoyi/sales/pojo/CommonFile.java similarity index 74% rename from src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java rename to src/main/java/com/ruoyi/sales/pojo/CommonFile.java index ace387a..77e8b7d 100644 --- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java +++ b/src/main/java/com/ruoyi/sales/pojo/CommonFile.java @@ -5,17 +5,21 @@ import java.time.LocalDateTime; +/** + * 閫氱敤闄勪欢涓婁紶琛� + */ + @Data -@TableName("sales_ledger_file") -public class SalesLedgerFile { +@TableName("common_file") +public class CommonFile { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private Long id; - /** 閿�鍞彴璐D */ - private Long ledgerId; + /** 鍏宠仈琛ㄤ富閿瓺 */ + private Long commonId; /** 鏂囦欢鍚嶇О */ private String name; @@ -23,6 +27,9 @@ /** 鏂囦欢璺緞 */ private String url; + /** 鍏宠仈琛� */ + private String type; + /** 鍒涘缓鏃堕棿 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; diff --git a/src/main/java/com/ruoyi/sales/service/ICommonFileService.java b/src/main/java/com/ruoyi/sales/service/ICommonFileService.java new file mode 100644 index 0000000..a00aa9c --- /dev/null +++ b/src/main/java/com/ruoyi/sales/service/ICommonFileService.java @@ -0,0 +1,15 @@ +package com.ruoyi.sales.service; + +import com.ruoyi.sales.pojo.CommonFile; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +public interface ICommonFileService { + + int deleteSalesLedgerByIds(Long[] ids); + + CommonFile uploadFile(MultipartFile file, Long id, String type) throws IOException; + + int delCommonFileByIds(Long[] ids); +} diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java deleted file mode 100644 index 4cbbeb5..0000000 --- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ruoyi.sales.service; - -public interface ISalesLedgerFileService { - - int deleteSalesLedgerByIds(Long[] ids); -} diff --git a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java new file mode 100644 index 0000000..ee45642 --- /dev/null +++ b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java @@ -0,0 +1,63 @@ +package com.ruoyi.sales.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.sales.mapper.CommonFileMapper; +import com.ruoyi.sales.pojo.CommonFile; +import com.ruoyi.sales.service.ICommonFileService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class CommonFileServiceImpl extends ServiceImpl<CommonFileMapper, CommonFile> implements ICommonFileService { + + private final CommonFileMapper commonFileMapper; + + @Value("${file.upload-dir}") + private String uploadDir; + + + @Override + public int deleteSalesLedgerByIds(Long[] ids) { + return commonFileMapper.deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public CommonFile uploadFile(MultipartFile file, Long id, String type) throws IOException { + // 1. 鐢熸垚姝e紡鏂囦欢ID鍜岃矾寰� + String tempId = UUID.randomUUID().toString(); + Path tempFilePath = Paths.get(uploadDir, tempId + "_" + file.getOriginalFilename()); + + // 2. 纭繚鐩綍瀛樺湪 + Path parentDir = tempFilePath.getParent(); + if (parentDir != null) { + Files.createDirectories(parentDir); // 閫掑綊鍒涘缓鐩綍 + } + + // 3. 淇濆瓨鏂囦欢鍒扮洰褰� + file.transferTo(tempFilePath.toFile()); + + // 4. 淇濆瓨鏂囦欢璁板綍 + CommonFile commonFile = new CommonFile(); + commonFile.setCommonId(id); + commonFile.setName(file.getOriginalFilename()); + commonFile.setUrl(tempFilePath.toString()); + commonFile.setType(type); + commonFileMapper.insert(commonFile); + return commonFile; + } + + @Override + public int delCommonFileByIds(Long[] ids) { + return commonFileMapper.deleteBatchIds(Arrays.asList(ids)); + } +} diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java deleted file mode 100644 index 41b82d1..0000000 --- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.ruoyi.sales.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.sales.mapper.SalesLedgerFileMapper; -import com.ruoyi.sales.pojo.SalesLedgerFile; -import com.ruoyi.sales.service.ISalesLedgerFileService; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.Arrays; - -@Service -@AllArgsConstructor -public class SalesLedgerFileServiceImpl extends ServiceImpl<SalesLedgerFileMapper, SalesLedgerFile> implements ISalesLedgerFileService { - - private SalesLedgerFileMapper salesLedgerFileMapper; - - @Override - public int deleteSalesLedgerByIds(Long[] ids) { - return salesLedgerFileMapper.deleteBatchIds(Arrays.asList(ids)); - } -} diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java index 777bbb4..988410d 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java @@ -12,11 +12,11 @@ import com.ruoyi.other.mapper.TempFileMapper; import com.ruoyi.other.pojo.TempFile; import com.ruoyi.sales.dto.SalesLedgerDto; -import com.ruoyi.sales.mapper.SalesLedgerFileMapper; +import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; +import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedger; -import com.ruoyi.sales.pojo.SalesLedgerFile; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerService; import lombok.RequiredArgsConstructor; @@ -58,7 +58,7 @@ private final SalesLedgerProductMapper salesLedgerProductMapper; - private final SalesLedgerFileMapper salesLedgerFileMapper; + private final CommonFileMapper commonFileMapper; private final TempFileMapper tempFileMapper; @@ -93,9 +93,9 @@ List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); // 3.鏌ヨ涓婁紶鏂囦欢 - LambdaQueryWrapper<SalesLedgerFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); - salesLedgerFileWrapper.eq(SalesLedgerFile::getLedgerId, salesLedger.getId()); - List<SalesLedgerFile> salesLedgerFiles = salesLedgerFileMapper.selectList(salesLedgerFileWrapper); + LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); + salesLedgerFileWrapper.eq(CommonFile::getCommonId, salesLedger.getId()); + List<CommonFile> salesLedgerFiles = commonFileMapper.selectList(salesLedgerFileWrapper); // 4. 杞崲 DTO SalesLedgerDto resultDto = new SalesLedgerDto(); @@ -266,12 +266,13 @@ log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); // 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛� - SalesLedgerFile fileRecord = new SalesLedgerFile(); - fileRecord.setLedgerId(businessId); + CommonFile fileRecord = new CommonFile(); + fileRecord.setCommonId(businessId); fileRecord.setName(originalFilename); fileRecord.setUrl(formalFilePath.toString()); fileRecord.setCreateTime(LocalDateTime.now()); - salesLedgerFileMapper.insert(fileRecord); + fileRecord.setType("1"); + commonFileMapper.insert(fileRecord); // 鍒犻櫎涓存椂鏂囦欢璁板綍 tempFileMapper.deleteById(tempFile); -- Gitblit v1.9.3