Commit a90aea4e authored by kevin's avatar kevin

#

parent 90ce5d07
...@@ -7,30 +7,35 @@ package pwc.taxtech.atms.common.util; ...@@ -7,30 +7,35 @@ package pwc.taxtech.atms.common.util;
* @Date 3/31/2019 12:35 PM * @Date 3/31/2019 12:35 PM
* Version 1.0 * Version 1.0
**/ **/
import com.google.common.collect.Lists;
import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sun.misc.BASE64Encoder; import sun.misc.BASE64Encoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.List;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@SuppressWarnings("restriction")
public class FileExcelUtil { public class FileExcelUtil {
private static final Logger logger = LoggerFactory.getLogger(FileExcelUtil.class); private static final Logger logger = LoggerFactory.getLogger(FileExcelUtil.class);
/** /**
* 编译下载的文件名 * 编译下载的文件名
*
* @param filename * @param filename
* @param agent * @param agent
* @return * @return
* @throws IOException * @throws IOException
*/ */
public static String encodeDownloadFilename(String filename, String agent)throws IOException { public static String encodeDownloadFilename(String filename, String agent) throws IOException {
if (agent.contains("Firefox")) { // 火狐浏览器 if (agent.contains("Firefox")) { // 火狐浏览器
filename = "=?UTF-8?B?" filename = "=?UTF-8?B?"
+ new BASE64Encoder().encode(filename.getBytes("utf-8")) + new BASE64Encoder().encode(filename.getBytes("utf-8"))
...@@ -38,50 +43,53 @@ public class FileExcelUtil { ...@@ -38,50 +43,53 @@ public class FileExcelUtil {
filename = filename.replaceAll("\r\n", ""); filename = filename.replaceAll("\r\n", "");
} else { // IE及其他浏览器 } else { // IE及其他浏览器
filename = URLEncoder.encode(filename, "utf-8"); filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+"," "); filename = filename.replace("+", " ");
} }
return filename; return filename;
} }
/** /**
* 创建文件夹; * 创建文件夹;
*
* @param path * @param path
*/ */
public static void createFile(String path) { public static File createFile(String path) {
File file = new File(path); File file = new File(path);
//判断文件是否存在; //判断文件是否存在;
if (!file.exists()) { if (!file.exists()) {
//创建文件; //创建文件;
file.mkdirs(); file.mkdirs();
} }
return file;
} }
/** /**
* 生成.zip文件; * 生成.zip文件;
*
* @param path * @param path
* @throws IOException * @throws IOException
*/ */
public static ZipOutputStream craeteZipPath(String path) throws IOException{ public static ZipOutputStream craeteZipPath(String path) throws IOException {
ZipOutputStream zipOutputStream = null; ZipOutputStream zipOutputStream = null;
File file = new File(path+DateUtils.nowDateFormat()+".zip"); File file = new File(path + DateUtils.nowDateFormat() + ".zip");
zipOutputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file))); zipOutputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
File[] files = new File(path).listFiles(); File[] files = new File(path).listFiles();
FileInputStream fileInputStream = null; FileInputStream fileInputStream = null;
byte[] buf = new byte[1024]; byte[] buf = new byte[1024];
int len = 0; int len = 0;
if(files!=null && files.length > 0){ if (files != null && files.length > 0) {
for(File excelFile:files){ for (File excelFile : files) {
String fileName = excelFile.getName(); String fileName = excelFile.getName();
fileInputStream = new FileInputStream(excelFile); fileInputStream = new FileInputStream(excelFile);
//放入压缩zip包中; //放入压缩zip包中;
zipOutputStream.putNextEntry(new ZipEntry(path + "/"+fileName)); zipOutputStream.putNextEntry(new ZipEntry(path + "/" + fileName));
//读取文件; //读取文件;
while((len=fileInputStream.read(buf)) >0){ while ((len = fileInputStream.read(buf)) > 0) {
zipOutputStream.write(buf, 0, len); zipOutputStream.write(buf, 0, len);
} }
//关闭; //关闭;
zipOutputStream.closeEntry(); zipOutputStream.closeEntry();
if(fileInputStream != null){ if (fileInputStream != null) {
fileInputStream.close(); fileInputStream.close();
} }
} }
...@@ -94,82 +102,16 @@ public class FileExcelUtil { ...@@ -94,82 +102,16 @@ public class FileExcelUtil {
} }
/**
* //压缩文件
* @param srcfile 要压缩的文件数组
* @param zipfile 生成的zip文件对象
*/
public static void ZipFiles(java.io.File[] srcfile, File zipfile) throws Exception {
byte[] buf = new byte[1024];
FileOutputStream fos = new FileOutputStream(zipfile);
ZipOutputStream out = new ZipOutputStream(fos);
for (int i = 0; i < srcfile.length; i++) {
FileInputStream in = new FileInputStream(srcfile[i]);
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.closeEntry();
in.close();
}
out.close();
fos.flush();
fos.close();
}
/**
* 删除文件夹及文件夹下所有文件
* @param dir
* @return
*/
public static boolean deleteDir(File dir) {
if (dir == null || !dir.exists()){
return true;
}
if (dir.isDirectory()) {
String[] children = dir.list();
//递归删除目录中的子目录下
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
/**
* 生成html
* @param msg
* @return
*/
public static String getErrorHtml(String msg) {
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
sb.append("</head>");
sb.append("<body>");
sb.append("<div id='errorInfo'> ");
sb.append("</div>");
sb.append("<script>alert('"+msg+"')</script>");
sb.append("</body>");
sb.append("</html>");
return sb.toString();
}
/** /**
* 设置下载excel的响应头信息 * 设置下载excel的响应头信息
*
* @param response * @param response
* @param request * @param request
* @param fileName * @param fileName
* @throws IOException * @throws IOException
*/ */
public static void setExcelHeadInfo(HttpServletResponse response, HttpServletRequest request, String fileName) { public static void setExcelHeadInfo(HttpServletResponse response, HttpServletRequest request, String fileName) {
try { try {
// 获取客户端浏览器的类型 // 获取客户端浏览器的类型
String agent = request.getHeader("User-Agent"); String agent = request.getHeader("User-Agent");
...@@ -178,16 +120,17 @@ public class FileExcelUtil { ...@@ -178,16 +120,17 @@ public class FileExcelUtil {
// 告诉客户端允许断点续传多线程连接下载 // 告诉客户端允许断点续传多线程连接下载
response.setHeader("Accept-Ranges", "bytes"); response.setHeader("Accept-Ranges", "bytes");
//文件后缀 //文件后缀
response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + encodingFileName); response.setHeader("Content-Disposition", "attachment; filename=" + encodingFileName);
} catch (IOException e) { } catch (IOException e) {
logger.error(Thread.currentThread().getStackTrace()[1].getMethodName() +"发生的异常是: ",e); logger.error(Thread.currentThread().getStackTrace()[1].getMethodName() + "发生的异常是: ", e);
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
/** /**
* 设置下载zip的响应头信息 * 设置下载zip的响应头信息
*
* @param response * @param response
* @param fileName 文件名 * @param fileName 文件名
* @param request * @param request
...@@ -206,4 +149,161 @@ public class FileExcelUtil { ...@@ -206,4 +149,161 @@ public class FileExcelUtil {
response.setHeader("Content-Disposition", "attachment; filename=" + encodingFileName); response.setHeader("Content-Disposition", "attachment; filename=" + encodingFileName);
} }
/**
* 下载excel
*
* @param request
* @param response
* @param fileName
* @param workbook
* @time 2018年6月25日11:47:07
*/
private void downloadExcel(HttpServletRequest request, HttpServletResponse response, String fileName, Workbook workbook) {
//一个流两个头
//设置下载excel的头信息
FileExcelUtil.setExcelHeadInfo(response, request, fileName);
// 写出文件
ServletOutputStream os = null;
try {
os = response.getOutputStream();
workbook.write(os);
} catch (IOException e) {
logger.error(Thread.currentThread().getStackTrace()[1].getMethodName() + "发生的异常是: ", e);
throw new RuntimeException(e);
} finally {
try {
if (os != null) {
os.flush();
os.close();
}
if (workbook != null) {
workbook.close();
}
} catch (Exception e1) {
logger.error(Thread.currentThread().getStackTrace()[1].getMethodName() + "发生的异常是: ", e1);
throw new RuntimeException(e1);
}
}
}
/**
* 生成excel到指定路径
*
* @param wb
* @Param path 文件路径,包括zip文件夹路径
* @throws Exception
*/
public static List<File> generateExcelToPath(Workbook wb, String path) throws Exception {
String[] pathArr = path.split("\\\\");
String zipDir = pathArr[0];
FileExcelUtil.createFile(zipDir);
FileOutputStream fos = null;
List<File> listFile = Lists.newArrayList();
try {
fos = new FileOutputStream(path);
wb.write(fos);
listFile.add(new File(path));
} finally {
if (fos != null) {
fos.flush();
fos.close();
}
if (wb != null) {
wb.close();
}
}
return listFile;
}
/**
* 将批量文件打包下载成zip
*
* @param request
* @param response
* @param zipName 下载的zip名
* @param files 要打包的批量文件
* @param zipPath 生成的zip路径
* @throws Exception
*/
public static synchronized void downloadZip(HttpServletRequest request, HttpServletResponse response, String zipName, List<File> files, String zipPath) throws Exception {
File srcfile[] = new File[files.size()];
File zip = new File(zipPath);
for (int i = 0; i < files.size(); i++) {
srcfile[i] = files.get(i);
}
//生成.zip文件;
FileInputStream inStream = null;
ServletOutputStream os = null;
try {
//设置下载zip的头信息
FileExcelUtil.setZipDownLoadHeadInfo(response, request, zipName);
os = response.getOutputStream();
FileExcelUtil.ZipFiles(srcfile, zip);
inStream = new FileInputStream(zip);
byte[] buf = new byte[4096];
int readLength;
while (((readLength = inStream.read(buf)) != -1)) {
os.write(buf, 0, readLength);
}
} finally {
if (inStream != null) {
inStream.close();
}
if (os != null) {
os.flush();
os.close();
}
deleteDir(zip);
}
}
/**
* //压缩文件
*
* @param srcfile 要压缩的文件数组
* @param zipfile 生成的zip文件对象
*/
public static void ZipFiles(java.io.File[] srcfile, File zipfile) throws Exception {
byte[] buf = new byte[1024];
FileOutputStream fos = new FileOutputStream(zipfile);
ZipOutputStream out = new ZipOutputStream(fos);
for (int i = 0; i < srcfile.length; i++) {
FileInputStream in = new FileInputStream(srcfile[i]);
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.closeEntry();
in.close();
}
out.close();
fos.flush();
fos.close();
}
/**
* 删除文件夹及文件夹下所有文件
*
* @param dir
* @return
*/
public static boolean deleteDir(File dir) {
if (dir == null || !dir.exists()) {
return true;
}
if (dir.isDirectory()) {
String[] children = dir.list();
//递归删除目录中的子目录下
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
} }
\ No newline at end of file
...@@ -8,6 +8,7 @@ import org.springframework.http.ResponseEntity; ...@@ -8,6 +8,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import pwc.taxtech.atms.common.message.ErrorMessage; import pwc.taxtech.atms.common.message.ErrorMessage;
import pwc.taxtech.atms.common.util.FileExcelUtil;
import pwc.taxtech.atms.constant.enums.EnumServiceType; import pwc.taxtech.atms.constant.enums.EnumServiceType;
import pwc.taxtech.atms.dao.OrganizationMapper; import pwc.taxtech.atms.dao.OrganizationMapper;
import pwc.taxtech.atms.dao.ProjectMapper; import pwc.taxtech.atms.dao.ProjectMapper;
...@@ -26,8 +27,10 @@ import pwc.taxtech.atms.vat.entity.*; ...@@ -26,8 +27,10 @@ import pwc.taxtech.atms.vat.entity.*;
import pwc.taxtech.atms.vat.service.impl.ReportServiceImpl; import pwc.taxtech.atms.vat.service.impl.ReportServiceImpl;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.List; import java.util.List;
...@@ -151,10 +154,10 @@ public class ReportController { ...@@ -151,10 +154,10 @@ public class ReportController {
return reportService.getCellData(reportId, from); return reportService.getCellData(reportId, from);
} }
private static OperationResultDto<ReportDataDto> operationResultDto = null;
@RequestMapping(value = "reportEbitData", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "reportEbitData", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public OperationResultDto<ReportDataDto> reportEbitData(@RequestBody RequestParameterDto requestParameterDto) { public OperationResultDto<ReportDataDto> reportEbitData(@RequestBody RequestParameterDto requestParameterDto) {
OperationResultDto operationResultDto = new OperationResultDto();
/*OperationResultDto resultDto = new OperationResultDto(); /*OperationResultDto resultDto = new OperationResultDto();
*//* if (requestParameterDto.getProjectId() == null || requestParameterDto.getReportId() == null) { *//* if (requestParameterDto.getProjectId() == null || requestParameterDto.getReportId() == null) {
resultDto.setResult(false); resultDto.setResult(false);
...@@ -257,14 +260,16 @@ public class ReportController { ...@@ -257,14 +260,16 @@ public class ReportController {
@RequestMapping(value = "doUpload", method = RequestMethod.POST) @RequestMapping(value = "doUpload", method = RequestMethod.POST)
public OperationResultDto doUploadAttach(@RequestParam("fileName") String fileName, MultipartFile file, String remarks, @RequestParam("activeCol") Long activeCol, @RequestParam("activeRow") Long activeRow, @RequestParam("activeTemplateId") String activeTemplateId) { public OperationResultDto doUploadAttach(@RequestParam("fileName") String fileName, MultipartFile file, String remarks, @RequestParam("activeCol") Long activeCol, @RequestParam("activeRow") Long activeRow, @RequestParam("activeTemplateId") String activeTemplateId) {
FileUpload fileUpload = null; FileUpload fileUpload = null;
OperationResultDto operationResultDto = new OperationResultDto();
try{ try{
fileUpload = didiFileUploadService.uploadFile(file, file.getOriginalFilename(), "附件上传"); fileUpload = didiFileUploadService.uploadFile(file, file.getOriginalFilename(), "附件上传");
operationResultDto.setData(reportService.bindPwcAttach(activeCol, activeRow, activeTemplateId, fileUpload, remarks));
operationResultDto.setResultMsg("success");
return operationResultDto;
}catch(Exception e){ }catch(Exception e){
e.printStackTrace(); e.printStackTrace();
return operationResultDto.error();
} }
operationResultDto.success();
reportService.bindPwcAttach(activeCol, activeRow, activeTemplateId, fileUpload, remarks);
return operationResultDto;
} }
@RequestMapping("loadAttachList") @RequestMapping("loadAttachList")
...@@ -345,11 +350,14 @@ public class ReportController { ...@@ -345,11 +350,14 @@ public class ReportController {
* 批量导出利润表 * 批量导出利润表
*/ */
@RequestMapping("manyExport") @RequestMapping("manyExport")
public OperationResultDto manyExport(@RequestBody RequestParameterDto requestParameterDto) { public OperationResultDto manyExport(@RequestBody RequestParameterDto requestParameterDto, HttpServletResponse response, HttpServletRequest request) {
OperationResultDto operationResultDto = new OperationResultDto(); OperationResultDto operationResultDto = new OperationResultDto();
String zipName = "利润表"; String zipName = "利润表";
try { try {
reportService.manyExport(requestParameterDto, zipName); String zipPath = "/zipDir";
//生成zip文件夹
FileExcelUtil.createFile(zipPath);
reportService.manyExport(requestParameterDto, zipName,request, response, zipPath);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -357,6 +365,7 @@ public class ReportController { ...@@ -357,6 +365,7 @@ public class ReportController {
return operationResultDto; return operationResultDto;
} }
/** /**
* 将spread序列化字符串保存到数据库 * 将spread序列化字符串保存到数据库
*/ */
......
...@@ -227,56 +227,56 @@ public class CitReportServiceImpl extends BaseService { ...@@ -227,56 +227,56 @@ public class CitReportServiceImpl extends BaseService {
//===============================================start validation compute========================================================== //===============================================start validation compute==========================================================
//todo: 1.get the data from workbook, then put the data into new workbook //todo: 1.get the data from workbook, then put the data into new workbook
Workbook workbook4Validate = reportGenerator.createWorkBookByPeriodTemplate(resources.getPeriodTemplates(), genJob); // Workbook workbook4Validate = reportGenerator.createWorkBookByPeriodTemplate(resources.getPeriodTemplates(), genJob);
copyDataToWorkbook4Validate(workbook, workbook4Validate); // copyDataToWorkbook4Validate(workbook, workbook4Validate);
//todo: 2.get the validate formula in the cell_template_config // //todo: 2.get the validate formula in the cell_template_config
List<PeriodCellTemplateConfig> periodCellTemplateConfigs = resources.getPeriodCellTemplateConfigs().stream() // List<PeriodCellTemplateConfig> periodCellTemplateConfigs = resources.getPeriodCellTemplateConfigs().stream()
.filter(a -> a.getDataSourceType().equals(CellDataSourceType.Validation.getCode())).collect(Collectors.toList()); // .filter(a -> a.getDataSourceType().equals(CellDataSourceType.Validation.getCode())).collect(Collectors.toList());
List<PeriodCellTemplateConfigDto> periodCellTemplateConfigDtos = new ArrayList<>(); // List<PeriodCellTemplateConfigDto> periodCellTemplateConfigDtos = new ArrayList<>();
periodCellTemplateConfigs.forEach(a -> { // periodCellTemplateConfigs.forEach(a -> {
if (StringUtils.isNotBlank(a.getValidation())) { // if (StringUtils.isNotBlank(a.getValidation())) {
Optional<Template> template = templates.stream().filter(t -> t.getId().equals(a.getReportTemplateId())).findFirst(); // Optional<Template> template = templates.stream().filter(t -> t.getId().equals(a.getReportTemplateId())).findFirst();
String templateCode = template.isPresent() ? template.get().getCode() : ""; // String templateCode = template.isPresent() ? template.get().getCode() : "";
Integer sheetNumber = template.isPresent() ? template.get().getOrderIndex() : null; // Integer sheetNumber = template.isPresent() ? template.get().getOrderIndex() : null;
Optional<PeriodCellTemplate> periodCellTemplate = resources.getPeriodCellTemplates().stream().filter(c -> c.getCellTemplateId().equals(a.getCellTemplateId())).findFirst(); // Optional<PeriodCellTemplate> periodCellTemplate = resources.getPeriodCellTemplates().stream().filter(c -> c.getCellTemplateId().equals(a.getCellTemplateId())).findFirst();
Integer rowNumber = periodCellTemplate.isPresent() ? periodCellTemplate.get().getRowIndex() : null; // Integer rowNumber = periodCellTemplate.isPresent() ? periodCellTemplate.get().getRowIndex() : null;
Integer colNumber = periodCellTemplate.isPresent() ? periodCellTemplate.get().getColumnIndex() : null; // Integer colNumber = periodCellTemplate.isPresent() ? periodCellTemplate.get().getColumnIndex() : null;
if (StringUtils.isNotBlank(templateCode) && rowNumber != null && colNumber != null) { // if (StringUtils.isNotBlank(templateCode) && rowNumber != null && colNumber != null) {
String replaceFormula = String.format("BB(\"%s\",%d,%d,0,0)", templateCode, colNumber, rowNumber); // String replaceFormula = String.format("BB(\"%s\",%d,%d,0,0)", templateCode, colNumber, rowNumber);
a.setParsedValidation(a.getValidation().replace("aa()", replaceFormula)); // a.setParsedValidation(a.getValidation().replace("aa()", replaceFormula));
PeriodCellTemplateConfigDto periodCellTemplateConfigDto = new PeriodCellTemplateConfigDto(); // PeriodCellTemplateConfigDto periodCellTemplateConfigDto = new PeriodCellTemplateConfigDto();
periodCellTemplateConfigDto.setSheetNumber(sheetNumber); // periodCellTemplateConfigDto.setSheetNumber(sheetNumber);
periodCellTemplateConfigDto.setRowNumber(rowNumber); // periodCellTemplateConfigDto.setRowNumber(rowNumber);
periodCellTemplateConfigDto.setColNumber(colNumber); // periodCellTemplateConfigDto.setColNumber(colNumber);
periodCellTemplateConfigDto.setValidation(a.getValidation()); // periodCellTemplateConfigDto.setValidation(a.getValidation());
periodCellTemplateConfigDto.setParsedValidation(a.getParsedValidation()); // periodCellTemplateConfigDto.setParsedValidation(a.getParsedValidation());
periodCellTemplateConfigDto.setCellTemplateId(periodCellTemplate.get().getCellTemplateId()); // periodCellTemplateConfigDto.setCellTemplateId(periodCellTemplate.get().getCellTemplateId());
periodCellTemplateConfigDto.setProjectId(projectId); // periodCellTemplateConfigDto.setProjectId(projectId);
periodCellTemplateConfigDto.setPeriodParam(periodParam); // periodCellTemplateConfigDto.setPeriodParam(periodParam);
periodCellTemplateConfigDtos.add(periodCellTemplateConfigDto); // periodCellTemplateConfigDtos.add(periodCellTemplateConfigDto);
} // }
} // }
}); // });
//todo: 3.use the validate formula to recalculate the new workbook // //todo: 3.use the validate formula to recalculate the new workbook
periodCellTemplateConfigDtos.forEach(a -> { // periodCellTemplateConfigDtos.forEach(a -> {
workbook4Validate.getSheetAt(a.getSheetNumber() - 1).getRow(a.getRowNumber()).getCell(a.getColNumber()).setCellFormula(a.getParsedValidation()); // workbook4Validate.getSheetAt(a.getSheetNumber() - 1).getRow(a.getRowNumber()).getCell(a.getColNumber()).setCellFormula(a.getParsedValidation());
}); // });
reportGenerator.addFunctionsAndContext(workbook4Validate, functions, reportGenerator.initContext(resources, periodParam)); // reportGenerator.addFunctionsAndContext(workbook4Validate, functions, reportGenerator.initContext(resources, periodParam));
FormulaEvaluator validateEvaluator = workbook4Validate.getCreationHelper().createFormulaEvaluator(); // FormulaEvaluator validateEvaluator = workbook4Validate.getCreationHelper().createFormulaEvaluator();
validateEvaluator.evaluateAll(); // validateEvaluator.evaluateAll();
//todo: 4.then save the validation result to cellData table // //todo: 4.then save the validation result to cellData table
periodCellTemplateConfigDtos.forEach(a -> { // periodCellTemplateConfigDtos.forEach(a -> {
//todo: according to periodParam , projectId, cellTemplateId to update the cellData table // //todo: according to periodParam , projectId, cellTemplateId to update the cellData table
PeriodCellDataExample periodCellDataExample = new PeriodCellDataExample(); // PeriodCellDataExample periodCellDataExample = new PeriodCellDataExample();
periodCellDataExample.createCriteria().andCellTemplateIdEqualTo(a.getCellTemplateId()).andProjectIdEqualTo(a.getProjectId()).andPeriodEqualTo(a.getPeriodParam()); // periodCellDataExample.createCriteria().andCellTemplateIdEqualTo(a.getCellTemplateId()).andProjectIdEqualTo(a.getProjectId()).andPeriodEqualTo(a.getPeriodParam());
Optional<PeriodCellData> cellData = periodCellDataMapper.selectByExample(periodCellDataExample).stream().findFirst(); // Optional<PeriodCellData> cellData = periodCellDataMapper.selectByExample(periodCellDataExample).stream().findFirst();
if (cellData.isPresent()) { // if (cellData.isPresent()) {
cellData.get().setValidateFormulaExp(a.getParsedValidation()); // cellData.get().setValidateFormulaExp(a.getParsedValidation());
Boolean result = workbook4Validate.getSheetAt(a.getSheetNumber() - 1).getRow(a.getRowNumber()).getCell(a.getColNumber()).getBooleanCellValue(); // Boolean result = workbook4Validate.getSheetAt(a.getSheetNumber() - 1).getRow(a.getRowNumber()).getCell(a.getColNumber()).getBooleanCellValue();
cellData.get().setValidateResult(result.toString()); // cellData.get().setValidateResult(result.toString());
periodCellDataMapper.updateByPrimaryKey(cellData.get()); // periodCellDataMapper.updateByPrimaryKey(cellData.get());
} // }
}); // });
//===============================================end validation compute============================================================== //===============================================end validation compute==============================================================
setStatus(genJob, STATUS_END); setStatus(genJob, STATUS_END);
periodJobMapper.updateByPrimaryKey(genJob); periodJobMapper.updateByPrimaryKey(genJob);
......
...@@ -15,6 +15,7 @@ import org.apache.poi.ss.usermodel.*; ...@@ -15,6 +15,7 @@ import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.nutz.mvc.view.HttpServerResponse;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -27,6 +28,7 @@ import pwc.taxtech.atms.common.CommonUtils; ...@@ -27,6 +28,7 @@ import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.common.POIUtil; import pwc.taxtech.atms.common.POIUtil;
import pwc.taxtech.atms.common.message.ErrorMessage; import pwc.taxtech.atms.common.message.ErrorMessage;
import pwc.taxtech.atms.common.util.DataUtil; import pwc.taxtech.atms.common.util.DataUtil;
import pwc.taxtech.atms.common.util.FileExcelUtil;
import pwc.taxtech.atms.common.util.MyAsserts; import pwc.taxtech.atms.common.util.MyAsserts;
import pwc.taxtech.atms.common.util.SpringContextUtil; import pwc.taxtech.atms.common.util.SpringContextUtil;
import pwc.taxtech.atms.constant.Constant; import pwc.taxtech.atms.constant.Constant;
...@@ -51,6 +53,8 @@ import pwc.taxtech.atms.vat.entity.*; ...@@ -51,6 +53,8 @@ import pwc.taxtech.atms.vat.entity.*;
import pwc.taxtech.atms.vat.service.impl.report.functions.FormulaHelper; import pwc.taxtech.atms.vat.service.impl.report.functions.FormulaHelper;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.net.URISyntaxException; import java.net.URISyntaxException;
...@@ -68,7 +72,7 @@ public class ReportServiceImpl extends BaseService { ...@@ -68,7 +72,7 @@ public class ReportServiceImpl extends BaseService {
private final static Logger logger = LoggerFactory.getLogger(ReportServiceImpl.class); private final static Logger logger = LoggerFactory.getLogger(ReportServiceImpl.class);
private BlockingQueue<PeriodJob> queue = new LinkedBlockingQueue<>(); private BlockingQueue<PeriodJob> queue = new LinkedBlockingQueue<>();
private final static String[] functions = {"SGSR", "FSJZ", "ND", "BB", "XXFP", "GZSD", "PC", "JXFPMX", private final static String[] functions = {"SGSR", "FSJZ", "ND", "BB", "XXFP", "GZSD", "PC", "JXFPMX",
"JXFP", "PSUM", "DFFS", "JFFS", "WPSR", "WPNAME", "WPTYPE", "SUM2", "RSUMIF", "SUM", "KPSR","TBM"}; "JXFP", "PSUM", "DFFS", "JFFS", "WPSR", "WPNAME", "WPTYPE", "SUM2", "RSUMIF", "SUM", "KPSR", "TBM"};
@Autowired @Autowired
private ReportGeneratorImpl reportGenerator; private ReportGeneratorImpl reportGenerator;
...@@ -2213,11 +2217,10 @@ public class ReportServiceImpl extends BaseService { ...@@ -2213,11 +2217,10 @@ public class ReportServiceImpl extends BaseService {
} }
@Resource @Resource
private PwcReportAttachMapper pwcReportAttachMapper; private PwcReportAttachMapper pwcReportAttachMapper;
public void bindPwcAttach(Long activeCol, Long activeRow, String activeTemplateId, FileUpload file, String remarks) { public PwcReportAttach bindPwcAttach(Long activeCol, Long activeRow, String activeTemplateId, FileUpload file, String remarks) {
PwcReportAttach pwcReportAttach = new PwcReportAttach(); PwcReportAttach pwcReportAttach = new PwcReportAttach();
pwcReportAttach.setCol(activeCol); pwcReportAttach.setCol(activeCol);
pwcReportAttach.setCreateTime(file.getCreateTime()); pwcReportAttach.setCreateTime(file.getCreateTime());
...@@ -2230,6 +2233,7 @@ public class ReportServiceImpl extends BaseService { ...@@ -2230,6 +2233,7 @@ public class ReportServiceImpl extends BaseService {
pwcReportAttach.setRemarks(remarks); pwcReportAttach.setRemarks(remarks);
pwcReportAttachMapper.insert(pwcReportAttach); pwcReportAttachMapper.insert(pwcReportAttach);
System.out.println("==>>>附件绑定成功"); System.out.println("==>>>附件绑定成功");
return pwcReportAttach;
} }
public List<PwcReportAttach> loadAttachList(ReportAttachDto param) { public List<PwcReportAttach> loadAttachList(ReportAttachDto param) {
...@@ -2377,7 +2381,7 @@ public class ReportServiceImpl extends BaseService { ...@@ -2377,7 +2381,7 @@ public class ReportServiceImpl extends BaseService {
* *
* @param requestParameterDto * @param requestParameterDto
*/ */
public void manyExport(RequestParameterDto requestParameterDto, String zipFileName) throws URISyntaxException { public void manyExport(RequestParameterDto requestParameterDto, String zipFileName, HttpServletRequest request, HttpServletResponse response, String zipPath) throws URISyntaxException {
try { try {
FileOutputStream out = new FileOutputStream(zipFileName);//要输出的文件名字 FileOutputStream out = new FileOutputStream(zipFileName);//要输出的文件名字
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
...@@ -2395,7 +2399,6 @@ public class ReportServiceImpl extends BaseService { ...@@ -2395,7 +2399,6 @@ public class ReportServiceImpl extends BaseService {
filePath = this.getClass().getResource("").toURI().getPath(); filePath = this.getClass().getResource("").toURI().getPath();
String tempPath = filePath.substring(0, filePath.indexOf("classes") + "\\classes".length()); String tempPath = filePath.substring(0, filePath.indexOf("classes") + "\\classes".length());
templateFile = new File(tempPath + templatePath); templateFile = new File(tempPath + templatePath);
OutputStream out = null;
//获取当前期间进行过保存更新的机构的数据 //获取当前期间进行过保存更新的机构的数据
EbitCellDataExample example = new EbitCellDataExample(); EbitCellDataExample example = new EbitCellDataExample();
EbitCellDataExample.Criteria criteria = example.createCriteria(); EbitCellDataExample.Criteria criteria = example.createCriteria();
...@@ -2449,16 +2452,17 @@ public class ReportServiceImpl extends BaseService { ...@@ -2449,16 +2452,17 @@ public class ReportServiceImpl extends BaseService {
} }
} }
workbooksList.add(workbook); workbooksList.add(workbook);
//将workbook生成file文件
String path = "\\\\zipDir\\\\" + requestParameterDto.getPeriod() + Math.random() + "利润表";
FileExcelUtil.downloadZip(request, response, zipFileName, FileExcelUtil.generateExcelToPath(workbook, path), zipPath);
} }
//将workbook转成流 //将workbook转成流
/* ByteArrayOutputStream bos = new ByteArrayOutputStream(); /* ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos); workbook.write(bos);
byte[] barray = bos.toByteArray(); byte[] barray = bos.toByteArray();
InputStream is = new ByteArrayInputStream(barray);*/ InputStream is = new ByteArrayInputStream(barray);*/
// FileOutputStream fileOut = new FileOutputStream(path); // FileOutputStream fileOut = new FileOutputStream(path);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
......
...@@ -5,10 +5,13 @@ import org.apache.poi.ss.formula.eval.NumberEval; ...@@ -5,10 +5,13 @@ import org.apache.poi.ss.formula.eval.NumberEval;
import org.apache.poi.ss.formula.eval.ValueEval; import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.FreeRefFunction; import org.apache.poi.ss.formula.functions.FreeRefFunction;
import pwc.taxtech.atms.common.util.SpringContextUtil; import pwc.taxtech.atms.common.util.SpringContextUtil;
import pwc.taxtech.atms.constant.enums.FormulaDataSourceDetailType;
import pwc.taxtech.atms.dto.vatdto.RSUMIFParasBo;
import pwc.taxtech.atms.vat.entity.PeriodFormulaBlock; import pwc.taxtech.atms.vat.entity.PeriodFormulaBlock;
import pwc.taxtech.atms.vat.service.impl.FormulaAgent;
import java.util.Calendar; import java.math.BigDecimal;
import java.util.Date; import java.util.*;
/// <summary> /// <summary>
...@@ -26,6 +29,7 @@ public class ND extends FunctionBase implements FreeRefFunction { ...@@ -26,6 +29,7 @@ public class ND extends FunctionBase implements FreeRefFunction {
@Override @Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
List<Object> dataSource = new ArrayList<>();
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
Date creatTime = calendar.getTime(); Date creatTime = calendar.getTime();
int value = getIntParam(args[0], ec); int value = getIntParam(args[0], ec);
...@@ -34,7 +38,7 @@ public class ND extends FunctionBase implements FreeRefFunction { ...@@ -34,7 +38,7 @@ public class ND extends FunctionBase implements FreeRefFunction {
String formulaExpression = "ND(" + value + ")"; String formulaExpression = "ND(" + value + ")";
value = value + currentYear; value = value + currentYear;
logger.debug(formulaExpression); logger.debug(formulaExpression);
PeriodFormulaBlock periodFormulaBlock = new PeriodFormulaBlock(); /* PeriodFormulaBlock periodFormulaBlock = new PeriodFormulaBlock();
periodFormulaBlock.setId(SpringContextUtil.distributedIdService.nextId()); periodFormulaBlock.setId(SpringContextUtil.distributedIdService.nextId());
periodFormulaBlock.setPeriod(formulaContext.getPeriod()); periodFormulaBlock.setPeriod(formulaContext.getPeriod());
periodFormulaBlock.setReportId(0L); periodFormulaBlock.setReportId(0L);
...@@ -45,7 +49,12 @@ public class ND extends FunctionBase implements FreeRefFunction { ...@@ -45,7 +49,12 @@ public class ND extends FunctionBase implements FreeRefFunction {
periodFormulaBlock.setCreateTime(creatTime); periodFormulaBlock.setCreateTime(creatTime);
periodFormulaBlock.setUpdateTime(creatTime); periodFormulaBlock.setUpdateTime(creatTime);
periodFormulaBlock.setUpdateBy("Admin"); periodFormulaBlock.setUpdateBy("Admin");
SpringContextUtil.formulaBlockMapper.insertSelective(periodFormulaBlock); SpringContextUtil.formulaBlockMapper.insertSelective(periodFormulaBlock);*/
Long dataSourceId = saveDataSource(ec, Collections.singletonList(dataSource),
FormulaDataSourceDetailType.AssetDetailDataSourceDto,
new BigDecimal(value), formulaContext.getPeriod(), formulaContext.getReportTemplateGroupId(), formulaContext.getProjectId());
saveFormulaBlock(0, ec, formulaExpression, new BigDecimal(value), dataSourceId, formulaContext.getProjectId());
return new NumberEval(value); return new NumberEval(value);
} }
} }
\ No newline at end of file
...@@ -9,6 +9,7 @@ import pwc.taxtech.atms.constant.enums.FormulaDataSourceDetailType; ...@@ -9,6 +9,7 @@ import pwc.taxtech.atms.constant.enums.FormulaDataSourceDetailType;
import pwc.taxtech.atms.constant.enums.FormulaDataSourceType; import pwc.taxtech.atms.constant.enums.FormulaDataSourceType;
import pwc.taxtech.atms.dto.TableRule; import pwc.taxtech.atms.dto.TableRule;
import pwc.taxtech.atms.dto.vatdto.RSUMIFParasBo; import pwc.taxtech.atms.dto.vatdto.RSUMIFParasBo;
import pwc.taxtech.atms.dto.vatdto.ReportCellDataSourceDto;
import pwc.taxtech.atms.dto.vatdto.ReportCellTableSUMIFDataSourceDto; import pwc.taxtech.atms.dto.vatdto.ReportCellTableSUMIFDataSourceDto;
import pwc.taxtech.atms.exception.Exceptions; import pwc.taxtech.atms.exception.Exceptions;
import pwc.taxtech.atms.vat.service.impl.FormulaAgent; import pwc.taxtech.atms.vat.service.impl.FormulaAgent;
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<!--@Html.AntiForgeryToken()--> <!--@Html.AntiForgeryToken()-->
<div class="wrapper"> <div class="wrapper">
<app-nav></app-nav> <app-nav></app-nav>
<div class="page-wrapper" style="position:relative;overflow-x:hidden;margin-top:55px"> <div class="page-wrapper" style="position:relative;overflow:scroll;margin-top:55px">
<div class="main-contents" ui-view></div> <div class="main-contents" ui-view></div>
<div class="data-import-contents" ui-view="importContent"></div><!--style="display: none"--> <div class="data-import-contents" ui-view="importContent"></div><!--style="display: none"-->
</div> </div>
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<!--Report SpreadJS--> <!--Report SpreadJS-->
<div class="row" style=" height: 71px; background: #ccc;"> <div class="row" style=" height: 71px; background: #ccc;">
<div class="col-sm-7" style=" margin-top: 20px;"> <div class="col-sm-7" style=" margin-top: 20px;">
<div class="col-sm-6"> <div class="col-sm-8">
<span class="text-bold" translate="SelectedOrganization" style=" top: -11px; position: relative;">:</span> <span class="text-bold" translate="SelectedOrganization" style=" top: -11px; position: relative; width: 320px;">:</span>
<!-- <div id="dx-select-industry" class="tab-content-select industry " style=" display: inline-block;" <!-- <div id="dx-select-industry" class="tab-content-select industry " style=" display: inline-block;"
dx-select-box="dataSourceIndustryList" dx-item-alias="itemObj"> dx-select-box="dataSourceIndustryList" dx-item-alias="itemObj">
<div data-options="dxTemplate: { name: 'orgList' }" class="dx-item-content dx-list-item-content" <div data-options="dxTemplate: { name: 'orgList' }" class="dx-item-content dx-list-item-content"
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</div>--> </div>-->
<div dx-tag-box="selectOrgOptions" style="width: 340px;display: inline-block"></div> <div dx-tag-box="selectOrgOptions" style="width: 340px;display: inline-block"></div>
</div> </div>
<div class="col-sm-6" class="dateClass"> <div class="col-sm-4" class="dateClass">
<span class="text-bold" translate="InvoiceQJ">:</span> <span class="text-bold" translate="InvoiceQJ">:</span>
<div style=" display: inline-block;"> <div style=" display: inline-block;">
<input type="text" id="ebitDatepacker" class="datepicker" style="width:120px;height: 34px;" <input type="text" id="ebitDatepacker" class="datepicker" style="width:120px;height: 34px;"
......
...@@ -2487,7 +2487,7 @@ ...@@ -2487,7 +2487,7 @@
{ {
caption: '文件名', dataField: "fileName", cellTemplate: function (container, options) { caption: '文件名', dataField: "fileName", cellTemplate: function (container, options) {
try { try {
$('<a href="'+options.data.fileUrl+'" target="_blank" style="cursor: pointer">"' + options.data.fileName + '"</a>&nbsp;&nbsp;') $('<a href="'+options.data.fileUrl+'" target="_blank" style="cursor: pointer">"' + options.data.fileName + '"</a>&nbsp;&nbsp;')
.appendTo(container); .appendTo(container);
} }
catch (e) { catch (e) {
...@@ -2502,7 +2502,7 @@ ...@@ -2502,7 +2502,7 @@
{ {
caption: '操作', cellTemplate: function (container, options) { caption: '操作', cellTemplate: function (container, options) {
try { try {
$('<button type="button" class="btn btn-in-grid" onclick = "deleteAttach(' + options.data.id + ')"><i class="material-icons middle" style="vertical-align: text-bottom">delete</i>删除</button>&nbsp;&nbsp;') $('<button type="button" class="btn btn-in-grid" style="margin-top: -11px;" onclick = "deleteAttach(' + options.data.id + ')"><i class="material-icons middle" style="vertical-align: text-bottom">delete</i>删除</button>&nbsp;&nbsp;')
.appendTo(container); .appendTo(container);
} }
catch (e) { catch (e) {
...@@ -2665,10 +2665,9 @@ ...@@ -2665,10 +2665,9 @@
console.log('progress: ' + progressPercentage + '% '); console.log('progress: ' + progressPercentage + '% ');
}).success(function (data, status, headers, config) { }).success(function (data, status, headers, config) {
if (data.resultMsg) { if (data.resultMsg) {
SweetAlert.error(data.resultMsg) SweetAlert.info(data.resultMsg)
return; refreshAttachData(data);
} }
refreshAttachData(data);
}).error(function (data, status, headers, config) { }).error(function (data, status, headers, config) {
$('#addCellAttachmentContainer').modal('hide'); $('#addCellAttachmentContainer').modal('hide');
SweetAlert.error(status + '错误' + ",上传失败") SweetAlert.error(status + '错误' + ",上传失败")
......
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
<!--{{'ModelAnalysisResults' | translate}}</span>--> <!--{{'ModelAnalysisResults' | translate}}</span>-->
<span ng-show="detail.validationErrorList && detail.validationErrorList.length > 0" ng-model="tabType" <span ng-show="detail.validationErrorList && detail.validationErrorList.length > 0" ng-model="tabType"
uib-btn-radio="3"><i class="fa fa-exclamation-circle red-color"></i>{{'ReportCheckResult' | translate}}</span> uib-btn-radio="3"><i class="fa fa-exclamation-circle red-color"></i>{{'ReportCheckResult' | translate}}</span>
<span ng-model="tabType" uib-btn-radio="4">{{'cellComment'|translate}}</span> <!-- <span ng-model="tabType" uib-btn-radio="4">{{'cellComment'|translate}}</span>-->
<span ng-model="tabType" uib-btn-radio="5" ng-click = "loadAttach()">{{'RelatedAttach'|translate}} dsdsdsdssd</span> <span ng-model="tabType" uib-btn-radio="5" ng-click = "loadAttach()">{{'RelatedAttach'|translate}} </span>
</div> </div>
<div class="content-info" ng-show="tabType === 1"> <div class="content-info" ng-show="tabType === 1">
......
...@@ -2514,10 +2514,9 @@ ...@@ -2514,10 +2514,9 @@
console.log('progress: ' + progressPercentage + '% '); console.log('progress: ' + progressPercentage + '% ');
}).success(function (data, status, headers, config) { }).success(function (data, status, headers, config) {
if (data.resultMsg) { if (data.resultMsg) {
SweetAlert.error(data.resultMsg) SweetAlert.info(data.resultMsg)
return; refreshAttachData(data);
} }
refreshAttachData(data);
}).error(function (data, status, headers, config) { }).error(function (data, status, headers, config) {
$('#addCellAttachmentContainer').modal('hide'); $('#addCellAttachmentContainer').modal('hide');
SweetAlert.error(status + '错误' + ",上传失败") SweetAlert.error(status + '错误' + ",上传失败")
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<!--{{'ModelAnalysisResults' | translate}}</span>--> <!--{{'ModelAnalysisResults' | translate}}</span>-->
<span ng-show="detail.validationErrorList && detail.validationErrorList.length > 0" ng-model="tabType" <span ng-show="detail.validationErrorList && detail.validationErrorList.length > 0" ng-model="tabType"
uib-btn-radio="3"><i class="fa fa-exclamation-circle red-color"></i>{{'ReportCheckResult' | translate}}</span> uib-btn-radio="3"><i class="fa fa-exclamation-circle red-color"></i>{{'ReportCheckResult' | translate}}</span>
<span ng-model="tabType" uib-btn-radio="4">{{'cellComment'|translate}}</span> <!-- <span ng-model="tabType" uib-btn-radio="4">{{'cellComment'|translate}}</span>-->
<span ng-model="tabType" uib-btn-radio="5" ng-click = "loadAttach()">{{'RelatedAttach'|translate}}</span> <span ng-model="tabType" uib-btn-radio="5" ng-click = "loadAttach()">{{'RelatedAttach'|translate}}</span>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment