chenyuesheng hace 3 años
padre
commit
12a93e5b40
Se han modificado 16 ficheros con 1341 adiciones y 1314 borrados
  1. 140 167
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/entity/LiKuResourcePool.java
  2. 4 4
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/mapper/xml/LiKuResourcePoolMapper.xml
  3. 2 2
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/utils/OptimalUtil.java
  4. 10 46
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/web/LiKuResourcePoolController.java
  5. 2 2
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialQuota/utils/OptimalUtil.java
  6. 28 0
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/constant/AreaCodeFlagEnum.java
  7. 14 0
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/constant/AreaTypeFlagEnum.java
  8. 14 0
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/constant/MaterialsUnitFlagEnum.java
  9. 269 194
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/entity/MaterialReportDetails.java
  10. 229 198
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/mapper/xml/MaterialReportDetailsMapper.xml
  11. 495 3
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/service/MaterialReportDetailsService.java
  12. 24 24
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/utils/AdjustUtil.java
  13. 89 40
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/web/MaterialReportDetailsController.java
  14. 13 625
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/web/MaterialReportDetailsControllerTest.java
  15. 2 2
      src/main/java/com/jeeplus/modules/sg/balancedlibrary/preferredMaterials/utils/OptimalUtil.java
  16. 6 7
      src/main/webapp/webpage/modules/sg/balancedlibrary/liKuResourcePool/liKuResourcePoolList.js

+ 140 - 167
src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/entity/LiKuResourcePool.java

@@ -2,6 +2,7 @@ package com.jeeplus.modules.sg.balancedlibrary.liKuResourcePool.entity;
 
 import com.jeeplus.common.utils.excel.annotation.ExcelField;
 import com.jeeplus.core.persistence.DataEntity;
+import com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.constant.AreaCodeFlagEnum;
 
 /**
  * 利库资源池Entity
@@ -17,6 +18,8 @@ public class LiKuResourcePool extends DataEntity<LiKuResourcePool> {
      * 工厂
      * */
     private String factory;
+    //计划编制人
+    private String planner;
     /**
      * 批次
      * */
