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.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.resource.ResourceUtil;
|
||||||
import com.alibaba.excel.EasyExcel;
|
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.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.EmisSettleSubBill;
|
||||||
import com.xdadan.erp.emis.domain.EmisSettleSubBillFeeitem;
|
import com.xdadan.erp.emis.domain.EmisSettleSubBillFeeitem;
|
||||||
import com.xdadan.erp.emis.domain.exception.EmisBizError;
|
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.EmisBaseService;
|
||||||
import com.xdadan.erp.emis.service.billexport.ExcelUtils;
|
import com.xdadan.erp.emis.service.billexport.ExcelUtils;
|
||||||
import com.xdadan.erp.emis.service.billexport.MapObjectUtil;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.ClassPathResource;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@ -201,39 +216,72 @@ public class EmisSettleBillController extends BaseController
|
|||||||
|
|
||||||
@Log(title = "导出账单", businessType = BusinessType.EXPORT)
|
@Log(title = "导出账单", businessType = BusinessType.EXPORT)
|
||||||
@PostMapping("/exportBill")
|
@PostMapping("/exportBill")
|
||||||
public void exportBill(HttpServletResponse response, EmisSettleBill emisSettleBill)
|
public AjaxResult exportBill(HttpServletResponse response, EmisSettleBill emisSettleBill)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
// bill.getSettleBillName()+".xls",
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
EmisSettleBill bill=emisBaseService.getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo());
|
EmisSettleBill bill=emisBaseService.getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo());
|
||||||
|
if(bill==null){
|
||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
return AjaxResult.error("账单不存在");
|
||||||
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());
|
|
||||||
|
|
||||||
List<Map<String, Object>> listMap=MapObjectUtil.objListToMapList(list);
|
|
||||||
|
|
||||||
InputStream fis = new ClassPathResource("tpl/bill_tpl.xls").getInputStream();
|
|
||||||
|
|
||||||
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);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取子账单数据
|
||||||
|
List<EmisSettleSubBill> list = emisBaseService.selectSubBillListBySettleBillNo(emisSettleBill.getSettleBillNo());
|
||||||
|
// 转换子账单为 MAP
|
||||||
|
|
||||||
|
InputStream inputStream = ResourceUtil.getResourceObj("tpl/bill_tpl.xlsx").getStream();
|
||||||
|
|
||||||
|
Map<String, Object> textMap = MapUtils.newHashMap();
|
||||||
|
textMap.put("title", bill.getSettleBillName());
|
||||||
|
|
||||||
|
|
||||||
|
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 {
|
try {
|
||||||
|
|
||||||
String templateFileName = "/Users/alan/Downloads/m1.xls";
|
String templateFileName = "/Users/alan/Downloads/bill_tpl.xlsx";
|
||||||
String fileName = "/Users/alan/Downloads/1.xls";
|
String fileName = "/Users/alan/Downloads/2.xlsx";
|
||||||
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
|
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
|
||||||
// 这里要注意 withTemplate 的模板文件会全量存储在内存里面,所以尽量不要用于追加文件,如果文件模板文件过大会OOM
|
// 这里要注意 withTemplate 的模板文件会全量存储在内存里面,所以尽量不要用于追加文件,如果文件模板文件过大会OOM
|
||||||
// 如果要再文件中追加(无法在一个线程里面处理,可以在一个线程的建议参照多次写入的demo) 建议临时存储到数据库 或者 磁盘缓存(ehcache) 然后再一次性写入
|
// 如果要再文件中追加(无法在一个线程里面处理,可以在一个线程的建议参照多次写入的demo) 建议临时存储到数据库 或者 磁盘缓存(ehcache) 然后再一次性写入
|
||||||
// EasyExcel.write(fileName, Map.class).withTemplate(templateFileName).sheet().doWrite(data());
|
// EasyExcel.write(fileName, Map.class).withTemplate(templateFileName).sheet().doWrite(data());
|
||||||
|
|
||||||
Map<String, Object> map = MapUtils.newHashMap();
|
Map<String, Object> map = MapUtils.newHashMap();
|
||||||
map.put("name", "张三");
|
map.put("title", "张三");
|
||||||
map.put("number", 5.2);
|
map.put("number", 5.2);
|
||||||
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);
|
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);
|
||||||
|
|
||||||
|
|||||||
@ -88,6 +88,9 @@ public class EmisSiteServiceImpl extends EmisBaseService implements IEmisSiteSer
|
|||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
EmisDestination oldDest=getDestinationByCode(emisSite.getSiteCode());
|
||||||
|
if(oldDest!=null) {
|
||||||
// 自动创建目的地
|
// 自动创建目的地
|
||||||
EmisDestination emisDestination = new EmisDestination();
|
EmisDestination emisDestination = new EmisDestination();
|
||||||
emisDestination.setDestCode(emisSite.getSiteCode());
|
emisDestination.setDestCode(emisSite.getSiteCode());
|
||||||
@ -106,8 +109,22 @@ public class EmisSiteServiceImpl extends EmisBaseService implements IEmisSiteSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
emisDestinationMapper.insertEmisDestination(emisDestination);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
// 自动创建网点账户
|
// 自动创建网点账户
|
||||||
|
EmisSiteAccount oldSiteAccount=getSiteAccountBySiteCode(emisSite.getSiteCode());
|
||||||
|
if(oldSiteAccount==null) {
|
||||||
EmisSiteAccount emisSiteAccount = new EmisSiteAccount();
|
EmisSiteAccount emisSiteAccount = new EmisSiteAccount();
|
||||||
emisSiteAccount.setAccCode(emisSite.getSiteCode() + "001");
|
emisSiteAccount.setAccCode(emisSite.getSiteCode() + "001");
|
||||||
emisSiteAccount.setSiteCode(emisSite.getSiteCode());
|
emisSiteAccount.setSiteCode(emisSite.getSiteCode());
|
||||||
@ -115,6 +132,9 @@ public class EmisSiteServiceImpl extends EmisBaseService implements IEmisSiteSer
|
|||||||
emisSiteAccount.setStartDate(new Date());
|
emisSiteAccount.setStartDate(new Date());
|
||||||
|
|
||||||
emisSiteAccountMapper.insertEmisSiteAccount(emisSiteAccount);
|
emisSiteAccountMapper.insertEmisSiteAccount(emisSiteAccount);
|
||||||
|
}else{
|
||||||
|
// 不要新建
|
||||||
|
}
|
||||||
}catch(Exception ex){
|
}catch(Exception ex){
|
||||||
ex.printStackTrace();
|
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