@ -3,10 +3,9 @@ package com.ruoyi.financial.controller;
import java.io.* ;
import java.io.* ;
import java.net.URLEncoder ;
import java.net.URLEncoder ;
import java.time.format.DateTimeFormatter ;
import java.time.format.DateTimeFormatter ;
import java.util.Collections ;
import java.util.* ;
import java.util.HashMap ;
import java.util.stream.Collectors ;
import java.util.List ;
import java.util.stream.IntStream ;
import java.util.Map ;
import com.alibaba.excel.EasyExcel ;
import com.alibaba.excel.EasyExcel ;
import com.alibaba.excel.ExcelWriter ;
import com.alibaba.excel.ExcelWriter ;
@ -14,14 +13,21 @@ import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet ;
import com.alibaba.excel.write.metadata.WriteSheet ;
import com.alibaba.excel.write.metadata.fill.FillConfig ;
import com.alibaba.excel.write.metadata.fill.FillConfig ;
import com.alibaba.excel.write.metadata.fill.FillWrapper ;
import com.alibaba.excel.write.metadata.fill.FillWrapper ;
import com.ruoyi.common.core.domain.entity.SysUser ;
import com.ruoyi.common.core.text.Convert ;
import com.ruoyi.common.utils.DateUtils ;
import com.ruoyi.common.utils.DateUtils ;
import com.ruoyi.common.utils.ShiroUtils ;
import com.ruoyi.common.utils.ShiroUtils ;
import com.ruoyi.common.utils.StringUtils ;
import com.ruoyi.common.utils.file.FileDownloadUtils ;
import com.ruoyi.common.utils.file.FileDownloadUtils ;
import com.ruoyi.financial.domain.FinancialReceivablesRecords ;
import com.ruoyi.financial.domain.FinancialReceivablesRecords ;
import com.ruoyi.financial.domain.VO.ExportFinancialReceivablesVo ;
import com.ruoyi.financial.domain.VO.ExportFinancialReceivablesVo ;
import com.ruoyi.financial.service.IFinancialReceivablesRecordsService ;
import com.ruoyi.financial.service.IFinancialReceivablesRecordsService ;
import com.ruoyi.framework.web.service.DictService ;
import com.ruoyi.framework.web.service.DictService ;
import com.ruoyi.system.domain.BaseExpenseAccountChild ;
import com.ruoyi.system.domain.SysMakeorderPickVo ;
import com.ruoyi.system.service.ISysUserService ;
import org.apache.avalon.framework.service.ServiceException ;
import org.apache.avalon.framework.service.ServiceException ;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException ;
import org.apache.poi.ss.usermodel.* ;
import org.apache.poi.ss.usermodel.* ;
import org.apache.poi.ss.util.CellRangeAddress ;
import org.apache.poi.ss.util.CellRangeAddress ;
import org.apache.poi.xssf.usermodel.XSSFWorkbook ;
import org.apache.poi.xssf.usermodel.XSSFWorkbook ;
@ -30,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource ;
import org.springframework.core.io.ClassPathResource ;
import org.springframework.stereotype.Controller ;
import org.springframework.stereotype.Controller ;
import org.springframework.ui.ModelMap ;
import org.springframework.ui.ModelMap ;
import org.springframework.util.ResourceUtils ;
import org.springframework.web.bind.annotation.* ;
import org.springframework.web.bind.annotation.* ;
import com.ruoyi.common.annotation.Log ;
import com.ruoyi.common.annotation.Log ;
import com.ruoyi.common.enums.BusinessType ;
import com.ruoyi.common.enums.BusinessType ;
@ -66,7 +73,7 @@ public class FinancialReceivablesController extends BaseController
private IFinancialReceivablesRecordsService receivablesRecordsService ;
private IFinancialReceivablesRecordsService receivablesRecordsService ;
@Autowired
@Autowired
private DictService dictService ;
private DictService dictService ;
@RequiresPermissions ( "financial:receivables:view" )
@RequiresPermissions ( "financial:receivables:view" )
@GetMapping ( )
@GetMapping ( )
public String receivables ( )
public String receivables ( )
@ -94,11 +101,19 @@ public class FinancialReceivablesController extends BaseController
@Log ( title = "财务应收账款" , businessType = BusinessType . EXPORT )
@Log ( title = "财务应收账款" , businessType = BusinessType . EXPORT )
@PostMapping ( "/export" )
@PostMapping ( "/export" )
@ResponseBody
@ResponseBody
public AjaxResult export ( FinancialReceivables financialReceivables )
public AjaxResult export ( FinancialReceivables financialReceivables , String ids )
{
{
List < FinancialReceivables > list = financialReceivablesService . selectFinancialReceivablesList ( financialReceivables ) ;
if ( org . springframework . util . StringUtils . isEmpty ( ids ) ) {
ExcelUtil < FinancialReceivables > util = new ExcelUtil < FinancialReceivables > ( FinancialReceivables . class ) ;
List < FinancialReceivables > list = financialReceivablesService . selectFinancialReceivablesList ( financialReceivables ) ;
return util . exportExcel ( list , "财务应收账款数据" ) ;
ExcelUtil < FinancialReceivables > util = new ExcelUtil < FinancialReceivables > ( FinancialReceivables . class ) ;
return util . exportExcel ( list , "财务应收账款数据" ) ;
} else {
String [ ] codes = ids . split ( "," ) ;
List < FinancialReceivables > list = financialReceivablesService . selectFinancialReceivablesByNos ( codes ) ;
ExcelUtil < FinancialReceivables > util = new ExcelUtil < FinancialReceivables > ( FinancialReceivables . class ) ;
return util . exportExcel ( list , ids ) ;
}
}
}
/ * *
/ * *
@ -161,18 +176,19 @@ public class FinancialReceivablesController extends BaseController
/**导出收款凭证*/
/**导出收款凭证*/
@RequiresPermissions ( "financial:receivables:export" )
@RequiresPermissions ( "financial:receivables:export" )
@Log ( title = "财务应收账款凭证" , businessType = BusinessType . EXPORT )
@Log ( title = "财务应收账款凭证" , businessType = BusinessType . EXPORT )
@GetMapping ( "/excelReceivablesVoucher/{financialReceivablesId} " )
@GetMapping ( "/excelReceivablesVoucher" )
public void excelReceivablesVoucher ( @PathVariable ( "financialReceivablesId" ) Long financialReceivablesId , HttpServletResponse response ) throws IOException {
public void excelReceivablesVoucher ( @RequestParam ( "financialReceivablesId" ) Long financialReceivablesId , @RequestParam ( "ids" ) String ids , HttpServletResponse response ) throws IOException {
FinancialReceivables financialReceivables = financialReceivablesService . selectFinancialReceivablesById ( financialReceivablesId ) ;
FinancialReceivables financialReceivables = financialReceivablesService . selectFinancialReceivablesById ( financialReceivablesId ) ;
List < FinancialReceivablesRecords > financialReceivablesRecordsList = receivablesRecordsService . selectFinancialReceivablesRecordsListByCode ( financialReceivables . getFinancialReceivablesCode ( ) ) ;
List < FinancialReceivablesRecords > financialReceivablesRecordsList = receivablesRecordsService . selectFinancialReceivablesRecordsListByCode ( financialReceivables . getFinancialReceivablesCode ( ) ) ;
//
if ( StringUtils . isNotEmpty ( ids ) ) {
// Map<String, Object> map = financialReceivablesService.exportTemplate(financialReceivablesRecordsList);
financialReceivablesRecordsList = receivablesRecordsService . selectFinancialReceivablesRecordsListByIds ( Convert . toStrArray ( ids ) ) ;
}
// 模版位置
// 模版位置
String name = "FinancialReceiptVoucherTemplate.xlsx" ;
String name = "FinancialReceiptVoucherTemplate.xlsx" ;
FileDownloadUtils fileDownloadUtils = new FileDownloadUtils ( ) ;
FileDownloadUtils fileDownloadUtils = new FileDownloadUtils ( ) ;
//获取文件的绝对路径
//获取文件的绝对路径
String fileAbsolutePath = fileDownloadUtils . getFileAbsolutePath ( name ) ;
String fileAbsolutePath = fileDownloadUtils . getFileAbsolutePath ( name ) ;
File file = ResourceUtils . getFile ( fileAbsolutePath ) ;
String fileName = DateUtils . dateTimeNow ( ) + financialReceivables . getFinancialReceivablesCode ( ) + "收款凭证.xlsx" ;
String fileName = DateUtils . dateTimeNow ( ) + financialReceivables . getFinancialReceivablesCode ( ) + "收款凭证.xlsx" ;
// 设置响应头,指定文件名和文件类型
// 设置响应头,指定文件名和文件类型
@ -180,30 +196,62 @@ public class FinancialReceivablesController extends BaseController
response . setContentType ( "application/octet-stream" ) ;
response . setContentType ( "application/octet-stream" ) ;
// 获取模板文件的输入流,引用绝对路径上的模版
// 获取模板文件的输入流,引用绝对路径上的模版
// 创建一个ExcelWriterBuilder对象,并指定输出流和输入流
// 创建一个ExcelWriterBuilder对象,并指定输出流和输入流
// 每页最多显示的行数
ExcelWriter excelWriter = EasyExcel . write ( response . getOutputStream ( ) ) . withTemplate ( fileAbsolutePath ) . build ( ) ;
final int maxRowsPerPage = 6 ;
final int maxRowsPerPage = 6 ;
// 计算需要多少页
// 计算需要多少页
int totalPages = ( int ) Math . ceil ( ( double ) financialReceivablesRecordsList . size ( ) / maxRowsPerPage ) ;
int totalPages = ( int ) Math . ceil ( ( double ) financialReceivablesRecordsList . size ( ) / maxRowsPerPage ) ;
for ( int i = 0 ; i < totalPages - 1 ; i + + ) {
List < FinancialReceivablesRecords > financialReceivablesRecordsListPage =
List < FinancialReceivablesRecords > receivablesRecordsList = financialReceivablesRecordsList ;
receivablesRecordsService . selectFinancialReceivablesRecordsListByCodePage ( financialReceivables . getFinancialReceivablesCode ( ) , i + 1 , maxRowsPerPage ) ;
Map < String , Object > map = financialReceivablesService . exportTemplate ( financialReceivablesRecordsListPage ) ;
List < List < FinancialReceivablesRecords > > pages = IntStream . range ( 0 , totalPages )
Map < String , Object > map1 = new HashMap < > ( ) ;
. mapToObj ( i - > receivablesRecordsList . subList (
map1 . put ( "debitAccount" , dictService . getLabel ( "receivables_debit_entry" , financialReceivables . getDebitAccount ( ) ) ) ;
i * maxRowsPerPage ,
Math . min ( ( i + 1 ) * maxRowsPerPage , receivablesRecordsList . size ( ) ) ) )
. collect ( Collectors . toList ( ) ) ;
// 重新制作导出模板
XSSFWorkbook workbook = null ;
if ( file . exists ( ) ) {
try {
workbook = new XSSFWorkbook ( file ) ;
for ( int i = 0 ; i < totalPages ; i + + ) {
if ( i = = 0 ) {
workbook . setSheetName ( i , "sheet" + ( i + 1 ) ) ;
} else {
workbook . cloneSheet ( 0 , "sheet" + ( i + 1 ) ) ;
}
}
} catch ( InvalidFormatException e ) {
throw new RuntimeException ( e ) ;
}
}
//写到流里
ByteArrayOutputStream bos = new ByteArrayOutputStream ( ) ;
workbook . write ( bos ) ;
byte [ ] bArray = bos . toByteArray ( ) ;
InputStream is = new ByteArrayInputStream ( bArray ) ;
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
ExcelWriter excelWriter = EasyExcel . write ( response . getOutputStream ( ) ) . withTemplate ( is ) . build ( ) ;
for ( int i = 0 ; i < totalPages ; i + + ) {
List < FinancialReceivablesRecords > receivablesRecordsListPage = pages . get ( i ) ;
Map < String , Object > map = financialReceivablesService . exportTemplate ( receivablesRecordsListPage ) ;
map . put ( "debitAccount" , financialReceivables . getDebitAccount ( ) ) ;
map . put ( "debitBank" , financialReceivables . getDebitBank ( ) ) ;
String date = DateUtils . getDate ( ) ;
String date = DateUtils . getDate ( ) ;
String [ ] dateArray = date . split ( "-" ) ;
String [ ] dateArray = date . split ( "-" ) ;
map1 . put ( "year" , dateArray [ 0 ] ) ;
map . put ( "year" , dateArray [ 0 ] ) ;
map1 . put ( "month" , dateArray [ 1 ] ) ;
map . put ( "month" , dateArray [ 1 ] ) ;
map1 . put ( "day" , dateArray [ 2 ] ) ;
map . put ( "day" , dateArray [ 2 ] ) ;
map1 . put ( "debitBank" , dictService . getLabel ( "receivables_bank" , financialReceivables . getOpenBank ( ) ) ) ;
SysUser loginUser = ShiroUtils . getSysUser ( ) ;
map1 . put ( "loginName" , ShiroUtils . getLoginName ( ) ) ;
map . put ( "loginName" , loginUser . getUser Name( ) ) ;
// 创建一个WriteSheet对象,并指定模板中的Sheet编号
// 创建一个WriteSheet对象,并指定模板中的Sheet编号
WriteSheet writeSheet = EasyExcel . writerSheet ( "sheet" + ( i + 1 ) ) . build ( ) ;
WriteSheet writeSheet = EasyExcel . writerSheet ( "sheet" + ( i + 1 ) ) . build ( ) ;
FillConfig fillConfig = FillConfig . builder ( ) . forceNewRow ( false ) . build ( ) ;
FillConfig fillConfig = FillConfig . builder ( ) . forceNewRow ( false ) . build ( ) ;
excelWriter . fill ( map1 , fillConfig , writeSheet ) ;
excelWriter . fill ( map , writeSheet ) ;
excelWriter . fill ( map . get ( "list" ) , fillConfig , writeSheet ) ;
excelWriter . fill ( map . get ( "list" ) , fillConfig , writeSheet ) ;
excelWriter . fill ( map . get ( "amount" ) , writeSheet ) ;
}
}
excelWriter . finish ( ) ;
excelWriter . finish ( ) ;
}
}
@ -258,18 +306,6 @@ public class FinancialReceivablesController extends BaseController
}
}
/ * *
* 结案
* /
@RequiresPermissions ( "financial:receivables:receivablesClosing" )
@Log ( title = "财务应收账款" , businessType = BusinessType . UPDATE )
@GetMapping ( "/receivablesClosing/{financialReceivablesId}" )
@ResponseBody
public AjaxResult receivablesClosing ( @PathVariable ( "financialReceivablesId" ) Long financialReceivablesId ) {
return toAjax ( financialReceivablesService . closingFinancialReceivablesById ( financialReceivablesId ) ) ;
}
/ * *
/ * *
* 应收款账单详情
* 应收款账单详情
* /
* /
@ -345,4 +381,24 @@ public class FinancialReceivablesController extends BaseController
{
{
return AjaxResult . success ( financialReceivablesService . updateReceivableDebit ( financialReceivables ) ) ;
return AjaxResult . success ( financialReceivablesService . updateReceivableDebit ( financialReceivables ) ) ;
}
}
/ * *
* 应收款账单结案
* /
@GetMapping ( "/closed/{financialReceivablesId}" )
public String receivablesClosed ( @PathVariable ( "financialReceivablesId" ) Long financialReceivablesId , ModelMap mmap )
{
FinancialReceivables financialReceivables = financialReceivablesService . selectFinancialReceivablesById ( financialReceivablesId ) ;
mmap . put ( "financialReceivables" , financialReceivables ) ;
return prefix + "/closed" ;
}
/ * *
* 保存应收账款结案
* /
@PostMapping ( "/closed" )
@ResponseBody
public AjaxResult saveClosed ( FinancialReceivables financialReceivables )
{
return toAjax ( financialReceivablesService . closingFinancialReceivables ( financialReceivables ) ) ;
}
}
}