diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java index db2da2ee0..a37e9a61a 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java @@ -14,12 +14,25 @@ package com.xdadan.erp.web.emis; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.io.resource.ResourceUtil; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.util.MapUtils; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.xdadan.erp.common.utils.DateUtils; +import com.xdadan.erp.common.utils.DictUtils; import com.xdadan.erp.emis.domain.EmisSettleSubBill; import com.xdadan.erp.emis.domain.EmisSettleSubBillFeeitem; import com.xdadan.erp.emis.domain.exception.EmisBizError; @@ -27,6 +40,8 @@ import com.xdadan.erp.emis.domain.vo.scan.ScanResult; import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.service.billexport.ExcelUtils; import com.xdadan.erp.emis.service.billexport.MapObjectUtil; +import org.apache.commons.io.Charsets; +import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.security.access.prepost.PreAuthorize; @@ -201,39 +216,72 @@ public class EmisSettleBillController extends BaseController @Log(title = "导出账单", businessType = BusinessType.EXPORT) @PostMapping("/exportBill") - public void exportBill(HttpServletResponse response, EmisSettleBill emisSettleBill) + public AjaxResult exportBill(HttpServletResponse response, EmisSettleBill emisSettleBill) { - -// bill.getSettleBillName()+".xls", - - try { EmisSettleBill bill=emisBaseService.getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo()); + if(bill==null){ + return AjaxResult.error("账单不存在"); + } - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setCharacterEncoding("utf-8"); - String fileOutFileName = URLEncoder.encode(bill.getSettleBillName(), "UTF-8"); - response.setHeader("Content-disposition", "attachment;filename=" + fileOutFileName + ".xls"); - + // 获取子账单数据 List list = emisBaseService.selectSubBillListBySettleBillNo(emisSettleBill.getSettleBillNo()); + // 转换子账单为 MAP - List> listMap=MapObjectUtil.objListToMapList(list); + InputStream inputStream = ResourceUtil.getResourceObj("tpl/bill_tpl.xlsx").getStream(); - InputStream fis = new ClassPathResource("tpl/bill_tpl.xls").getInputStream(); + Map textMap = MapUtils.newHashMap(); + textMap.put("title", bill.getSettleBillName()); - Map map = MapUtils.newHashMap(); - map.put("name", "张三"); - map.put("number", 5.2); - EasyExcel.write(response.getOutputStream()).withTemplate(fis).sheet().doFill(map); -// ExcelUtils.exportToTemplate(response.getOutputStream(), fis, null, -// null, null, -// null); + ServletOutputStream outputStream = response.getOutputStream(); + + // 设置创建行的方式 + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); +// FillConfig fillConfig2 = FillConfig.builder().forceNewRow(Boolean.FALSE).build(); + ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).build(); + // 写入到sheet + WriteSheet sheet0 = EasyExcel.writerSheet(0).build(); + excelWriter.fill(textMap, sheet0); + + List> listMap=new ArrayList<>(); + for(EmisSettleSubBill billItem:list){ + Map voMap = new HashMap<>(); + voMap.put("sendDate", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,billItem.getWaybillDetail().getSendDate())) ; + voMap.put("billCode",billItem.getBillCode()); + voMap.put("fjr",billItem.getWaybillDetail().getSendName()+"~"+billItem.getWaybillDetail().getReceiveName()); + voMap.put("kjlx",billItem.getWaybillDetail().getSendSiteName()+"--"+billItem.getWaybillDetail().getDispatchUnderlingSiteName()); + voMap.put("company",billItem.getWaybillDetail().getSendCompany()); + voMap.put("paymentType", DictUtils.getDictLabel("emis_payment_type",billItem.getWaybillDetail().getPaymentType())); + voMap.put("productTypeName", billItem.getWaybillDetail().getProductTypeName()); + voMap.put("parcelQty", billItem.getWaybillDetail().getParcelQty()); + voMap.put("settlementWeight", billItem.getWaybillDetail().getSettlementWeight()); + voMap.put("totalVolume", billItem.getWaybillDetail().getTotalVolume()); + voMap.put("freight", billItem.getWaybillDetail().getFreight()); + voMap.put("feeRemark", billItem.getWaybillDetail().getFeeRemark()); + listMap.add(voMap); + } + + // 填充 + logger.error("====>listMap===>{}",JSON.toJSONString(listMap)); + + excelWriter.fill(listMap, fillConfig, sheet0); + // 设置响应头信息 + String fileName = bill.getSettleBillName()+".xlsx"; + response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())); + response.setContentType("application/octet-stream"); + //关流 + excelWriter.finish(); + IOUtils.closeQuietly(inputStream); + IOUtils.closeQuietly(outputStream); + + // 不输出 + return AjaxResult.success("成功"); } catch (IOException e) { e.printStackTrace(); + return AjaxResult.error("异常"); } - } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java index ab03b957e..9450d7dbc 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java @@ -166,15 +166,15 @@ public class ExcelUtils { try { - String templateFileName = "/Users/alan/Downloads/m1.xls"; - String fileName = "/Users/alan/Downloads/1.xls"; + String templateFileName = "/Users/alan/Downloads/bill_tpl.xlsx"; + String fileName = "/Users/alan/Downloads/2.xlsx"; // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 // 这里要注意 withTemplate 的模板文件会全量存储在内存里面,所以尽量不要用于追加文件,如果文件模板文件过大会OOM // 如果要再文件中追加(无法在一个线程里面处理,可以在一个线程的建议参照多次写入的demo) 建议临时存储到数据库 或者 磁盘缓存(ehcache) 然后再一次性写入 // EasyExcel.write(fileName, Map.class).withTemplate(templateFileName).sheet().doWrite(data()); Map map = MapUtils.newHashMap(); - map.put("name", "张三"); + map.put("title", "张三"); map.put("number", 5.2); EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSiteServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSiteServiceImpl.java index 408b85004..5f9780149 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSiteServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSiteServiceImpl.java @@ -88,33 +88,53 @@ public class EmisSiteServiceImpl extends EmisBaseService implements IEmisSiteSer try { - // 自动创建目的地 - EmisDestination emisDestination = new EmisDestination(); - emisDestination.setDestCode(emisSite.getSiteCode()); - emisDestination.setCountry(emisSite.getCountryCode()); - emisDestination.setDestName(emisSite.getSiteName()); - emisDestination.setDestNameEn(emisSite.getSiteNameEn()); - emisDestination.setStatus(1); - emisDestination.setSiteCode(emisSite.getSiteCode()); - emisDestination.setProvince(emisSite.getProvince()); - emisDestination.setCity(emisSite.getCity()); - emisDestination.setCounty(emisSite.getCounty()); - EmisRegion emisRegion = getRegionByCode(emisSite.getProvince()); - if (emisRegion != null) { - emisDestination.setCountryAreaId(emisRegion.getAreaId()); + EmisDestination oldDest=getDestinationByCode(emisSite.getSiteCode()); + if(oldDest!=null) { + // 自动创建目的地 + EmisDestination emisDestination = new EmisDestination(); + emisDestination.setDestCode(emisSite.getSiteCode()); + emisDestination.setCountry(emisSite.getCountryCode()); + emisDestination.setDestName(emisSite.getSiteName()); + emisDestination.setDestNameEn(emisSite.getSiteNameEn()); + emisDestination.setStatus(1); + emisDestination.setSiteCode(emisSite.getSiteCode()); + emisDestination.setProvince(emisSite.getProvince()); + emisDestination.setCity(emisSite.getCity()); + emisDestination.setCounty(emisSite.getCounty()); + + EmisRegion emisRegion = getRegionByCode(emisSite.getProvince()); + if (emisRegion != null) { + emisDestination.setCountryAreaId(emisRegion.getAreaId()); + } + + emisDestinationMapper.insertEmisDestination(emisDestination); + }else{ + oldDest.setDestCode(emisSite.getSiteCode()); + oldDest.setCountry(emisSite.getCountryCode()); + oldDest.setDestName(emisSite.getSiteName()); + oldDest.setDestNameEn(emisSite.getSiteNameEn()); + oldDest.setStatus(1); + oldDest.setSiteCode(emisSite.getSiteCode()); + oldDest.setProvince(emisSite.getProvince()); + oldDest.setCity(emisSite.getCity()); + oldDest.setCounty(emisSite.getCounty()); + emisDestinationMapper.updateEmisDestination(oldDest); } - emisDestinationMapper.insertEmisDestination(emisDestination); - // 自动创建网点账户 - EmisSiteAccount emisSiteAccount = new EmisSiteAccount(); - emisSiteAccount.setAccCode(emisSite.getSiteCode() + "001"); - emisSiteAccount.setSiteCode(emisSite.getSiteCode()); - emisSiteAccount.setCenterCode(emisSite.getParentSiteCode()); - emisSiteAccount.setStartDate(new Date()); + EmisSiteAccount oldSiteAccount=getSiteAccountBySiteCode(emisSite.getSiteCode()); + if(oldSiteAccount==null) { + EmisSiteAccount emisSiteAccount = new EmisSiteAccount(); + emisSiteAccount.setAccCode(emisSite.getSiteCode() + "001"); + emisSiteAccount.setSiteCode(emisSite.getSiteCode()); + emisSiteAccount.setCenterCode(emisSite.getParentSiteCode()); + emisSiteAccount.setStartDate(new Date()); - emisSiteAccountMapper.insertEmisSiteAccount(emisSiteAccount); + emisSiteAccountMapper.insertEmisSiteAccount(emisSiteAccount); + }else{ + // 不要新建 + } }catch(Exception ex){ ex.printStackTrace(); } diff --git a/emis-biz/src/main/resources/tpl/bill_tpl.xls b/emis-biz/src/main/resources/tpl/bill_tpl.xls deleted file mode 100644 index f7d22b02a..000000000 Binary files a/emis-biz/src/main/resources/tpl/bill_tpl.xls and /dev/null differ diff --git a/emis-biz/src/main/resources/tpl/bill_tpl.xlsx b/emis-biz/src/main/resources/tpl/bill_tpl.xlsx new file mode 100644 index 000000000..b1405fd89 Binary files /dev/null and b/emis-biz/src/main/resources/tpl/bill_tpl.xlsx differ