parent
27e927dae8
commit
27f5e8eddf
@ -0,0 +1,37 @@ |
||||
package com.jianshui.web.controller.platform; |
||||
|
||||
import com.jianshui.common.constant.InvoiceCommonConstants; |
||||
import com.jianshui.platform.service.InvoiceDownloadService; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.PathVariable; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
/** |
||||
* @Author: kane |
||||
* @Description: 发票批量下载接口 |
||||
* @CreateTime: 2023-06-08 14:27 |
||||
* @Version: 1.0 |
||||
**/ |
||||
@Api(tags = "发票批量下载") |
||||
@RestController |
||||
@RequestMapping("/platForm/invoiceDownLoad") |
||||
public class InvoiceDownloadController { |
||||
|
||||
@Autowired |
||||
private InvoiceDownloadService invoiceDownloadService; |
||||
@ApiOperation("发票批量下载") |
||||
@GetMapping("/dowmLoadPdf/{ids}/{status}") |
||||
public Object downLoad(@PathVariable Long[] ids,@PathVariable String status,HttpServletResponse response){ |
||||
if (InvoiceCommonConstants.PDFSTATUS.equals(status)){ |
||||
return invoiceDownloadService.dowmLoadPdf(ids,response); |
||||
}else { |
||||
return invoiceDownloadService.dowmLoadOfd(ids,response); |
||||
} |
||||
} |
||||
|
||||
} |
@ -1,20 +0,0 @@ |
||||
package com.jianshui.common.constant; |
||||
|
||||
/** |
||||
* @Author: xinzge |
||||
* @Description: 用户登记信息常量类 |
||||
* @CreateTime: 2023-06-06 13:35 |
||||
* @Version: 1.0 |
||||
**/ |
||||
public class InvoiceAllYhdjConstants { |
||||
/** |
||||
* 异步 |
||||
*/ |
||||
public final static String ASYNC = "true"; |
||||
|
||||
/** |
||||
* 同步 |
||||
*/ |
||||
public final static String SYNC = "false"; |
||||
|
||||
} |
@ -0,0 +1,96 @@ |
||||
package com.jianshui.common.constant; |
||||
|
||||
/** |
||||
* @Author: xinzge |
||||
* @Description: 用户登记信息常量类 |
||||
* @CreateTime: 2023-06-06 13:35 |
||||
* @Version: 1.0 |
||||
**/ |
||||
public class InvoiceCommonConstants { |
||||
/** |
||||
* 异步 |
||||
*/ |
||||
public final static String ASYNC = "true"; |
||||
|
||||
/** |
||||
* 同步 |
||||
*/ |
||||
public final static String SYNC = "false"; |
||||
/** |
||||
* 信息为空 |
||||
*/ |
||||
public final static String INVOICEINFORMATIONISEMPTY = "未传入发票信息,请检查!"; |
||||
/** |
||||
* 未查询到登记信息 |
||||
*/ |
||||
public final static String NOINFORMATIONISFOUND = "未查询到登记信息!"; |
||||
|
||||
/** |
||||
* 开票日期格式 |
||||
*/ |
||||
public final static String DATEFORMAT = "yyyyMMddHHmmss"; |
||||
|
||||
/** |
||||
* 发票号码 |
||||
*/ |
||||
public final static String FPHM = "fphm"; |
||||
|
||||
|
||||
/** |
||||
* 开票日期 |
||||
*/ |
||||
public final static String KPRQ = "kprq"; |
||||
|
||||
/** |
||||
* 响应码 |
||||
*/ |
||||
public final static String CODE = "code"; |
||||
|
||||
/** |
||||
* 错误信息 |
||||
*/ |
||||
public final static String MSG = "msg"; |
||||
|
||||
|
||||
/** |
||||
* 响应数据 |
||||
*/ |
||||
public final static String DATA = "data"; |
||||
|
||||
/** |
||||
* 成功响应状态码 |
||||
*/ |
||||
public final static String SUCCESSCODE = "0000"; |
||||
|
||||
/** |
||||
* pdf地址 |
||||
*/ |
||||
public final static String PDFURL = "pdfUrl"; |
||||
|
||||
|
||||
/** |
||||
* 发票下载地址错误 |
||||
*/ |
||||
public final static String DOWNLOADADDRESSERROR = "获取发票下载地址错误!"; |
||||
|
||||
/** |
||||
* 下载成功 |
||||
*/ |
||||
public final static String DOWNLOADSUCCESSCODE = "下载成功!"; |
||||
|
||||
/** |
||||
* ofd地址 |
||||
*/ |
||||
public final static String OFDURL = "ofdUrl"; |
||||
|
||||
/** |
||||
* pdf状态 |
||||
*/ |
||||
public final static String PDFSTATUS = "0"; |
||||
|
||||
/** |
||||
* ofd状态 |
||||
*/ |
||||
public final static String OFDSTATUS = "1"; |
||||
|
||||
} |
@ -0,0 +1,29 @@ |
||||
package com.jianshui.platform.service; |
||||
|
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
/** |
||||
* @Author: kane |
||||
* @Description: 发票下载业务层 |
||||
* @CreateTime: 2023-06-08 14:36 |
||||
* @Version: 1.0 |
||||
**/ |
||||
public interface InvoiceDownloadService { |
||||
|
||||
/** |
||||
* 功能描述: 发票(pdf版)下载 |
||||
* @param ids |
||||
* @param response |
||||
* @return : java.lang.Object |
||||
*/ |
||||
Object dowmLoadPdf(Long[] ids, HttpServletResponse response); |
||||
|
||||
/** |
||||
* 功能描述: 发票(ofd版)下载 |
||||
* @param ids |
||||
* @param response |
||||
* @return : java.lang.Object |
||||
*/ |
||||
Object dowmLoadOfd(Long[] ids, HttpServletResponse response); |
||||
|
||||
} |
@ -0,0 +1,196 @@ |
||||
package com.jianshui.platform.service.impl; |
||||
|
||||
import cn.hutool.core.bean.BeanUtil; |
||||
import cn.hutool.core.util.StrUtil; |
||||
import cn.hutool.json.JSONUtil; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.jianshui.common.constant.InvoiceCommonConstants; |
||||
import com.jianshui.common.constant.WebServiceConstant; |
||||
import com.jianshui.common.core.domain.AjaxResult; |
||||
import com.jianshui.common.core.domain.entity.Companyservice; |
||||
import com.jianshui.common.core.domain.entity.SysUser; |
||||
import com.jianshui.common.utils.SecurityUtils; |
||||
import com.jianshui.common.utils.jcsk.ApiHttp; |
||||
import com.jianshui.invoice.domain.Invoice; |
||||
import com.jianshui.invoice.domain.dto.HXResponse; |
||||
import com.jianshui.invoice.domain.dto.api.jcsk.FileAcquisitionTwoDTO; |
||||
import com.jianshui.invoice.mapper.InvoiceMapper; |
||||
import com.jianshui.platform.service.InvoiceDownloadService; |
||||
import com.jianshui.platform.utils.BatchDownloadUtils; |
||||
import com.jianshui.platform.utils.InvoiceAllYhdjUtils; |
||||
import com.jianshui.system.domain.InvoiceAllYhdj; |
||||
import com.jianshui.system.mapper.CompanyserviceMapper; |
||||
import com.jianshui.system.mapper.SysUserMapper; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.stereotype.Service; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* @Author: kane |
||||
* @Description: 发票下载业务层 |
||||
* @CreateTime: 2023-06-08 14:36 |
||||
* @Version: 1.0 |
||||
**/ |
||||
@Service |
||||
@Slf4j |
||||
public class InvoiceDownloadServiceImpl implements InvoiceDownloadService { |
||||
|
||||
@Autowired |
||||
private SysUserMapper sysUserMapper; |
||||
@Autowired |
||||
private CompanyserviceMapper companyServiceMapper; |
||||
|
||||
@Autowired |
||||
private InvoiceMapper invoiceMapper; |
||||
|
||||
/** |
||||
* 功能描述: 发票(pfd版)下载 |
||||
* @param ids |
||||
* @param response |
||||
* @return : java.lang.Object |
||||
*/ |
||||
@Override |
||||
public Object dowmLoadPdf(Long[] ids, HttpServletResponse response) { |
||||
//判空
|
||||
if (ids == null) { |
||||
return AjaxResult.error(InvoiceCommonConstants.INVOICEINFORMATIONISEMPTY); |
||||
} |
||||
//获取用户id
|
||||
Long userId = SecurityUtils.getUserId(); |
||||
//根据用户id获取用户信息
|
||||
SysUser sysUser = sysUserMapper.selectUserById(userId); |
||||
//根据企业id获取企业信息
|
||||
Companyservice companyservice = companyServiceMapper.selectCompanyserviceByCompanyid(sysUser.getCompanyId()); |
||||
//获取登记用户信息
|
||||
InvoiceAllYhdjUtils invoiceAllYhdjUtils = new InvoiceAllYhdjUtils(); |
||||
InvoiceAllYhdj userInfo = invoiceAllYhdjUtils.getUserInfo(companyservice); |
||||
if (BeanUtil.isEmpty(userInfo)) { |
||||
return AjaxResult.error(InvoiceCommonConstants.NOINFORMATIONISFOUND); |
||||
} |
||||
//pfd文件集合
|
||||
List<String> pdfList = new ArrayList<>(); |
||||
for (Long id : ids) { |
||||
Invoice invoice = invoiceMapper.selectInvoiceById(id); |
||||
String invoicePdfUrl = invoice.getInvoicePdfUrl(); |
||||
if (invoicePdfUrl != null) { |
||||
pdfList.add(invoicePdfUrl); |
||||
} else { |
||||
//获取pfd下载地址
|
||||
//封装请求实体类
|
||||
FileAcquisitionTwoDTO fileAcquisitionDTO = new FileAcquisitionTwoDTO(); |
||||
//发送同步请求
|
||||
fileAcquisitionDTO.setAsync(InvoiceCommonConstants.SYNC); |
||||
fileAcquisitionDTO.setNsrsbh(userInfo.getNsrsbh()); |
||||
fileAcquisitionDTO.setBsrysfzjhm(userInfo.getBsrysfzjhm()); |
||||
fileAcquisitionDTO.setDqbm(userInfo.getDqbm()); |
||||
Map<String, Object> map = new JSONObject(); |
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(InvoiceCommonConstants.DATEFORMAT); |
||||
map.put(InvoiceCommonConstants.FPHM, invoice.getFphm()); |
||||
Date kprq = invoice.getKprq(); |
||||
//修改日期格式(请求接口要求)
|
||||
String kprqFormat = simpleDateFormat.format(kprq); |
||||
map.put(InvoiceCommonConstants.KPRQ, kprqFormat); |
||||
fileAcquisitionDTO.setJsonData(map); |
||||
cn.hutool.json.JSONObject result = null; |
||||
try { |
||||
result = ApiHttp.request(WebServiceConstant.FPEWMXZ, WebServiceConstant.URL, fileAcquisitionDTO, companyservice); |
||||
String code = result.get(InvoiceCommonConstants.CODE) != null ? result.get(InvoiceCommonConstants.CODE).toString() : ""; |
||||
String msg = result.get(InvoiceCommonConstants.MSG) != null ? result.get(InvoiceCommonConstants.MSG).toString() : ""; |
||||
String data = result.get(InvoiceCommonConstants.DATA) != null ? result.get(InvoiceCommonConstants.DATA).toString() : ""; |
||||
if (InvoiceCommonConstants.SUCCESSCODE.equals(code) && StrUtil.isNotEmpty(data)) { |
||||
cn.hutool.json.JSONObject json = JSONUtil.parseObj(data); |
||||
String pdfUrl = json.get(InvoiceCommonConstants.PDFURL) != null ? json.get(InvoiceCommonConstants.PDFURL).toString() : ""; |
||||
pdfList.add(pdfUrl); |
||||
} else { |
||||
return AjaxResult.error(msg); |
||||
} |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
log.error("【金四服务类】【金财数科】【获取发票下载地址】API请求异常,外部报文返回code非0000。错误信息:{}", e.getMessage()); |
||||
return AjaxResult.error(InvoiceCommonConstants.DOWNLOADADDRESSERROR); |
||||
} |
||||
} |
||||
} |
||||
//下载pfd文件
|
||||
BatchDownloadUtils.downloadAndZipFiles(pdfList,InvoiceCommonConstants.PDFSTATUS,response); |
||||
return AjaxResult.success(InvoiceCommonConstants.DOWNLOADSUCCESSCODE); |
||||
} |
||||
|
||||
/** |
||||
* 功能描述: 发票(ofd版)下载 |
||||
* @param ids |
||||
* @param response |
||||
* @return : java.lang.Object |
||||
*/ |
||||
@Override |
||||
public Object dowmLoadOfd(Long[] ids, HttpServletResponse response) { |
||||
//判空
|
||||
if (ids == null) { |
||||
return AjaxResult.error(InvoiceCommonConstants.INVOICEINFORMATIONISEMPTY); |
||||
} |
||||
//获取用户id
|
||||
Long userId = SecurityUtils.getUserId(); |
||||
//根据用户id获取用户信息
|
||||
SysUser sysUser = sysUserMapper.selectUserById(userId); |
||||
//根据企业id获取企业信息
|
||||
Companyservice companyservice = companyServiceMapper.selectCompanyserviceByCompanyid(sysUser.getCompanyId()); |
||||
//获取登记用户信息
|
||||
InvoiceAllYhdjUtils invoiceAllYhdjUtils = new InvoiceAllYhdjUtils(); |
||||
InvoiceAllYhdj userInfo = invoiceAllYhdjUtils.getUserInfo(companyservice); |
||||
if (BeanUtil.isEmpty(userInfo)) { |
||||
return new HXResponse(InvoiceCommonConstants.NOINFORMATIONISFOUND); |
||||
} |
||||
//ofd文件集合
|
||||
List<String> ofdList = new ArrayList<>(); |
||||
for (Long id : ids) { |
||||
Invoice invoice = invoiceMapper.selectInvoiceById(id); |
||||
String invoiceOfdUrl = invoice.getcOfdUrl(); |
||||
if (invoiceOfdUrl != null) { |
||||
ofdList.add(invoiceOfdUrl); |
||||
} else { |
||||
//获取ofd下载地址
|
||||
//封装请求实体类
|
||||
FileAcquisitionTwoDTO fileAcquisitionDTO = new FileAcquisitionTwoDTO(); |
||||
//发送同步请求
|
||||
fileAcquisitionDTO.setAsync(InvoiceCommonConstants.SYNC); |
||||
fileAcquisitionDTO.setNsrsbh(userInfo.getNsrsbh()); |
||||
fileAcquisitionDTO.setBsrysfzjhm(userInfo.getBsrysfzjhm()); |
||||
fileAcquisitionDTO.setDqbm(userInfo.getDqbm()); |
||||
Map<String, Object> map = new JSONObject(); |
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(InvoiceCommonConstants.DATEFORMAT); |
||||
map.put(InvoiceCommonConstants.FPHM, invoice.getFphm()); |
||||
Date kprq = invoice.getKprq(); |
||||
//修改日期格式(请求接口要求)
|
||||
String kprqFormat = simpleDateFormat.format(kprq); |
||||
map.put(InvoiceCommonConstants.KPRQ, kprqFormat); |
||||
fileAcquisitionDTO.setJsonData(map); |
||||
cn.hutool.json.JSONObject result = null; |
||||
try { |
||||
result = ApiHttp.request(WebServiceConstant.FPEWMXZ, WebServiceConstant.URL, fileAcquisitionDTO, companyservice); |
||||
String code = result.get(InvoiceCommonConstants.CODE) != null ? result.get(InvoiceCommonConstants.CODE).toString() : ""; |
||||
String msg = result.get(InvoiceCommonConstants.MSG) != null ? result.get(InvoiceCommonConstants.MSG).toString() : ""; |
||||
String data = result.get(InvoiceCommonConstants.DATA) != null ? result.get(InvoiceCommonConstants.DATA).toString() : ""; |
||||
if (InvoiceCommonConstants.SUCCESSCODE.equals(code) && StrUtil.isNotEmpty(data)) { |
||||
cn.hutool.json.JSONObject json = JSONUtil.parseObj(data); |
||||
String ofdUrl = json.get(InvoiceCommonConstants.OFDURL) != null ? json.get(InvoiceCommonConstants.OFDURL).toString() : ""; |
||||
ofdList.add(ofdUrl); |
||||
} else { |
||||
return AjaxResult.error(msg); |
||||
} |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
log.error("【金四服务类】【金财数科】【获取发票下载地址】API请求异常,外部报文返回code非0000。错误信息:{}", e.getMessage()); |
||||
return AjaxResult.error(InvoiceCommonConstants.DOWNLOADADDRESSERROR); |
||||
} |
||||
} |
||||
} |
||||
//下载ofd文件集合
|
||||
BatchDownloadUtils.downloadAndZipFiles(ofdList,InvoiceCommonConstants.OFDSTATUS,response); |
||||
return AjaxResult.success(InvoiceCommonConstants.DOWNLOADSUCCESSCODE); |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,125 @@ |
||||
package com.jianshui.platform.utils; |
||||
|
||||
import com.jianshui.common.constant.InvoiceCommonConstants; |
||||
import org.springframework.util.StringUtils; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.io.InputStream; |
||||
import java.io.OutputStream; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
import java.util.zip.ZipEntry; |
||||
import java.util.zip.ZipOutputStream; |
||||
|
||||
/** |
||||
* @Author: kane |
||||
* @Description: 批量下载工具类 |
||||
* @CreateTime: 2023-06-09 15:46 |
||||
* @Version: 1.0 |
||||
**/ |
||||
public class BatchDownloadUtils { |
||||
/** |
||||
* 功能描述: 批量下载 |
||||
* @param status 文件类型0-pfd 1-ofd |
||||
* @param urls |
||||
* @return : void |
||||
*/ |
||||
public static void downloadAndZipFiles(List<String> urls, String status, HttpServletResponse response) { |
||||
Date now = new Date(); |
||||
SimpleDateFormat format = new SimpleDateFormat(InvoiceCommonConstants.DATEFORMAT); |
||||
String name = format.format(now); |
||||
String zipFileName = name + ".zip"; |
||||
OutputStream ops = null; |
||||
ZipOutputStream zos = null; |
||||
InputStream inputStream = null; |
||||
try { |
||||
response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName); |
||||
response.setCharacterEncoding("utf-8"); |
||||
ops = response.getOutputStream(); |
||||
zos = new ZipOutputStream(ops); |
||||
for (String url : urls) { |
||||
if (StringUtils.hasText(url)) { |
||||
URL downloadUrl = new URL(url); |
||||
HttpURLConnection httpConn = (HttpURLConnection) downloadUrl.openConnection(); |
||||
int responseCode = httpConn.getResponseCode(); |
||||
if (responseCode == HttpURLConnection.HTTP_OK) { |
||||
String fileName = getFileName(httpConn, status); |
||||
inputStream = httpConn.getInputStream(); |
||||
ZipEntry zipEntry = new ZipEntry(fileName); |
||||
zos.putNextEntry(zipEntry); |
||||
int bytesRead = -1; |
||||
byte[] buffer = new byte[4096]; |
||||
while ((bytesRead = inputStream.read(buffer)) != -1) { |
||||
zos.write(buffer, 0, bytesRead); |
||||
} |
||||
} |
||||
httpConn.disconnect(); |
||||
} |
||||
} |
||||
} catch (Exception ex) { |
||||
ex.printStackTrace(); |
||||
}finally { |
||||
if (inputStream != null){ |
||||
try { |
||||
inputStream.close(); |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
if (zos != null){ |
||||
try { |
||||
zos.close(); |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
if (ops != null){ |
||||
try { |
||||
ops.close(); |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 功能描述: 获取下载后的文件名 |
||||
* @param httpConn |
||||
* @return : java.lang.String |
||||
*/ |
||||
private static String getFileName(HttpURLConnection httpConn, String status) { |
||||
String fileName = ""; |
||||
String disposition = httpConn.getHeaderField("Content-Disposition"); |
||||
Date date = new Date(); |
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(InvoiceCommonConstants.DATEFORMAT); |
||||
if (disposition != null) { |
||||
int index = disposition.indexOf("filename="); |
||||
if (index > 0) { |
||||
fileName = disposition.substring(index + 10, disposition.length() - 1); |
||||
if ("0".equals(status)) { |
||||
String name = simpleDateFormat.format(date); |
||||
fileName = name + ".pdf"; |
||||
} else { |
||||
String name = simpleDateFormat.format(date); |
||||
fileName = name + ".ofd"; |
||||
} |
||||
} |
||||
} |
||||
if (StringUtils.isEmpty(fileName)) { |
||||
fileName = httpConn.getURL().getFile().substring(httpConn.getURL().getFile().lastIndexOf("/") + 1); |
||||
if ("0".equals(status)) { |
||||
String name = simpleDateFormat.format(date); |
||||
fileName = name + ".pdf"; |
||||
} else { |
||||
String name = simpleDateFormat.format(date); |
||||
fileName = name + ".ofd"; |
||||
} |
||||
} |
||||
return fileName; |
||||
} |
||||
} |
Loading…
Reference in new issue