| 
					
				 | 
			
			
				@@ -72,6 +72,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public FabricLoss getFabricLossData(String code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (oConvertUtils.isNotEmpty(code)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			FabricLoss ret = new FabricLoss(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ret.setEdit(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			ret.setSuccess(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			ret.setCCode(code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -238,7 +239,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				List<FabricPoOrderOut> findFabricPoOrderOutList = fabricPoOrderOutList.stream().filter(e-> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						oConvertUtils.getString(e.getCInvCode()).equals(oConvertUtils.getString(fabricPoOrder.getCInvCode())) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						oConvertUtils.getString(e.getCColor()).equals(oConvertUtils.getString(fabricPoOrder.getCColor()))).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 设置计划号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 设置计划号,单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				for (FabricPoOrderOut item : findFabricPoOrderOutList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					String cCode = item.getCCode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					int index1 = cCode.indexOf("SY"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -250,6 +251,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						index2 = cCode.length(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					item.setCPlanCode(cCode.substring(index1,index2-1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (tmpFabricPoOrderInList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						item.setIPrice(tmpFabricPoOrderInList.get(0).getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						item.setIMoney(item.getIPrice()*item.getIQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 设置仓库库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e-> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -439,13 +445,12 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoiceList = fabricCostInvoiceListOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 转入成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Double d = oConvertUtils.getDouble(fabricLossMapper.getOmOtherToCurMoney(code), 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Double d = getInCost(ret.getFabricPoOrderList(), fabricOMOrderListGn, fabricOMOrderListGw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			FabricCostInvoice fabricCostInvoice = new FabricCostInvoice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoice.setCVCName("转入成本"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoice.setIMoney(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoiceList.add(fabricCostInvoice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 计算入金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Double costInTotal = fabricCostInvoiceList.stream().mapToDouble(FabricCostInvoice::getIMoney).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 转出成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			d = getOutCost(ret.getFabricPoOrderList(), fabricOMOrderListGn, fabricOMOrderListGw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoice = new FabricCostInvoice(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -453,9 +458,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoice.setIMoney(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fabricCostInvoiceList.add(fabricCostInvoice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			ret.setFabricCostInvoiceList(fabricCostInvoiceList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 计算实际单件成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			costInTotal -= d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			BigDecimal bdPriceReal = new BigDecimal(costInTotal/ret.getNumber()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 计算单件成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Double costInTotal = fabricCostInvoiceList.stream().mapToDouble(FabricCostInvoice::getIMoney).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			BigDecimal bdPriceReal = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (ret.getNumber()>0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				bdPriceReal = new BigDecimal(costInTotal / ret.getNumber()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			ret.setActualPrice(bdPriceReal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			//开票成本 - 成衣 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			List<FabricCostClothes> fabricCostClothesList = fabricLossMapper.getCostClothesList(code); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -538,6 +547,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			ret.setFabricCostClothList(fabricCostClothGroupList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 根据委外出库设置采购入库单价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			setMoneyByOm(ret); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return  ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return null; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1058,42 +1070,86 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<FabricPoOrderOut> invOutGnList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (invIdGnList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			invOutGnList = fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<FabricPoOrderOut> invOutGwList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (invIdGwList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			fabricLossMapper.getOmInGwOutList(invIdGwList);   //国外出库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			invOutGwList = fabricLossMapper.getOmInGwOutList(invIdGwList);   //国外出库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 扣减出库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<FabricOMOrder> omOrderListAll = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		omOrderListAll.addAll(omOrderListGn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		omOrderListAll.addAll(omOrderListGw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 转换国内外出库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricMoOrderCK> omOutListAll = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricOMOrder omOrder : omOrderListAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			List<FabricMoOrderCK> outList = omOrder.getFabricMoOrderCKList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricMoOrderCK omOut:outList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				FabricMoOrderCK outCopy = new FabricMoOrderCK(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setCBatchOut(omOut.getCBatchOut()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setCInvCodeOut(omOut.getCInvCodeOut()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setCColorOut(omOut.getCColorOut()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setIQuantity(omOut.getIQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				omOutListAll.add(outCopy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for (FabricPoOrderIn itemIn : allInList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (FabricOMOrder item : omOrderListAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<FabricMoOrderCK> outList = item.getFabricMoOrderCKList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (oConvertUtils.listIsNotEmpty(outList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					Double dOut = outList.stream().filter(e-> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							e.getCInvCodeOut().equals(itemIn.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							e.getCColorOut().equals(itemIn.getCColor()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							e.getCBatchOut().equals(itemIn.getCBatch())).mapToDouble(FabricMoOrderCK::getIQuantity).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					itemIn.setIQuantity(itemIn.getIQuantity()-dOut); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					List<FabricPoOrderOut> useOutList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// 国内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if ("1".equals(itemIn.getCBusType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						useOutList = invOutGnList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			boolean bOmFind = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			double inLeft = itemIn.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricMoOrderCK outItem : omOutListAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (outItem.getCBatchOut().equals(itemIn.getCBatch()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					outItem.getCInvCodeOut().equals(itemIn.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					outItem.getCColorOut().equals(itemIn.getCColor())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					double outLeft = outItem.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					bOmFind = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					inLeft -= outLeft; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (inLeft<0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						outLeft = inLeft*-1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						outLeft = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// 国外 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					else if ("2".equals(itemIn.getCBusType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						useOutList = invOutGwList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					outItem.setIQuantity(outLeft); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (inLeft<=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (useOutList != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						Double dOut = useOutList.stream().filter(e-> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								e.getCInvCode().equals(itemIn.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										e.getCColor().equals(itemIn.getCColor()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										e.getCBatch().equals(itemIn.getCBatch())).mapToDouble(FabricPoOrderOut::getIQuantity).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						itemIn.setIQuantity(itemIn.getIQuantity()-dOut); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			itemIn.setIQuantity(inLeft); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (!bOmFind){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				List<FabricPoOrderOut> useOutList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 国内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ("1".equals(itemIn.getCBusType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					useOutList = invOutGnList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 国外 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				else if ("2".equals(itemIn.getCBusType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					useOutList = invOutGwList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (useOutList != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					for (FabricPoOrderOut outItem : useOutList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (outItem.getCBatch().equals(itemIn.getCBatch()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								outItem.getCInvCode().equals(itemIn.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								outItem.getCColor().equals(itemIn.getCColor())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							double outLeft = outItem.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							inLeft -= outLeft; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (inLeft<0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								outLeft = inLeft*-1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								outLeft = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							outItem.setIQuantity(outLeft); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (inLeft<=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					itemIn.setIQuantity(inLeft); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1104,7 +1160,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				dTotal += itemIn.getIQuantity()*itemIn.getIPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		BigDecimal bdVal = new BigDecimal(dTotal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BigDecimal bdVal = new BigDecimal(dTotal*-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1117,4 +1174,178 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 根据委外订单出库价格,设置采购订单-来源余纱,采购订单-其他入库的纱 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param fabricLoss 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private void setMoneyByOm(FabricLoss fabricLoss){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 获取所有委外的出库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricMoOrderCK> moOrderCKList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricOMOrder> omOrderList1 = fabricLoss.getFabricOMOrderList1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (oConvertUtils.listIsNotEmpty(omOrderList1)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricOMOrder omOrder : omOrderList1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				moOrderCKList.addAll(omOrder.getFabricMoOrderCKList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricOMOrder> omOrderList2 = fabricLoss.getFabricOMOrderList2(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (oConvertUtils.listIsNotEmpty(omOrderList2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricOMOrder omOrder : omOrderList2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				moOrderCKList.addAll(omOrder.getFabricMoOrderCKList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 设置采购订单中来源余纱和其他入库的纱的单价和金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricPoOrder> poOrderList = fabricLoss.getFabricPoOrderList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (oConvertUtils.listIsNotEmpty(poOrderList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricPoOrder poOrder : poOrderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (poOrder.getCInvName().equals("来源余纱") || poOrder.getCInvName().equals("其他入库的纱")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<FabricPoOrderOut> orderOutList = poOrder.getFabricPoOrderOutList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (oConvertUtils.listIsNotEmpty(orderOutList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						for (FabricPoOrderOut orderOut : orderOutList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							List<FabricMoOrderCK> findOrderCKList = moOrderCKList.stream().filter(e -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									e.getCInvCodeOut().equals(orderOut.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											e.getCColorOut().equals(orderOut.getCColor()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											e.getCBatchOut().equals(orderOut.getCBatch())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (findOrderCKList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								orderOut.setIPrice(findOrderCKList.get(0).getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								BigDecimal bdVal = new BigDecimal(orderOut.getIQuantity()*orderOut.getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								orderOut.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 委外出库材料,找出不在采购入库和委外入库中,计算转入成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param poOrderList - 采购入库详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param omOrderListGn - 委外订单国内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param omOrderListGw - 委外订单国外 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private Double getInCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 采购出入库去掉末尾两行:来源余纱、其他入库纱 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricPoOrder> poOrderListReal = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (poOrderList.size()>2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			poOrderListReal.addAll(poOrderList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			poOrderListReal.remove(poOrderListReal.size()-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			poOrderListReal.remove(poOrderListReal.size()-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 合并所有采购入库+委外入库的物料批次。借用FabricPoOrderIn类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricPoOrderIn> allInList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricPoOrder item : poOrderListReal){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			List<FabricPoOrderIn> inList = item.getFabricPoOrderInList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (oConvertUtils.listIsNotEmpty(inList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (FabricPoOrderIn itemIn : inList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					Optional<FabricPoOrderIn> findItemOpt = allInList.stream().filter(e-> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							e.getCInvCode().equals(itemIn.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									e.getCColor().equals(itemIn.getCColor()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									e.getCBatch().equals(itemIn.getCBatch())).findFirst(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (findItemOpt.isPresent()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						FabricPoOrderIn formatItem = findItemOpt.get(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						Double dMoney = formatItem.getIPrice()*formatItem.getIQuantity()+itemIn.getIPrice()*itemIn.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						Double dQuantity = formatItem.getIQuantity()+itemIn.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setIPrice(dMoney/dQuantity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setIQuantity(dQuantity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						FabricPoOrderIn formatItem = new FabricPoOrderIn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setCInvCode(itemIn.getCInvCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setCColor(itemIn.getCColor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setCBatch(itemIn.getCBatch()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setIQuantity(itemIn.getIQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						formatItem.setIPrice(itemIn.getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						allInList.add(formatItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricOMOrder item : omOrderListGn){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			List<FabricMoOrderRK> inList = item.getFabricMoOrderRKList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (oConvertUtils.listIsNotEmpty(inList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (FabricMoOrderRK itemIn : inList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					FabricPoOrderIn formatItem = new FabricPoOrderIn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setCInvCode(item.getCInvCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setCColor(item.getCColor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setCBatch(itemIn.getCBatch()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setIQuantity(itemIn.getIQuantityIn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setIPrice(itemIn.getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					allInList.add(formatItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricOMOrder item : omOrderListGw){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			List<FabricMoOrderRK> inList = item.getFabricMoOrderRKList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (oConvertUtils.listIsNotEmpty(inList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (FabricMoOrderRK itemIn : inList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					FabricPoOrderIn formatItem = new FabricPoOrderIn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setCInvCode(item.getCInvCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setCColor(item.getCColor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setCBatch(itemIn.getCBatch()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setIQuantity(itemIn.getIQuantityIn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					formatItem.setIPrice(itemIn.getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					allInList.add(formatItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 合并所有出的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricOMOrder> omOrderListAll = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		omOrderListAll.addAll(omOrderListGn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		omOrderListAll.addAll(omOrderListGw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<FabricMoOrderCK> omOutListAll = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricOMOrder omOrder : omOrderListAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			List<FabricMoOrderCK> outList = omOrder.getFabricMoOrderCKList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricMoOrderCK omOut:outList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				FabricMoOrderCK outCopy = new FabricMoOrderCK(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setCBatchOut(omOut.getCBatchOut()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setCInvCodeOut(omOut.getCInvCodeOut()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setCColorOut(omOut.getCColorOut()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setIQuantity(omOut.getIQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				outCopy.setIPrice(omOut.getIPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				omOutListAll.add(outCopy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricMoOrderCK itemOut : omOutListAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			double outLeft = itemOut.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (FabricPoOrderIn itemIn : allInList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (itemOut.getCBatchOut().equals(itemIn.getCBatch()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						itemOut.getCInvCodeOut().equals(itemIn.getCInvCode()) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						itemOut.getCColorOut().equals(itemIn.getCColor())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					double inLeft = itemIn.getIQuantity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					outLeft -= inLeft; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (outLeft<0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						inLeft = outLeft*-1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						inLeft = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					itemIn.setIQuantity(inLeft); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (outLeft<=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			itemOut.setIQuantity(outLeft); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 计算总转入成本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Double dTotal = 0.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (FabricMoOrderCK itemOut : omOutListAll){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (itemOut.getIQuantity()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				dTotal += itemOut.getIQuantity()*itemOut.getIPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BigDecimal bdVal = new BigDecimal(dTotal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |