Commit f93069a0 authored by honghy's avatar honghy

海运已装单添加底色

parent 9af4107e
package cn.iocoder.yudao.module.shipment.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 报关方式枚举
*
* @author jayden
*/
@Getter
@AllArgsConstructor
public enum CustomsTypeEnum {
CUSTOMS_TYPE_1("我司全代", 1),
CUSTOMS_TYPE_2("自单代报", 2),
CUSTOMS_TYPE_3("混合报关", 3);
private final String name;
private final Integer value;
}
...@@ -3,9 +3,7 @@ package cn.iocoder.yudao.module.shipment.listener; ...@@ -3,9 +3,7 @@ package cn.iocoder.yudao.module.shipment.listener;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.apollo.core.event.export.ShipmentLoadExcelExportPushEvent;
import cn.iocoder.yudao.framework.apollo.core.event.export.ShipmentLoadExcelExportPushEvent2; import cn.iocoder.yudao.framework.apollo.core.event.export.ShipmentLoadExcelExportPushEvent2;
import cn.iocoder.yudao.framework.apollo.core.event.export.ShipmentPreloadExcelExportPushEvent;
import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
...@@ -18,14 +16,14 @@ import cn.iocoder.yudao.module.infra.service.file.FileService; ...@@ -18,14 +16,14 @@ import cn.iocoder.yudao.module.infra.service.file.FileService;
import cn.iocoder.yudao.module.order.dal.dataobject.order.OrderDO; import cn.iocoder.yudao.module.order.dal.dataobject.order.OrderDO;
import cn.iocoder.yudao.module.order.dal.dataobject.orderGuanlian.OrderGuanlianDO; import cn.iocoder.yudao.module.order.dal.dataobject.orderGuanlian.OrderGuanlianDO;
import cn.iocoder.yudao.module.order.dal.dataobject.orderItem.OrderItemDO; import cn.iocoder.yudao.module.order.dal.dataobject.orderItem.OrderItemDO;
import cn.iocoder.yudao.module.order.dal.dataobject.orderLocation.OrderLocationDO;
import cn.iocoder.yudao.module.order.dal.dataobject.orderWarehouseIn.OrderWarehouseInDO; import cn.iocoder.yudao.module.order.dal.dataobject.orderWarehouseIn.OrderWarehouseInDO;
import cn.iocoder.yudao.module.order.dto.OrderBackInfoDto; import cn.iocoder.yudao.module.order.dto.OrderBackInfoDto;
import cn.iocoder.yudao.module.order.service.order.*; import cn.iocoder.yudao.module.order.service.order.OrderGuanlianService;
import cn.iocoder.yudao.module.order.service.order.OrderItemService;
import cn.iocoder.yudao.module.order.service.order.OrderQueryService;
import cn.iocoder.yudao.module.order.service.order.OrderService;
import cn.iocoder.yudao.module.order.service.orderWarehouseIn.OrderWarehouseInService; import cn.iocoder.yudao.module.order.service.orderWarehouseIn.OrderWarehouseInService;
import cn.iocoder.yudao.module.order.vo.order.OrderWarehouseInDetailsVO; import cn.iocoder.yudao.module.order.vo.order.OrderWarehouseInDetailsVO;
import cn.iocoder.yudao.module.order.vo.orderWarehouseIn.OrderWarehouseInBackItemDo;
import cn.iocoder.yudao.module.order.vo.orderWarehouseIn.OrderWarehouseInBackVO;
import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductAttrDO; import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductAttrDO;
import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductDO; import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductDO;
import cn.iocoder.yudao.module.product.dal.dataobject.productbrank.ProductBrankDO; import cn.iocoder.yudao.module.product.dal.dataobject.productbrank.ProductBrankDO;
...@@ -35,24 +33,23 @@ import cn.iocoder.yudao.module.product.service.productbrank.ProductBrankService; ...@@ -35,24 +33,23 @@ import cn.iocoder.yudao.module.product.service.productbrank.ProductBrankService;
import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxApprovalDO; import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxApprovalDO;
import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxDO; import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxDO;
import cn.iocoder.yudao.module.shipment.dto.LoadDto; import cn.iocoder.yudao.module.shipment.dto.LoadDto;
import cn.iocoder.yudao.module.shipment.dto.PreloadDto; import cn.iocoder.yudao.module.shipment.enums.CustomsTypeEnum;
import cn.iocoder.yudao.module.shipment.service.box.BoxService; import cn.iocoder.yudao.module.shipment.service.box.BoxService;
import cn.iocoder.yudao.module.shipment.service.boxApproval.BoxApprovalService; import cn.iocoder.yudao.module.shipment.service.boxApproval.BoxApprovalService;
import cn.iocoder.yudao.module.shipment.service.boxPreloadGoods.BoxPreloadGoodsService; import cn.iocoder.yudao.module.shipment.service.boxPreloadGoods.BoxPreloadGoodsService;
import cn.iocoder.yudao.module.shipment.utils.CustomCellWriteHandler; import cn.iocoder.yudao.module.shipment.utils.CustomCellWriteHandler;
import cn.iocoder.yudao.module.shipment.utils.CustomLoadMergeStrategyNew; import cn.iocoder.yudao.module.shipment.utils.CustomLoadMergeStrategyNew;
import cn.iocoder.yudao.module.shipment.utils.CustomMergeStrategy;
import cn.iocoder.yudao.module.shipment.vo.boxPreloadGoods.BoxPreloadGoodsBackVO; import cn.iocoder.yudao.module.shipment.vo.boxPreloadGoods.BoxPreloadGoodsBackVO;
import cn.iocoder.yudao.module.system.framework.ue.UeProperties; import cn.iocoder.yudao.module.system.framework.ue.UeProperties;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.ExcelWriter;
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.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -61,7 +58,6 @@ import javax.annotation.Resource; ...@@ -61,7 +58,6 @@ import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
...@@ -69,7 +65,6 @@ import java.util.*; ...@@ -69,7 +65,6 @@ import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
import static cn.iocoder.yudao.framework.excel.constant.ExportConstant.DATA_FORMAT; import static cn.iocoder.yudao.framework.excel.constant.ExportConstant.DATA_FORMAT;
import static cn.iocoder.yudao.module.shipment.enums.ErrorCodeConstants.HAVE_NOT_PRELOAD_GOODS; import static cn.iocoder.yudao.module.shipment.enums.ErrorCodeConstants.HAVE_NOT_PRELOAD_GOODS;
...@@ -187,6 +182,7 @@ public class ShipmentLoadExcelExportListener2 { ...@@ -187,6 +182,7 @@ public class ShipmentLoadExcelExportListener2 {
int allTotalNum = 0; int allTotalNum = 0;
BigDecimal allTotalVolume = new BigDecimal(0); BigDecimal allTotalVolume = new BigDecimal(0);
BigDecimal allTotalWeight = new BigDecimal(0); BigDecimal allTotalWeight = new BigDecimal(0);
BigDecimal allTotalWorth = new BigDecimal(0);
List<Long> secCount = goodsItemList.stream().map(BoxPreloadGoodsBackVO::getSecId).distinct().sorted().collect(Collectors.toList()); List<Long> secCount = goodsItemList.stream().map(BoxPreloadGoodsBackVO::getSecId).distinct().sorted().collect(Collectors.toList());
AtomicInteger colorRowNum = new AtomicInteger(6); AtomicInteger colorRowNum = new AtomicInteger(6);
if (!CollectionUtils.isEmpty(secCount)) { if (!CollectionUtils.isEmpty(secCount)) {
...@@ -217,10 +213,14 @@ public class ShipmentLoadExcelExportListener2 { ...@@ -217,10 +213,14 @@ public class ShipmentLoadExcelExportListener2 {
int totalNum = 0; int totalNum = 0;
BigDecimal totalVolume = new BigDecimal(0); BigDecimal totalVolume = new BigDecimal(0);
BigDecimal totalWeight = new BigDecimal(0); BigDecimal totalWeight = new BigDecimal(0);
BigDecimal totalWorth = new BigDecimal(0);
List<Integer> mergeCountList = new ArrayList(); List<Integer> mergeCountList = new ArrayList();
List<Integer> colorRowList = new ArrayList<>(); List<Integer> colorRowList = new ArrayList<>();
List<Integer> colorRowList2 = new ArrayList<>();
Map<String,Integer> numMap = new HashMap(); Map<String,Integer> numMap = new HashMap();
Map<String,Integer> colorMap = new HashMap<>(); Map<String,Integer> colorMap = new HashMap<>();
Map<String,Integer> colorMap2 = new HashMap<>();
Long part = secCount.get(i); Long part = secCount.get(i);
int colorIndex = 0; int colorIndex = 0;
...@@ -228,11 +228,64 @@ public class ShipmentLoadExcelExportListener2 { ...@@ -228,11 +228,64 @@ public class ShipmentLoadExcelExportListener2 {
Map<Long, List<BoxPreloadGoodsBackVO>> orderMap = goodsItemList.stream().filter(item -> item.getSecId().longValue()==part.longValue() && StringUtils.isNotBlank(item.getWarehouseInInfo())) Map<Long, List<BoxPreloadGoodsBackVO>> orderMap = goodsItemList.stream().filter(item -> item.getSecId().longValue()==part.longValue() && StringUtils.isNotBlank(item.getWarehouseInInfo()))
.collect(Collectors.groupingBy(BoxPreloadGoodsBackVO::getOrderId,LinkedHashMap::new,Collectors.toList())); .collect(Collectors.groupingBy(BoxPreloadGoodsBackVO::getOrderId,LinkedHashMap::new,Collectors.toList()));
for (Map.Entry<Long, List<BoxPreloadGoodsBackVO>> entry : orderMap.entrySet()) { for (Map.Entry<Long, List<BoxPreloadGoodsBackVO>> entry : orderMap.entrySet()) {
boolean prodAttrTag = false;
Long orderId = entry.getKey(); Long orderId = entry.getKey();
OrderBackInfoDto orderInfo = orderQueryService.info(orderId); OrderBackInfoDto orderInfo = orderQueryService.info(orderId);
List<BoxPreloadGoodsBackVO> boxPreload = entry.getValue(); List<BoxPreloadGoodsBackVO> boxPreload = entry.getValue();
List<OrderItemDO> orderItems = boxPreload.stream().map(item -> orderItemService.getOrderItem(item.getOrderItemId())).collect(Collectors.toList()); List<OrderItemDO> orderItems = boxPreload.stream().map(item -> orderItemService.getOrderItem(item.getOrderItemId())).collect(Collectors.toList());
for (OrderItemDO orderItem : orderItems) {
String attrNames = getAttrNameByIds(orderItem.getProdAttrIds(), idNameMap);
if (attrNames.contains("危险品")){
prodAttrTag = true;
}
}
for(OrderItemDO item : orderItems) { for(OrderItemDO item : orderItems) {
LoadDto preloadDto = new LoadDto();
String attrNames = getAttrNameByIds(item.getProdAttrIds(), idNameMap);
preloadDto.setProdAttr(attrNames);
// 当订单的报关方式=混合报关,订单的底色为蓝色,#0000FF
// 当订单的报关方式=自单代报,订单的底色为橙色, #FF7F00
// 当订单的商品包含了特性=危险品DG,订单的底色为黄色, #FFFF00
// 当订单的商品包含了特性=危险品DG&订单的报关方式=自单代报/混合报关,底色为绿色,#00FF00
if(orderInfo.getCustomsType()!=null){
preloadDto.setCustomsType(DictFrameworkUtils.getDictDataFromCache("customs_type",orderInfo.getCustomsType()+"").getLabel());
if (CustomsTypeEnum.CUSTOMS_TYPE_3.getValue().equals(orderInfo.getCustomsType())){
Integer color = Integer.valueOf(IndexedColors.BLUE1.index);
if (prodAttrTag){
color=Integer.valueOf(IndexedColors.ROYAL_BLUE.index);
}
int andIncrement2 = colorRowNum.get();
colorMap2.put(String.valueOf(andIncrement2),Integer.valueOf(color));
colorMap.put(String.valueOf(andIncrement2),Integer.valueOf(color));
colorRowList.add(andIncrement2);
colorRowList2.add(andIncrement2);
}else if (CustomsTypeEnum.CUSTOMS_TYPE_2.getValue().equals(orderInfo.getCustomsType())){
Integer color = Integer.valueOf(IndexedColors.ORANGE.index);
if (prodAttrTag){
color=Integer.valueOf(IndexedColors.GREEN.index);
}
int andIncrement2 = colorRowNum.get();
colorMap2.put(String.valueOf(andIncrement2),Integer.valueOf(color));
colorMap.put(String.valueOf(andIncrement2),Integer.valueOf(color));
colorRowList.add(andIncrement2);
colorRowList2.add(andIncrement2);
}else {
if (prodAttrTag){
int andIncrement2 = colorRowNum.get();
colorMap2.put(String.valueOf(andIncrement2),Integer.valueOf(IndexedColors.YELLOW.index));
colorMap.put(String.valueOf(andIncrement2),Integer.valueOf(IndexedColors.YELLOW.index));
colorRowList.add(andIncrement2);
colorRowList2.add(andIncrement2);
}else if (prodAttrTag){
int andIncrement2 = colorRowNum.get();
colorMap2.put(String.valueOf(andIncrement2),Integer.valueOf(IndexedColors.YELLOW.index));
colorMap.put(String.valueOf(andIncrement2),Integer.valueOf(IndexedColors.YELLOW.index));
colorRowList.add(andIncrement2);
colorRowList2.add(andIncrement2);
}
}
}
List<OrderWarehouseInDO> orderWarehouseInDOS = orderWarehouseInService.selectList(OrderWarehouseInDO::getOrderItemId, item.getOrderItemId()); List<OrderWarehouseInDO> orderWarehouseInDOS = orderWarehouseInService.selectList(OrderWarehouseInDO::getOrderItemId, item.getOrderItemId());
boolean addColorFlag = true; boolean addColorFlag = true;
for (OrderWarehouseInDO orderWarehouseInDO : orderWarehouseInDOS) { for (OrderWarehouseInDO orderWarehouseInDO : orderWarehouseInDOS) {
...@@ -246,7 +299,6 @@ public class ShipmentLoadExcelExportListener2 { ...@@ -246,7 +299,6 @@ public class ShipmentLoadExcelExportListener2 {
} }
int mergeCount = 1; int mergeCount = 1;
int mixedMergeCount = 1; int mixedMergeCount = 1;
LoadDto preloadDto = new LoadDto();
preloadDto.setOrderNo(orderInfo.getOrderNo()); preloadDto.setOrderNo(orderInfo.getOrderNo());
if (numMap.get(orderInfo.getOrderNo()) != null) { if (numMap.get(orderInfo.getOrderNo()) != null) {
preloadDto.setId(String.valueOf(numMap.get(orderInfo.getOrderNo()))); preloadDto.setId(String.valueOf(numMap.get(orderInfo.getOrderNo())));
...@@ -291,18 +343,16 @@ public class ShipmentLoadExcelExportListener2 { ...@@ -291,18 +343,16 @@ public class ShipmentLoadExcelExportListener2 {
return DictFrameworkUtils.getDictDataFromCache("warehousing_specification_type", j.getSpecificationType() + "").getLabel(); return DictFrameworkUtils.getDictDataFromCache("warehousing_specification_type", j.getSpecificationType() + "").getLabel();
}).distinct().collect(Collectors.joining("/")); }).distinct().collect(Collectors.joining("/"));
String packagingType = orderWarehouseInDOS.stream().map(j -> { String packagingType = orderWarehouseInDOS.stream().map(j -> {
return DictFrameworkUtils.getDictDataFromCache("packaging_type", j.getUnit()).getLabel(); return DictFrameworkUtils.getDictDataFromCache("packaging_type", j.getUnit()).getLabel()+"/"+DictFrameworkUtils.getDictDataFromCache("packaging_type", j.getUnit()).getLabelEn();
}).distinct().collect(Collectors.joining("/")); }).distinct().collect(Collectors.joining("/"));
preloadDto.setUnit(warehousingSpecificationType); preloadDto.setUnit(warehousingSpecificationType);
preloadDto.setPackageType(packagingType); preloadDto.setPackageType(packagingType);
} }
preloadDto.setSumVolume(item.getWarehouseInInfoVO().getVolume()); preloadDto.setSumVolume(item.getWarehouseInInfoVO().getVolume());
preloadDto.setProdAttr(getAttrNameByIds(item.getProdAttrIds(),idNameMap));
preloadDto.setUsageIds(getUsageMsg(item.getUsageIds())); preloadDto.setUsageIds(getUsageMsg(item.getUsageIds()));
preloadDto.setSumWeight(item.getWarehouseInInfoVO().getWeight()); preloadDto.setSumWeight(item.getWarehouseInInfoVO().getWeight());
if(orderInfo.getCustomsType()!=null){
preloadDto.setCustomsType(DictFrameworkUtils.getDictDataFromCache("customs_type",orderInfo.getCustomsType()+"").getLabel()); totalWorth = totalWorth.add(item.getWorth());
}
preloadDto.setWorth(item.getWorth()); preloadDto.setWorth(item.getWorth());
preloadDto.setQuantity(item.getWarehouseInInfoVO().getQuantityAll()); preloadDto.setQuantity(item.getWarehouseInInfoVO().getQuantityAll());
list.add(preloadDto); list.add(preloadDto);
...@@ -352,42 +402,60 @@ public class ShipmentLoadExcelExportListener2 { ...@@ -352,42 +402,60 @@ public class ShipmentLoadExcelExportListener2 {
} }
} }
} }
colorRowNum.getAndAdd(2); int andIncrement = colorRowNum.getAndIncrement();
colorMap2.put(String.valueOf(andIncrement),Integer.valueOf(IndexedColors.YELLOW.index));
colorMap.put(String.valueOf(andIncrement),Integer.valueOf(IndexedColors.YELLOW.index));
colorRowList.add(andIncrement);
colorRowList2.add(andIncrement);
colorRowNum.getAndAdd(1);
LoadDto preloadDto = new LoadDto(); LoadDto preloadDto = new LoadDto();
preloadDto.setId("TOTAL"); preloadDto.setId("TOTAL");
preloadDto.setSumNum(totalNum); preloadDto.setSumNum(totalNum);
preloadDto.setSumVolume(totalVolume); preloadDto.setSumVolume(totalVolume);
preloadDto.setSumWeight(totalWeight); preloadDto.setSumWeight(totalWeight);
preloadDto.setWorth(totalWorth);
list.add(preloadDto); list.add(preloadDto);
allTotalNum = allTotalNum + totalNum; allTotalNum = allTotalNum + totalNum;
allTotalVolume = allTotalVolume.add(totalVolume); allTotalVolume = allTotalVolume.add(totalVolume);
allTotalWeight = allTotalWeight.add(totalWeight); allTotalWeight = allTotalWeight.add(totalWeight);
allTotalWorth = allTotalWorth.add(totalWorth);
if(i==secCount.size()-1){ if(i==secCount.size()-1){
LoadDto preloadDto1 = new LoadDto(); LoadDto preloadDto1 = new LoadDto();
preloadDto1.setId("IN TOTAL"); preloadDto1.setId("IN TOTAL");
preloadDto1.setProdAttr("合计");
preloadDto1.setSumNum(allTotalNum); preloadDto1.setSumNum(allTotalNum);
preloadDto1.setSumVolume(allTotalVolume); preloadDto1.setSumVolume(allTotalVolume);
preloadDto1.setSumWeight(allTotalWeight); preloadDto1.setSumWeight(allTotalWeight);
preloadDto1.setWorth(allTotalWorth);
list.add(preloadDto1); list.add(preloadDto1);
colorMap2.put(String.valueOf(andIncrement+1),Integer.valueOf(IndexedColors.YELLOW.index));
colorMap.put(String.valueOf(andIncrement+1),Integer.valueOf(IndexedColors.YELLOW.index));
colorRowList.add(andIncrement+1);
colorRowList2.add(andIncrement+1);
} }
WriteTable writeTable = EasyExcel.writerTable(i) WriteTable writeTable = EasyExcel.writerTable(i)
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,0,1)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,0,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,1,1)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,1,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,2,1)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,2,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,3, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,3, colorMap))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,4, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,4, colorMap))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,5, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,5, colorMap))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,6, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,6, colorMap))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,7, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,7, colorMap))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,8,2)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,8,2,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,9,1)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,9,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,10,2)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,10,2,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,11,2)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,11,2,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,12,1)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,12,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,13, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,13, colorMap))
.registerWriteHandler(new CustomCellWriteHandler(colorRowList,14, colorMap)) .registerWriteHandler(new CustomCellWriteHandler(colorRowList,14, colorMap))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,17,1)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,15,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,18,2)) .registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,16,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,17,1,colorRowList2,colorMap2))
.registerWriteHandler(new CustomLoadMergeStrategyNew(list,mergeCountList,18,2,colorRowList2,colorMap2))
.automaticMergeHead(true).head(headList).needHead(true).build(); .automaticMergeHead(true).head(headList).needHead(true).build();
excelWriter.write(list,sheet,writeTable); excelWriter.write(list,sheet,writeTable);
} }
......
package cn.iocoder.yudao.module.shipment.utils; package cn.iocoder.yudao.module.shipment.utils;
import cn.iocoder.yudao.module.shipment.dto.AirLoadDto;
import cn.iocoder.yudao.module.shipment.dto.LoadDto; import cn.iocoder.yudao.module.shipment.dto.LoadDto;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy; import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import org.apache.poi.ss.usermodel.Cell; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import org.apache.poi.ss.usermodel.Sheet; import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -41,14 +42,33 @@ public class CustomLoadMergeStrategyNew extends AbstractMergeStrategy { ...@@ -41,14 +42,33 @@ public class CustomLoadMergeStrategyNew extends AbstractMergeStrategy {
// 需要开始合并单元格的首行index // 需要开始合并单元格的首行index
private Integer rowIndex; private Integer rowIndex;
private List<Integer> colorRowList;
private Map<String,Integer> colorMap;
// exportDataList为待合并目标列的值 partMerge为另外一种合并方式计算好的合并行数,mergeType 合并类型 1为订单维度合并 2为入仓记录维度的合并 // exportDataList为待合并目标列的值 partMerge为另外一种合并方式计算好的合并行数,mergeType 合并类型 1为订单维度合并 2为入仓记录维度的合并
public CustomLoadMergeStrategyNew(List<LoadDto> exportDataList, List<Integer> partMergeList, Integer targetColumnIndex, int mergeType) { public CustomLoadMergeStrategyNew(List<LoadDto> exportDataList, List<Integer> partMergeList, Integer targetColumnIndex, int mergeType,List<Integer> colorRowList, Map<String,Integer> colorMap) {
this.exportFieldGroupCountList = getGroupCountList(exportDataList,targetColumnIndex); this.exportFieldGroupCountList = getGroupCountList(exportDataList,targetColumnIndex);
this.partMergeList = partMergeList; this.partMergeList = partMergeList;
this.mergeType = mergeType; this.mergeType = mergeType;
this.targetColumnIndex = targetColumnIndex; this.targetColumnIndex = targetColumnIndex;
this.colorRowList = colorRowList;
this.colorMap = colorMap;
} }
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
if (colorRowList.contains(cell.getRowIndex()) && cell.getColumnIndex() == targetColumnIndex) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.fromInt(colorMap.get(String.valueOf(cell.getRowIndex()))).index);
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(cellStyle);
}
if (!isHead) {
this.merge(writeSheetHolder.getSheet(), cell, head, relativeRowIndex);
}
}
@Override @Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
...@@ -56,6 +76,7 @@ public class CustomLoadMergeStrategyNew extends AbstractMergeStrategy { ...@@ -56,6 +76,7 @@ public class CustomLoadMergeStrategyNew extends AbstractMergeStrategy {
if (null == rowIndex) { if (null == rowIndex) {
rowIndex = cell.getRowIndex(); rowIndex = cell.getRowIndex();
} }
// 仅从首行以及目标列的单元格开始合并,忽略其他 // 仅从首行以及目标列的单元格开始合并,忽略其他
if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex ) { if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex ) {
if (mergeType == 1) { if (mergeType == 1) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment