|  |  |  | 
|---|
|  |  |  | import com.ruoyi.common.basic.PageInfo; | 
|---|
|  |  |  | import com.ruoyi.common.core.domain.R; | 
|---|
|  |  |  | import com.ruoyi.common.enums.BusinessType; | 
|---|
|  |  |  | import com.ruoyi.common.utils.SecurityUtils; | 
|---|
|  |  |  | import com.ruoyi.common.utils.TencentMailUtil; | 
|---|
|  |  |  | import com.ruoyi.system.dto.TBillDto; | 
|---|
|  |  |  | import com.ruoyi.system.model.TBill; | 
|---|
|  |  |  | import com.ruoyi.system.model.TInvoice; | 
|---|
|  |  |  | import com.ruoyi.system.query.TInvoiceQuery; | 
|---|
|  |  |  | import com.ruoyi.system.service.TBillService; | 
|---|
|  |  |  | import com.ruoyi.system.service.TInvoiceService; | 
|---|
|  |  |  | import com.ruoyi.web.controller.tool.TencentCosUtil; | 
|---|
|  |  |  | import io.swagger.annotations.ApiOperation; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.security.access.prepost.PreAuthorize; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.*; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.servlet.http.HttpServletResponse; | 
|---|
|  |  |  | import java.nio.file.Path; | 
|---|
|  |  |  | import java.nio.file.Paths; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | private TInvoiceService invoiceService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | TBillService tBillService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | TencentCosUtil tencentCosUtil; | 
|---|
|  |  |  | @PreAuthorize("@ss.hasPermi('invoice:list')") | 
|---|
|  |  |  | @ApiOperation(value = "获取开票列表") | 
|---|
|  |  |  | @PostMapping("/list") | 
|---|
|  |  |  | public R<PageInfo<TInvoice>> list(@RequestBody TInvoiceQuery query) { | 
|---|
|  |  |  | query.setBusinessDeptId(SecurityUtils.getBusinessDeptId()); | 
|---|
|  |  |  | return R.ok(invoiceService.pageList(query)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiOperation(value = "上传开票凭证") | 
|---|
|  |  |  | @PostMapping("/uploadVoucher") | 
|---|
|  |  |  | @PreAuthorize("@ss.hasPermi('invoice:list:payment')") | 
|---|
|  |  |  | public R<Boolean> uploadVoucher(@RequestBody TInvoiceQuery query) { | 
|---|
|  |  |  | TInvoice tInvoice = new TInvoice(); | 
|---|
|  |  |  | tInvoice.setId(query.getId()); | 
|---|
|  |  |  | tInvoice.setInvoiceVoucher(query.getInvoiceVoucher()); | 
|---|
|  |  |  | tInvoice.setInvoiceVoucherName(query.getInvoiceVoucherName()); | 
|---|
|  |  |  | tInvoice.setInvoiceTime(query.getInvoiceTime()); | 
|---|
|  |  |  | tInvoice.setStatus(2); | 
|---|
|  |  |  | return R.ok(invoiceService.updateById(tInvoice)); | 
|---|
|  |  |  | String invoiceVoucher = query.getInvoiceVoucher(); | 
|---|
|  |  |  | String invoiceVoucherName = query.getInvoiceVoucherName(); | 
|---|
|  |  |  | if (invoiceVoucher == null || invoiceVoucherName == null) { | 
|---|
|  |  |  | return R.fail("请上传发票文件"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String[] voucherUrls = invoiceVoucher.split(","); | 
|---|
|  |  |  | String[] voucherNames = invoiceVoucherName.split(","); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 确保两个数组长度一致 | 
|---|
|  |  |  | int length = Math.min(voucherUrls.length, voucherNames.length); | 
|---|
|  |  |  | if (length == 0) { | 
|---|
|  |  |  | return R.fail("请上传发票文件"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 构建附件列表 | 
|---|
|  |  |  | List<Map<String, String>> attachments = new ArrayList<>(length); | 
|---|
|  |  |  | for (int i = 0; i < length; i++) { | 
|---|
|  |  |  | String voucherUrl = voucherUrls[i]; | 
|---|
|  |  |  | String fileName = voucherNames[i]; | 
|---|
|  |  |  | Map<String, String> attachment = new HashMap<>(2); // 初始容量为2,避免扩容 | 
|---|
|  |  |  | String tempDir = System.getProperty("java.io.tmpdir"); | 
|---|
|  |  |  | Path filePath = Paths.get(tempDir, "invoice"); | 
|---|
|  |  |  | // 保存到临时目录 | 
|---|
|  |  |  | tencentCosUtil.download(voucherUrl,filePath.toString(),fileName); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | attachment.put("filePath", filePath.toString()); | 
|---|
|  |  |  | attachment.put("fileName", fileName); | 
|---|
|  |  |  | attachments.add(attachment); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok(invoiceService.uploadVoucher(query,attachments)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|