demand: TMS-客户账单管理-业务账单确认-海运账单调整
This commit is contained in:
parent
4d2ac65d80
commit
cbcae37f23
@ -21,8 +21,13 @@ import cn.hutool.core.map.MapUtil;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.ExcelWriter;
|
||||
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||
import com.alibaba.excel.write.handler.AbstractCellWriteHandler;
|
||||
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||
import com.alibaba.excel.metadata.Head;
|
||||
import com.alibaba.excel.write.metadata.WriteSheet;
|
||||
import com.alibaba.excel.write.metadata.WriteTable;
|
||||
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||
@ -46,8 +51,11 @@ import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.xdadan.erp.emis.service.IEmisSettleBillService;
|
||||
@ -1245,6 +1253,8 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
||||
|
||||
// 结算对象
|
||||
String settlement = Optional.ofNullable(list.get(0)).map(e -> StringUtil.isNotBlank(e.getCustName()) ? e.getCustName() : e.getCustomerName()).orElse("");
|
||||
settlement = Optional.ofNullable(settlement).orElse("").replace("ST", "");
|
||||
final String settlementDisplay = settlement;
|
||||
|
||||
// 根据运单号查询运单详情
|
||||
List<EmisWaybillAndFeeitem> emisWaybills = emisSettleSubBillFeeitemMapper
|
||||
@ -1303,36 +1313,106 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
||||
|
||||
ExcelWriter excelWriter = EasyExcel.write(outputStream).excelType(ExcelTypeEnum.XLSX).build();
|
||||
List<List<String>> contentHeader = this.buildHeader();
|
||||
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(null,
|
||||
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
||||
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
||||
|
||||
AbstractCellWriteHandler headerStyleHandler = new AbstractCellWriteHandler() {
|
||||
@Override
|
||||
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
|
||||
List<WriteCellData<?>> cellDataList, Cell cell, Head head,
|
||||
Integer relativeRowIndex, Boolean isHead) {
|
||||
if (!Boolean.TRUE.equals(isHead)) {
|
||||
return;
|
||||
}
|
||||
int rowIndex = cell.getRowIndex();
|
||||
WriteCellStyle style = cellDataList.get(0).getOrCreateStyle();
|
||||
WriteFont font = style.getWriteFont();
|
||||
if (font == null) {
|
||||
font = new WriteFont();
|
||||
style.setWriteFont(font);
|
||||
}
|
||||
switch (rowIndex) {
|
||||
case 0:
|
||||
font.setFontHeightInPoints((short) 8);
|
||||
font.setBold(Boolean.FALSE);
|
||||
font.setColor(IndexedColors.BLACK.getIndex());
|
||||
style.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
||||
break;
|
||||
case 1:
|
||||
font.setFontHeightInPoints((short) 14);
|
||||
font.setBold(Boolean.FALSE);
|
||||
font.setColor(IndexedColors.BLACK.getIndex());
|
||||
style.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
||||
break;
|
||||
case 3:
|
||||
font.setFontHeightInPoints((short) 12);
|
||||
font.setBold(Boolean.TRUE);
|
||||
font.setColor(IndexedColors.RED.getIndex());
|
||||
style.setFillForegroundColor(IndexedColors.WHITE.getIndex());
|
||||
style.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
|
||||
style.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
cellDataList.get(0).setWriteCellStyle(style);
|
||||
}
|
||||
};
|
||||
|
||||
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle,
|
||||
contentWriteCellStyle);
|
||||
// 样式:日期行单独,后续保持原样
|
||||
WriteCellStyle dateContentStyle = new WriteCellStyle();
|
||||
dateContentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
dateContentStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
||||
dateContentStyle.setBorderLeft(BorderStyle.THIN);
|
||||
dateContentStyle.setBorderRight(BorderStyle.THIN);
|
||||
dateContentStyle.setBorderTop(BorderStyle.THIN);
|
||||
dateContentStyle.setBorderBottom(BorderStyle.THIN);
|
||||
WriteFont dateFont = new WriteFont();
|
||||
dateFont.setFontName("微软雅黑");
|
||||
dateFont.setFontHeightInPoints((short) 8);
|
||||
dateContentStyle.setWriteFont(dateFont);
|
||||
|
||||
// 日期行:单独写入并使用独立样式,按列头数量合并
|
||||
WriteSheet dateSheet = EasyExcel.writerSheet("sheet").needHead(Boolean.FALSE)
|
||||
.registerWriteHandler(new HorizontalCellStyleStrategy(null, dateContentStyle))
|
||||
.registerWriteHandler(headerStyleHandler)
|
||||
.registerWriteHandler(new CellStyleStrategy(new WriteCellStyle())).build();
|
||||
List<List<String>> headerDate = contentHeader.stream()
|
||||
.map(item -> Collections.singletonList("出账日期:" + date))
|
||||
.collect(Collectors.toList());
|
||||
WriteTable tDate = EasyExcel.writerTable(0).needHead(Boolean.TRUE).head(headerDate).build();
|
||||
excelWriter.write((Collection<?>) null, dateSheet, tDate);
|
||||
|
||||
// 构建大表头
|
||||
WriteSheet writeSheet1 = EasyExcel.writerSheet("sheet").needHead(Boolean.FALSE)
|
||||
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||
.registerWriteHandler(headerStyleHandler)
|
||||
.registerWriteHandler(new CellStyleStrategy(new WriteCellStyle())).build();
|
||||
|
||||
List<List<String>> header1 = contentHeader.stream().map(item -> Collections.singletonList("探路供应链(上海)"))
|
||||
.collect(Collectors.toList());
|
||||
WriteTable t1 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).head(header1).build();
|
||||
WriteTable t1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).head(header1).build();
|
||||
excelWriter.write((Collection<?>) null, writeSheet1, t1);
|
||||
|
||||
List<List<String>> header2 = contentHeader.stream()
|
||||
.map(item -> Collections.singletonList(year + "年" + month + "月海运费确认书"))
|
||||
.collect(Collectors.toList());
|
||||
WriteTable t2 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).head(header2).build();
|
||||
WriteTable t2 = EasyExcel.writerTable(2).needHead(Boolean.TRUE).head(header2).build();
|
||||
excelWriter.write((Collection<?>) null, writeSheet1, t2);
|
||||
|
||||
List<List<String>> header3 = contentHeader.stream()
|
||||
.map(item -> Collections.singletonList("结算对象:" + settlement))
|
||||
.map(item -> Collections.singletonList("结算对象:" + settlementDisplay))
|
||||
.collect(Collectors.toList());
|
||||
header3.set(9, Collections.singletonList("出账日期:" + date));
|
||||
header3.set(10, Collections.singletonList("出账日期:" + date));
|
||||
header3.set(11, Collections.singletonList("出账日期:" + date));
|
||||
WriteTable t3 = EasyExcel.writerTable(2).needHead(Boolean.TRUE).head(header3).build();
|
||||
WriteTable t3 = EasyExcel.writerTable(3).needHead(Boolean.TRUE).head(header3).build();
|
||||
excelWriter.write((Collection<?>) null, writeSheet1, t3);
|
||||
|
||||
log.info("Building a large header is success");
|
||||
|
||||
List<String> excelKey = emisWaybillMap.keySet().stream().collect(Collectors.toList());
|
||||
int num = 3;
|
||||
int num = 4;
|
||||
for (int i = 0; i < excelKey.size(); i++) {
|
||||
List<List<String>> result = new ArrayList<>();
|
||||
Map<String, Object> subtotalMap = new HashMap<>();
|
||||
@ -1341,6 +1421,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
||||
List<EmisSettleSubBillFeeitem> settleSubBillFeeitemList = emisWaybill.getSettleSubBillFeeitemList();
|
||||
calculateSubtotal(settleSubBillFeeitemList, subtotalMap);
|
||||
settleSubBillFeeitemList.forEach(item -> {
|
||||
String remark = Optional.ofNullable(item.getRemark()).orElse("");
|
||||
result.add(Lists.newArrayList(emisWaybill.getLadingBillCode(), emisWaybill.getBillCode(),
|
||||
emisWaybill.getCompanyCode(), emisWaybill.getDeparturePortName(),
|
||||
emisWaybill.getDestinationPortName(), emisWaybill.getBoxQuantity(),
|
||||
@ -1348,7 +1429,8 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
||||
emisWaybill.getBillWeight().stripTrailingZeros().toPlainString(),
|
||||
emisWaybill.getTotalVolume().stripTrailingZeros().toPlainString(),
|
||||
item.getFeeName(), item.getCurrency(),
|
||||
item.getBillFee().stripTrailingZeros().toPlainString()));
|
||||
item.getBillFee().stripTrailingZeros().toPlainString(),
|
||||
remark));
|
||||
});
|
||||
// 小表头
|
||||
WriteSheet sheet = EasyExcel.writerSheet("sheet")
|
||||
@ -1416,6 +1498,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
||||
header.add(Collections.singletonList("费用名称"));
|
||||
header.add(Collections.singletonList("币种"));
|
||||
header.add(Collections.singletonList("金额"));
|
||||
header.add(Collections.singletonList("备注"));
|
||||
return header;
|
||||
}
|
||||
|
||||
|
||||
@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="origFee" column="orig_fee"/>
|
||||
<result property="currency" column="currency"/>
|
||||
<result property="orderNum" column="order_num"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEmisSettleSubBillFeeitemVo">
|
||||
@ -66,7 +67,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
b.bill_fee,
|
||||
b.orig_fee,
|
||||
b.currency,
|
||||
b.order_num
|
||||
b.order_num,
|
||||
b.remark
|
||||
from emis_waybill a
|
||||
left join emis_settle_sub_bill_feeitem b on a.bill_code = b.bill_code and b.del_flag = '0'
|
||||
left join emis_site seaway1 on a.departure_port=seaway1.site_code and seaway1.del_flag='0'
|
||||
|
||||
Loading…
Reference in New Issue
Block a user