@@ -36,7 +39,7 @@ public class LiKuResourcePool extends DataEntity<LiKuResourcePool> {
     /**
      * 库存数量
      * */
-    private Double inventoryAmount;
+    private String inventoryAmount;
     /**
      * 库存金额
      * */
@@ -50,10 +53,6 @@ public class LiKuResourcePool extends DataEntity<LiKuResourcePool> {
      * */
     private String invLocationDes;
     /**
-     * 供应商名称
-     * */
-    private String supplierName;
-    /**
      * 特殊库存标识
      * */
     private String specialStock;
@@ -68,7 +67,7 @@ public class LiKuResourcePool extends DataEntity<LiKuResourcePool> {
     /**
      * 线缆段长
      * */
-    private Double lengthOfCable;
+    private String lengthOfCable;
     /**
      * 环网箱尺寸
      * */
@@ -97,11 +96,11 @@ public class LiKuResourcePool extends DataEntity<LiKuResourcePool> {
     /**
      * 利库数量
      * */
-    private Double numberOfNiches;
+    private String numberOfNiches;
     /**
      * 剩余数量列
      * */
-    private Double remaining;
+    private String remaining;
     /**
      * 是否是段长材料资源库
      * */
@@ -122,279 +121,253 @@ public class LiKuResourcePool extends DataEntity<LiKuResourcePool> {
      */
     private Integer completeLiKu;
 
+    private AreaCodeFlagEnum liKuFlag;
+
     /**
      * 线缆段长计算
      */
     private String meterNumber;
 
-    public Double getLengthOfMetre() {
-        return lengthOfMetre;
-    }
-
-    public void setLengthOfMetre(Double lengthOfMetre) {
-        this.lengthOfMetre = lengthOfMetre;
-    }
-
-    private Double lengthOfMetre;//段长资源的长度(以米为单位) ,即lengthOfCable的米单位值
+    private String lengthOfMetre;//段长资源的长度(以米为单位) ,即lengthOfCable的米单位值
 
     @ExcelField(title = "序号", align = 2, sort = 1)
     public String getSerialNumber() {
         return serialNumber;
     }
-
-    public void setSerialNumber(String serialNumber) {
-        this.serialNumber = serialNumber;
+    @ExcelField(title = "计划编制人", align = 2, sort = 2)
+    public String getPlanner() {
+        return planner;
     }
-
-    @ExcelField(title = "工厂", align = 2, sort = 2)
+    @ExcelField(title = "工厂", align = 2, sort = 3)
     public String getFactory() {
         return factory;
     }
+    @ExcelField(title = "批次", align = 2, sort = 4)
+    public String getBatch() {
+        return batch;
+    }
+    @ExcelField(title = "物料编码", align = 2, sort = 5)
+    public String getMaterialCode() {
+        return materialCode;
+    }
+    @ExcelField(title = "物料描述", align = 2, sort = 6)
+    public String getMaterialDescription() {
+        return materialDescription;
+    }
+    @ExcelField(title = "计量单位", align = 2, sort = 7)
+    public String getUnitOfMeasurement() {
+        return unitOfMeasurement;
+    }
+    @ExcelField(title = "总数量", align = 2, sort = 8)
+    public String getInventoryAmount() {
+        return inventoryAmount;
+    }
+    @ExcelField(title = "总金额", align = 2, sort = 9)
+    public String getInventoryLocation() {
+        return inventoryLocation;
+    }
+    @ExcelField(title = "库存地", align = 2, sort = 10)
+    public String getInvLocation() {
+        return invLocation;
+    }
+    @ExcelField(title = "库存地描述", align = 2, sort = 11)
+    public String getInvLocationDes() {
+        return invLocationDes;
+    }
+    @ExcelField(title = "特殊库存标识", align = 2, sort = 12)
+    public String getSpecialStock() {
+        return specialStock;
+    }
+    @ExcelField(title = "扩展编码", align = 2, sort = 13)
+    public String getExtendedCoding() {
+        return extendedCoding;
+    }
+    @ExcelField(title = "扩展描述", align = 2, sort = 14)
+    public String getExtendedDescription() {
+        return extendedDescription;
+    }
+    @ExcelField(title = "线缆段长", align = 2, sort = 15)
+    public String getLengthOfCable() {
+        return lengthOfCable;
+    }
+    @ExcelField(title = "环网箱尺寸", align = 2, sort = 16)
+    public String getRingCage() {
+        return ringCage;
+    }
+    @ExcelField(title = "终端质保期", align = 2, sort = 17)
+    public String getTerminalWarranty() {
+        return terminalWarranty;
+    }
+    @ExcelField(title = "特殊参数", align = 2, sort = 18)
+    public String getSpecialParameters() {
+        return specialParameters;
+    }
+    @Override
+    @ExcelField(title = "备注", align = 2, sort = 19)
+    public String getRemarks() {
+        return super.getRemarks();
+    }
+    @ExcelField(title = "库龄(日)", align = 2, sort = 20)
+    public Integer getDaysStorage() {
+        return daysStorage;
+    }
+    @ExcelField(title = "库龄(月)", align = 2, sort = 21)
+    public Integer getMonthStorage() {
+        return monthStorage;
+    }
+    @ExcelField(title = "是否业扩", align = 2, sort = 22)
+    public String getIsExpansion() {
+        return isExpansion;
+    }
+    @ExcelField(title = "利库数量", align = 2, sort = 23)
+    public String getNumberOfNiches() {
+        return numberOfNiches;
+    }
+    @ExcelField(title = "剩余数量", align = 2, sort = 24)
+    public String getRemaining() {
+        return remaining;
+    }
+    public Integer getIsSectionLength() {
+        return isSectionLength;
+    }
+    public Integer getWhereFrom() {
+        return whereFrom;
+    }
+    public Integer getSegBelongs() {
+        return segBelongs;
+    }
+    public Integer getCompleteLiKu() {
+        return completeLiKu;
+    }
+    public String getMeterNumber() {
+        return meterNumber;
+    }
+    public String getLengthOfMetre() {
+        return lengthOfMetre;
+    }
 
-    public void setFactory(String factory) {
-        this.factory = factory;
+    public void setSerialNumber(String serialNumber) {
+        this.serialNumber = serialNumber;
     }
 
-    @ExcelField(title = "批次", align = 2, sort = 3)
-    public String getBatch() {
-        return batch;
+    public void setFactory(String factory) {
+        this.factory = factory;
     }
 
     public void setBatch(String batch) {
         this.batch = batch;
     }
 
-    @ExcelField(title = "物料编码", align = 2, sort = 4)
-    public String getMaterialCode() {
-        return materialCode;
-    }
-
     public void setMaterialCode(String materialCode) {
         this.materialCode = materialCode;
     }
 
-    @ExcelField(title = "物料描述", align = 2, sort = 5)
-    public String getMaterialDescription() {
-        return materialDescription;
-    }
-
     public void setMaterialDescription(String materialDescription) {
         this.materialDescription = materialDescription;
     }
 
-    @ExcelField(title = "计量单位", align = 2, sort = 6)
-    public String getUnitOfMeasurement() {
-        return unitOfMeasurement;
-    }
-
     public void setUnitOfMeasurement(String unitOfMeasurement) {
         this.unitOfMeasurement = unitOfMeasurement;
     }
 
-    @ExcelField(title = "库存数量", align = 2, sort = 7)
-    public Double getInventoryAmount() {
-        return inventoryAmount;
-    }
-
-    public void setInventoryAmount(Double inventoryAmount) {
+    public void setInventoryAmount(String inventoryAmount) {
         this.inventoryAmount = inventoryAmount;
     }
 
-
-
-    @ExcelField(title = "库存金额", align = 2, sort = 8)
-    public String getInventoryLocation() {
-        return inventoryLocation;
-    }
-
     public void setInventoryLocation(String inventoryLocation) {
         this.inventoryLocation = inventoryLocation;
     }
 
-    @ExcelField(title = "库存地", align = 2, sort = 9)
-    public String getInvLocation() {
-        return invLocation;
-    }
-
     public void setInvLocation(String invLocation) {
         this.invLocation = invLocation;
     }
 
-    @ExcelField(title = "库存地描述", align = 2, sort = 10)
-    public String getInvLocationDes() {
-        return invLocationDes;
-    }
-
     public void setInvLocationDes(String invLocationDes) {
         this.invLocationDes = invLocationDes;
     }
 
-    @ExcelField(title = "供应商名称", align = 2, sort = 11)
-    public String getSupplierName() {
-        return supplierName;
-    }
-
-    public void setSupplierName(String supplierName) {
-        this.supplierName = supplierName;
-    }
-
-    @ExcelField(title = "特殊库存标识", align = 2, sort = 12)
-    public String getSpecialStock() {
-        return specialStock;
+    public void setPlanner(String planner) {
+        this.planner = planner;
     }
 
     public void setSpecialStock(String specialStock) {
         this.specialStock = specialStock;
     }
 
-    @ExcelField(title = "扩展编码", align = 2, sort = 13)
-    public String getExtendedCoding() {
-        return extendedCoding;
-    }
-
     public void setExtendedCoding(String extendedCoding) {
         this.extendedCoding = extendedCoding;
     }
 
-    @ExcelField(title = "扩展描述", align = 2, sort = 14)
-    public String getExtendedDescription() {
-        return extendedDescription;
-    }
-
     public void setExtendedDescription(String extendedDescription) {
         this.extendedDescription = extendedDescription;
     }
 
-    @ExcelField(title = "线缆段长", align = 2, sort = 15)
-    public Double getLengthOfCable() {
-        return lengthOfCable;
-    }
-
-    public void setLengthOfCable(Double lengthOfCable) {
+    public void setLengthOfCable(String lengthOfCable) {
         this.lengthOfCable = lengthOfCable;
     }
 
-    @ExcelField(title = "环网箱尺寸", align = 2, sort = 16)
-    public String getRingCage() {
-        return ringCage;
-    }
-
     public void setRingCage(String ringCage) {
         this.ringCage = ringCage;
     }
 
-    @ExcelField(title = "终端质保期", align = 2, sort = 17)
-    public String getTerminalWarranty() {
-        return terminalWarranty;
-    }
-
     public void setTerminalWarranty(String terminalWarranty) {
         this.terminalWarranty = terminalWarranty;
     }
 
-    @ExcelField(title = "特殊参数", align = 2, sort = 18)
-    public String getSpecialParameters() {
-        return specialParameters;
-    }
-
     public void setSpecialParameters(String specialParameters) {
         this.specialParameters = specialParameters;
     }
 
-    @Override
-    @ExcelField(title = "备注", align = 2, sort = 19)
-    public String getRemarks() {
-        return super.getRemarks();
-    }
-
-    @Override
-    public void setRemarks(String remarks) {
-        super.setRemarks(remarks);
-    }
-
-    @ExcelField(title = "库龄(日)", align = 2, sort = 20)
-    public Integer getDaysStorage() {
-        return daysStorage;
-    }
-
     public void setDaysStorage(Integer daysStorage) {
         this.daysStorage = daysStorage;
     }
 
-
-    @ExcelField(title = "库龄(月)", align = 2, sort = 21)
-    public Integer getMonthStorage() {
-        return monthStorage;
-    }
-
     public void setMonthStorage(Integer monthStorage) {
         this.monthStorage = monthStorage;
     }
 
-    @ExcelField(title = "是否业扩", align = 2, sort = 22)
-    public String getIsExpansion() {
-        return isExpansion;
-    }
-
     public void setIsExpansion(String isExpansion) {
         this.isExpansion = isExpansion;
     }
 
-    @ExcelField(title = "利库数量", align = 2, sort = 23)
-    public Double getNumberOfNiches() {
-        return numberOfNiches;
-    }
-
-    public void setNumberOfNiches(Double numberOfNiches) {
+    public void setNumberOfNiches(String numberOfNiches) {
         this.numberOfNiches = numberOfNiches;
     }
 
-    @ExcelField(title = "剩余数量", align = 2, sort = 24)
-    public Double getRemaining() {
-        return remaining;
-    }
-
-    public void setRemaining(Double remaining) {
+    public void setRemaining(String remaining) {
         this.remaining = remaining;
     }
 
-    public Integer getIsSectionLength() {
-        return isSectionLength;
-    }
-
     public void setIsSectionLength(Integer isSectionLength) {
         this.isSectionLength = isSectionLength;
     }
 
-    public Integer getWhereFrom() {
-        return whereFrom;
-    }
-
     public void setWhereFrom(Integer whereFrom) {
         this.whereFrom = whereFrom;
     }
 
-    public Integer getSegBelongs() {
-        return segBelongs;
-    }
-
     public void setSegBelongs(Integer segBelongs) {
         this.segBelongs = segBelongs;
     }
 
-    public Integer getCompleteLiKu() {
-        return completeLiKu;
-    }
-
     public void setCompleteLiKu(Integer completeLiKu) {
         this.completeLiKu = completeLiKu;
     }
 
-    public String getMeterNumber() {
-        return meterNumber;
-    }
-
     public void setMeterNumber(String meterNumber) {
         this.meterNumber = meterNumber;
     }
+
+    public void setLengthOfMetre(String lengthOfMetre) {
+        this.lengthOfMetre = lengthOfMetre;
+    }
+
+
+    public AreaCodeFlagEnum getLiKuFlag() {
+        return liKuFlag;
+    }
+
+    public void setLiKuFlag(AreaCodeFlagEnum liKuFlag) {
+        this.liKuFlag = liKuFlag;
+    }
 }

+ 4 - 4
src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/mapper/xml/LiKuResourcePoolMapper.xml

@@ -10,6 +10,7 @@
 		a.remarks AS "remarks",
 		a.del_flag AS "delFlag",
 		a.serialNumber AS "serialNumber",
+		a.planner AS "planner",
 		a.factory AS "factory",
 		a.batch AS "batch",
 		a.materialCode AS "materialCode",
@@ -19,7 +20,6 @@
 		a.inventoryLocation AS "inventoryLocation",
 		a.invLocation AS "invLocation",
 		a.invLocationDes AS "invLocationDes",
-		a.supplierName AS "supplierName",
 		a.specialStock AS "specialStock",
 		a.extendedCoding AS "extendedCoding",
 		a.extendedDescription AS "extendedDescription",
@@ -37,6 +37,7 @@
 	<sql id="liKuColumns">
 		a.id AS "id",
 		a.serialNumber AS "serialNumber",
+		a.planner AS "planner",
 		a.factory AS "factory",
 		a.batch AS "batch",
 		a.materialCode AS "materialCode",
@@ -46,7 +47,6 @@
 		a.inventoryLocation AS "inventoryLocation",
 		a.invLocation AS "invLocation",
 		a.invLocationDes AS "invLocationDes",
-		a.supplierName AS "supplierName",
 		a.specialStock AS "specialStock",
 		a.extendedCoding AS "extendedCoding",
 		a.extendedDescription AS "extendedDescription",
@@ -148,6 +148,7 @@
 		del_flag,
 		remarks,
 		serialNumber,
+		planner,
 		factory,
 		batch,
 		materialCode,
@@ -157,7 +158,6 @@
 		inventoryLocation,
 		invLocation,
 		invLocationDes,
-		supplierName,
 		specialStock,
 		extendedCoding,
 		extendedDescription,
@@ -184,6 +184,7 @@
 			#{item.delFlag},
 			#{item.remarks},
 			#{item.serialNumber},
+			#{item.planner},
 			#{item.factory},
 			#{item.batch},
 			#{item.materialCode},
@@ -193,7 +194,6 @@
 			#{item.inventoryLocation},
 			#{item.invLocation},
 			#{item.invLocationDes},
-			#{item.supplierName},
 			#{item.specialStock},
 			#{item.extendedCoding},
 			#{item.extendedDescription},

+ 2 - 2
src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/utils/OptimalUtil.java

@@ -68,7 +68,7 @@ public class OptimalUtil {
         for (List<LiKuResourcePool> poolList : resultReverse) {
             BigDecimal listSum = BigDecimal.valueOf(0.0);
             for (LiKuResourcePool pool : poolList) {
-                listSum = listSum.add(BigDecimal.valueOf(pool.getLengthOfMetre()));
+                listSum = listSum.add(new BigDecimal(pool.getLengthOfMetre()));
             }
             if (listSum.compareTo(currMin) < 0) {
                 currMin = listSum;
@@ -146,7 +146,7 @@ public class OptimalUtil {
         }
         LiKuResourcePool next = elements.get(index);
         //处理单位不同,所有都以米作为单位计算
-        Double cableLength = next.getLengthOfMetre();
+        Double cableLength = Double.valueOf(next.getLengthOfMetre());
 
         index++;
         //如果将当前值加上已有元素组合的值等于待比对值,得到结果

+ 10 - 46
src/main/java/com/jeeplus/modules/sg/balancedlibrary/liKuResourcePool/web/LiKuResourcePoolController.java

@@ -183,55 +183,20 @@ public class LiKuResourcePoolController extends BaseController {
 				//获取库存地描述,标记数据所属区域
 				pool.setWhereFrom(LiKuUtils.judgmentArea(pool.getInvLocation()));
 				pool.setRemaining(pool.getInventoryAmount());
-				pool.setNumberOfNiches(0.0);
+				pool.setNumberOfNiches("0");
 			}
-//			List<StandardMaterials> list = new ArrayList<>();
-//			int lastDataRowNum = ei.getLastDataRowNum();
-//			for (int i = 1; i <= lastDataRowNum; i++) {
-//				StandardMaterials pool = new StandardMaterials();
-//				Row row = ei.getRow(i);
-//				pool.setSerialNumber(String.valueOf(row.getCell(0)));
-//				pool.setFactory(String.valueOf(row.getCell(1)));
-//				pool.setBatch(String.valueOf(row.getCell(2)));
-//				pool.setMaterialCode(row.getCell(3).getStringCellValue());
-//				pool.setMaterialDescription(String.valueOf(row.getCell(4)));
-//				pool.setUnitOfMeasurement(String.valueOf(row.getCell(5)));
-//				pool.setInventoryAmount(Double.valueOf(String.valueOf(row.getCell(6))));
-//				pool.setInventoryLocation(String.valueOf(row.getCell(7)));
-//				pool.setInvLocation(String.valueOf(row.getCell(8)));
-//				pool.setInvLocationDes(String.valueOf(row.getCell(9)));
-//				pool.setSupplierName(String.valueOf(row.getCell(10)));
-//				pool.setSpecialStock(String.valueOf(row.getCell(11)));
-//				pool.setExtendedCoding(String.valueOf(row.getCell(12)));
-//				pool.setExtendedDescription(String.valueOf(row.getCell(13)));
-//				pool.setMeterNumber(String.valueOf(row.getCell(14)));
-//				pool.setRingCage(String.valueOf(row.getCell(15)));
-//				pool.setTerminalWarranty(String.valueOf(row.getCell(16)));
-//				pool.setSpecialParameters(String.valueOf(row.getCell(17)));
-//				pool.setRemarks(String.valueOf(row.getCell(18)));
-//				pool.setDaysStorage(Double.valueOf(String.valueOf(row.getCell(19))).intValue());
-//				pool.setMonthStorage(Double.valueOf(String.valueOf(row.getCell(20))).intValue());
-//				pool.setIsExpansion(String.valueOf(row.getCell(21)));
-//				//获取计量单位,判断是否是段长数据
-//				unit = pool.getUnitOfMeasurement();
-//				pool.setIsSectionLength(LiKuUtils.isTheUnitMeter(unit));
-//				//获取库存地描述,标记数据所属区域
-//				pool.setWhereFrom(LiKuUtils.judgmentArea(pool.getInvLocation()));
-//				pool.setRemaining(pool.getInventoryAmount());
-//				pool.setNumberOfNiches(0.0);
-//				list.add(pool);
-//			}
 			if (list.size() > 0) {
 				List<LiKuResourcePool> insertList = new ArrayList<>();
 				for (LiKuResourcePool pool :list) {
 					Integer isSectionLength = pool.getIsSectionLength();
 					if (isSectionLength.compareTo(LiKuUtils.YES) == 0) {
-						String lengthOfCable = pool.getMeterNumber();
-						if (null != lengthOfCable && !"".equals(lengthOfCable)) {
+						String lengthOfCable = pool.getLengthOfCable();
+						/*if (null != lengthOfCable && !"".equals(lengthOfCable)) {
 							String[] split = lengthOfCable.split(";");
 							for (int i = 0; i < split.length; i++) {
 								LiKuResourcePool liKu = new LiKuResourcePool();
 								liKu.setSerialNumber(pool.getSerialNumber());
+								liKu.setPlanner(pool.getPlanner());
 								liKu.setFactory(pool.getFactory());
 								liKu.setBatch(pool.getBatch());
 								liKu.setMaterialCode(pool.getMaterialCode());
@@ -241,11 +206,10 @@ public class LiKuResourcePoolController extends BaseController {
 								liKu.setInventoryLocation(pool.getInventoryLocation());
 								liKu.setInvLocation(pool.getInvLocation());
 								liKu.setInvLocationDes(pool.getInvLocationDes());
-								liKu.setSupplierName(pool.getSupplierName());
 								liKu.setSpecialStock(pool.getSpecialStock());
 								liKu.setExtendedCoding(pool.getExtendedCoding());
 								liKu.setExtendedDescription(pool.getExtendedDescription());
-								liKu.setLengthOfCable(Double.valueOf(split[i]));
+								liKu.setLengthOfCable(split[i]);
 								liKu.setRingCage(pool.getRingCage());
 								liKu.setTerminalWarranty(pool.getTerminalWarranty());
 								liKu.setSpecialParameters(pool.getSpecialParameters());
@@ -254,17 +218,17 @@ public class LiKuResourcePoolController extends BaseController {
 								liKu.setMonthStorage(pool.getMonthStorage());
 								liKu.setIsExpansion(pool.getIsExpansion());
 								liKu.setNumberOfNiches(pool.getNumberOfNiches());
-								liKu.setRemaining(Double.valueOf(split[i]));
+								liKu.setRemaining(split[i]);
 								liKu.setIsSectionLength(pool.getIsSectionLength());
 								liKu.setWhereFrom(pool.getWhereFrom());
 								liKu.setSegBelongs(i + 1);
 								insertList.add(liKu);
 							}
-						} else {
-							pool.setSegBelongs(1);
-							pool.setLengthOfCable(pool.getInventoryAmount());
+						} else {*/
+							/*pool.setSegBelongs(1);*/
+							pool.setRemaining(pool.getInventoryAmount());
 							insertList.add(pool);
-						}
+						/*}*/
 					}else {
 						insertList.add(pool);
 					}

+ 2 - 2
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialQuota/utils/OptimalUtil.java

@@ -68,7 +68,7 @@ public class OptimalUtil {
         for (List<LiKuResourcePool> poolList : resultReverse) {
             BigDecimal listSum = BigDecimal.valueOf(0.0);
             for (LiKuResourcePool pool : poolList) {
-                listSum = listSum.add(BigDecimal.valueOf(pool.getLengthOfMetre()));
+                listSum = listSum.add(new BigDecimal(pool.getLengthOfMetre()));
             }
             if (listSum.compareTo(currMin) < 0) {
                 currMin = listSum;
@@ -146,7 +146,7 @@ public class OptimalUtil {
         }
         LiKuResourcePool next = elements.get(index);
         //处理单位不同,所有都以米作为单位计算
-        Double cableLength = next.getLengthOfMetre();
+        Double cableLength = Double.valueOf(next.getLengthOfMetre());
 
         index++;
         //如果将当前值加上已有元素组合的值等于待比对值,得到结果

+ 28 - 0
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/constant/AreaCodeFlagEnum.java

@@ -0,0 +1,28 @@
+package com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.constant;
+
+public enum AreaCodeFlagEnum {
+
+    //HLA2-市公司 HLD1-扬中 HLB1-丹阳 句容-HLC1 未知地区-NO_PLACE
+    HLA2("市公司",0,"HLA2"),HLD1("扬中",1,"HLD1"),HLB1("丹阳",2,"HLB1"),HLC1("句容",3,"HLC1"),NO_PLACE("未知地区",4,"NO_PLACE");
+
+    private final String area;
+    private final Integer num;
+    private final String code;
+    private AreaCodeFlagEnum(String area, int num, String code) {
+        this.num = num;
+        this.area = area;
+        this.code = code;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public String getCode() {
+        return code;
+    }
+}

+ 14 - 0
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/constant/AreaTypeFlagEnum.java

@@ -0,0 +1,14 @@
+package com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.constant;
+
+public enum AreaTypeFlagEnum {
+    LOCAL("本地"),SPAN("跨区"), LOCAL_REPLACEMENT("本地替换"),SPAN_REPLACEMENT("跨区替换");
+    private final String areaType;
+
+    AreaTypeFlagEnum(String areaType) {
+        this.areaType = areaType;
+    }
+
+    public String getAreaType() {
+        return areaType;
+    }
+}

+ 14 - 0
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/constant/MaterialsUnitFlagEnum.java

@@ -0,0 +1,14 @@
+package com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.constant;
+
+public enum MaterialsUnitFlagEnum {
+    KM("千米"),M("米"),IS_SEGMENT("段长"),IS_NOT_SEGMENT("非段长");
+    private final String unit;
+
+    MaterialsUnitFlagEnum(String unit) {
+        this.unit = unit;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+}

+ 269 - 194
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/entity/MaterialReportDetails.java

@@ -70,7 +70,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
      * 申请数量
      * */
     private Double numberOfApplications;
-
+/***********************************************************************************************/
     /**
      * 本地利库详细
      */
@@ -100,6 +100,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
      * 以大代小扩展编号
      */
     private String replaceExCode;
+/********************************************-----******************************************************/
 
     /**
      * 本地利库批次号
@@ -125,7 +126,29 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
      * 跨区利库数量
      * */
     private String numberOfRegional;
-
+    //本地替代利库利库扩展编码
+    private String localReplacementExtendedCoding;
+    //本地替代利库利库扩展描述
+    private String localReplacementExtendedDescription;
+    //本地替代利库利库批次号
+    private String localReplacementBatch;
+    //本地替代利库利库库存地
+    private String localReplacementHouse;
+    //本地替代利库利库数量
+    private String localReplacementNumber;
+    //跨区替代利库利库扩展编码
+    private String regionalReplacementExtendedCoding;
+    //跨区替代利库利库扩展描述
+    private String regionalReplacementExtendedDescription;
+    //跨区替代利库利库批次号
+    private String regionalReplacementBatch;
+    //跨区替代利库利库库存地
+    private String regionalReplacementHouse;
+    //跨区替代利库利库数量
+    private String regionalReplacementNumber;
+
+
+/********************************************----***********************************************************************/
     /**
      * 合并规划利库批次号
      * */
@@ -191,282 +214,146 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
     private String numberOfConLocal;
 
     private Double lengthOfMetre;//段长物资的长度(以米为单位)
-
-    public Double getLengthOfMetre() {
-        return lengthOfMetre;
-    }
-
-    public void setLengthOfMetre(Double lengthOfMetre) {
-        this.lengthOfMetre = lengthOfMetre;
-    }
+/****************************************************************************************************************/
 
     @ExcelField(title = "上报地区", align = 2, sort = 1)
     public String getReportingArea() {
         return reportingArea;
     }
-
-    public void setReportingArea(String reportingArea) {
-        this.reportingArea = reportingArea;
-    }
-
     @ExcelField(title = "储备项目名称", align = 2, sort = 2)
     public String getNameOfReserve() {
         return nameOfReserve;
     }
-
-    public void setNameOfReserve(String nameOfReserve) {
-        this.nameOfReserve = nameOfReserve;
-    }
-
     @ExcelField(title = "物料编码", align = 2, sort = 3)
     public String getMaterialCode() {
         return materialCode;
     }
-
-    public void setMaterialCode(String materialCode) {
-        this.materialCode = materialCode;
-    }
-
     @ExcelField(title = "物料名称", align = 2, sort = 4)
     public String getMaterialName() {
         return materialName;
     }
-
-    public void setMaterialName(String materialName) {
-        this.materialName = materialName;
-    }
-
     @ExcelField(title = "扩展编码", align = 2, sort = 5)
     public String getExtendedCoding() {
         return extendedCoding;
     }
-
-    public void setExtendedCoding(String extendedCoding) {
-        this.extendedCoding = extendedCoding;
-    }
-
     @ExcelField(title = "扩展描述", align = 2, sort = 6)
     public String getExtendedDescription() {
         return extendedDescription;
     }
-
-    public void setExtendedDescription(String extendedDescription) {
-        this.extendedDescription = extendedDescription;
-    }
-
     @ExcelField(title = "单位", align = 2, sort = 7)
     public String getUnit() {
         return unit;
     }
-
-    public void setUnit(String unit) {
-        this.unit = unit;
-    }
-
-
     @ExcelField(title = "总量", align = 2, sort = 8)
-    public Double getTotal() {
+    public Double   getTotal() {
         return total;
     }
-
-    public void setTotal(Double total) {
-        this.total = total;
-    }
-
     @ExcelField(title = "单重/kg", align = 2, sort = 9)
     public String getUnitWeight() {
         return unitWeight;
     }
-
-    public void setUnitWeight(String unitWeight) {
-        this.unitWeight = unitWeight;
-    }
-
     @ExcelField(title = "总重/吨", align = 2, sort = 10)
     public String getTotalWeight() {
         return totalWeight;
     }
-
-    public void setTotalWeight(String totalWeight) {
-        this.totalWeight = totalWeight;
-    }
-
     @ExcelField(title = "甲乙供", align = 2, sort = 11)
     public String getSupplied() {
         return supplied;
     }
-
-    public void setSupplied(String supplied) {
-        this.supplied = supplied;
-    }
-
     @ExcelField(title = "提报人", align = 2, sort = 12)
     public String getReportPerson() {
         return reportPerson;
     }
-
-    public void setReportPerson(String reportPerson) {
-        this.reportPerson = reportPerson;
-    }
-
     @ExcelField(title = "提报部门", align = 2, sort = 13)
     public String getReportDepartment() {
         return reportDepartment;
     }
-
-    public void setReportDepartment(String reportDepartment) {
-        this.reportDepartment = reportDepartment;
-    }
-
     @Override
     public String getRemarks() {
         return super.getRemarks();
     }
-
-    @Override
-    public void setRemarks(String remarks) {
-        super.setRemarks(remarks);
-    }
-
     @ExcelField(title = "利库数量", align = 2, sort = 14)
     public Double getNumberOfNiches() {
         return numberOfNiches;
     }
-
-    public void setNumberOfNiches(Double numberOfNiches) {
-        this.numberOfNiches = numberOfNiches;
-    }
-
     @ExcelField(title = "申请数量", align = 2, sort = 15)
     public Double getNumberOfApplications() {
         return numberOfApplications;
     }
-
-    public void setNumberOfApplications(Double numberOfApplications) {
-        this.numberOfApplications = numberOfApplications;
-    }
-
-    public List<MaterialDetails> getLocalList() {
-        return localList;
-    }
-
-    public void setLocalList(List<MaterialDetails> localList) {
-        this.localList = localList;
-    }
-
-    public List<MaterialDetails> getRegionalList() {
-        return regionalList;
-    }
-
-    public void setRegionalList(List<MaterialDetails> regionalList) {
-        this.regionalList = regionalList;
-    }
-
-    public List<MaterialDetails> getLocalRepList() {
-        return localRepList;
-    }
-
-    public void setLocalRepList(List<MaterialDetails> localRepList) {
-        this.localRepList = localRepList;
-    }
-
-    public List<MaterialDetails> getRegionalRepList() {
-        return regionalRepList;
-    }
-
-    public void setRegionalRepList(List<MaterialDetails> regionalRepList) {
-        this.regionalRepList = regionalRepList;
-    }
-
-    public String getReplaceCode() {
-        return replaceCode;
-    }
-
-    public void setReplaceCode(String replaceCode) {
-        this.replaceCode = replaceCode;
-    }
-
-    public String getReplaceExCode() {
-        return replaceExCode;
-    }
-
-    public void setReplaceExCode(String replaceExCode) {
-        this.replaceExCode = replaceExCode;
-    }
-
     @ExcelField(title = "本地利库批次号", align = 2, sort = 16)
     public String getLocalWareBatch() {
         return localWareBatch;
     }
-
-    public void setLocalWareBatch(String localWareBatch) {
-        this.localWareBatch = localWareBatch;
-    }
-
     @ExcelField(title = "本地利库库存地", align = 2, sort = 17)
     public String getLocalWareHouse() {
         return localWareHouse;
     }
-
-    public void setLocalWareHouse(String localWareHouse) {
-        this.localWareHouse = localWareHouse;
-    }
-
     @ExcelField(title = "本地利库数量", align = 2, sort = 18)
     public String getNumberOfLocal() {
         return numberOfLocal;
     }
-
-    public void setNumberOfLocal(String numberOfLocal) {
-        this.numberOfLocal = numberOfLocal;
-    }
-
     @ExcelField(title = "跨区利库批次号", align = 2, sort = 19)
     public String getRegionalBatch() {
         return regionalBatch;
     }
-
-    public void setRegionalBatch(String regionalBatch) {
-        this.regionalBatch = regionalBatch;
-    }
-
     @ExcelField(title = "跨区利库库存地", align = 2, sort = 20)
     public String getRegionalHouse() {
         return regionalHouse;
     }
-
-    public void setRegionalHouse(String regionalHouse) {
-        this.regionalHouse = regionalHouse;
-    }
-
     @ExcelField(title = "跨区利库数量", align = 2, sort = 21)
     public String getNumberOfRegional() {
         return numberOfRegional;
     }
-
-    public void setNumberOfRegional(String numberOfRegional) {
-        this.numberOfRegional = numberOfRegional;
+    @ExcelField(title = "本地替代利库利库扩展编码", align = 2, sort = 22)
+    public String getLocalReplacementExtendedCoding() {
+        return localReplacementExtendedCoding;
+    }
+    @ExcelField(title = "本地替代利库利库扩展描述", align = 2, sort = 23)
+    public String getLocalReplacementExtendedDescription() {
+        return localReplacementExtendedDescription;
+    }
+    @ExcelField(title = "本地替代利库利库批次号", align = 2, sort = 24)
+    public String getLocalReplacementBatch() {
+        return localReplacementBatch;
+    }
+    @ExcelField(title = "本地替代利库利库库存地", align = 2, sort = 25)
+    public String getLocalReplacementHouse() {
+        return localReplacementHouse;
+    }
+    @ExcelField(title = "本地替代利库利库数量", align = 2, sort = 26)
+    public String getLocalReplacementNumber() {
+        return localReplacementNumber;
+    }
+    @ExcelField(title = "跨区替代利库利库扩展编码", align = 2, sort = 27)
+    public String getRegionalReplacementExtendedCoding() {
+        return regionalReplacementExtendedCoding;
+    }
+    @ExcelField(title = "跨区替代利库利库扩展描述", align = 2, sort = 28)
+    public String getRegionalReplacementExtendedDescription() {
+        return regionalReplacementExtendedDescription;
+    }
+    @ExcelField(title = "跨区替代利库利库批次号", align = 2, sort = 29)
+    public String getRegionalReplacementBatch() {
+        return regionalReplacementBatch;
+    }
+    @ExcelField(title = "跨区替代利库利库库存地", align = 2, sort = 30)
+    public String getRegionalReplacementHouse() {
+        return regionalReplacementHouse;
+    }
+    @ExcelField(title = "跨区替代利库利库数量", align = 2, sort = 31)
+    public String getRegionalReplacementNumber() {
+        return regionalReplacementNumber;
     }
 
-    @ExcelField(title = "合并规划利库批次号", align = 2, sort = 22)
+//    @ExcelField(title = "合并规划利库批次号", align = 2, sort = 22)
     public String getConsolidatedBatch() {
         return consolidatedBatch;
     }
-
-    public void setConsolidatedBatch(String consolidatedBatch) {
-        this.consolidatedBatch = consolidatedBatch;
-    }
-
-    @ExcelField(title = "合并规划利库库存地", align = 2, sort = 23)
+//    @ExcelField(title = "合并规划利库库存地", align = 2, sort = 23)
     public String getConsolidatedWareHouse() {
         return consolidatedWareHouse;
     }
-
-    public void setConsolidatedWareHouse(String consolidatedWareHouse) {
-        this.consolidatedWareHouse = consolidatedWareHouse;
-    }
-
-    @ExcelField(title = "合并规划利库数量", align = 2, sort = 24)
+//    @ExcelField(title = "合并规划利库数量", align = 2, sort = 24)
     public String getNumberOfConsolidated() {
         return numberOfConsolidated;
     }
@@ -475,7 +362,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.numberOfConsolidated = numberOfConsolidated;
     }
 
-    @ExcelField(title = "本地以大代小利库型号", align = 2, sort = 25)
+//    @ExcelField(title = "本地以大代小利库型号", align = 2, sort = 25)
     public String getLocalLiKuModel() {
         return localLiKuModel;
     }
@@ -484,7 +371,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.localLiKuModel = localLiKuModel;
     }
 
-    @ExcelField(title = "本地以大代小利库批次号", align = 2, sort = 26)
+//    @ExcelField(title = "本地以大代小利库批次号", align = 2, sort = 26)
     public String getLocalLiKuBatch() {
         return localLiKuBatch;
     }
@@ -493,7 +380,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.localLiKuBatch = localLiKuBatch;
     }
 
-    @ExcelField(title = "本地以大代小利库库存地", align = 2, sort = 27)
+//    @ExcelField(title = "本地以大代小利库库存地", align = 2, sort = 27)
     public String getLocalLiKuWareHouse() {
         return localLiKuWareHouse;
     }
@@ -502,7 +389,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.localLiKuWareHouse = localLiKuWareHouse;
     }
 
-    @ExcelField(title = "本地以大代小利库数量", align = 2, sort = 28)
+//    @ExcelField(title = "本地以大代小利库数量", align = 2, sort = 28)
     public String getNumberOfLocalLiKu() {
         return numberOfLocalLiKu;
     }
@@ -511,7 +398,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.numberOfLocalLiKu = numberOfLocalLiKu;
     }
 
-    @ExcelField(title = "跨区以大代小利库型号", align = 2, sort = 29)
+//    @ExcelField(title = "跨区以大代小利库型号", align = 2, sort = 29)
     public String getRegionLiKuModel() {
         return regionLiKuModel;
     }
@@ -520,7 +407,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.regionLiKuModel = regionLiKuModel;
     }
 
-    @ExcelField(title = "跨区以大代小利库批次号", align = 2, sort = 30)
+//    @ExcelField(title = "跨区以大代小利库批次号", align = 2, sort = 30)
     public String getRegionLiKuBatch() {
         return regionLiKuBatch;
     }
@@ -529,7 +416,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.regionLiKuBatch = regionLiKuBatch;
     }
 
-    @ExcelField(title = "跨区以大代小利库库存地", align = 2, sort = 31)
+//    @ExcelField(title = "跨区以大代小利库库存地", align = 2, sort = 31)
     public String getRegionLiKuWareHouse() {
         return regionLiKuWareHouse;
     }
@@ -538,7 +425,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.regionLiKuWareHouse = regionLiKuWareHouse;
     }
 
-    @ExcelField(title = "跨区以大代小利库数量", align = 2, sort = 32)
+//    @ExcelField(title = "跨区以大代小利库数量", align = 2, sort = 32)
     public String getNumberOfRegionalLiKu() {
         return numberOfRegionalLiKu;
     }
@@ -547,7 +434,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.numberOfRegionalLiKu = numberOfRegionalLiKu;
     }
 
-    @ExcelField(title = "合并以大代小规划利库型号", align = 2, sort = 33)
+//    @ExcelField(title = "合并以大代小规划利库型号", align = 2, sort = 33)
     public String getConLocalModel() {
         return conLocalModel;
     }
@@ -556,7 +443,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.conLocalModel = conLocalModel;
     }
 
-    @ExcelField(title = "合并以大代小规划利库批次号", align = 2, sort = 34)
+//    @ExcelField(title = "合并以大代小规划利库批次号", align = 2, sort = 34)
     public String getConLocalBatch() {
         return conLocalBatch;
     }
@@ -565,7 +452,7 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.conLocalBatch = conLocalBatch;
     }
 
-    @ExcelField(title = "合并以大代小规划利库库存地", align = 2, sort = 35)
+//    @ExcelField(title = "合并以大代小规划利库库存地", align = 2, sort = 35)
     public String getConLocalWareHouse() {
         return conLocalWareHouse;
     }
@@ -574,12 +461,200 @@ public class MaterialReportDetails extends DataEntity<MaterialReportDetails> {
         this.conLocalWareHouse = conLocalWareHouse;
     }
 
-    @ExcelField(title = "合并以大代小规划利库数量", align = 2, sort = 36)
+//    @ExcelField(title = "合并以大代小规划利库数量", align = 2, sort = 36)
     public String getNumberOfConLocal() {
         return numberOfConLocal;
     }
 
+    public List<MaterialDetails> getLocalList() {
+        return localList;
+    }
+
+    public List<MaterialDetails> getRegionalList() {
+        return regionalList;
+    }
+
+    public List<MaterialDetails> getLocalRepList() {
+        return localRepList;
+    }
+
+    public List<MaterialDetails> getRegionalRepList() {
+        return regionalRepList;
+    }
+
+    public String getReplaceCode() {
+        return replaceCode;
+    }
+
+    public String getReplaceExCode() {
+        return replaceExCode;
+    }
+
+    public Double getLengthOfMetre() {
+        return lengthOfMetre;
+    }
+
+    public void setReportingArea(String reportingArea) {
+        this.reportingArea = reportingArea;
+    }
+
+    public void setNameOfReserve(String nameOfReserve) {
+        this.nameOfReserve = nameOfReserve;
+    }
+
+    public void setMaterialCode(String materialCode) {
+        this.materialCode = materialCode;
+    }
+
+    public void setMaterialName(String materialName) {
+        this.materialName = materialName;
+    }
+
+    public void setExtendedCoding(String extendedCoding) {
+        this.extendedCoding = extendedCoding;
+    }
+
+    public void setExtendedDescription(String extendedDescription) {
+        this.extendedDescription = extendedDescription;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public void setTotal(Double total) {
+        this.total = total;
+    }
+
+    public void setUnitWeight(String unitWeight) {
+        this.unitWeight = unitWeight;
+    }
+
+    public void setTotalWeight(String totalWeight) {
+        this.totalWeight = totalWeight;
+    }
+
+    public void setSupplied(String supplied) {
+        this.supplied = supplied;
+    }
+
+    public void setReportPerson(String reportPerson) {
+        this.reportPerson = reportPerson;
+    }
+
+    public void setReportDepartment(String reportDepartment) {
+        this.reportDepartment = reportDepartment;
+    }
+
+    public void setNumberOfNiches(Double numberOfNiches) {
+        this.numberOfNiches = numberOfNiches;
+    }
+
+    public void setNumberOfApplications(Double numberOfApplications) {
+        this.numberOfApplications = numberOfApplications;
+    }
+
+    public void setLocalList(List<MaterialDetails> localList) {
+        this.localList = localList;
+    }
+
+    public void setRegionalList(List<MaterialDetails> regionalList) {
+        this.regionalList = regionalList;
+    }
+
+    public void setLocalRepList(List<MaterialDetails> localRepList) {
+        this.localRepList = localRepList;
+    }
+
+    public void setRegionalRepList(List<MaterialDetails> regionalRepList) {
+        this.regionalRepList = regionalRepList;
+    }
+
+    public void setReplaceCode(String replaceCode) {
+        this.replaceCode = replaceCode;
+    }
+
+    public void setReplaceExCode(String replaceExCode) {
+        this.replaceExCode = replaceExCode;
+    }
+
+    public void setLocalWareBatch(String localWareBatch) {
+        this.localWareBatch = localWareBatch;
+    }
+
+    public void setLocalWareHouse(String localWareHouse) {
+        this.localWareHouse = localWareHouse;
+    }
+
+    public void setNumberOfLocal(String numberOfLocal) {
+        this.numberOfLocal = numberOfLocal;
+    }
+
+    public void setRegionalBatch(String regionalBatch) {
+        this.regionalBatch = regionalBatch;
+    }
+
+    public void setRegionalHouse(String regionalHouse) {
+        this.regionalHouse = regionalHouse;
+    }
+
+    public void setNumberOfRegional(String numberOfRegional) {
+        this.numberOfRegional = numberOfRegional;
+    }
+
+    public void setConsolidatedBatch(String consolidatedBatch) {
+        this.consolidatedBatch = consolidatedBatch;
+    }
+
+    public void setConsolidatedWareHouse(String consolidatedWareHouse) {
+        this.consolidatedWareHouse = consolidatedWareHouse;
+    }
+
     public void setNumberOfConLocal(String numberOfConLocal) {
         this.numberOfConLocal = numberOfConLocal;
     }
+
+    public void setLengthOfMetre(Double lengthOfMetre) {
+        this.lengthOfMetre = lengthOfMetre;
+    }
+
+    public void setLocalReplacementExtendedCoding(String localReplacementExtendedCoding) {
+        this.localReplacementExtendedCoding = localReplacementExtendedCoding;
+    }
+
+    public void setLocalReplacementExtendedDescription(String localReplacementExtendedDescription) {
+        this.localReplacementExtendedDescription = localReplacementExtendedDescription;
+    }
+
+    public void setLocalReplacementBatch(String localReplacementBatch) {
+        this.localReplacementBatch = localReplacementBatch;
+    }
+
+    public void setLocalReplacementHouse(String localReplacementHouse) {
+        this.localReplacementHouse = localReplacementHouse;
+    }
+
+    public void setLocalReplacementNumber(String localReplacementNumber) {
+        this.localReplacementNumber = localReplacementNumber;
+    }
+
+    public void setRegionalReplacementExtendedCoding(String regionalReplacementExtendedCoding) {
+        this.regionalReplacementExtendedCoding = regionalReplacementExtendedCoding;
+    }
+
+    public void setRegionalReplacementExtendedDescription(String regionalReplacementExtendedDescription) {
+        this.regionalReplacementExtendedDescription = regionalReplacementExtendedDescription;
+    }
+
+    public void setRegionalReplacementBatch(String regionalReplacementBatch) {
+        this.regionalReplacementBatch = regionalReplacementBatch;
+    }
+
+    public void setRegionalReplacementHouse(String regionalReplacementHouse) {
+        this.regionalReplacementHouse = regionalReplacementHouse;
+    }
+
+    public void setRegionalReplacementNumber(String regionalReplacementNumber) {
+        this.regionalReplacementNumber = regionalReplacementNumber;
+    }
 }

+ 229 - 198
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/mapper/xml/MaterialReportDetailsMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.mapper.MaterialReportDetailsMapper">
-	<sql id="resourceColumns">
+    <sql id="resourceColumns">
 		a.id as "id",
 		a.create_by as "create_by",
 		a.create_date as "create_date",
@@ -42,76 +42,86 @@
 		a.conLocalModel as "conLocalModel",
 		a.conLocalBatch as "conLocalBatch",
 		a.conLocalWareHouse as "conLocalWareHouse",
-		a.numberOfConLocal as "numberOfConLocal"
+		a.numberOfConLocal as "numberOfConLocal",
+		a.local_replacement_extended_coding as "localReplacementExtendedCoding",
+        a.local_replacement_extended_description as "localReplacementExtendedDescription",
+        a.local_replacement_batch as "localReplacementBatch",
+        a.local_replacement_house as "localReplacementHouse",
+        a.local_replacement_number as "localReplacementNumber",
+        a.regional_replacement_extended_coding as "regionalReplacementExtendedCoding",
+        a.regional_replacement_extended_description as "regionalReplacementExtendedDescription",
+        a.regional_replacement_batch as "regionalReplacementBatch",
+        a.regional_replacement_house as "regionalReplacementHouse",
+        a.regional_replacement_number as "regionalReplacementNumber"
 	</sql>
 
-	<sql id="leftJoins">
+    <sql id="leftJoins">
 		LEFT JOIN sys_office office ON office.id = a.office_id
 		LEFT JOIN sys_user tuser ON tuser.id = a.user_id
 	</sql>
-	<delete id="delAll">
+    <delete id="delAll">
 		truncate table bla_material_report
 	</delete>
 
 
-	<select id="get" resultType="MaterialReportDetails" >
-		SELECT
-			<include refid="resourceColumns"/>
-		FROM bla_material_report a
-		WHERE a.id = #{id}
-	</select>
+    <select id="get" resultType="MaterialReportDetails">
+        SELECT
+        <include refid="resourceColumns"/>
+        FROM bla_material_report a
+        WHERE a.id = #{id}
+    </select>
 
-	<select id="findList" resultType="MaterialReportDetails" >
-		SELECT
-			<include refid="resourceColumns"/>
-		FROM bla_material_report a
-		<where>
-			a.del_flag = #{DEL_FLAG_NORMAL}
-			<if test="nameOfReserve != null and nameOfReserve != ''">
-				and a.nameOfReserve like concat('%',#{nameOfReserve},'%')
-			</if>
-			<if test="materialCode != null and materialCode != ''">
-				AND a.materialCode like concat('%',#{materialCode},'%')
-			</if>
-			<if test="numberOfNiches != null">
-				<if test="numberOfNiches == 0">
-					AND a.numberOfNiches = 0
-				</if>
-				<if test="numberOfNiches == 1">
-					AND a.numberOfNiches >0
-				</if>
-			</if>
-			${dataScope}
-		</where>
-		<choose>
-			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
-				ORDER BY ${page.orderBy}
-			</when>
-			<otherwise>
-				ORDER BY a.reportingArea,a.nameOfReserve,a.materialCode,a.extendedCoding
-			</otherwise>
-		</choose>
-	</select>
+    <select id="findList" resultType="MaterialReportDetails">
+        SELECT
+        <include refid="resourceColumns"/>
+        FROM bla_material_report a
+        <where>
+            a.del_flag = #{DEL_FLAG_NORMAL}
+            <if test="nameOfReserve != null and nameOfReserve != ''">
+                and a.nameOfReserve like concat('%',#{nameOfReserve},'%')
+            </if>
+            <if test="materialCode != null and materialCode != ''">
+                AND a.materialCode like concat('%',#{materialCode},'%')
+            </if>
+            <if test="numberOfNiches != null">
+                <if test="numberOfNiches == 0">
+                    AND a.numberOfNiches = 0
+                </if>
+                <if test="numberOfNiches == 1">
+                    AND a.numberOfNiches >0
+                </if>
+            </if>
+            ${dataScope}
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.reportingArea,a.nameOfReserve,a.materialCode,a.extendedCoding
+            </otherwise>
+        </choose>
+    </select>
 
-	<select id="findAllList" resultType="MaterialReportDetails" >
-		SELECT
-			<include refid="resourceColumns"/>
-		FROM bla_resource_pool a
-		<where>
-			a.del_flag = #{DEL_FLAG_NORMAL}
-			${dataScope}
-		</where>
-		<choose>
-			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
-				ORDER BY ${page.orderBy}
-			</when>
-			<otherwise>
-				ORDER BY a.update_date DESC
-			</otherwise>
-		</choose>
-	</select>
+    <select id="findAllList" resultType="MaterialReportDetails">
+        SELECT
+        <include refid="resourceColumns"/>
+        FROM bla_resource_pool a
+        <where>
+            a.del_flag = #{DEL_FLAG_NORMAL}
+            ${dataScope}
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
 
-	<insert id="insert">
+    <insert id="insert">
 		INSERT INTO bla_resource_pool(
 			id,
 			create_by,
@@ -131,95 +141,115 @@
 		)
 	</insert>
     <insert id="insertList">
-		insert into bla_material_report(
-		                                id,
-		                                create_by,
-		                                create_date,
-		                                update_by,
-		                                update_date,
-		                                del_flag,
-		                                remarks,
-		                                reportingArea,
-		                                nameOfReserve,
-		                                materialCode,
-		                                materialName,
-		                                extendedCoding,
-		                                extendedDescription,
-		                                unit,
-		                                total,
-		                                unitWeight,
-		                                totalWeight,
-		                                supplied,
-		                                numberOfNiches,
-		                                numberOfApplications,
-		                                localWareBatch,
-		                                localWareHouse,
-		                                numberOfLocal,
-		                                regionalBatch,
-		                                regionalHouse,
-		                                numberOfRegional,
-		                                localLiKuModel,
-		                                localLiKuBatch,
-		                                localLiKuWareHouse,
-		                                numberOfLocalLiKu,
-		                                regionLiKuModel,
-		                                regionLiKuBatch,
-		                                regionLiKuWareHouse,
-		                                numberOfRegionalLiKu,
-										consolidatedBatch,
-										consolidatedWareHouse,
-										numberOfConsolidated,
-										conLocalModel,
-										conLocalBatch,
-										conLocalWareHouse,
-										numberOfConLocal
-		)VALUES
-		<foreach collection="list" item="item" index="index" separator=",">
-			(
-			#{item.id},
-			#{item.createBy.id},
-			#{item.createDate},
-			#{item.updateBy.id},
-			#{item.updateDate},
-			#{item.delFlag},
-			#{item.remarks},
-			#{item.reportingArea},
-			#{item.nameOfReserve},
-			#{item.materialCode},
-			#{item.materialName},
-			#{item.extendedCoding},
-			#{item.extendedDescription},
-			#{item.unit},
-			#{item.total},
-			#{item.unitWeight},
-			#{item.totalWeight},
-			#{item.supplied},
-			#{item.numberOfNiches},
-			#{item.numberOfApplications},
-			#{item.localWareBatch},
-			#{item.localWareHouse},
-			#{item.numberOfLocal},
-			#{item.regionalBatch},
-			#{item.regionalHouse},
-			#{item.numberOfRegional},
-			#{item.localLiKuModel},
-			#{item.localLiKuBatch},
-			#{item.localLiKuWareHouse},
-			#{item.numberOfLocalLiKu},
-			#{item.regionLiKuModel},
-			#{item.regionLiKuBatch},
-			#{item.regionLiKuWareHouse},
-			#{item.numberOfRegionalLiKu},
-			#{item.consolidatedBatch},
-			#{item.consolidatedWareHouse},
-			#{item.numberOfConsolidated},
-			#{item.conLocalModel},
-			#{item.conLocalBatch},
-			#{item.conLocalWareHouse},
-			#{item.numberOfConLocal}
-			)
-		</foreach>
-	</insert>
+        insert into bla_material_report(
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        remarks,
+        reportingArea,
+        nameOfReserve,
+        materialCode,
+        materialName,
+        extendedCoding,
+        extendedDescription,
+        unit,
+        total,
+        unitWeight,
+        totalWeight,
+        supplied,
+        numberOfNiches,
+        numberOfApplications,
+        localWareBatch,
+        localWareHouse,
+        numberOfLocal,
+        regionalBatch,
+        regionalHouse,
+        numberOfRegional,
+        localLiKuModel,
+        localLiKuBatch,
+        localLiKuWareHouse,
+        numberOfLocalLiKu,
+        regionLiKuModel,
+        regionLiKuBatch,
+        regionLiKuWareHouse,
+        numberOfRegionalLiKu,
+        consolidatedBatch,
+        consolidatedWareHouse,
+        numberOfConsolidated,
+        conLocalModel,
+        conLocalBatch,
+        conLocalWareHouse,
+        numberOfConLocal,
+        local_replacement_extended_coding,
+        local_replacement_extended_description,
+        local_replacement_batch,
+        local_replacement_house,
+        local_replacement_number,
+        regional_replacement_extended_coding,
+        regional_replacement_extended_description,
+        regional_replacement_batch,
+        regional_replacement_house,
+        regional_replacement_number
+        )VALUES
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item.id},
+            #{item.createBy.id},
+            #{item.createDate},
+            #{item.updateBy.id},
+            #{item.updateDate},
+            #{item.delFlag},
+            #{item.remarks},
+            #{item.reportingArea},
+            #{item.nameOfReserve},
+            #{item.materialCode},
+            #{item.materialName},
+            #{item.extendedCoding},
+            #{item.extendedDescription},
+            #{item.unit},
+            #{item.total},
+            #{item.unitWeight},
+            #{item.totalWeight},
+            #{item.supplied},
+            #{item.numberOfNiches},
+            #{item.numberOfApplications},
+            #{item.localWareBatch},
+            #{item.localWareHouse},
+            #{item.numberOfLocal},
+            #{item.regionalBatch},
+            #{item.regionalHouse},
+            #{item.numberOfRegional},
+            #{item.localLiKuModel},
+            #{item.localLiKuBatch},
+            #{item.localLiKuWareHouse},
+            #{item.numberOfLocalLiKu},
+            #{item.regionLiKuModel},
+            #{item.regionLiKuBatch},
+            #{item.regionLiKuWareHouse},
+            #{item.numberOfRegionalLiKu},
+            #{item.consolidatedBatch},
+            #{item.consolidatedWareHouse},
+            #{item.numberOfConsolidated},
+            #{item.conLocalModel},
+            #{item.conLocalBatch},
+            #{item.conLocalWareHouse},
+            #{item.numberOfConLocal},
+            #{item.localReplacementExtendedCoding},
+            #{item.localReplacementExtendedDescription},
+            #{item.localReplacementBatch},
+            #{item.localReplacementHouse},
+            #{item.localReplacementNumber},
+            #{item.regionalReplacementExtendedCoding},
+            #{item.regionalReplacementExtendedDescription},
+            #{item.regionalReplacementBatch},
+            #{item.regionalReplacementHouse},
+            #{item.regionalReplacementNumber}
+            )
+        </foreach>
+    </insert>
 
 
     <update id="update">
@@ -231,71 +261,72 @@
 	</update>
 
 
-	<!--物理删除-->
-	<update id="delete">
+    <!--物理删除-->
+    <update id="delete">
 		DELETE FROM bla_resource_pool
 		WHERE id = #{id}
 	</update>
 
-	<!--逻辑删除-->
-	<update id="deleteByLogic">
+    <!--逻辑删除-->
+    <update id="deleteByLogic">
 		UPDATE bla_resource_pool SET
 			del_flag = #{DEL_FLAG_DELETE}
 		WHERE id = #{id}
 	</update>
 
 
-	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
-	<select id="findUniqueByProperty" resultType="LiKuResourcePool" statementType="STATEMENT">
+    <!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+    <select id="findUniqueByProperty" resultType="LiKuResourcePool" statementType="STATEMENT">
 		select * FROM bla_resource_pool  where ${propertyName} = '${value}'
 	</select>
 
 
-	<select id="getLikuDetails" resultType="com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.entity.LikuDetail" >
-		select
-		r.reportingArea as "reportingArea",
-		r.nameOfReserve as "nameOfReserve",
-		r.materialCode as "materialCode",
-		r.materialName as "materialName",
-		r.extendedCoding as "extendedCoding",
-		r.extendedDescription as "extendedDescription",
-		r.unit as "unit",
-		r.total as "total",
-		r.unitWeight as "unitWeight",
-		r.totalWeight as "totalWeight",
-		r.supplied as "supplied",
-		r.numberOfNiches as "numberOfNiches",
-		r.numberOfApplications as "numberOfApplications",
-		h.comparison_type as "comparisonType",
-		p.batch,
-		CONCAT(p.invLocation,'-',SUBSTRING(p.invLocationDes,1,2)) as "warehouse",
-		h.number_niches as "numberNiches",
-		p.segBelongs
+    <select id="getLikuDetails"
+            resultType="com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.entity.LikuDetail">
+        select
+        r.reportingArea as "reportingArea",
+        r.nameOfReserve as "nameOfReserve",
+        r.materialCode as "materialCode",
+        r.materialName as "materialName",
+        r.extendedCoding as "extendedCoding",
+        r.extendedDescription as "extendedDescription",
+        r.unit as "unit",
+        r.total as "total",
+        r.unitWeight as "unitWeight",
+        r.totalWeight as "totalWeight",
+        r.supplied as "supplied",
+        r.numberOfNiches as "numberOfNiches",
+        r.numberOfApplications as "numberOfApplications",
+        h.comparison_type as "comparisonType",
+        p.batch,
+        CONCAT(p.invLocation,'-',SUBSTRING(p.invLocationDes,1,2)) as "warehouse",
+        h.number_niches as "numberNiches",
+        p.segBelongs
 
 
-		from bla_compare_history h
-		left join bla_material_report r on r.id = h.material_id
-		left join bla_resource_pool p on h.liku_id = p.id
-		where
-			r.id is not null
-			<if test="id != null and id != ''">
-				AND r.id = #{id}
-			</if>
-			<if test="nameOfReserve != null and nameOfReserve != ''">
-				and r.nameOfReserve like concat('%',#{nameOfReserve},'%')
-			</if>
-			<if test="materialCode != null and materialCode != ''">
-				AND r.materialCode like concat('%',#{materialCode},'%')
-			</if>
-			<if test="numberOfNiches != null">
-				<if test="numberOfNiches == 0">
-					AND r.numberOfNiches = 0
-				</if>
-				<if test="numberOfNiches == 1">
-					AND r.numberOfNiches >0
-				</if>
-			</if>
-		order by r.reportingArea,r.nameOfReserve,r.materialCode,r.extendedCoding
-	</select>
+        from bla_compare_history h
+        left join bla_material_report r on r.id = h.material_id
+        left join bla_resource_pool p on h.liku_id = p.id
+        where
+        r.id is not null
+        <if test="id != null and id != ''">
+            AND r.id = #{id}
+        </if>
+        <if test="nameOfReserve != null and nameOfReserve != ''">
+            and r.nameOfReserve like concat('%',#{nameOfReserve},'%')
+        </if>
+        <if test="materialCode != null and materialCode != ''">
+            AND r.materialCode like concat('%',#{materialCode},'%')
+        </if>
+        <if test="numberOfNiches != null">
+            <if test="numberOfNiches == 0">
+                AND r.numberOfNiches = 0
+            </if>
+            <if test="numberOfNiches == 1">
+                AND r.numberOfNiches >0
+            </if>
+        </if>
+        order by r.reportingArea,r.nameOfReserve,r.materialCode,r.extendedCoding
+    </select>
 
 </mapper>

+ 495 - 3
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/service/MaterialReportDetailsService.java

@@ -83,7 +83,499 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
         mapper.delAll();
     }
 
-	public List<LikuDetail> getLikuDetails(MaterialReportDetails report){
-		return mapper.getLikuDetails(report);
-	}
+    public List<LikuDetail> getLikuDetails(MaterialReportDetails report) {
+        return mapper.getLikuDetails(report);
+    }
+
+    @Transactional(readOnly = false)
+    public AjaxJson liKuBalance(List<MaterialReportDetails> materialReportDetailsList) {
+        AjaxJson j = new AjaxJson();
+        /*************************************对利库资源池进行操作**********************************************/
+        //段长利库池
+        List<LiKuResourcePool> liKuIsSegmentPoolList = new ArrayList<>();
+        //非段长利库池
+        List<LiKuResourcePool> liKuIsNotSegmentPoolList = new ArrayList<>();
+
+        List<LiKuResourcePool> liKuPoolList = liKuResourcePoolMapper.findLiKuList(null, null);
+        //如果利库资源池为空时 则直接返回结果提示
+        if (liKuPoolList == null || liKuPoolList.size() == 0) {
+            j.setSuccess(false);
+            j.setMsg("请先导入利库资源池!");
+            return j;
+        }
+
+
+        //循环初始化
+        liKuPoolList.forEach(liKuResourcePool -> {
+            //初始化剩余数量
+            liKuResourcePool.setRemaining(liKuResourcePool.getInventoryAmount());
+            //初始化利库数量
+            liKuResourcePool.setNumberOfNiches("0");
+
+
+            //添加枚举标识
+            if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLA2.getCode())) {
+                liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.HLA2);
+            } else if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLB1.getCode())) {
+                liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.HLB1);
+            } else if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLC1.getCode())) {
+                liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.HLC1);
+            } else if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLD1.getCode())) {
+                liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.HLD1);
+            } else {
+                liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.NO_PLACE);
+            }
+
+            //添加标识 分组 段长数据 非段长数据 单位转换
+            if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.M.getUnit()) || liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
+                if (StringUtils.isNotBlank(liKuResourcePool.getLengthOfCable())) {
+                    String[] split = liKuResourcePool.getLengthOfCable().split(";");
+                    for (int i = 0; i < split.length; i++) {
+                        //拆分成新的对象添加集合中 拆分段长为剩余
+                        LiKuResourcePool ResourcePool = new LiKuResourcePool();
+                        if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
+                            BeanUtils.copyProperties(liKuResourcePool, ResourcePool);
+                            ResourcePool.setUnitOfMeasurement(MaterialsUnitFlagEnum.M.getUnit());
+                            ResourcePool.setInventoryAmount(new BigDecimal(liKuResourcePool.getInventoryAmount()).multiply(new BigDecimal(1000)).toString());
+                            ResourcePool.setRemaining(liKuResourcePool.getInventoryAmount());
+                            ResourcePool.setRemaining(new BigDecimal(split[i]).multiply(new BigDecimal(1000)).toString());
+                            ResourcePool.setLengthOfCable(new BigDecimal(split[i]).multiply(new BigDecimal(1000)).toString());
+                        } else {
+                            liKuResourcePool.setRemaining(split[i]);
+                            liKuResourcePool.setLengthOfCable(split[i]);
+                            BeanUtils.copyProperties(liKuResourcePool, ResourcePool);
+                        }
+
+                        liKuIsSegmentPoolList.add(ResourcePool);
+                    }
+                } else {
+                    if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
+                        liKuResourcePool.setUnitOfMeasurement(MaterialsUnitFlagEnum.M.getUnit());
+                        liKuResourcePool.setInventoryAmount(new BigDecimal(liKuResourcePool.getInventoryAmount()).multiply(new BigDecimal(1000)).toString());
+                        liKuResourcePool.setLengthOfCable(liKuResourcePool.getInventoryAmount());
+                        liKuResourcePool.setRemaining(liKuResourcePool.getInventoryAmount());
+                    }
+                    liKuIsSegmentPoolList.add(liKuResourcePool);
+                }
+            } else {
+                liKuIsNotSegmentPoolList.add(liKuResourcePool);
+            }
+        });
+
+        //排序    地区-》库龄降序-》数量大小降序-》批次号-》物料编码升序
+        List<LiKuResourcePool> liKuIsSegmentPoolSortList = getSortLiKuPool(liKuIsSegmentPoolList);
+        List<LiKuResourcePool> liKuIsNotSegmentPoolSortList = getSortLiKuPool(liKuIsNotSegmentPoolList);
+
+
+
+        /*liKuIsNotSegmentPoolSortList.forEach(l -> {
+            System.out.println(l.getLiKuFlag().getArea() + "---" + l.getMonthStorage() + "---" + l.getDaysStorage() + "---" + l.getInventoryAmount() + "---" + l.getBatch() + "---" + l.getExtendedCoding());
+        });*/
+
+
+        /*************************************************物资上报明细***************************************/
+        //物资上报 段长物资
+        List<MaterialReportDetails> materialIsSegmentList = new ArrayList<>();
+        //物资上报 非段长物资
+        List<MaterialReportDetails> materialIsNotSegmentList = new ArrayList<>();
+        //根据 段长非段长区分 初始化
+        materialReportDetailsList.forEach(l -> {
+            //初始化利库数量
+            l.setNumberOfNiches(0.0);
+            //初始化申请数量
+            l.setNumberOfApplications(l.getTotal());
+
+            //单位转换为米
+            if (l.getUnit().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
+                l.setTotal((BigDecimal.valueOf(l.getTotal()).multiply(new BigDecimal(1000))).doubleValue());
+                l.setUnit(MaterialsUnitFlagEnum.M.getUnit());
+                l.setNumberOfApplications(l.getTotal());
+            }
+            if (l.getUnit().equals(MaterialsUnitFlagEnum.M.getUnit())) {
+                materialIsSegmentList.add(l);
+            } else {
+                materialIsNotSegmentList.add(l);
+            }
+        });
+
+        /********************************************物资利库比较***************************************************/
+
+        //非段长物资比较 本地库 物资匹配利库
+        materialIsNotSegmentList.forEach(l -> {
+            //优先匹配最佳
+            liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                    && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
+                    && l.getMaterialCode().equals(liKu.getMaterialCode())
+                    && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
+                liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT);
+            });
+            if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                //相同地区进行比较
+                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                        && l.getMaterialCode().equals(liKu.getMaterialCode())
+                        && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT);
+                });
+            }
+        });
+        //非段长物资比较 跨区库
+        materialIsNotSegmentList.forEach(l -> {
+            //需求数量与利库数量不同 去其他地区找
+            if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                //优先匹配最佳
+                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                        && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
+                        && l.getMaterialCode().equals(liKu.getMaterialCode())
+                        && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT);
+                });
+            }
+            if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                //不同地区比较
+                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                        && l.getMaterialCode().equals(liKu.getMaterialCode())
+                        && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT);
+                });
+            }
+        });
+        //非段长物资替代 本地库
+        materialIsNotSegmentList.forEach(l -> {
+            //如果本地库 区域库依旧没找到 则启用代替
+            if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                //过滤出 本地库物料编码相同 最优选择
+                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                        && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
+                        && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> {
+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
+                });
+                if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                    liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                            && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> {
+                        liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
+                    });
+                }
+            }
+        });
+        //非段长物资代替 库区库
+        materialIsNotSegmentList.forEach(l -> {
+            //如果本地库 区域库依旧没找到 则启用代替
+            if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                //过滤出 本地库物料编码相同 最优选择
+                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                        && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
+                        && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> {
+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
+                });
+                if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
+                    liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
+                            && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> {
+                        liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
+                    });
+                }
+            }
+        });
+
+
+        //段长物资比较 本地库 利库匹配物资
+        liKuIsSegmentPoolSortList.forEach(l -> {
+            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资
+            materialIsSegmentList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                    && material.getMaterialCode().equals(l.getMaterialCode())
+                    && material.getExtendedCoding().equals(l.getExtendedCoding())
+                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> {
+                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                        }
+                    }
+            );
+            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                materialIsSegmentList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                        && material.getMaterialCode().equals(l.getMaterialCode())
+                        && material.getExtendedCoding().equals(l.getExtendedCoding())
+                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
+                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
+                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                            }
+                        }
+                );
+            }
+        });
+        //段长物资比较 跨区库
+        liKuIsSegmentPoolSortList.forEach(l -> {
+            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资
+            materialIsSegmentList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                    && material.getMaterialCode().equals(l.getMaterialCode())
+                    && material.getExtendedCoding().equals(l.getExtendedCoding())
+                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> {
+                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                        }
+                    }
+            );
+            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                materialIsSegmentList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                        && material.getMaterialCode().equals(l.getMaterialCode())
+                        && material.getExtendedCoding().equals(l.getExtendedCoding())
+                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
+                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
+                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                            }
+                        }
+                );
+            }
+        });
+        //段长物资替换 本地库
+        liKuIsSegmentPoolSortList.forEach(l -> {
+            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资
+            materialIsSegmentList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                    && material.getMaterialCode().equals(l.getMaterialCode())
+                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> {
+                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                        }
+                    }
+            );
+            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                materialIsSegmentList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                        && material.getMaterialCode().equals(l.getMaterialCode())
+                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
+                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
+                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                            }
+                        }
+                );
+            }
+        });
+        //段长物资替换 跨区库
+        liKuIsSegmentPoolSortList.forEach(l -> {
+            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资
+            materialIsSegmentList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                    && material.getMaterialCode().equals(l.getMaterialCode())
+                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> {
+                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                        }
+                    }
+            );
+            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
+                materialIsSegmentList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
+                        && material.getMaterialCode().equals(l.getMaterialCode())
+                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
+                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
+                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
+                            }
+                        }
+                );
+            }
+        });
+
+        //段长非段长合并 排序 处理拆分段长
+        List<LiKuResourcePool> tempList = new ArrayList<>();
+        liKuIsSegmentPoolSortList.stream().map(m -> {
+            m.setLengthOfCable(m.getRemaining() + ";");
+
+            return m;
+        }).forEach(l -> {
+            if (tempList.size() != 0) {
+                boolean flag = true;
+                for (LiKuResourcePool temp : tempList) {
+                    if (l.getExtendedCoding().equals(temp.getExtendedCoding())
+                            && l.getMaterialCode().equals(temp.getMaterialCode())
+                            && l.getInventoryAmount().equals(temp.getInventoryAmount())
+                            && l.getInvLocation().equals(temp.getInvLocation())
+                            && l.getBatch().equals(temp.getBatch())
+                            && l.getFactory().equals(temp.getFactory())
+                            && l.getPlanner().equals(temp.getPlanner())) {
+                        //段长拼接
+                        temp.setLengthOfCable(temp.getLengthOfCable() + l.getRemaining() + ";");
+                        //修改 剩余总量
+                        temp.setRemaining((new BigDecimal(temp.getRemaining()).add(new BigDecimal(l.getRemaining()))).toString());
+                        //修改 利库数量
+                        temp.setNumberOfNiches((new BigDecimal(temp.getNumberOfNiches()).add(new BigDecimal(l.getNumberOfNiches()))).toString());
+                        flag = false;
+
+                        break;
+                    }
+                }
+                if (flag) {
+                    tempList.add(l);
+                }
+            } else {
+                tempList.add(l);
+            }
+        });
+        //利库合并 并排序
+        List<LiKuResourcePool> sortLiKuPoolList = getSortLiKuPool(Stream.concat(liKuIsNotSegmentPoolSortList.stream(), tempList.stream()).map(m -> {
+            m.setLengthOfCable(interceptString(m.getLengthOfCable()));
+            return m;
+        }).collect(Collectors.toList()));
+        //上报资源合并
+        List<MaterialReportDetails> materialResultList = Stream.concat(materialIsNotSegmentList.stream(), materialIsSegmentList.stream()).map(m -> {
+            //处理上报资源中多余,
+            m.setLocalWareBatch(interceptString(m.getLocalWareBatch()));
+            m.setLocalWareHouse(interceptString(m.getLocalWareHouse()));
+            m.setNumberOfLocal(interceptString(m.getNumberOfLocal()));
+
+            m.setRegionalBatch(interceptString(m.getRegionalBatch()));
+            m.setRegionalHouse(interceptString(m.getRegionalHouse()));
+            m.setNumberOfRegional(interceptString(m.getNumberOfRegional()));
+
+            m.setLocalReplacementExtendedCoding(interceptString(m.getLocalReplacementExtendedCoding()));
+            m.setLocalReplacementExtendedDescription(interceptString(m.getLocalReplacementExtendedDescription()));
+            m.setLocalReplacementBatch(interceptString(m.getLocalReplacementBatch()));
+            m.setLocalReplacementHouse(interceptString(m.getLocalReplacementHouse()));
+            m.setLocalReplacementNumber(interceptString(m.getLocalReplacementNumber()));
+
+            m.setRegionalReplacementExtendedCoding(interceptString(m.getRegionalReplacementExtendedCoding()));
+            m.setRegionalReplacementExtendedDescription(interceptString(m.getRegionalReplacementExtendedDescription()));
+            m.setRegionalReplacementBatch(interceptString(m.getRegionalReplacementBatch()));
+            m.setRegionalReplacementHouse(interceptString(m.getRegionalReplacementHouse()));
+            m.setRegionalReplacementNumber(interceptString(m.getRegionalReplacementNumber()));
+
+            return m;
+        }).collect(Collectors.toList());
+
+        /***************************************存储数据库************************************************/
+        //清除利库池
+        liKuResourcePoolMapper.clearLiKuResource();
+        materialReportDetailsMapper.delAll();
+
+        sortLiKuPoolList.forEach(DataEntity::preInsert);
+        liKuResourcePoolMapper.insertList(sortLiKuPoolList);
+
+        materialResultList.forEach(DataEntity::preInsert);
+        materialReportDetailsMapper.insertList(materialResultList);
+        j.setSuccess(true);
+        j.setMsg("已成功导入 " + materialResultList.size() + " 条物资上报明细记录");
+
+        return j;
+    }
+
+    /**
+     * 处理多余字符串
+     */
+    private String interceptString(String str) {
+        if (StringUtils.isNotBlank(str)) {
+            return str.substring(0, str.length() - 1);
+        }
+        return null;
+    }
+
+    /**
+     * 计算处理库
+     *
+     * @param materialReportDetails 上报资源
+     * @param liKuResourcePool      利库资源池
+     * @param areaTypeFlagEnum      地区类型
+     * @param replacement           地区替换类型
+     */
+    private void liKuCompareMaterial(MaterialReportDetails materialReportDetails, LiKuResourcePool liKuResourcePool, AreaTypeFlagEnum areaTypeFlagEnum, AreaTypeFlagEnum replacement, MaterialsUnitFlagEnum judgingSegment) {
+        //如果相等直接结束方法 利库数+总数
+        if (materialReportDetails.getTotal().compareTo(materialReportDetails.getNumberOfNiches()) == 0 || new BigDecimal(liKuResourcePool.getRemaining()).compareTo(BigDecimal.ZERO) == 0) {
+            return;
+        }
+        //如果物料编码与扩展编码相同,说明是需要的物资
+        //利库池 利库数
+        BigDecimal liKu_liKuCount = new BigDecimal(liKuResourcePool.getNumberOfNiches());
+        //利库池剩余 量
+        BigDecimal liKu_remaining = new BigDecimal(liKuResourcePool.getRemaining());
+
+        //上报物资 申请数量
+        BigDecimal material_ApplicationCount = BigDecimal.valueOf(materialReportDetails.getNumberOfApplications());
+        //上报物资利库量
+        BigDecimal material_liKuCount = BigDecimal.valueOf(materialReportDetails.getNumberOfNiches());
+
+        //临时变量
+        BigDecimal temp = new BigDecimal(0);
+        if (material_ApplicationCount.compareTo(liKu_remaining) > 0) {
+            temp = liKu_remaining;//可能利库池剩余数量不够
+        } else {
+            temp = material_ApplicationCount;//利库池数量满足 上报需求
+        }
+
+        //利库池 剩余量
+        liKuResourcePool.setRemaining(liKu_remaining.subtract(temp).toString());
+        //利库量
+        liKuResourcePool.setNumberOfNiches(new BigDecimal(liKuResourcePool.getNumberOfNiches()).add(temp).toString());
+        //物资  申请数量
+        materialReportDetails.setNumberOfApplications(material_ApplicationCount.subtract(temp).doubleValue());
+        //物资  利库量
+        //if (judgingSegment == MaterialsUnitFlagEnum.IS_NOT_SEGMENT) {
+            materialReportDetails.setNumberOfNiches(material_liKuCount.add(temp).doubleValue());
+        /*} else {
+            materialReportDetails.setNumberOfNiches(material_liKuCount.add(temp).doubleValue());
+        }*/
+
+        //如果代替标识为空则
+        if (replacement == null) {
+            //传递标识,根据标识来判断本地/跨库 所有结束后统一处理多余,
+            if (AreaTypeFlagEnum.LOCAL == areaTypeFlagEnum) {
+                //拼接本地库批次号
+                materialReportDetails.setLocalWareBatch(materialReportDetails.getLocalWareBatch() + liKuResourcePool.getBatch() + ",");
+                materialReportDetails.setLocalWareHouse(materialReportDetails.getLocalWareHouse() + liKuResourcePool.getInvLocation() + ",");
+                materialReportDetails.setNumberOfLocal(materialReportDetails.getNumberOfLocal() + temp + ",");
+            } else {
+                //拼接跨区批次号
+                materialReportDetails.setRegionalBatch(materialReportDetails.getRegionalBatch() + liKuResourcePool.getBatch() + ",");
+                materialReportDetails.setRegionalHouse(materialReportDetails.getRegionalHouse() + liKuResourcePool.getInvLocation() + ",");
+                materialReportDetails.setNumberOfRegional(materialReportDetails.getNumberOfRegional() + temp + ",");
+            }
+        } else {
+            //区分本地利库与跨区利库替换
+            if (AreaTypeFlagEnum.LOCAL_REPLACEMENT == replacement) {
+                materialReportDetails.setLocalReplacementExtendedCoding(materialReportDetails.getLocalReplacementExtendedCoding() + liKuResourcePool.getExtendedCoding() + ",");
+                materialReportDetails.setLocalReplacementExtendedDescription(materialReportDetails.getLocalReplacementExtendedDescription() + liKuResourcePool.getExtendedDescription() + ",");
+                materialReportDetails.setLocalReplacementBatch(materialReportDetails.getLocalReplacementBatch() + liKuResourcePool.getBatch() + ",");
+                materialReportDetails.setLocalReplacementHouse(materialReportDetails.getLocalReplacementHouse() + liKuResourcePool.getInvLocation() + ",");
+                materialReportDetails.setLocalReplacementNumber(materialReportDetails.getLocalReplacementNumber() + temp + ",");
+            } else {
+                materialReportDetails.setRegionalReplacementExtendedCoding(materialReportDetails.getRegionalReplacementExtendedCoding() + liKuResourcePool.getExtendedCoding() + ",");
+                materialReportDetails.setRegionalReplacementExtendedDescription(materialReportDetails.getRegionalReplacementExtendedDescription() + liKuResourcePool.getExtendedDescription() + ",");
+                materialReportDetails.setRegionalReplacementBatch(materialReportDetails.getRegionalReplacementBatch() + liKuResourcePool.getBatch() + ",");
+                materialReportDetails.setRegionalReplacementHouse(materialReportDetails.getRegionalReplacementHouse() + liKuResourcePool.getInvLocation() + ",");
+                materialReportDetails.setRegionalReplacementNumber(materialReportDetails.getRegionalReplacementNumber() + temp + ",");
+            }
+        }
+
+    }
+
+    /**
+     * 排序 地区-》库龄降序-》数量大小降序-》批次号-》物料编码升序
+     *
+     * @param liKuPoolList 利库池
+     * @return
+     */
+    private List<LiKuResourcePool> getSortLiKuPool(List<LiKuResourcePool> liKuPoolList) {
+        return liKuPoolList.stream().sorted((liKuSort1, liKuSort2) -> {
+            if (liKuSort1.getLiKuFlag().getNum().compareTo(liKuSort2.getLiKuFlag().getNum()) == 0) {
+                //库龄按照月排序
+                if (liKuSort1.getMonthStorage().compareTo(liKuSort2.getMonthStorage()) == 0) {
+                    //库龄按照日降序
+                    if (liKuSort1.getDaysStorage().compareTo(liKuSort2.getDaysStorage()) == 0) {
+                        //数量按大小降序
+                        if (new BigDecimal(liKuSort1.getInventoryAmount()).compareTo(new BigDecimal(liKuSort2.getInventoryAmount())) == 0) {
+                            //批次号自然顺序
+                            if (liKuSort1.getBatch().compareTo(liKuSort2.getBatch()) == 0) {
+                                //物料编码升序
+                                return new BigDecimal(liKuSort1.getExtendedCoding()).compareTo(new BigDecimal(liKuSort2.getExtendedCoding()));
+                            } else {
+                                return liKuSort1.getBatch().compareTo(liKuSort2.getBatch());
+                            }
+                        } else {
+                            return new BigDecimal(liKuSort2.getInventoryAmount()).compareTo(new BigDecimal(liKuSort1.getInventoryAmount()));
+                        }
+                    } else {
+                        return liKuSort2.getDaysStorage() - liKuSort1.getDaysStorage();
+                    }
+                } else {
+                    return liKuSort2.getMonthStorage() - (liKuSort1.getMonthStorage());
+                }
+            } else {
+                return liKuSort1.getLiKuFlag().getNum() - liKuSort2.getLiKuFlag().getNum();
+            }
+        }).collect(Collectors.toList());
+
+    }
+
 }

+ 24 - 24
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/utils/AdjustUtil.java

@@ -47,11 +47,11 @@ public class AdjustUtil {
                 for (LiKuResourcePool pool : pools) {
                     String poolCode = pool.getMaterialCode();
                     String poExCode = pool.getExtendedCoding();
-                    Double remaining = pool.getRemaining();
+                    Double remaining = Double.valueOf(pool.getRemaining());
+                    Double numberOfNiches = Double.valueOf(pool.getNumberOfNiches());
                     if (null == remaining) {
                         remaining = 0.0;
                     }
-                    Double numberOfNiches = pool.getNumberOfNiches();
                     if (null == numberOfNiches) {
                         numberOfNiches = 0.0;
                     }
@@ -65,8 +65,8 @@ public class AdjustUtil {
                             likuAmount = applyRemain;
                         }
                         //修改利库资源池的 剩余库存数量和利库数量
-                        pool.setRemaining(poolRemain.subtract(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue());
-                        pool.setNumberOfNiches(poolLiku.add(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue());
+                        pool.setRemaining(String.valueOf(poolRemain.subtract(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue()));
+                        pool.setNumberOfNiches(String.valueOf(poolLiku.add(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue()));
                         //修改物料申请的 利库数量和剩余申请数量
                         applyRemain = applyRemain.subtract(likuAmount).setScale(2, ROUND_HALF_UP);
                         applyLiku = applyLiku.add(likuAmount).setScale(2, ROUND_HALF_UP);
@@ -126,8 +126,8 @@ public class AdjustUtil {
                     for (LiKuResourcePool pool:pools) {
                         String poolCode = pool.getMaterialCode();
                         String poExCode = pool.getExtendedCoding();
-                        BigDecimal poolRemain = BigDecimal.valueOf(pool.getRemaining());//利库剩余库存数量
-                        BigDecimal poolLiku = BigDecimal.valueOf(pool.getNumberOfNiches());//利库数量
+                        BigDecimal poolRemain = new BigDecimal(pool.getRemaining());//利库剩余库存数量
+                        BigDecimal poolLiku = new BigDecimal(pool.getNumberOfNiches());//利库数量
                         if (codeRep.equals(poolCode) && exCodeRep.equals(poExCode) && poolRemain.compareTo(BigDecimal.ZERO) != 0) {
                             BigDecimal likuAmount;//本次利库数量
                             if(applyRemain.compareTo(poolRemain) >= 0){
@@ -136,8 +136,8 @@ public class AdjustUtil {
                                 likuAmount = applyRemain;
                             }
                             //修改利库资源池的 剩余库存数量和利库数量
-                            pool.setRemaining(poolRemain.subtract(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue());
-                            pool.setNumberOfNiches(poolLiku.add(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue());
+                            pool.setRemaining(String.valueOf(poolRemain.subtract(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue()));
+                            pool.setNumberOfNiches(String.valueOf(poolLiku.add(likuAmount).setScale(2, ROUND_HALF_UP).doubleValue()));
                             //修改物料申请的 利库数量和剩余申请数量
                             applyRemain = applyRemain.subtract(likuAmount).setScale(2, ROUND_HALF_UP);
                             applyLiku = applyLiku.add(likuAmount).setScale(2, ROUND_HALF_UP);
@@ -187,7 +187,7 @@ public class AdjustUtil {
             if(usefulReportList.size()>0){
                 //都是以米计算
                 String unit = pool.getUnitOfMeasurement();
-                Double lengthOfCable = pool.getLengthOfCable();
+                Double lengthOfCable = Double.valueOf(pool.getLengthOfCable());
                 if(unit.contains("千米")){
                     lengthOfCable = lengthOfCable*1000;
                 }
@@ -211,11 +211,11 @@ public class AdjustUtil {
                         //计算资源池记录利库数量
                         totalLiku  = totalLiku.add(BigDecimal.valueOf(report.getTotal()));
                     }
-                    BigDecimal poolLength = BigDecimal.valueOf(pool.getLengthOfCable());
+                    BigDecimal poolLength = new BigDecimal(pool.getLengthOfCable());
                     BigDecimal remainLength = poolLength.subtract(totalLiku).setScale(2, ROUND_HALF_UP);
                     //存在最优解,当前利库信息使用,变更状态
-                    pool.setNumberOfNiches(totalLiku.doubleValue());
-                    pool.setRemaining(remainLength.doubleValue());
+                    pool.setNumberOfNiches(String.valueOf(totalLiku.doubleValue()));
+                    pool.setRemaining(String.valueOf(remainLength.doubleValue()));
                     pool.setCompleteLiKu(1);
                 }
             }
@@ -257,7 +257,7 @@ public class AdjustUtil {
                     BigDecimal totalLiku = BigDecimal.valueOf(0.0);
                     for (LiKuResourcePool pool:bestChose) {
                         //修改利库的剩余数量、利库数量和利库状态
-                        pool.setRemaining(0.0);
+                        pool.setRemaining("0");
                         pool.setNumberOfNiches(pool.getLengthOfCable());
                         pool.setCompleteLiKu(1);
 
@@ -268,10 +268,10 @@ public class AdjustUtil {
                         compareHistory.setLiKuId(pool.getId());
                         compareHistory.setMaterialId(report.getId());
                         compareHistory.setComparisonType(type);
-                        compareHistory.setNumberNiches(pool.getLengthOfCable());
+                        compareHistory.setNumberNiches(Double.valueOf(pool.getLengthOfCable()));
                         compareList.add(compareHistory);
                         //计算记录利库总量
-                        totalLiku  = totalLiku.add(BigDecimal.valueOf(pool.getLengthOfCable()));
+                        totalLiku  = totalLiku.add(new BigDecimal(pool.getLengthOfCable()));
                     }
                     report.setNumberOfApplications(0.0);
                     //这里利库数量有可能超过总量
@@ -302,7 +302,7 @@ public class AdjustUtil {
             if(usefulReportList.size()>0){
                 //都是以米计算
                 String poolUnit = pool.getUnitOfMeasurement();
-                Double lengthOfCable = pool.getLengthOfCable();
+                Double lengthOfCable = Double.valueOf(pool.getLengthOfCable());
                 if(poolUnit.contains("千米")){
                     lengthOfCable = lengthOfCable*1000;
                 }
@@ -335,11 +335,11 @@ public class AdjustUtil {
                         //计算资源池记录利库数量
                         totalLiku  = totalLiku.add(BigDecimal.valueOf(poolLiku));
                     }
-                    BigDecimal poolLength = BigDecimal.valueOf(pool.getLengthOfCable());
+                    BigDecimal poolLength = new BigDecimal(pool.getLengthOfCable());
                     BigDecimal remainLength = poolLength.subtract(totalLiku).setScale(2, ROUND_HALF_UP);
                     //存在最优解,当前利库信息使用,变更状态
-                    pool.setNumberOfNiches(totalLiku.doubleValue());
-                    pool.setRemaining(remainLength.doubleValue());
+                    pool.setNumberOfNiches(String.valueOf(totalLiku.doubleValue()));
+                    pool.setRemaining(String.valueOf(remainLength.doubleValue()));
                     pool.setCompleteLiKu(1);
                 }
             }
@@ -384,17 +384,17 @@ public class AdjustUtil {
                     BigDecimal totalLiku = BigDecimal.valueOf(0.0);
                     for (LiKuResourcePool pool:bestChose) {
                         pool.setNumberOfNiches(pool.getLengthOfCable());
-                        pool.setRemaining(0.0);
+                        pool.setRemaining("0");
                         pool.setCompleteLiKu(1);
                         //新增调整记录
                         CompareHistory compareHistory = new CompareHistory();
                         compareHistory.setLiKuId(pool.getId());
                         compareHistory.setMaterialId(report.getId());
                         compareHistory.setComparisonType(type);
-                        compareHistory.setNumberNiches(pool.getLengthOfCable());
+                        compareHistory.setNumberNiches(Double.valueOf(pool.getLengthOfCable()));
                         compareList.add(compareHistory);
                         //计算资源池记录利库数量(米)
-                        totalLiku  = totalLiku.add(BigDecimal.valueOf(pool.getLengthOfMetre()));
+                        totalLiku  = totalLiku.add(new BigDecimal(pool.getLengthOfMetre()));
                     }
                     report.setNumberOfApplications(0.0);
                     if(unit.contains("千米")){
@@ -449,7 +449,7 @@ public class AdjustUtil {
                 //对可用的物资做米和千米的处理
                 String unit = pool.getUnitOfMeasurement();
                 if(unit.contains("千米")){
-                    pool.setLengthOfMetre(pool.getLengthOfCable()*1000);
+                    pool.setLengthOfMetre(String.valueOf(new BigDecimal(pool.getLengthOfCable()).multiply(new BigDecimal(1000))));
                 }else{
                     pool.setLengthOfMetre(pool.getLengthOfCable());
                 }
@@ -524,7 +524,7 @@ public class AdjustUtil {
                         //对可用的物资做米和千米的处理
                         String unit = pool.getUnitOfMeasurement();
                         if(unit.contains("千米")){
-                            pool.setLengthOfMetre(pool.getLengthOfCable()*1000);
+                            pool.setLengthOfMetre(String.valueOf(new BigDecimal(pool.getLengthOfCable()).multiply(new BigDecimal(1000))));
                         }else{
                             pool.setLengthOfMetre(pool.getLengthOfCable());
                         }

+ 89 - 40
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/web/MaterialReportDetailsController.java

@@ -1,6 +1,7 @@
 /**
  * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
- */
+ *//*
+
 package com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.web;
 
 import com.google.common.collect.Lists;
@@ -44,12 +45,14 @@ import java.util.Map;
 
 import static java.math.BigDecimal.ROUND_HALF_UP;
 
+*/
 /**
  * 物资上报明细Controller
  *
  * @author enford
  * @version 1.0
- */
+ *//*
+
 //@Controller
 //@RequestMapping(value = "${adminPath}/MaterialReportDetails")
 public class MaterialReportDetailsController extends BaseController {
@@ -75,9 +78,11 @@ public class MaterialReportDetailsController extends BaseController {
         return entity;
     }
 
-    /**
+    */
+/**
      * 物资上报明细列表页面
-     */
+     *//*
+
     @RequiresPermissions("sg:balancedlibrary:MaterialReportDetails:list")
     @RequestMapping(value = "list")
     public String list(MaterialReportDetails entity, Model model) {
@@ -85,9 +90,11 @@ public class MaterialReportDetailsController extends BaseController {
         return "modules/sg/balancedlibrary/materialReportDetails/MaterialReportDetailslList";
     }
 
-    /**
+    */
+/**
      * 物资上报明细列表数据
-     */
+     *//*
+
     @ResponseBody
     @RequiresPermissions("sg:balancedlibrary:MaterialReportDetails:list")
     @RequestMapping(value = "data")
@@ -96,9 +103,11 @@ public class MaterialReportDetailsController extends BaseController {
         return getBootstrapData(page);
     }
 
-    /**
+    */
+/**
      * 查看,增加,编辑物资上报明细表单页面
-     */
+     *//*
+
     @RequiresPermissions(value = {"sg:balancedlibrary:MaterialReportDetails:view", "sg:balancedlibrary:MaterialReportDetails:add", "sg:balancedlibrary:MaterialReportDetails:edit"}, logical = Logical.OR)
     @RequestMapping(value = "form")
     public String form(MaterialReportDetails entity, Model model) {
@@ -106,17 +115,21 @@ public class MaterialReportDetailsController extends BaseController {
         return "modules/test/one/dialog/MaterialReportDetailsForm";
     }
 
-    /**
+    */
+/**
      * 保存物资上报明细
-     */
+     *//*
+
     @ResponseBody
     @RequiresPermissions(value = {"sg:balancedlibrary:MaterialReportDetails:add", "sg:balancedlibrary:MaterialReportDetails:edit"}, logical = Logical.OR)
     @RequestMapping(value = "save")
     public AjaxJson save(MaterialReportDetails entity, Model model) throws Exception {
         AjaxJson j = new AjaxJson();
-        /**
+        */
+/**
          * 后台hibernate-validation插件校验
-         */
+         *//*
+
         String errMsg = beanValidator(entity);
         if (StringUtils.isNotBlank(errMsg)) {
             j.setSuccess(false);
@@ -130,9 +143,11 @@ public class MaterialReportDetailsController extends BaseController {
         return j;
     }
 
-    /**
+    */
+/**
      * 删除物资上报明细
-     */
+     *//*
+
     @ResponseBody
     @RequiresPermissions("sg:balancedlibrary:MaterialReportDetails:del")
     @RequestMapping(value = "delete")
@@ -143,9 +158,11 @@ public class MaterialReportDetailsController extends BaseController {
         return j;
     }
 
-    /**
+    */
+/**
      * 批量删除物资上报明细
-     */
+     *//*
+
     @ResponseBody
     @RequiresPermissions("sg:balancedlibrary:MaterialReportDetails:del")
     @RequestMapping(value = "deleteAll")
@@ -159,9 +176,11 @@ public class MaterialReportDetailsController extends BaseController {
         return j;
     }
 
-    /**
+    */
+/**
      * 导出excel文件
-     */
+     *//*
+
     @ResponseBody
     @RequestMapping(value = "export")
     public AjaxJson exportFile(MaterialReportDetails entity, HttpServletRequest request, HttpServletResponse response) {
@@ -180,9 +199,11 @@ public class MaterialReportDetailsController extends BaseController {
         return j;
     }
 
-    /**
+    */
+/**
      * 物资上报明细-导入Excel数据
-     */
+     *//*
+
     @ResponseBody
     @RequestMapping(value = "import")
     public AjaxJson importFile(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
@@ -213,7 +234,9 @@ public class MaterialReportDetailsController extends BaseController {
             ImportExcel ei = new ImportExcel(file, 1, 0);
             //物资上报明细数据列表
             List<MaterialReportDetails> list = ei.getDataList(MaterialReportDetails.class);
-            /*****************************物资上报明细*********************************************/
+            */
+/*****************************物资上报明细*********************************************//*
+
             //判断物资上报明细单位是否为米或千米,将数据分为非段长与段长
             for (MaterialReportDetails details : list) {
                 details.preInsert();
@@ -335,7 +358,9 @@ public class MaterialReportDetailsController extends BaseController {
                 }
             }
             //先根据
-            /*****************************利库资源数据*********************************************/
+            */
+/*****************************利库资源数据*********************************************//*
+
             //利库资源池数据,根据本部>扬中>丹阳>句容分组
             //查询出所有本部资源数据-非段长
             List<LiKuResourcePool> bBNonPoolList = poolService.findLiKuList(LiKuUtils.NO, LiKuUtils.BB_FLAG);
@@ -407,7 +432,9 @@ public class MaterialReportDetailsController extends BaseController {
                 poolSegSort(jRPoolList);
             }
 
-            /*****************************************非段长比对*****************************************************/
+            */
+/*****************************************非段长比对*****************************************************//*
+
             //非段长比对顺序,由物资上报数据比对利库资源池数据
             //本部-本部
             if (bBNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
@@ -1855,7 +1882,9 @@ public class MaterialReportDetailsController extends BaseController {
                 }
             }
 
-            /*************************************非段长以大代小******************************************************/
+            */
+/*************************************非段长以大代小******************************************************//*
+
             //查找库中所有的以大代小的数据list
             List<ReplaceMaterial> allList = replaceMaterialService.findAll();
             if (allList.size() > 0) {
@@ -3391,7 +3420,9 @@ public class MaterialReportDetailsController extends BaseController {
                 }
             }
 
-            /****************************************段长比对*****************************************************/
+            */
+/****************************************段长比对*****************************************************//*
+
             //本部-本部
             if (bBPoolList.size() > 0 && bBSegmentList.size() > 0) {
                 //计算最优解的集合
@@ -4277,7 +4308,9 @@ public class MaterialReportDetailsController extends BaseController {
                 }
             }
 
-            /******************************************合并利库************************************/
+            */
+/******************************************合并利库************************************//*
+
             //将4个区域的段长数据合并,使用各个区域的
             List<MaterialReportDetails> fourAreaList = new ArrayList<>();
             if (bBSegmentList.size() > 0) {
@@ -4531,7 +4564,9 @@ public class MaterialReportDetailsController extends BaseController {
                 }
             }
             //本部-扬中-丹阳-句容
-            /****************************************段长以大代小********************************************/
+            */
+/****************************************段长以大代小********************************************//*
+
             //获取所有以大代小的替换规则数据
             if (allList.size() > 0) {
                 for (ReplaceMaterial a :
@@ -5690,11 +5725,15 @@ public class MaterialReportDetailsController extends BaseController {
                     }
                 }
             }
-            /*****************************************历史记录保存**************************************************/
+            */
+/*****************************************历史记录保存**************************************************//*
+
             if (compareHistories.size() > 0) {
 
             }
-            /**********************************数据导出合并,生成文件返回**************************************/
+            */
+/**********************************数据导出合并,生成文件返回**************************************//*
+
             List<MaterialReportDetails> exportList = new ArrayList<>();
             if (fourRepList.size() > 0) {
                 exportList.addAll(fourRepList);
@@ -6029,9 +6068,11 @@ public class MaterialReportDetailsController extends BaseController {
         return j;
     }
 
-    /***
+    */
+/***
      * 通过项目编码,扩展编码,查询在物资上报中,符合利库数据集合,计算后续最优解
-     * */
+     * *//*
+
     private List<MaterialReportDetails> Calculation(List<MaterialReportDetails> bBSegmentList, String poolCode, String poExCode) {
         List<MaterialReportDetails> returnList = new ArrayList<>();
         for (MaterialReportDetails details :
@@ -6049,9 +6090,11 @@ public class MaterialReportDetailsController extends BaseController {
         return returnList;
     }
 
-    /***
+    */
+/***
      * 通过项目编码,扩展编码,查询在物资上报中,符合利库数据集合,计算后续最优解-以大代小
-     * */
+     * *//*
+
     private List<MaterialReportDetails> CalculationRep(List<MaterialReportDetails> bBSegmentList, String poolCode, String poExCode) {
         List<MaterialReportDetails> returnList = new ArrayList<>();
         for (MaterialReportDetails details :
@@ -6069,10 +6112,12 @@ public class MaterialReportDetailsController extends BaseController {
         return returnList;
     }
 
-    /**
+    */
+/**
      * 利库非段长排序方法,排序依据 库存日、库存数量、批次号
      * @param bBNonPoolList
-     */
+     *//*
+
     private void poolSort(List<LiKuResourcePool> bBNonPoolList) {
         Comparator<LiKuResourcePool> reversed = Comparator.comparing(LiKuResourcePool::getDaysStorage).reversed();
         Comparator<LiKuResourcePool> comparator = Comparator.comparing(LiKuResourcePool::getInventoryAmount).reversed();
@@ -6080,10 +6125,12 @@ public class MaterialReportDetailsController extends BaseController {
         bBNonPoolList.stream().sorted(reversed.thenComparing(comparator).thenComparing(poolComparator));
     }
 
-    /**
+    */
+/**
      * 利库段长排序方法,排序依据 库存日、库存数量、批次号、具体段长
      * @param bBNonPoolList
-     */
+     *//*
+
     private void poolSegSort(List<LiKuResourcePool> bBNonPoolList) {
         Comparator<LiKuResourcePool> reversed = Comparator.comparing(LiKuResourcePool::getDaysStorage).reversed();
         Comparator<LiKuResourcePool> comparator = Comparator.comparing(LiKuResourcePool::getInventoryAmount).reversed();
@@ -6092,9 +6139,11 @@ public class MaterialReportDetailsController extends BaseController {
         bBNonPoolList.sort(reversed.thenComparing(comparator).thenComparing(poolComparator).thenComparing(beComparator));
     }
 
-    /**
+    */
+/**
      * 下载物资上报明细导入模板
-     */
+     *//*
+
     @ResponseBody
     @RequestMapping(value = "import/template")
     public AjaxJson importFileTemplate(HttpServletResponse response) {
@@ -6111,4 +6160,4 @@ public class MaterialReportDetailsController extends BaseController {
         return j;
     }
 
-}
+}*/

+ 13 - 625
src/main/java/com/jeeplus/modules/sg/balancedlibrary/materialReportDetails/web/MaterialReportDetailsControllerTest.java

@@ -5,6 +5,7 @@ package com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.web;
 
 import com.google.common.collect.Lists;
 import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.utils.excel.ExportExcel;
 import com.jeeplus.core.persistence.Page;
@@ -24,6 +25,7 @@ import com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.utils.Adjust
 import com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.utils.ExcelUtil;
 import com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.utils.ExportUtil;
 import com.jeeplus.modules.sg.balancedlibrary.materialReportDetails.utils.ImportExcel;
+import com.jeeplus.modules.sg.balancedlibrary.onPassageMaterials.entity.MaterialInformation;
 import com.jeeplus.modules.sg.balancedlibrary.preferredMaterials.service.PreferredMaterialsService;
 import com.jeeplus.modules.sg.balancedlibrary.replaceMaterial.entity.ReplaceMaterial;
 import com.jeeplus.modules.sg.balancedlibrary.replaceMaterial.service.ReplaceMaterialService;
@@ -232,650 +234,36 @@ public class MaterialReportDetailsControllerTest extends BaseController {
     @RequestMapping(value = "import")
     public AjaxJson importFile(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
         AjaxJson j = new AjaxJson();
-        //记录物资上报明细比对利库资源明细详细情况
-        List<CompareHistory> compareHistories = new ArrayList<>();
-        //本部-段长
-        List<MaterialReportDetails> bBSegmentList = new ArrayList<>();
-        //扬中-段长
-        List<MaterialReportDetails> yZSegmentList = new ArrayList<>();
-        //丹阳-段长
-        List<MaterialReportDetails> dYSegmentList = new ArrayList<>();
-        //句容-段长
-        List<MaterialReportDetails> jRSegmentList = new ArrayList<>();
-        //本部-非段长
-        List<MaterialReportDetails> bBNonSegmentList = new ArrayList<>();
-        //扬中-非段长
-        List<MaterialReportDetails> yZNonSegmentList = new ArrayList<>();
-        //丹阳-非段长
-        List<MaterialReportDetails> dYNonSegmentList = new ArrayList<>();
-        //句容-非段长
-        List<MaterialReportDetails> jRNonSegmentList = new ArrayList<>();
         try {
             ImportExcel ei = new ImportExcel(file, 1, 0);
             //物资上报明细数据列表
             List<MaterialReportDetails> list = ei.getDataList(MaterialReportDetails.class);
-            /*****************************物资上报明细*********************************************/
-            //根据段长非段长、区域 分到不同list,同时设置初始利库数量及申请数量
-            for (MaterialReportDetails details : list) {
-                details.preInsert(); //先给个Id
-                //设置初始利库数量为0,初始申请数量为物资的表格数量
-                details.setNumberOfNiches(0.0);
-                details.setNumberOfApplications(details.getTotal());
-
-                Integer theUnitMeter = LiKuUtils.isTheUnitMeter(details.getUnit());//判断是否段长
-                Integer area = LiKuUtils.judgmentArea(details.getReportingArea());//判断区域
-                if (theUnitMeter.equals(LiKuUtils.YES)) {
-                    if (area.equals(LiKuUtils.BB_FLAG)) {
-                        bBSegmentList.add(details);
-                    } else if (area.equals(LiKuUtils.YZ_FLAG)) {
-                        yZSegmentList.add(details);
-                    } else if (area.equals(LiKuUtils.DY_FLAG)) {
-                        dYSegmentList.add(details);
-                    } else if (area.equals(LiKuUtils.JR_FLAG)) {
-                        jRSegmentList.add(details);
-                    }
-                } else {
-                    if (area.equals(LiKuUtils.BB_FLAG)) {
-                        bBNonSegmentList.add(details);
-                    } else if (area.equals(LiKuUtils.YZ_FLAG)) {
-                        yZNonSegmentList.add(details);
-                    } else if (area.equals(LiKuUtils.DY_FLAG)) {
-                        dYNonSegmentList.add(details);
-                    } else if (area.equals(LiKuUtils.JR_FLAG)) {
-                        jRNonSegmentList.add(details);
-                    }
-                }
-            }
-
-            //同地区上报表中先根据项目名称顺序排序匹配,然后依据表格顺序依次排序匹配
-            //本部段长数据
-            if (bBSegmentList.size() > 0) {
-                bBSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-            //扬中段长数据
-            if (yZSegmentList.size() > 0) {
-                yZSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-            //丹阳段长数据
-            if (dYSegmentList.size() > 0) {
-                dYSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-            //句容段长数据
-            if (jRSegmentList.size() > 0) {
-                jRSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
 
-            //同地区上报表中先根据项目名称顺序排序匹配,然后依据表格顺序依次排序匹配
-            //本部数据-非段长
-            if (bBNonSegmentList.size() > 0) {
-                bBNonSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-            //扬中数据-非段长
-            if (yZNonSegmentList.size() > 0) {
-                yZNonSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-            //丹阳数据-非段长
-            if (dYNonSegmentList.size() > 0) {
-                dYNonSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-            //句容数据-非段长
-            if (jRNonSegmentList.size() > 0) {
-                jRNonSegmentList.sort(Comparator.comparing(MaterialReportDetails::getNameOfReserve));
-            }
-
-            //先根据
-            /*****************************利库资源数据*********************************************/
-            //利库资源池数据,根据本部>扬中>丹阳>句容分组
-            List<LiKuResourcePool> poolList = poolService.findLiKuList(null,null);
-            if(poolList==null||poolList.size()==0){
-                j.setSuccess(false);
-                j.setMsg("请先导入利库资源池!");
+            //如果没有利库资源池数据 直接返回
+            j = service.liKuBalance(list);
+            if(!j.isSuccess()){
                 return j;
             }
-            //查询出所有本部资源数据-非段长
-            List<LiKuResourcePool> bBNonPoolList = new ArrayList<>();
-            //查询出所有扬中资源数据-非段长
-            List<LiKuResourcePool> yZNonPoolList = new ArrayList<>();
-            //查询出所有丹阳资源数据-非段长
-            List<LiKuResourcePool> dYNonPoolList = new ArrayList<>();
-            //查询出所有句容资源数据-非段长
-            List<LiKuResourcePool> jRNonPoolList = new ArrayList<>();
-
-            //查询出所有本部资源数据-段长
-            List<LiKuResourcePool> bBPoolList = new ArrayList<>();
-            //查询出所有扬中资源数据-段长
-            List<LiKuResourcePool> yZPoolList = new ArrayList<>();
-            //查询出所有丹阳资源数据-段长
-            List<LiKuResourcePool> dYPoolList = new ArrayList<>();
-            //查询出所有句容资源数据-段长
-            List<LiKuResourcePool> jRPoolList = new ArrayList<>();
-            //资源池分类同时每次设置初始利库数和剩余数
-            for(LiKuResourcePool pool:poolList){
-                pool.setNumberOfNiches(0.0);
-                Integer isSectionLength = pool.getIsSectionLength();
-                Integer whereFrom = pool.getWhereFrom();
-                if(isSectionLength.equals(LiKuUtils.NO)){
-                    pool.setRemaining(pool.getInventoryAmount());
-                    if(whereFrom==LiKuUtils.BB_FLAG){
-                        bBNonPoolList.add(pool);
-                    }else if(whereFrom==LiKuUtils.YZ_FLAG){
-                        yZNonPoolList.add(pool);
-                    }else if(whereFrom==LiKuUtils.DY_FLAG){
-                        dYNonPoolList.add(pool);
-                    }else{
-                        jRNonPoolList.add(pool);
-                    }
-                }else{
-                    pool.setRemaining(pool.getLengthOfCable());
-                    if(whereFrom==LiKuUtils.BB_FLAG){
-                        bBPoolList.add(pool);
-                    }else if(whereFrom==LiKuUtils.YZ_FLAG){
-                        yZPoolList.add(pool);
-                    }else if(whereFrom==LiKuUtils.DY_FLAG){
-                        dYPoolList.add(pool);
-                    }else{
-                        jRPoolList.add(pool);
-                    }
-                }
-            }
-
-            //同地区库龄降序>数量大小降序>批次号升序
-            //本部利库资源池数据-非段长
-            if (bBNonPoolList.size() > 0) {
-                poolSort(bBNonPoolList);
-            }
-            //扬中利库资源池数据-非段长
-            if (yZNonPoolList.size() > 0) {
-                poolSort(yZNonPoolList);
-            }
-            //丹阳利库资源池数据-非段长
-            if (dYNonPoolList.size() > 0) {
-                poolSort(dYNonPoolList);
-            }
-            //句容利库资源池数据-非段长
-            if (jRNonPoolList.size() > 0) {
-                poolSort(jRNonPoolList);
-            }
-
-            //本部利库资源池数据-段长
-            if (bBPoolList.size() > 0) {
-                for (LiKuResourcePool pool :
-                        bBPoolList) {
-                    //设置标识利库中段长状态为 未完成利库 状态,单独设置状态因为无法根据数量判断,段长利库可能有剩余
-                    pool.setCompleteLiKu(0);
-                }
-                poolSegSort(bBPoolList);
-            }
-            //扬中利库资源池数据-段长
-            if (yZPoolList.size() > 0) {
-                for (LiKuResourcePool pool :
-                        yZPoolList) {
-                    pool.setCompleteLiKu(0);
-                }
-                poolSegSort(yZPoolList);
-            }
-            //丹阳利库资源池数据-段长
-            if (dYPoolList.size() > 0) {
-                for (LiKuResourcePool pool :
-                        dYPoolList) {
-                    pool.setCompleteLiKu(0);
-                }
-                poolSegSort(dYPoolList);
-            }
-            //句容利库资源池数据-段长
-            if (jRPoolList.size() > 0) {
-                for (LiKuResourcePool pool :
-                        jRPoolList) {
-                    pool.setCompleteLiKu(0);
-                }
-                poolSegSort(jRPoolList);
-            }
-
-            /*****************************************非段长比对*****************************************************/
-            //非段长比对顺序,由物资上报数据比对利库资源池数据
-            //本部-本部
-            if (bBNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(bBNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-            //扬中-扬中
-            if (yZNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(yZNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-            //丹阳-丹阳
-            if (dYNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(dYNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-            //句容-句容
-            if (jRNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(jRNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-
-            //本部-扬中
-            if (bBNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(bBNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //本部-丹阳
-            if (bBNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(bBNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //本部-句容
-            if (bBNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(bBNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-
-            //扬中-本部
-            if (yZNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(yZNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //杨中-丹阳
-            if (yZNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(yZNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //扬中-句容
-            if (yZNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(yZNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //丹阳-本部
-            if (dYNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(dYNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //丹阳-扬中
-            if (dYNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(dYNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //丹阳-句容
-            if (dYNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(dYNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //句容-本部
-            if (jRNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(jRNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //句容-扬中
-            if (jRNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(jRNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //句容-丹阳
-            if (jRNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                AdjustUtil.nonSegAdjust(jRNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-
-            /*************************************非段长以大代小******************************************************/
-            //查找库中所有的以大代小的数据list
-            List<ReplaceMaterial> replaceList = replaceMaterialService.findAll();
-            if (replaceList.size() > 0) {
-                //本部-本部本地以大代小
-                if (bBNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(bBNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-
-                //扬中-扬中本地以大代小
-                if (yZNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(yZNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-                //丹阳-丹阳本地以大代小
-                if (dYNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(dYNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-                //句容-句容本地以大代小
-                if (jRNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(jRNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-
-
-                //本部-扬中跨域以大代小
-                if (bBNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(bBNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //本部-丹阳跨域以大代小
-                if (bBNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(bBNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //本部-句容跨域以大代小
-                if (bBNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(bBNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //扬中-本部跨域以大代小
-                if (yZNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(yZNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //扬中-丹阳跨域以大代小
-                if (yZNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(yZNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //扬中-句容跨域以大代小
-                if (yZNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(yZNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //丹阳-本部跨域以大代小
-                if (dYNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(dYNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //丹阳-扬中跨域以大代小
-                if (dYNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(dYNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //丹阳-句容跨域以大代小
-                if (dYNonSegmentList.size() > 0 && jRNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(dYNonSegmentList,jRNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //句容-本部跨域以大代小
-                if (jRNonSegmentList.size() > 0 && bBNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(jRNonSegmentList,bBNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //句容-扬中跨域以大代小
-                if (jRNonSegmentList.size() > 0 && yZNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(jRNonSegmentList,yZNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //句容-丹阳跨域以大代小
-                if (jRNonSegmentList.size() > 0 && dYNonPoolList.size() > 0) {
-                    AdjustUtil.nonSegRepAdjust(jRNonSegmentList,dYNonPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-            }
-
-            /****************************************段长比对*****************************************************/
-            //本部-本部
-            if (bBPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(bBSegmentList,bBPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-                AdjustUtil.segAdjust(bBSegmentList,bBPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-            //扬中-扬中
-            if (yZPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(yZSegmentList,yZPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-                AdjustUtil.segAdjust(yZSegmentList,yZPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-            //丹阳-丹阳-段长
-            if (dYPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(dYSegmentList,dYPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-                AdjustUtil.segAdjust(dYSegmentList,dYPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-            //句容-句容-段长
-            if (jRPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(jRSegmentList,jRPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-                AdjustUtil.segAdjust(jRSegmentList,jRPoolList,compareHistories,AdjustUtil.LOCAL_ADJUST);
-            }
-
-            //本部-扬中-段长
-            if (bBPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(yZSegmentList,bBPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(yZSegmentList,bBPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //本部-丹阳-段长
-            if (bBPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(dYSegmentList,bBPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(dYSegmentList,bBPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //本部-句容-段长
-            if (bBPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(jRSegmentList,bBPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(jRSegmentList,bBPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-
-            //杨中-本部-段长
-            if (yZPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(bBSegmentList,yZPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(bBSegmentList,yZPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //杨中-丹阳-段长
-            if (yZPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(dYSegmentList,yZPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(dYSegmentList,yZPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //杨中-句容-段长
-            if (yZPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(jRSegmentList,yZPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(jRSegmentList,yZPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-
-            //丹阳-本部-段长
-            if (dYPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(bBSegmentList,dYPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(bBSegmentList,dYPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //丹阳-扬中-段长
-            if (dYPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(yZSegmentList,dYPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(yZSegmentList,dYPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //丹阳-句容-段长
-            if (dYPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(jRSegmentList,dYPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(jRSegmentList,dYPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-
-
-            //句容-本部-段长
-            if (jRPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(bBSegmentList,jRPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(bBSegmentList,jRPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //句容-扬中-段长
-            if (jRPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(yZSegmentList,jRPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(yZSegmentList,jRPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-            //句容-丹阳-段长
-            if (jRPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                AdjustUtil.segAdjustReverse(dYSegmentList,jRPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-                AdjustUtil.segAdjust(dYSegmentList,jRPoolList,compareHistories,AdjustUtil.SPAN_ADJUST);
-            }
-
-            /******************************************合并利库************************************/
-            //将4个区域的段长物资数据合并,使用各个区域的
-            List<MaterialReportDetails> fourAreaList = new ArrayList<>();
-            if (bBSegmentList.size() > 0) {
-                fourAreaList.addAll(bBSegmentList);
-            }
-            if (yZSegmentList.size() > 0) {
-                fourAreaList.addAll(yZSegmentList);
-            }
-            if (dYSegmentList.size() > 0) {
-                fourAreaList.addAll(dYSegmentList);
-            }
-            if (jRSegmentList.size() > 0) {
-                fourAreaList.addAll(jRSegmentList);
-            }
-            //将四个区域的段长利库数据合并
-            List<LiKuResourcePool> fourLikuList = new ArrayList<>();
-            if(bBPoolList.size()>0){
-                fourLikuList.addAll(bBPoolList);
-            }
-            if(yZPoolList.size()>0){
-                fourLikuList.addAll(yZPoolList);
-            }
-            if(dYPoolList.size()>0){
-                fourLikuList.addAll(dYPoolList);
-            }
-            if(jRPoolList.size()>0){
-                fourLikuList.addAll(jRPoolList);
-            }
 
-            //本部-所有
-            if (bBSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                AdjustUtil.segAdjustReverse(bBSegmentList,fourLikuList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-            //杨中-所有
-            if (yZSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                AdjustUtil.segAdjustReverse(yZSegmentList,fourLikuList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-            //丹阳-所有
-            if (dYSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                AdjustUtil.segAdjustReverse(dYSegmentList,fourLikuList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-            //句容-所有
-            if (jRSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                AdjustUtil.segAdjustReverse(jRSegmentList,fourLikuList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
 
-            //本部-所有
-            if (bBPoolList.size() > 0 && fourAreaList.size() > 0) {
-                AdjustUtil.segAdjust(fourAreaList,bBPoolList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-            //杨中-所有
-            if (yZPoolList.size() > 0 && fourAreaList.size() > 0) {
-                AdjustUtil.segAdjust(fourAreaList,yZPoolList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-            //丹阳-所有
-            if (dYPoolList.size() > 0 && fourAreaList.size() > 0) {
-                AdjustUtil.segAdjust(fourAreaList,dYPoolList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-            //句容-所有
-            if (jRPoolList.size() > 0 && fourAreaList.size() > 0) {
-                AdjustUtil.segAdjust(fourAreaList,jRPoolList,compareHistories,AdjustUtil.COMBINE_ADJUST);
-            }
-
-            //本部-扬中-丹阳-句容
-            /****************************************段长以大代小********************************************/
-            if (replaceList.size() > 0) {
-                //本部-本部-段长以大代小
-                if (bBPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(bBSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(bBSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-                //扬中-扬中-段长以大代小
-                if (yZPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(yZSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(yZSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-                //丹阳-丹阳-段长以大代小
-                if (dYPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(dYSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(dYSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-                //句容-句容-段长以大代小
-                if (jRPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(jRSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(jRSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_LOCAL_ADJUST,replaceList);
-                }
-
-
-                //本部-扬中-段长以大代小
-                if (bBPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(yZSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(yZSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //本部-丹阳-段长以大代小
-                if (bBPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(dYSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(dYSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //本部-句容-段长以大代小
-                if (bBPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(jRSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(jRSegmentList,bBPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //杨中-本部-段长以大代小
-                if (yZPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(bBSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(bBSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //杨中-丹阳-段长以大代小
-                if (yZPoolList.size() > 0 && dYSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(dYSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(dYSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //杨中-句容-段长以大代小
-                if (yZPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(jRSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(jRSegmentList,yZPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //丹阳-本部-段长以大代小
-                if (dYPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(bBSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(bBSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //丹阳-扬中-段长以大代小
-                if (dYPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(yZSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(yZSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //丹阳-句容-段长以大代小
-                if (dYPoolList.size() > 0 && jRSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(jRSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(jRSegmentList,dYPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-
-                //句容-本部-段长以大代小
-                if (jRPoolList.size() > 0 && bBSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(bBSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(bBSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //句容-扬中-段长以大代小
-                if (jRPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(yZSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(yZSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                //句容-丹阳-段长以大代小
-                if (jRPoolList.size() > 0 && yZSegmentList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(yZSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                    AdjustUtil.segRepAdjust(yZSegmentList,jRPoolList,compareHistories,AdjustUtil.REP_SPAN_ADJUST,replaceList);
-                }
-                /******************************************以大代小合并利库************************************/
-                //以大代小合并利库
-
-                //本部-所有
-                if (bBSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(bBSegmentList,fourLikuList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-                //杨中-所有
-                if (yZSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(yZSegmentList,fourLikuList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-                //丹阳-所有
-                if (dYSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(dYSegmentList,fourLikuList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-                //句容-所有
-                if (jRSegmentList.size() > 0 && fourLikuList.size() > 0) {
-                    AdjustUtil.segRepAdjustReverse(jRSegmentList,fourLikuList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-
-                //本部-所有
-                if (bBPoolList.size() > 0 && fourAreaList.size() > 0) {
-                    AdjustUtil.segRepAdjust(fourAreaList,bBPoolList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-                //杨中-所有
-                if (yZPoolList.size() > 0 && fourAreaList.size() > 0) {
-                    AdjustUtil.segRepAdjust(fourAreaList,yZPoolList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-                //丹阳-所有
-                if (dYPoolList.size() > 0 && fourAreaList.size() > 0) {
-                    AdjustUtil.segRepAdjust(fourAreaList,dYPoolList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-                //句容-所有
-                if (jRPoolList.size() > 0 && fourAreaList.size() > 0) {
-                    AdjustUtil.segRepAdjust(fourAreaList,jRPoolList,compareHistories,AdjustUtil.REP_COMBINE_ADJUST,replaceList);
-                }
-
-            }
+            String fileName = "项目物资需求表" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+            new ExportExcel("", MaterialReportDetails.class).setDataList(list).write(response, fileName).dispose();
 
 
-            /*****************************************调整记录保存**************************************************/
-            if (compareHistories.size() > 0) {
-                compareHistoryService.delAll();
-                compareHistoryService.insertList(compareHistories);
-            }
-            /**********************************更新利库资源池,插入申请物资数据**************************************/
-
             //利库基础数据更新库存
-            poolService.updateAllList(poolList);
+            //poolService.updateAllList(poolList);
 
-            if (list.size() > 0) {
+            /*if (list.size() > 0) {
                 service.delAll();
                 service.insertList(list);
             }
-            j.setSuccess(true);
-            j.setMsg("已成功导入 " + list.size() + " 条物资上报明细记录");
+            */
         } catch (Exception e) {
             j.setSuccess(false);
             j.setMsg("导入物资上报明细失败!失败信息:" + e.getMessage());
+            e.printStackTrace();
+
+
         }
         return j;
     }

+ 2 - 2
src/main/java/com/jeeplus/modules/sg/balancedlibrary/preferredMaterials/utils/OptimalUtil.java

@@ -68,7 +68,7 @@ public class OptimalUtil {
         for (List<LiKuResourcePool> poolList : resultReverse) {
             BigDecimal listSum = BigDecimal.valueOf(0.0);
             for (LiKuResourcePool pool : poolList) {
-                listSum = listSum.add(BigDecimal.valueOf(pool.getLengthOfMetre()));
+                listSum = listSum.add(new BigDecimal(pool.getLengthOfMetre()));
             }
             if (listSum.compareTo(currMin) < 0) {
                 currMin = listSum;
@@ -146,7 +146,7 @@ public class OptimalUtil {
         }
         LiKuResourcePool next = elements.get(index);
         //处理单位不同,所有都以米作为单位计算
-        Double cableLength = next.getLengthOfMetre();
+        Double cableLength = Double.valueOf(next.getLengthOfMetre());
 
         index++;
         //如果将当前值加上已有元素组合的值等于待比对值,得到结果

+ 6 - 7
src/main/webapp/webpage/modules/sg/balancedlibrary/liKuResourcePool/liKuResourcePoolList.js

@@ -90,6 +90,12 @@ $(document).ready(function() {
 				   sortName: 'serialNumber'
 
 			   }
+                   ,{
+                       field: 'planner',
+                       title: '计划编制人',
+                       sortable: true,
+                       sortName: 'planner'
+                   }
 			,{
 		        field: 'factory',
 		        title: '工厂',
@@ -154,13 +160,6 @@ $(document).ready(function() {
 
 				   }
 				   ,{
-					   field: 'supplierName',
-					   title: '供应商名称',
-					   sortable: true,
-					   sortName: 'supplierName'
-
-				   }
-				   ,{
 					   field: 'specialStock',
 					   title: '特殊库存标识',
 					   sortable: true,