This commit is contained in:
linfso 2024-07-23 22:30:49 +08:00
parent 3fe0ce8ac0
commit 3375a592d4
5 changed files with 113 additions and 45 deletions

View File

@ -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<EmisSettleSubBill> list = emisBaseService.selectSubBillListBySettleBillNo(emisSettleBill.getSettleBillNo());
// 转换子账单为 MAP
List<Map<String, Object>> listMap=MapObjectUtil.objListToMapList(list);
InputStream inputStream = ResourceUtil.getResourceObj("tpl/bill_tpl.xlsx").getStream();
InputStream fis = new ClassPathResource("tpl/bill_tpl.xls").getInputStream();
Map<String, Object> textMap = MapUtils.newHashMap();
textMap.put("title", bill.getSettleBillName());
Map<String, Object> 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<Map<String, Object>> listMap=new ArrayList<>();
for(EmisSettleSubBill billItem:list){
Map<String, Object> 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("异常");
}
}

View File

@ -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<String, Object> map = MapUtils.newHashMap();
map.put("name", "张三");
map.put("title", "张三");
map.put("number", 5.2);
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);

View File

@ -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();
}

Binary file not shown.