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.EasyExcel;
|
||||||
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.ExcelWriter;
|
||||||
import com.alibaba.excel.support.ExcelTypeEnum;
|
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.WriteSheet;
|
||||||
import com.alibaba.excel.write.metadata.WriteTable;
|
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.WriteCellStyle;
|
||||||
import com.alibaba.excel.write.metadata.style.WriteFont;
|
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
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.collections.MapUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
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.IndexedColors;
|
||||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.xdadan.erp.emis.service.IEmisSettleBillService;
|
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("");
|
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
|
List<EmisWaybillAndFeeitem> emisWaybills = emisSettleSubBillFeeitemMapper
|
||||||
@ -1303,36 +1313,106 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
|
|
||||||
ExcelWriter excelWriter = EasyExcel.write(outputStream).excelType(ExcelTypeEnum.XLSX).build();
|
ExcelWriter excelWriter = EasyExcel.write(outputStream).excelType(ExcelTypeEnum.XLSX).build();
|
||||||
List<List<String>> contentHeader = this.buildHeader();
|
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);
|
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)
|
WriteSheet writeSheet1 = EasyExcel.writerSheet("sheet").needHead(Boolean.FALSE)
|
||||||
.registerWriteHandler(horizontalCellStyleStrategy)
|
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||||
|
.registerWriteHandler(headerStyleHandler)
|
||||||
.registerWriteHandler(new CellStyleStrategy(new WriteCellStyle())).build();
|
.registerWriteHandler(new CellStyleStrategy(new WriteCellStyle())).build();
|
||||||
|
|
||||||
List<List<String>> header1 = contentHeader.stream().map(item -> Collections.singletonList("探路供应链(上海)"))
|
List<List<String>> header1 = contentHeader.stream().map(item -> Collections.singletonList("探路供应链(上海)"))
|
||||||
.collect(Collectors.toList());
|
.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);
|
excelWriter.write((Collection<?>) null, writeSheet1, t1);
|
||||||
|
|
||||||
List<List<String>> header2 = contentHeader.stream()
|
List<List<String>> header2 = contentHeader.stream()
|
||||||
.map(item -> Collections.singletonList(year + "年" + month + "月海运费确认书"))
|
.map(item -> Collections.singletonList(year + "年" + month + "月海运费确认书"))
|
||||||
.collect(Collectors.toList());
|
.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);
|
excelWriter.write((Collection<?>) null, writeSheet1, t2);
|
||||||
|
|
||||||
List<List<String>> header3 = contentHeader.stream()
|
List<List<String>> header3 = contentHeader.stream()
|
||||||
.map(item -> Collections.singletonList("结算对象:" + settlement))
|
.map(item -> Collections.singletonList("结算对象:" + settlementDisplay))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
header3.set(9, Collections.singletonList("出账日期:" + date));
|
WriteTable t3 = EasyExcel.writerTable(3).needHead(Boolean.TRUE).head(header3).build();
|
||||||
header3.set(10, Collections.singletonList("出账日期:" + date));
|
|
||||||
header3.set(11, Collections.singletonList("出账日期:" + date));
|
|
||||||
WriteTable t3 = EasyExcel.writerTable(2).needHead(Boolean.TRUE).head(header3).build();
|
|
||||||
excelWriter.write((Collection<?>) null, writeSheet1, t3);
|
excelWriter.write((Collection<?>) null, writeSheet1, t3);
|
||||||
|
|
||||||
log.info("Building a large header is success");
|
log.info("Building a large header is success");
|
||||||
|
|
||||||
List<String> excelKey = emisWaybillMap.keySet().stream().collect(Collectors.toList());
|
List<String> excelKey = emisWaybillMap.keySet().stream().collect(Collectors.toList());
|
||||||
int num = 3;
|
int num = 4;
|
||||||
for (int i = 0; i < excelKey.size(); i++) {
|
for (int i = 0; i < excelKey.size(); i++) {
|
||||||
List<List<String>> result = new ArrayList<>();
|
List<List<String>> result = new ArrayList<>();
|
||||||
Map<String, Object> subtotalMap = new HashMap<>();
|
Map<String, Object> subtotalMap = new HashMap<>();
|
||||||
@ -1341,6 +1421,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
List<EmisSettleSubBillFeeitem> settleSubBillFeeitemList = emisWaybill.getSettleSubBillFeeitemList();
|
List<EmisSettleSubBillFeeitem> settleSubBillFeeitemList = emisWaybill.getSettleSubBillFeeitemList();
|
||||||
calculateSubtotal(settleSubBillFeeitemList, subtotalMap);
|
calculateSubtotal(settleSubBillFeeitemList, subtotalMap);
|
||||||
settleSubBillFeeitemList.forEach(item -> {
|
settleSubBillFeeitemList.forEach(item -> {
|
||||||
|
String remark = Optional.ofNullable(item.getRemark()).orElse("");
|
||||||
result.add(Lists.newArrayList(emisWaybill.getLadingBillCode(), emisWaybill.getBillCode(),
|
result.add(Lists.newArrayList(emisWaybill.getLadingBillCode(), emisWaybill.getBillCode(),
|
||||||
emisWaybill.getCompanyCode(), emisWaybill.getDeparturePortName(),
|
emisWaybill.getCompanyCode(), emisWaybill.getDeparturePortName(),
|
||||||
emisWaybill.getDestinationPortName(), emisWaybill.getBoxQuantity(),
|
emisWaybill.getDestinationPortName(), emisWaybill.getBoxQuantity(),
|
||||||
@ -1348,7 +1429,8 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
emisWaybill.getBillWeight().stripTrailingZeros().toPlainString(),
|
emisWaybill.getBillWeight().stripTrailingZeros().toPlainString(),
|
||||||
emisWaybill.getTotalVolume().stripTrailingZeros().toPlainString(),
|
emisWaybill.getTotalVolume().stripTrailingZeros().toPlainString(),
|
||||||
item.getFeeName(), item.getCurrency(),
|
item.getFeeName(), item.getCurrency(),
|
||||||
item.getBillFee().stripTrailingZeros().toPlainString()));
|
item.getBillFee().stripTrailingZeros().toPlainString(),
|
||||||
|
remark));
|
||||||
});
|
});
|
||||||
// 小表头
|
// 小表头
|
||||||
WriteSheet sheet = EasyExcel.writerSheet("sheet")
|
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("币种"));
|
||||||
header.add(Collections.singletonList("金额"));
|
header.add(Collections.singletonList("金额"));
|
||||||
|
header.add(Collections.singletonList("备注"));
|
||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="origFee" column="orig_fee"/>
|
<result property="origFee" column="orig_fee"/>
|
||||||
<result property="currency" column="currency"/>
|
<result property="currency" column="currency"/>
|
||||||
<result property="orderNum" column="order_num"/>
|
<result property="orderNum" column="order_num"/>
|
||||||
|
<result property="remark" column="remark"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectEmisSettleSubBillFeeitemVo">
|
<sql id="selectEmisSettleSubBillFeeitemVo">
|
||||||
@ -66,7 +67,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
b.bill_fee,
|
b.bill_fee,
|
||||||
b.orig_fee,
|
b.orig_fee,
|
||||||
b.currency,
|
b.currency,
|
||||||
b.order_num
|
b.order_num,
|
||||||
|
b.remark
|
||||||
from emis_waybill a
|
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_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'
|
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