src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
@@ -144,7 +144,8 @@ { int dirLastIndex = RuoYiConfig.getProfile().length() + 1; String currentDir = StringUtils.substring(uploadDir, dirLastIndex); return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; // return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; return currentDir + "/" + fileName; } /** src/main/java/com/ruoyi/common/vo/FileVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.common.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data public class FileVo { @ApiModelProperty(value = "æä»¶åç§°") private String fileName; @ApiModelProperty(value = "æä»¶è·¯å¾") private String filePath; @ApiModelProperty(value = "æä»¶å¤§å°") private int fileSize; @ApiModelProperty(value = "å建æ¶é´") private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") private LocalDateTime updateTime; @ApiModelProperty(value = "åå»ºç¨æ·") private Integer createUser; @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") private Integer updateUser; } src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,100 @@ package com.ruoyi.sales.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.service.InvoiceLedgerService; 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.util.List; @RestController @RequestMapping("/invoiceLedger") public class InvoiceLedgerController { @Autowired private InvoiceLedgerService invoiceLedgerService; /** * å¼ç¥¨å°è´¦æ°å¢ * @param invoiceLedgerDto * @return */ @PostMapping("/add") public AjaxResult invoiceLedgerAdd(@RequestBody InvoiceLedgerDto invoiceLedgerDto) { invoiceLedgerService.invoiceLedgerAdd(invoiceLedgerDto); return AjaxResult.success(); } /** * å¼ç¥¨å°è´¦å é¤ * @param ids * @return */ @DeleteMapping("/del") public AjaxResult invoiceLedgerDel(@RequestParam List<Integer> ids) { invoiceLedgerService.invoiceLedgerDel(ids); return AjaxResult.success(); } /** * å¼ç¥¨å°è´¦ä¿®æ¹ * @param invoiceLedgerDto * @return */ @PostMapping("/update") public AjaxResult invoiceLedgerUpdate(@RequestBody InvoiceLedgerDto invoiceLedgerDto) { invoiceLedgerService.invoiceLedgerUpdate(invoiceLedgerDto); return AjaxResult.success(); } /** * å¼ç¥¨å°è´¦å页æ¥è¯¢ * @param page * @param invoiceLedgerDto * @return */ @GetMapping("/page") public AjaxResult invoiceLedgerPage(Page page, InvoiceLedgerDto invoiceLedgerDto) { return AjaxResult.success(invoiceLedgerService.invoiceLedgerPage(page, invoiceLedgerDto)); } /** * å¼ç¥¨å°è´¦æä»¶æ¥è¯¢ * @param invoiceLedgerId * @return */ @GetMapping("/fileList") public AjaxResult invoiceLedgerFileList(Integer invoiceLedgerId) { return AjaxResult.success(invoiceLedgerService.invoiceLedgerFileList(invoiceLedgerId)); } /** * å¼ç¥¨å°è´¦æä»¶ä¸ä¼ * @param file * @return */ @PostMapping("/uploadFile") public AjaxResult invoiceLedgerUploadFile(MultipartFile file) { try { return AjaxResult.success(invoiceLedgerService.invoiceLedgerUploadFile(file)); }catch (Exception e) { return AjaxResult.error(e.getMessage()); } } /** * éä»¶ä¸è½½ * @param response * @param invoiceLedgerDto * @return */ @GetMapping("/downloadFile") public void invoiceLedgerDownloadFile(HttpServletResponse response, InvoiceLedgerDto invoiceLedgerDto) { invoiceLedgerService.invoiceLedgerDownload(response, invoiceLedgerDto); } } src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.sales.dto; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.pojo.InvoiceLedger; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class InvoiceLedgerDto extends InvoiceLedger { private List<FileVo> fileList; @ApiModelProperty(value = "æ¥è¯¢ææ¬") private String searchText; @ApiModelProperty(value = "客æ·åç§°") private String customerName; } src/main/java/com/ruoyi/sales/excel/InvoiceLedgerExcelDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.ruoyi.sales.excel; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.vo.FileVo; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.sales.pojo.InvoiceLedger; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @Data public class InvoiceLedgerExcelDto { @Excel(name = "éå®ååå·") private String salesContractNo; @Excel(name = "客æ·åç§°") private String customerName; @Excel(name = "å票å·") private String invoiceNo; @Excel(name = "å票éé¢") private BigDecimal invoiceAmount; @Excel(name = "ç¨ç") private BigDecimal taxRate; @Excel(name = "å¼ç¥¨äºº") private String invoicePerson; @Excel(name = "å¼ç¥¨æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime invoiceDate; } src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerFileMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.InvoiceLedgerFile; public interface InvoiceLedgerFileMapper extends BaseMapper<InvoiceLedgerFile> { } src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.pojo.InvoiceLedger; import org.apache.ibatis.annotations.Param; import java.util.List; public interface InvoiceLedgerMapper extends BaseMapper<InvoiceLedger> { /** * å¼ç¥¨å°è´¦å页æ¥è¯¢ * @param page * @param invoiceLedgerDto * @return */ IPage<InvoiceLedgerDto> invoiceLedgerPage(Page page, @Param("invoiceLedgerDto") InvoiceLedgerDto invoiceLedgerDto); /** * å¼ç¥¨å°è´¦æ¥è¯¢ * @param invoiceLedgerDto * @return */ List<InvoiceLedgerDto> invoiceLedgerList(@Param("invoiceLedgerDto") InvoiceLedgerDto invoiceLedgerDto); } src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ package com.ruoyi.sales.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.text.Format; import java.time.LocalDate; import java.time.LocalDateTime; @Data public class InvoiceLedger { /** * åºå· */ @TableId(type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "éå®å°è´¦sales_ledger") private Integer salesLedgerId; @ApiModelProperty(value = "éå®ååå·") private String salesContractNo; @ApiModelProperty(value = "客æ·åç§°ID") private Integer customerId; @ApiModelProperty(value = "å票å·") private String invoiceNo; @ApiModelProperty(value = "å票éé¢") private BigDecimal invoiceAmount; @ApiModelProperty(value = "ç¨ç") private BigDecimal taxRate; @ApiModelProperty(value = "å¼ç¥¨äºº") private String invoicePerson; @ApiModelProperty(value = "å¼ç¥¨æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime invoiceDate; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Integer tenantId; } src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package com.ruoyi.sales.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data public class InvoiceLedgerFile { @ApiModelProperty(value = "æä»¶åç§°") private String fileName; @ApiModelProperty(value = "æä»¶è·¯å¾") private String filePath; @ApiModelProperty(value = "æä»¶å¤§å°") private int fileSize; @ApiModelProperty(value = "å¼ç¥¨å°è´¦ID") private Integer invoiceLedgerId; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Integer tenantId; } src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ package com.ruoyi.sales.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.InvoiceLedgerFile; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; public interface InvoiceLedgerService { /** * å¼ç¥¨å°è´¦æ°å¢ * @param invoiceLedgerDto * @return */ int invoiceLedgerAdd( InvoiceLedgerDto invoiceLedgerDto); /** * å¼ç¥¨å°è´¦å é¤ * @param ids * @return */ int invoiceLedgerDel(List<Integer> ids); /** * å¼ç¥¨å°è´¦ä¿®æ¹ * @param invoiceLedgerDto * @return */ int invoiceLedgerUpdate(InvoiceLedgerDto invoiceLedgerDto); /** * å¼ç¥¨å°è´¦å页æ¥è¯¢ * @param page * @param invoiceLedgerDto * @return */ IPage<InvoiceLedgerDto> invoiceLedgerPage(Page page, InvoiceLedgerDto invoiceLedgerDto); /** * å¼ç¥¨å°è´¦æä»¶æ¥è¯¢ * @param invoiceLedgerId * @return */ List<InvoiceLedgerFile> invoiceLedgerFileList(Integer invoiceLedgerId); /** * å¼ç¥¨å°è´¦æä»¶ä¸ä¼ * @param file * @return */ FileVo invoiceLedgerUploadFile(MultipartFile file); /** * éä»¶ä¸è½½ * @param response * @param invoiceLedgerDto * @return */ void invoiceLedgerDownload(HttpServletResponse response ,InvoiceLedgerDto invoiceLedgerDto); } src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,171 @@ package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.SupplierManageDto; import com.ruoyi.basic.excel.SupplierManageExcelDto; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.excel.InvoiceLedgerExcelDto; import com.ruoyi.sales.mapper.InvoiceLedgerFileMapper; import com.ruoyi.sales.mapper.InvoiceLedgerMapper; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.InvoiceLedgerFile; import com.ruoyi.sales.service.InvoiceLedgerService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.List; import java.util.stream.Collectors; @Service public class InvoiceLedgerServiceImpl extends ServiceImpl<InvoiceLedgerMapper, InvoiceLedger> implements InvoiceLedgerService { @Value("${ruoyi.profile}") private String uploadFile; @Autowired private InvoiceLedgerMapper invoiceLedgerMapper; @Autowired private InvoiceLedgerFileMapper invoiceLedgerFileMapper; /** * å¼ç¥¨å°è´¦æ°å¢ * @param invoiceLedgerDto * @return */ @Override @Transactional(rollbackFor = Exception.class) public int invoiceLedgerAdd(InvoiceLedgerDto invoiceLedgerDto) { InvoiceLedger invoiceLedger = new InvoiceLedger(); BeanUtils.copyProperties(invoiceLedgerDto, invoiceLedger); int result = invoiceLedgerMapper.insert(invoiceLedger); List<FileVo> fileList = invoiceLedgerDto.getFileList(); if(CollectionUtils.isNotEmpty(fileList)){ fileList.forEach(fileVo -> { InvoiceLedgerFile invoiceLedgerFile = new InvoiceLedgerFile(); BeanUtils.copyProperties(fileVo, invoiceLedgerFile); invoiceLedgerFile.setInvoiceLedgerId(invoiceLedger.getId()); invoiceLedgerFileMapper.insert(invoiceLedgerFile); }); } return result; } /** * å¼ç¥¨å°è´¦å é¤ * @param ids * @return */ @Override public int invoiceLedgerDel(List<Integer> ids) { LambdaQueryWrapper<InvoiceLedger> delWrapper = new LambdaQueryWrapper<>(); delWrapper.in(InvoiceLedger::getId, ids); return invoiceLedgerMapper.delete(delWrapper); } /** * å¼ç¥¨å°è´¦ä¿®æ¹ * @param invoiceLedgerDto * @return */ @Override @Transactional(rollbackFor = Exception.class) public int invoiceLedgerUpdate(InvoiceLedgerDto invoiceLedgerDto) { InvoiceLedger invoiceLedger = new InvoiceLedger(); BeanUtils.copyProperties(invoiceLedgerDto, invoiceLedger); int result = invoiceLedgerMapper.updateById(invoiceLedger); // å é¤å ³èéä»¶ LambdaQueryWrapper<InvoiceLedgerFile> delWrapper = new LambdaQueryWrapper<>(); delWrapper.eq(InvoiceLedgerFile::getInvoiceLedgerId, invoiceLedger.getId()); invoiceLedgerFileMapper.delete(delWrapper); // éæ°æå ¥éä»¶å ³è表 List<FileVo> fileList = invoiceLedgerDto.getFileList(); if(CollectionUtils.isNotEmpty(fileList)){ fileList.forEach(fileVo -> { InvoiceLedgerFile invoiceLedgerFile = new InvoiceLedgerFile(); BeanUtils.copyProperties(fileVo, invoiceLedgerFile); invoiceLedgerFile.setInvoiceLedgerId(invoiceLedger.getId()); invoiceLedgerFileMapper.insert(invoiceLedgerFile); }); } return result; } /** * å¼ç¥¨å°è´¦å页æ¥è¯¢ * @param page * @param invoiceLedgerDto * @return */ @Override public IPage<InvoiceLedgerDto> invoiceLedgerPage(Page page, InvoiceLedgerDto invoiceLedgerDto) { return invoiceLedgerMapper.invoiceLedgerPage(page, invoiceLedgerDto); } /** * å¼ç¥¨å°è´¦æä»¶æ¥è¯¢ * @param invoiceLedgerId * @return */ @Override public List<InvoiceLedgerFile> invoiceLedgerFileList(Integer invoiceLedgerId) { LambdaQueryWrapper<InvoiceLedgerFile> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(InvoiceLedgerFile::getInvoiceLedgerId, invoiceLedgerId); return invoiceLedgerFileMapper.selectList(queryWrapper); } /** * å¼ç¥¨å°è´¦æä»¶ä¸ä¼ * @param file * @return */ @Override public FileVo invoiceLedgerUploadFile(MultipartFile file) { FileVo fileVo = new FileVo(); try { String baseDir = uploadFile + File.separatorChar + "invoiceLedger"; String filePath = FileUploadUtils.upload(baseDir, file); fileVo.setFileName(file.getOriginalFilename()); fileVo.setFilePath(filePath); fileVo.setFileSize((int)file.getSize()); }catch (Exception e){ e.printStackTrace(); throw new RuntimeException("æä»¶ä¸ä¼ 失败"); } return fileVo; } /** * éä»¶ä¸è½½ * @param response * @param invoiceLedgerDto * @return */ @Override public void invoiceLedgerDownload(HttpServletResponse response, InvoiceLedgerDto invoiceLedgerDto) { List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoiceLedgerList(invoiceLedgerDto); List<InvoiceLedgerExcelDto> invoiceLedgerExcelDtoList = invoiceLedgerDtoList.stream().map(item -> { InvoiceLedgerExcelDto invoiceLedgerExcelDto = new InvoiceLedgerExcelDto(); BeanUtils.copyProperties(item, invoiceLedgerExcelDto); return invoiceLedgerExcelDto; }).collect(Collectors.toList()); ExcelUtil<InvoiceLedgerExcelDto> util = new ExcelUtil<InvoiceLedgerExcelDto>(InvoiceLedgerExcelDto.class); util.exportExcel(response, invoiceLedgerExcelDtoList, "ä¾åºå导åº"); } } src/main/resources/mapper/sales/InvoiceLedgerMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,69 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.sales.mapper.InvoiceLedgerMapper"> <select id="invoiceLedgerPage" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto"> SELECT T1.id , T1.sales_ledger_id , T1.sales_contract_no , T1.customer_id , T1.invoice_no , T1.invoice_amount , T1.tax_rate , T1.invoice_person , T1.invoice_date , T1.create_time , T1.create_user , T1.update_time , T1.update_user , T1.tenant_id , T2.customer_name FROM invoice_ledger T1 LEFT JOIN customer T2 ON T1.customer_id = T2.id <where> <if test="invoiceLedgerDto.searchText != null and invoiceLedgerDto.searchText != ''"> AND ( T2.customer_name LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%') OR T1.sales_contract_no LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%') ) </if> <if test="invoiceLedgerDto.invoiceDate != null"> AND DATE_FORMAT(T1.invoice_date,'%Y-%m-%d') = DATE_FORMAT(#{invoiceLedgerDto.invoiceDate},'%Y-%m-%d') </if> </where> </select> <select id="invoiceLedgerList" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto"> SELECT T1.id , T1.sales_ledger_id , T1.sales_contract_no , T1.customer_id , T1.invoice_no , T1.invoice_amount , T1.tax_rate , T1.invoice_person , T1.invoice_date , T1.create_time , T1.create_user , T1.update_time , T1.update_user , T1.tenant_id , T2.customer_name FROM invoice_ledger T1 LEFT JOIN customer T2 ON T1.customer_id = T2.id <where> <if test="invoiceLedgerDto.searchText != null and invoiceLedgerDto.searchText != ''"> AND ( T2.customer_name LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%') OR T1.sales_contract_no LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%') ) </if> <if test="invoiceLedgerDto.invoiceDate != null"> AND DATE_FORMAT(T1.invoice_date,'%Y-%m-%d') = DATE_FORMAT(#{invoiceLedgerDto.invoiceDate},'%Y-%m-%d') </if> </where> </select> </mapper>