From 09e16c020a22c970dc9d91f99355d15a07ea52cc Mon Sep 17 00:00:00 2001
From: honghy <704887482@qq.com>
Date: Mon, 9 Dec 2024 14:29:32 +0800
Subject: [PATCH] =?UTF-8?q?=E7=A9=BA=E8=BF=90=E5=B7=B2=E8=A3=85=E5=8D=95?=
 =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=95=E8=89=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ShipmentAirLoadExcelExportListener.java   | 122 +++++++++++++-----
 .../ShipmentLoadExcelExportListener2.java     |   2 +-
 .../utils/CustomAirLoadMergeStrategyNew.java  |  28 +++-
 3 files changed, 116 insertions(+), 36 deletions(-)

diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentAirLoadExcelExportListener.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentAirLoadExcelExportListener.java
index 039ef8c33..e81372085 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentAirLoadExcelExportListener.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentAirLoadExcelExportListener.java
@@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.ecw.service.cabinet.CabinetService;
 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
 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.orderItem.OrderItemDO;
 import cn.iocoder.yudao.module.order.dto.OrderBackInfoDto;
 import cn.iocoder.yudao.module.order.service.order.*;
 import cn.iocoder.yudao.module.order.service.orderWarehouseIn.OrderWarehouseInService;
@@ -32,6 +33,7 @@ import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxMergePkgDO;
 import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxPkgOrderDO;
 import cn.iocoder.yudao.module.shipment.dto.AirLoadDto;
 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.boxApproval.BoxApprovalService;
 import cn.iocoder.yudao.module.shipment.service.boxMergePkg.BoxMergePkgService;
@@ -50,6 +52,7 @@ import com.alibaba.fastjson.JSONObject;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.IndexedColors;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
@@ -222,6 +225,7 @@ public class ShipmentAirLoadExcelExportListener {
                         int totalNum = 0;
                         BigDecimal totalVolume = new BigDecimal(0);
                         BigDecimal totalWeight = new BigDecimal(0);
+                        BigDecimal totalWorth = new BigDecimal(0);
 
                         Map<String,Integer> numMap = new HashMap();
                         List<AirLoadDto> preloadDtoList = new ArrayList<>();
@@ -230,8 +234,10 @@ public class ShipmentAirLoadExcelExportListener {
                         List<Integer> mergeCountList = new ArrayList();
 
                         List<Integer> colorRowList = new ArrayList<>();
+                        List<Integer> colorRowList2 = new ArrayList<>();
                         AtomicInteger colorRowNum = new AtomicInteger(5);
                         Map<String,Integer> colorMap = new HashMap<>();
+                        Map<String,Integer> colorMap2 = new HashMap<>();
                         Map<String,Integer> mergePkgCountMap = new LinkedHashMap<>();
                         int colorIndex = 0;
                         //以订单ID分组
@@ -240,7 +246,11 @@ public class ShipmentAirLoadExcelExportListener {
                                         StringUtils.isNotBlank(item.getWarehouseInInfo()))
                                 .collect(Collectors.groupingBy(BoxPreloadGoodsBackVO::getOrderId,
                                         LinkedHashMap::new,Collectors.toList()));
+                        List<ProductAttrDO> productAttrDOList = productAttrService.getProductAttrList();
+                        Map<String, String> idNameMap = productAttrDOList.stream()
+                                .collect(Collectors.toMap(attr -> String.valueOf(attr.getId()), ProductAttrDO::getAttrName));
                         for (Map.Entry<Long, List<BoxPreloadGoodsBackVO>> entry : orderMap.entrySet()) {
+                            boolean prodAttrTag = false;
                             Long orderId = entry.getKey();
                             Long pkgId = entry.getValue().get(0).getPkgId();
                             OrderBackInfoDto orderInfo = orderQueryService.info(orderId);
@@ -249,6 +259,59 @@ public class ShipmentAirLoadExcelExportListener {
                                     orderWarehouseInService.getOrderWarehouseInListOrderByInTime(orderId);
 
                             for (OrderWarehouseInBackItemVO item : orderWarehouseInBackItemVOS) {
+                                List<BoxPreloadGoodsBackVO> boxPreload = entry.getValue();
+                                List<OrderItemDO> orderItems = boxPreload.stream().map(a -> orderItemService.getOrderItem(a.getOrderItemId())).collect(Collectors.toList());
+                                for (OrderItemDO orderItem : orderItems) {
+                                    String attrNames = getAttrNameByIds(orderItem.getProdAttrIds(), idNameMap);
+                                    if (attrNames.contains("危险品")){
+                                        prodAttrTag = true;
+                                    }
+                                }
+                                AirLoadDto preloadDto = new AirLoadDto();
+
+                                preloadDto.setProdAttr(getAttrNameByIds(item.getProdAttrIds(),idNameMap));
+                                // 当订单的报关方式=混合报关,订单的底色为蓝色,#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.ROYAL_BLUE.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);
+                                        }
+                                    }
+                                }
                                 int andIncrement = colorRowNum.getAndIncrement();
                                 if (StringUtils.isNotBlank(item.getOrderWarehouseInDetails())) {
                                     JSONArray jsonArray = JSONArray.parseArray(item.getOrderWarehouseInDetails());
@@ -258,7 +321,6 @@ public class ShipmentAirLoadExcelExportListener {
                                     }
                                 }
                                 int mergeCount = 1;
-                                AirLoadDto preloadDto = new AirLoadDto();
                                 if (numMap.get(orderInfo.getOrderNo()) != null) {
                                     preloadDto.setId(String.valueOf(numMap.get(orderInfo.getOrderNo())));
                                 } else {
@@ -276,15 +338,10 @@ public class ShipmentAirLoadExcelExportListener {
                                 if(productBrank !=null && productBrank.getFiling()!=null){
                                     preloadDto.setProductRecord(productBrank.getFiling().equals("0")? "N":"Y");
                                 }
-                                List<ProductAttrDO> productAttrDOList = productAttrService.getProductAttrList();
-                                Map<String, String> idNameMap = productAttrDOList.stream()
-                                        .collect(Collectors.toMap(attr -> String.valueOf(attr.getId()), ProductAttrDO::getAttrName));
-                                preloadDto.setProdAttr(getAttrNameByIds(item.getProdAttrIds(),idNameMap));
-                                if(orderInfo.getCustomsType()!=null){
-                                    preloadDto.setCustomsType(DictFrameworkUtils.getDictDataFromCache("customs_type",orderInfo.getCustomsType()+"").getLabel());
-                                }
+
+
                                 preloadDto.setSumNum(item.getCartonsNum());
-                                preloadDto.setPackageType(DictFrameworkUtils.getDictDataFromCache("packaging_type",item.getUnit()).getLabel());
+                                preloadDto.setPackageType(DictFrameworkUtils.getDictDataFromCache("packaging_type",item.getUnit()).getLabel()+"/"+DictFrameworkUtils.getDictDataFromCache("packaging_type", item.getUnit()).getLabelEn());
                                 preloadDto.setBoxGauge(item.getBoxGauge());
                                 preloadDto.setSumVolume(item.getVolume());
                                 preloadDto.setSumWeight(item.getWeight());
@@ -327,8 +384,9 @@ public class ShipmentAirLoadExcelExportListener {
                                     preloadDto.setMaterial(DictFrameworkUtils.getDictDataFromCache("product_material",item.getMaterial()+"").getLabel());
                                 }
                                 preloadDto.setUsageIds(getUsageMsg(item.getUsageIds()));
-                                BigDecimal totalWorth = orderInfo.getOrderItemVOList().stream().map(OrderItemBackVO::getWorth).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                preloadDto.setWorth(totalWorth);
+                                BigDecimal totalWorth2 = orderInfo.getOrderItemVOList().stream().map(OrderItemBackVO::getWorth).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                totalWorth = totalWorth.add(totalWorth2);
+                                preloadDto.setWorth(totalWorth2);
                                 preloadDto.setTotalVolume(orderDO.getSumVolumeFinishedWarehouseIn().compareTo(BigDecimal.ZERO) == 0 ? orderInfo.getSumVolume():orderDO.getSumVolumeFinishedWarehouseIn());
                                 preloadDto.setTotalWeight(orderDO.getSumWeightFinishedWarehouseIn().compareTo(BigDecimal.ZERO) == 0 ? orderInfo.getSumWeight():orderDO.getSumWeightFinishedWarehouseIn());
                                 preloadDtoList.add(preloadDto);
@@ -434,7 +492,13 @@ public class ShipmentAirLoadExcelExportListener {
                         preloadDto.setMergePkgVolume(totalMergeVolume);
                         preloadDto.setMergePkgWeight(totalMergeWeight);
                         preloadDto.setMergePkgQua(totalMergeQuality);
+                        preloadDto.setWorth(totalWorth);
                         preloadDtoList.add(preloadDto);
+                        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);
                         allTotalNum = allTotalNum + totalNum;
                         allTotalVolume = allTotalVolume.add(totalVolume);
                         allTotalWeight = allTotalWeight.add(totalWeight);
@@ -449,33 +513,33 @@ public class ShipmentAirLoadExcelExportListener {
 //                        }
                         List<Integer> mergePkgCountList = mergePkgCountMap.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
                         WriteTable writeTable = EasyExcel.writerTable(i)
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,0,1))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,1,1))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,2,1))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,0,1,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,1,1,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,2,1,colorMap2))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,3, colorMap))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,4, colorMap))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,5, colorMap))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,6, colorMap))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,7, colorMap))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,8,1))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,9,2))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,10,2))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,11,2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,8,1,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,9,2,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,10,2,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,11,2,colorMap2))
 //                                .registerWriteHandler(new CustomCellWriteHandler(colorRowList,11, colorMap))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,12,2))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,13,2))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,mergePkgCountList,14,3))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,mergePkgCountList,15,3))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,mergePkgCountList,16,3))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,mergePkgCountList,17,3))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,mergePkgCountList,18,3))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,mergePkgCountList,19,3))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,12,2,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,13,2,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,mergePkgCountList,14,3,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,mergePkgCountList,15,3,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,mergePkgCountList,16,3,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,mergePkgCountList,17,3,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,mergePkgCountList,18,3,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,mergePkgCountList,19,3,colorMap2))
 //                                .registerWriteHandler(new CustomMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,20,1))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,20, colorMap))
                                 .registerWriteHandler(new CustomCellWriteHandler(colorRowList,21, colorMap))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,22,1))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,23,1))
-                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList,null,24,1))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,22,1,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,23,1,colorMap2))
+                                .registerWriteHandler(new CustomAirLoadMergeStrategyNew(preloadDtoList,mergeCountList,colorRowList2,null,24,1,colorMap2))
                                 .automaticMergeHead(true).head(headList).needHead(true).build();
                         excelWriter.write(preloadDtoList,sheet,writeTable);
                     }
diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentLoadExcelExportListener2.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentLoadExcelExportListener2.java
index 23d56a594..e720e4f93 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentLoadExcelExportListener2.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/listener/ShipmentLoadExcelExportListener2.java
@@ -250,7 +250,7 @@ public class ShipmentLoadExcelExportListener2 {
                                     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);
+                                            Integer color = Integer.valueOf(IndexedColors.ROYAL_BLUE.index);
                                             if (prodAttrTag){
                                                 color=Integer.valueOf(IndexedColors.ROYAL_BLUE.index);
                                             }
diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/utils/CustomAirLoadMergeStrategyNew.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/utils/CustomAirLoadMergeStrategyNew.java
index 28f4c46ce..4914d7059 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/utils/CustomAirLoadMergeStrategyNew.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/utils/CustomAirLoadMergeStrategyNew.java
@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.shipment.utils;
 
 import cn.iocoder.yudao.module.shipment.dto.AirLoadDto;
-import cn.iocoder.yudao.module.shipment.dto.PreloadDto;
+import com.alibaba.excel.metadata.CellData;
 import com.alibaba.excel.metadata.Head;
 import com.alibaba.excel.write.merge.AbstractMergeStrategy;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Sheet;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.springframework.util.CollectionUtils;
 
@@ -34,8 +35,6 @@ public class CustomAirLoadMergeStrategyNew extends AbstractMergeStrategy {
 
     private List<Integer> mergePkgCountList;
 
-
-
     private int mergeType;
 
     /**
@@ -46,14 +45,31 @@ public class CustomAirLoadMergeStrategyNew extends AbstractMergeStrategy {
     // 需要开始合并单元格的首行index
     private Integer rowIndex;
 
+    private Map<String,Integer> colorMap;
+
     // exportDataList为待合并目标列的值   partMerge为另外一种合并方式计算好的合并行数,mergeType 合并类型  1为订单维度合并  2为入仓记录维度的合并
-    public CustomAirLoadMergeStrategyNew(List<AirLoadDto> exportDataList, List<Integer> partMergeList, List<Integer> colorRowList,List<Integer> mergePkgCountList, Integer targetColumnIndex, int mergeType) {
+    public CustomAirLoadMergeStrategyNew(List<AirLoadDto> exportDataList, List<Integer> partMergeList, List<Integer> colorRowList,List<Integer> mergePkgCountList, Integer targetColumnIndex, int mergeType, Map<String,Integer> colorMap) {
         this.exportFieldGroupCountList = getGroupCountList(exportDataList,targetColumnIndex);
         this.partMergeList = partMergeList;
         this.mergeType = mergeType;
         this.targetColumnIndex = targetColumnIndex;
         this.colorRowList = colorRowList;
         this.mergePkgCountList = mergePkgCountList;
+        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);
+        }
     }
 
 
-- 
2.22.0