md
This commit is contained in:
parent
3fe0ce8ac0
commit
3375a592d4
@ -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("异常");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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.
BIN
emis-biz/src/main/resources/tpl/bill_tpl.xlsx
Normal file
BIN
emis-biz/src/main/resources/tpl/bill_tpl.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user