|  | @@ -78,198 +78,19 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  			ret.setSuccess(true);
 | 
	
		
			
				|  |  |  			ret.setCCode(code);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			List<String> lstContractNo = new ArrayList<>(); // 成衣合同号
 | 
	
		
			
				|  |  | -			List<String> lstCdefine22 = new ArrayList<>();  // 款号
 | 
	
		
			
				|  |  | -			List<String> lstCpersonName = new ArrayList<>(); // 业务员
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			List<FabricLoss> fabricLossList = fabricLossMapper.getFabricLossData(code);
 | 
	
		
			
				|  |  | -			for (FabricLoss fabricLoss : fabricLossList){
 | 
	
		
			
				|  |  | -				if (oConvertUtils.isNotEmpty(fabricLoss.getContractNo()) &&
 | 
	
		
			
				|  |  | -						!lstContractNo.contains(fabricLoss.getContractNo())){
 | 
	
		
			
				|  |  | -					lstContractNo.add(fabricLoss.getContractNo());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				if (oConvertUtils.isNotEmpty(fabricLoss.getCDefine22()) &&
 | 
	
		
			
				|  |  | -						!lstCdefine22.contains(fabricLoss.getCDefine22())){
 | 
	
		
			
				|  |  | -					lstCdefine22.add(fabricLoss.getCDefine22());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				if (oConvertUtils.isNotEmpty(fabricLoss.getCPersonName()) &&
 | 
	
		
			
				|  |  | -						!lstCpersonName.contains(fabricLoss.getCPersonName())){
 | 
	
		
			
				|  |  | -					lstCpersonName.add(fabricLoss.getCPersonName());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if (lstContractNo.size()>0){
 | 
	
		
			
				|  |  | -				ret.setContractNo(String.join(",",lstContractNo));
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if (lstCdefine22.size()>0){
 | 
	
		
			
				|  |  | -				ret.setCDefine22(String.join(",",lstCdefine22));
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if (lstCpersonName.size()>0){
 | 
	
		
			
				|  |  | -				ret.setCPersonName(String.join(",",lstCpersonName));
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			//制单人
 | 
	
		
			
				|  |  | -			LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 | 
	
		
			
				|  |  | -			ret.setMakingPeople(sysUser.getRealname());
 | 
	
		
			
				|  |  | -			/*
 | 
	
		
			
				|  |  | -			List<String> makingPeople = fabricLossMapper.getMakingPeople(code);
 | 
	
		
			
				|  |  | -			if (oConvertUtils.listIsNotEmpty(makingPeople)){
 | 
	
		
			
				|  |  | -				ret.setMakingPeople(String.join(",", makingPeople));
 | 
	
		
			
				|  |  | -			}*/
 | 
	
		
			
				|  |  | -			//计划员
 | 
	
		
			
				|  |  | -			List<String> planner = fabricLossMapper.getPlanner(code);
 | 
	
		
			
				|  |  | -			if (oConvertUtils.listIsNotEmpty(planner)){
 | 
	
		
			
				|  |  | -				ret.setPlanner(String.join(",", planner));
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			// 日期
 | 
	
		
			
				|  |  | -			ret.setDateTime(DateUtils.getDate());
 | 
	
		
			
				|  |  | -			// 排单数量
 | 
	
		
			
				|  |  | -			ret.setNumber(oConvertUtils.getDouble(fabricLossMapper.getNumber(code),0));
 | 
	
		
			
				|  |  | -			// 销售出库数量
 | 
	
		
			
				|  |  | -			Double dOutSum = oConvertUtils.getDouble(fabricLossMapper.getSaleOutSum(code),0);
 | 
	
		
			
				|  |  | -			if (dOutSum>ret.getNumber()) {
 | 
	
		
			
				|  |  | -				dOutSum = ret.getNumber();
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			ret.setOutboundNumber(dOutSum);
 | 
	
		
			
				|  |  | -			// 销售订单附件
 | 
	
		
			
				|  |  | -			List<AccessorItem> accessorItemList = fabricLossMapper.getSoAccList(ret.getContractNo());
 | 
	
		
			
				|  |  | -			accessorItemList.forEach(e->e.setFileurl("/report/FabricLoss/getFile?fileId="+e.getCFileId()+"&filename="+e.getFilename()));
 | 
	
		
			
				|  |  | -			ret.setAccessorItemList(accessorItemList);
 | 
	
		
			
				|  |  | -			// 委外订单附件
 | 
	
		
			
				|  |  | -			List<AccessorItem> omAccList = fabricLossMapper.getOmAccList(code);
 | 
	
		
			
				|  |  | -			omAccList.forEach(e->e.setFileurl("/report/FabricLoss/getFile?fileId="+e.getCFileId()+"&filename="+e.getFilename()));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			// 采购入库数据
 | 
	
		
			
				|  |  | -			List<FabricPoOrder> fabricPoOrderListTmp = fabricLossMapper.getPurchaseList(code);
 | 
	
		
			
				|  |  | -			//采购数据把不同订单合并
 | 
	
		
			
				|  |  | -			List<FabricPoOrder> fabricPoOrderList= new ArrayList<>();
 | 
	
		
			
				|  |  | -			for (FabricPoOrder fabricPoOrder: fabricPoOrderListTmp){
 | 
	
		
			
				|  |  | -				String cInvName = fabricPoOrder.getCInvName();
 | 
	
		
			
				|  |  | -				Optional<FabricPoOrder> findItemOpt = fabricPoOrderList.stream().filter(e->e.getCInvName().equals(cInvName)).findFirst();
 | 
	
		
			
				|  |  | -				if (findItemOpt.isPresent()){
 | 
	
		
			
				|  |  | -					FabricPoOrder findItem = findItemOpt.get();
 | 
	
		
			
				|  |  | -					BigDecimal bNum = new BigDecimal(findItem.getIQuantityIn()+fabricPoOrder.getIQuantityIn());
 | 
	
		
			
				|  |  | -					findItem.setIQuantityIn(bNum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -					bNum = new BigDecimal(findItem.getIQuantity()+fabricPoOrder.getIQuantity());
 | 
	
		
			
				|  |  | -					findItem.setIQuantity(bNum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -					findItem.setCPOID(findItem.getCPOID()+","+fabricPoOrder.getCPOID());
 | 
	
		
			
				|  |  | -					if (findItem.getCVenAbbName().indexOf(fabricPoOrder.getCVenAbbName()) == -1){
 | 
	
		
			
				|  |  | -						findItem.setCVenAbbName(findItem.getCVenAbbName()+","+fabricPoOrder.getCVenAbbName());
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					if (findItem.getCVenName().indexOf(fabricPoOrder.getCVenName()) == -1){
 | 
	
		
			
				|  |  | -						findItem.setCVenName(findItem.getCVenName()+","+fabricPoOrder.getCVenName());
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				}else{
 | 
	
		
			
				|  |  | -					fabricPoOrderList.add(fabricPoOrder);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			// 获取委外材料出库单,已核销的取核销数量
 | 
	
		
			
				|  |  | -			List<Map<String,Object>> fabricOmOutList = fabricLossMapper.getOmOutList(code);
 | 
	
		
			
				|  |  | -			// 获取本次采购入库的形态转换
 | 
	
		
			
				|  |  | -			List<Map<String,Object>> fabricAssemVouchList = fabricLossMapper.getAssemVouchList(code);
 | 
	
		
			
				|  |  | -			// 获取本次采购入库详情
 | 
	
		
			
				|  |  | -			List<FabricPoOrderIn> fabricPoOrderInList = fabricLossMapper.getPurchaseInList(code);
 | 
	
		
			
				|  |  | -			for (FabricPoOrderIn fabricPoOrderIn: fabricPoOrderInList){
 | 
	
		
			
				|  |  | -				BigDecimal bNum = new BigDecimal(fabricPoOrderIn.getIQuantity()-fabricPoOrderIn.getIQuantityInvoice());
 | 
	
		
			
				|  |  | -				fabricPoOrderIn.setIQuantityNInvoice(bNum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -				bNum = new BigDecimal(fabricPoOrderIn.getIQuantity()-fabricPoOrderIn.getIQuantitySettle());
 | 
	
		
			
				|  |  | -				fabricPoOrderIn.setIQuantityNSettle(bNum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -				bNum = new BigDecimal(fabricPoOrderIn.getIPrice());
 | 
	
		
			
				|  |  | -				fabricPoOrderIn.setIPrice(bNum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			// 采购入库被其他委外订单使用的信息
 | 
	
		
			
				|  |  | -			List<FabricPoOrderOut> fabricPoOrderOutList = fabricLossMapper.getPoOrderInToOther(code);
 | 
	
		
			
				|  |  | -			// 采购入库仓库库存
 | 
	
		
			
				|  |  | -			List<FabricPoOrderOut> poOrderStockList = fabricLossMapper.getPurchaseStockList(code);
 | 
	
		
			
				|  |  | -			// 采购订单设置分配数量、委外供应商、余纱、采购损耗
 | 
	
		
			
				|  |  | -			for (FabricPoOrder fabricPoOrder : fabricPoOrderList){
 | 
	
		
			
				|  |  | -				// 获取采购形态转换物料
 | 
	
		
			
				|  |  | -				List<Map<String, Object>> tmpAssemVouchList = fabricAssemVouchList.stream().filter(e->
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.get("cInvCode")).equals(fabricPoOrder.getCInvCode()) &&
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.get("cColor")).equals(fabricPoOrder.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -				//&&
 | 
	
		
			
				|  |  | -				//								fabricPoOrder.getCBatch().indexOf(oConvertUtils.getString(e.get("cAVBatch")))>-1
 | 
	
		
			
				|  |  | -				// 未形态转换物料
 | 
	
		
			
				|  |  | -				List<Map<String, Object>> tmpOmOutList1 = fabricOmOutList.stream().filter(e->
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.get("cInvCode")).equals(fabricPoOrder.getCInvCode()) &&
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.get("cColor")).equals(fabricPoOrder.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -				// &&
 | 
	
		
			
				|  |  | -				//								fabricPoOrder.getCBatch().indexOf(oConvertUtils.getString(e.get("cBatch")))>-1
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				// 形态转换物料
 | 
	
		
			
				|  |  | -				List<Map<String, Object>> tmpOmOutList2 = fabricOmOutList.stream().filter(out->{
 | 
	
		
			
				|  |  | -				return tmpAssemVouchList.stream().filter(e ->
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.get("cInvCode2")).equals(oConvertUtils.getString(out.get("cInvCode"))) &&
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.get("cColor2")).equals(oConvertUtils.getString(out.get("cColor")))
 | 
	
		
			
				|  |  | -				).count() > 0;
 | 
	
		
			
				|  |  | -				}).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -				// &&
 | 
	
		
			
				|  |  | -				//								oConvertUtils.getString(e.get("cAVBatch2")).equals(oConvertUtils.getString(out.get("cBatch")))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				tmpOmOutList1.addAll(tmpOmOutList2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				List<String> omcVenAbbNameList = new ArrayList<>();
 | 
	
		
			
				|  |  | -				double outSum = 0;
 | 
	
		
			
				|  |  | -				for (Map<String, Object> out : tmpOmOutList1){
 | 
	
		
			
				|  |  | -					outSum += oConvertUtils.getDouble(out.get("iQuantity").toString(),0);
 | 
	
		
			
				|  |  | -					String omcVenAbbName = oConvertUtils.getString(out.get("cVenAbbName").toString());
 | 
	
		
			
				|  |  | -					if (!omcVenAbbNameList.contains(omcVenAbbName)){
 | 
	
		
			
				|  |  | -						omcVenAbbNameList.add(omcVenAbbName);
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				if (omcVenAbbNameList.size()>0){
 | 
	
		
			
				|  |  | -					fabricPoOrder.setOmcVenAbbName(String.join(",", omcVenAbbNameList));
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				BigDecimal bOutSum = new BigDecimal(outSum);
 | 
	
		
			
				|  |  | -				outSum = bOutSum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
 | 
	
		
			
				|  |  | -				fabricPoOrder.setIQuantityOut(outSum);
 | 
	
		
			
				|  |  | -				double leftSum = fabricPoOrder.getIQuantityIn()-fabricPoOrder.getIQuantityOut();
 | 
	
		
			
				|  |  | -				BigDecimal bLeftSum = new BigDecimal(leftSum);
 | 
	
		
			
				|  |  | -				leftSum = bLeftSum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
 | 
	
		
			
				|  |  | -				fabricPoOrder.setIQuantityLeft(leftSum);
 | 
	
		
			
				|  |  | -				double leftRate = 0;
 | 
	
		
			
				|  |  | -				if (fabricPoOrder.getIQuantityIn() != 0) {
 | 
	
		
			
				|  |  | -					leftRate = leftSum / fabricPoOrder.getIQuantityIn();
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				BigDecimal bLeftRate = new BigDecimal(leftRate);
 | 
	
		
			
				|  |  | -				leftRate = bLeftRate.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
 | 
	
		
			
				|  |  | -				fabricPoOrder.setIQuantityLeftRate(leftRate);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				// 设置入库信息
 | 
	
		
			
				|  |  | -				List<FabricPoOrderIn> tmpFabricPoOrderInList = fabricPoOrderInList.stream().filter(e->
 | 
	
		
			
				|  |  | -						e.getCInvCode().equals(fabricPoOrder.getCInvCode()) &&
 | 
	
		
			
				|  |  | -						oConvertUtils.getString(e.getCColor()).equals(oConvertUtils.getString(fabricPoOrder.getCColor()))).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -				fabricPoOrder.setFabricPoOrderInList(tmpFabricPoOrderInList);
 | 
	
		
			
				|  |  | -				// 设置被其他委外订单使用信息
 | 
	
		
			
				|  |  | -				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");
 | 
	
		
			
				|  |  | -					if (index1 == -1) {
 | 
	
		
			
				|  |  | -						continue;
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					int index2 = cCode.indexOf("-", index1);
 | 
	
		
			
				|  |  | -					if (index2 == -1) {
 | 
	
		
			
				|  |  | -						index2 = cCode.length();
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					item.setCPlanCode(cCode.substring(index1,index2));
 | 
	
		
			
				|  |  | -					if (tmpFabricPoOrderInList.size()>0){
 | 
	
		
			
				|  |  | -						item.setIPrice(tmpFabricPoOrderInList.get(0).getIPrice());
 | 
	
		
			
				|  |  | -						item.setIMoney(item.getIPrice()*item.getIQuantity());
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				// 设置仓库库存
 | 
	
		
			
				|  |  | -				List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
 | 
	
		
			
				|  |  | -						fabricPoOrder.getCInvCode().equals(e.getCInvCode()) &&
 | 
	
		
			
				|  |  | -								oConvertUtils.getString(fabricPoOrder.getCColor()).equals(e.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -				findFabricPoOrderOutList.addAll(findPoOrderStockList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				fabricPoOrder.setFabricPoOrderOutList(findFabricPoOrderOutList);
 | 
	
		
			
				|  |  | +			// 设置面损表头、不含总成本
 | 
	
		
			
				|  |  | +			setHeadInfo(ret);
 | 
	
		
			
				|  |  | +			// 设置采购入库订单,不含来源余纱和其他入库的纱。分配数量、余纱、采购损耗不设置,等委外出库使用再算
 | 
	
		
			
				|  |  | +			setPoOrderList(ret);
 | 
	
		
			
				|  |  | +			// 设置委外订单
 | 
	
		
			
				|  |  | +			setOmOrderList(ret, editData);
 | 
	
		
			
				|  |  | +			if (!ret.isSuccess()){
 | 
	
		
			
				|  |  | +				return ret;
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			// 根据委外订单设置分配数量、余纱、采购损耗,来源余纱、其他入库的纱
 | 
	
		
			
				|  |  | +			setPoOrderListByOmOrderList(ret);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  |  			// 采购入库-来源余纱
 | 
	
		
			
				|  |  |  			List<FabricPoOrder> lyysList = getPoOrderLyys(code);
 | 
	
		
			
				|  |  |  			fabricPoOrderList.addAll(lyysList);
 | 
	
	
		
			
				|  | @@ -346,106 +167,20 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  								all.getCColor().equals(gw.getCColor())).count() >0;
 | 
	
		
			
				|  |  |  			}).collect(Collectors.toList());
 | 
	
		
			
				|  |  |  			ret.setFabricOMOrderList1(fabricOMOrderListGn);
 | 
	
		
			
				|  |  | -			ret.setFabricOMOrderList2(fabricOMOrderListGw);
 | 
	
		
			
				|  |  | +			ret.setFabricOMOrderList2(fabricOMOrderListGw);*/
 | 
	
		
			
				|  |  |  			// 费用支出单
 | 
	
		
			
				|  |  |  			List<FabricExpenses> fabricExpensesList = fabricLossMapper.getExpensesList(code);
 | 
	
		
			
				|  |  |  			ret.setFabricExpensesList(fabricExpensesList);
 | 
	
		
			
				|  |  | -			// 获取采购入库价格列表
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> fabricCostInvoiceList1 = fabricLossMapper.getPurchuseInPriceList(code);
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> fabricCostInvoiceList = new ArrayList<>();
 | 
	
		
			
				|  |  | -			for (FabricCostInvoice fabricCostInvoice : fabricCostInvoiceList1){
 | 
	
		
			
				|  |  | -				Optional<FabricCostInvoice> findItem = fabricCostInvoiceList.stream().filter(e->
 | 
	
		
			
				|  |  | -						e.getCVCName().equals(fabricCostInvoice.getCVCName())&&
 | 
	
		
			
				|  |  | -						e.getCVenAbbName().equals(fabricCostInvoice.getCVenAbbName())).findFirst();
 | 
	
		
			
				|  |  | -				FabricCostInvoice newItem = new FabricCostInvoice();
 | 
	
		
			
				|  |  | -				if (findItem.isPresent()) {
 | 
	
		
			
				|  |  | -					newItem = findItem.get();
 | 
	
		
			
				|  |  | -				}else{
 | 
	
		
			
				|  |  | -					newItem.setCBusType(fabricCostInvoice.getCBusType());
 | 
	
		
			
				|  |  | -					newItem.setIMoney(new Double(0));
 | 
	
		
			
				|  |  | -					newItem.setCVCName(fabricCostInvoice.getCVCName());
 | 
	
		
			
				|  |  | -					newItem.setCVenName(fabricCostInvoice.getCVenName());
 | 
	
		
			
				|  |  | -					newItem.setCVenAbbName(fabricCostInvoice.getCVenAbbName());
 | 
	
		
			
				|  |  | -					fabricCostInvoiceList.add(newItem);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				Double money = newItem.getIMoney();
 | 
	
		
			
				|  |  | -				for (FabricOMOrder omOrder : fabricOMOrderList1){
 | 
	
		
			
				|  |  | -					List<FabricMoOrderCK> ckList = omOrder.getFabricMoOrderCKList();
 | 
	
		
			
				|  |  | -					if (ckList != null) {
 | 
	
		
			
				|  |  | -						List<FabricMoOrderCK> findList1 = ckList.stream().filter(e->
 | 
	
		
			
				|  |  | -								e.getCInvCodeOut().equals(fabricCostInvoice.getCInvCode()) &&
 | 
	
		
			
				|  |  | -										e.getCColorOut().equals(fabricCostInvoice.getCColor()) &&
 | 
	
		
			
				|  |  | -								e.getCBatchOut().equalsIgnoreCase(fabricCostInvoice.getCBatch())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						for (FabricMoOrderCK ckItem : findList1) {
 | 
	
		
			
				|  |  | -							money+=ckItem.getIMoney();
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				BigDecimal bdValue = new BigDecimal(money);
 | 
	
		
			
				|  |  | -				newItem.setIMoney(bdValue.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			//获取委外订单发票金额
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> fabricCostInvoiceList2 = fabricLossMapper.getOmInvoiceMoneyList(code);
 | 
	
		
			
				|  |  | -			fabricCostInvoiceList.addAll(fabricCostInvoiceList2);
 | 
	
		
			
				|  |  | -			//获取委外订单运费发票金额
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> fabricCostInvoiceList3 = fabricLossMapper.getOmInvoiceMoneyYfList(code);
 | 
	
		
			
				|  |  | -			fabricCostInvoiceList.addAll(fabricCostInvoiceList3);
 | 
	
		
			
				|  |  | -			// 织、染、印排序
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> fabricCostInvoiceListOrder = new ArrayList<>();
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> fabricCostInvoiceListTmp = fabricCostInvoiceList.stream().filter(e->e.getCVCName().indexOf("织")==0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -			if (fabricCostInvoiceListTmp.size()>0){
 | 
	
		
			
				|  |  | -				fabricCostInvoiceListOrder.addAll(fabricCostInvoiceListTmp);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			fabricCostInvoiceListTmp = fabricCostInvoiceList.stream().filter(e->e.getCVCName().indexOf("染")==0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -			if (fabricCostInvoiceListTmp.size()>0){
 | 
	
		
			
				|  |  | -				fabricCostInvoiceListOrder.addAll(fabricCostInvoiceListTmp);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			fabricCostInvoiceListTmp = fabricCostInvoiceList.stream().filter(e->e.getCVCName().indexOf("印")==0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -			if (fabricCostInvoiceListTmp.size()>0){
 | 
	
		
			
				|  |  | -				fabricCostInvoiceListOrder.addAll(fabricCostInvoiceListTmp);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			fabricCostInvoiceListTmp = fabricCostInvoiceList.stream().filter(e-> {
 | 
	
		
			
				|  |  | -				return fabricCostInvoiceListOrder.stream().filter(x->x.getCVCName().equals(e.getCVCName())).count()==0;
 | 
	
		
			
				|  |  | -			}).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -			if (fabricCostInvoiceListTmp.size()>0){
 | 
	
		
			
				|  |  | -				fabricCostInvoiceListOrder.addAll(fabricCostInvoiceListTmp);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			fabricCostInvoiceList = fabricCostInvoiceListOrder;
 | 
	
		
			
				|  |  | -			// 转入成本
 | 
	
		
			
				|  |  | -			fabricCostInvoiceList.addAll(getInCost(ret.getFabricPoOrderList(), fabricOMOrderListGn, fabricOMOrderListGw));
 | 
	
		
			
				|  |  | -			// 转出成本
 | 
	
		
			
				|  |  | -			List<FabricCostInvoice> outCostList = getOutCost(ret.getFabricPoOrderList(), fabricOMOrderListGn, fabricOMOrderListGw);
 | 
	
		
			
				|  |  | -			// 设置修改的工厂
 | 
	
		
			
				|  |  | -			if (editData != null){
 | 
	
		
			
				|  |  | -				List<FabricCostInvoice> editCostList = editData.getFabricCostInvoiceList();
 | 
	
		
			
				|  |  | -				if (oConvertUtils.listIsNotEmpty(editCostList)){
 | 
	
		
			
				|  |  | -					for (FabricCostInvoice item : outCostList){
 | 
	
		
			
				|  |  | -						Optional<FabricCostInvoice> findOpt = editCostList.stream().filter(e->e.getCVCName().equalsIgnoreCase(item.getCVCName()) &&
 | 
	
		
			
				|  |  | -								"转出成本".equalsIgnoreCase(e.getCBusType())).findFirst();
 | 
	
		
			
				|  |  | -						if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | -							item.setCVenAbbName(findOpt.get().getCVenAbbName());
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			fabricCostInvoiceList.addAll(outCostList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			ret.setFabricCostInvoiceList(fabricCostInvoiceList);
 | 
	
		
			
				|  |  | +			// 成本发票
 | 
	
		
			
				|  |  | +			setCostInvoiceList(ret, editData);
 | 
	
		
			
				|  |  |  			// 计算单件成本
 | 
	
		
			
				|  |  | -			Double costInTotal = fabricCostInvoiceList.stream().mapToDouble(FabricCostInvoice::getIMoney).sum();
 | 
	
		
			
				|  |  | +			Double costInTotal = ret.getFabricCostInvoiceList().stream().mapToDouble(FabricCostInvoice::getIMoney).sum();
 | 
	
		
			
				|  |  |  			BigDecimal dVal = new BigDecimal(costInTotal);
 | 
	
		
			
				|  |  |  			ret.setActualMoney(dVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  |  			BigDecimal bdPriceReal = new BigDecimal(0);
 | 
	
		
			
				|  |  |  			if (ret.getNumber()>0) {
 | 
	
		
			
				|  |  | -				bdPriceReal = new BigDecimal(costInTotal / ret.getNumber());
 | 
	
		
			
				|  |  | +				ret.setActualPrice(DoubleOperation.div(costInTotal, ret.getNumber(),4));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			ret.setActualPrice(bdPriceReal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  |  			//开票成本 - 成衣
 | 
	
		
			
				|  |  |  			List<FabricCostClothes> fabricCostClothesList = fabricLossMapper.getCostClothesList(code);
 | 
	
		
			
				|  |  |  			ret.setFabricCostClothesList(fabricCostClothesList);
 | 
	
	
		
			
				|  | @@ -458,11 +193,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  				FabricCostClothesDetail fabricCostClothesDetail = new FabricCostClothesDetail();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				fabricCostClothesDetail.setIQuantityInvoice(fabricCostClothes.getIPBVQuantity());
 | 
	
		
			
				|  |  | -				BigDecimal bdValue = new BigDecimal(fabricCostClothes.getIQuantity()-fabricCostClothes.getIPBVQuantity());
 | 
	
		
			
				|  |  | -				fabricCostClothesDetail.setIQuantityInvoiceN(bdValue.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +				fabricCostClothesDetail.setIQuantityInvoiceN(DoubleOperation.sub(fabricCostClothes.getIQuantity(),fabricCostClothes.getIPBVQuantity()));
 | 
	
		
			
				|  |  |  				fabricCostClothesDetail.setIQuantitySettle(fabricCostClothes.getISQuantity());
 | 
	
		
			
				|  |  | -				bdValue = new BigDecimal(fabricCostClothes.getIQuantity()-fabricCostClothes.getISQuantity());
 | 
	
		
			
				|  |  | -				fabricCostClothesDetail.setIQuantitySettleN(bdValue.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +				fabricCostClothesDetail.setIQuantitySettleN(DoubleOperation.sub(fabricCostClothes.getIQuantity(),fabricCostClothes.getISQuantity()));
 | 
	
		
			
				|  |  |  				fabricCostClothesDetailList.add(fabricCostClothesDetail);
 | 
	
		
			
				|  |  |  				fabricCostClothes.setFabricCostClothesDetailList(fabricCostClothesDetailList);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -473,11 +206,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  				List<FabricCostAssistDetail> fabricCostAssistDetailList = new ArrayList<>();
 | 
	
		
			
				|  |  |  				FabricCostAssistDetail fabricCostAssistDetail = new FabricCostAssistDetail();
 | 
	
		
			
				|  |  |  				fabricCostAssistDetail.setIQuantityInvoice(fabricCostAssist.getIQuantityInvoice());
 | 
	
		
			
				|  |  | -				BigDecimal bdValue = new BigDecimal(fabricCostAssist.getIQuantityIn()-fabricCostAssist.getIQuantityInvoice());
 | 
	
		
			
				|  |  | -				fabricCostAssistDetail.setIQuantityInvoiceN(bdValue.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +				fabricCostAssistDetail.setIQuantityInvoiceN(DoubleOperation.sub(fabricCostAssist.getIQuantityIn(),fabricCostAssist.getIQuantityInvoice()));
 | 
	
		
			
				|  |  |  				fabricCostAssistDetail.setIQuantitySettle(fabricCostAssist.getIQuantitySettle());
 | 
	
		
			
				|  |  | -				bdValue = new BigDecimal(fabricCostAssist.getIQuantityIn()-fabricCostAssist.getIQuantitySettle());
 | 
	
		
			
				|  |  | -				fabricCostAssistDetail.setIQuantitySettleN(bdValue.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +				fabricCostAssistDetail.setIQuantitySettleN(DoubleOperation.sub(fabricCostAssist.getIQuantityIn(),fabricCostAssist.getIQuantitySettle()));
 | 
	
		
			
				|  |  |  				fabricCostAssistDetailList.add(fabricCostAssistDetail);
 | 
	
		
			
				|  |  |  				fabricCostAssist.setFabricCostAssistDetailList(fabricCostAssistDetailList);
 | 
	
		
			
				|  |  |  			}
 | 
	
	
		
			
				|  | @@ -488,9 +219,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  			List<FabricCostCloth> fabricCostClothGroupList = new ArrayList<>();
 | 
	
		
			
				|  |  |  			for (FabricCostCloth fabricCostCloth : fabricCostClothList){
 | 
	
		
			
				|  |  |  				FabricCostCloth fabricCostClothGroup = new FabricCostCloth();
 | 
	
		
			
				|  |  | -				Optional<FabricCostCloth> findObject = fabricCostClothGroupList.stream().filter(e->e.getCVenName().equals(fabricCostCloth.getCVenName()) &&
 | 
	
		
			
				|  |  | -						e.getCSBVCode().equals(fabricCostCloth.getCSBVCode()) &&
 | 
	
		
			
				|  |  | -						e.getCShipTime().equals(fabricCostCloth.getCShipTime())).findFirst();
 | 
	
		
			
				|  |  | +				Optional<FabricCostCloth> findObject = fabricCostClothGroupList.stream().filter(e->e.getId().equalsIgnoreCase(fabricCostCloth.getId())).findFirst();
 | 
	
		
			
				|  |  |  				if (findObject.isPresent()){
 | 
	
		
			
				|  |  |  					fabricCostClothGroup = findObject.get();
 | 
	
		
			
				|  |  |  					fabricCostClothGroup.setINatSum(fabricCostClothGroup.getINatSum()+fabricCostCloth.getINatSum());
 | 
	
	
		
			
				|  | @@ -549,6 +278,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  	 * @param editData - 要设置内容的面损
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  |  	private List<FabricOMOrder> setFabricOMOrderOutDetail(List<FabricOMOrder> fabricOMOrderList, String code,
 | 
	
		
			
				|  |  |  	                                                      FabricLoss editData){
 | 
	
		
			
				|  |  |  		// 设置用户修改内容的数据
 | 
	
	
		
			
				|  | @@ -701,13 +431,14 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return fabricOMOrderList;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * 设置委外订单入库详情
 | 
	
		
			
				|  |  |  	 * @param fabricOMOrderList - 委外订单列表
 | 
	
		
			
				|  |  |  	 * @param code - 计划号
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  |  	private List<FabricOMOrder> setFabricOMOrderInDetail(List<FabricOMOrder> fabricOMOrderList, String code){
 | 
	
		
			
				|  |  |  		List<FabricMoOrderRK> fabricMoOrderRKList = fabricLossMapper.getOmInDetailList(code);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -743,7 +474,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return fabricOMOrderList;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	}*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * 获取采购订单-其他入库的纱
 | 
	
	
		
			
				|  | @@ -751,6 +482,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  	 * @param lyysList - 来源余纱,去掉这部分物料
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  |  	private List<FabricPoOrder> getPoOrderQtrk(String code,List<FabricPoOrder> lyysList){
 | 
	
		
			
				|  |  |  		// 来源余纱所有物料批次
 | 
	
		
			
				|  |  |  		List<FabricPoOrderOut> lyysOutList = new ArrayList<>();
 | 
	
	
		
			
				|  | @@ -832,12 +564,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		return fabricPoOrderList;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * 获取采购订单-来源余纱
 | 
	
		
			
				|  |  |  	 * @param code
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  |  	private List<FabricPoOrder> getPoOrderLyys(String code){
 | 
	
		
			
				|  |  |  		List<FabricPoOrderOut> fabricPoOrderTempList1 = fabricLossMapper.getPurchaseListOtherPurInList(code);
 | 
	
		
			
				|  |  |  		List<FabricPoOrderOut> fabricPoOrderTempList = new ArrayList<>();
 | 
	
	
		
			
				|  | @@ -943,7 +676,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return fabricPoOrderList;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	}*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * 计算委外订单成本
 | 
	
	
		
			
				|  | @@ -953,6 +686,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  	 * @param rowInListWithAV - 形态转换前的材料入库信息
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  |  	private List<FabricMoOrderCK> getFabricMoOrderCKList(List<Map<String,Object>> rowInfoList,
 | 
	
		
			
				|  |  |  	                                             List<FabricMoOrderCK> rowOutList,
 | 
	
		
			
				|  |  |  	                                             List<Map<String,Object>> rowInList,
 | 
	
	
		
			
				|  | @@ -1194,220 +928,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return ret;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 根据采购入库详情,委外订单详情,获取转出成本。(入库数量-出库数量) * 单价
 | 
	
		
			
				|  |  | -	 * @param poOrderList - 采购入库详情
 | 
	
		
			
				|  |  | -	 * @param omOrderListGn - 委外订单国内
 | 
	
		
			
				|  |  | -	 * @param omOrderListGw - 委外订单国外
 | 
	
		
			
				|  |  | -	 * @return
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private List<FabricCostInvoice> getOutCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
 | 
	
		
			
				|  |  | -		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
 | 
	
		
			
				|  |  | -		List<FabricPoOrder> poOrderListReal = poOrderList.stream().filter(e->!e.getCPOID().equals("来源余料") &&
 | 
	
		
			
				|  |  | -				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -		// 合并所有采购入库+委外入库的物料批次。借用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().equalsIgnoreCase(itemIn.getCInvCode()) &&
 | 
	
		
			
				|  |  | -							e.getCColor().equalsIgnoreCase(itemIn.getCColor()) &&
 | 
	
		
			
				|  |  | -							e.getCBatch().equalsIgnoreCase(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());
 | 
	
		
			
				|  |  | -						formatItem.setCInvName(itemIn.getCInvName());
 | 
	
		
			
				|  |  | -						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());
 | 
	
		
			
				|  |  | -					formatItem.setCBusType("1");        // 国内
 | 
	
		
			
				|  |  | -					formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
 | 
	
		
			
				|  |  | -					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());
 | 
	
		
			
				|  |  | -					formatItem.setCBusType("2");        // 国外
 | 
	
		
			
				|  |  | -					formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
 | 
	
		
			
				|  |  | -					allInList.add(formatItem);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		List<String> invIdGnList = new ArrayList<>();// 国内入库物料编码
 | 
	
		
			
				|  |  | -		List<String> invIdGwList = new ArrayList<>();// 国外入库物料编码
 | 
	
		
			
				|  |  | -		for (FabricOMOrder omOrder : omOrderListGn){
 | 
	
		
			
				|  |  | -			List<FabricMoOrderRK> omRkList = omOrder.getFabricMoOrderRKList();
 | 
	
		
			
				|  |  | -			if (oConvertUtils.listIsNotEmpty(omRkList)) {
 | 
	
		
			
				|  |  | -				for (FabricMoOrderRK rkItem : omRkList) {
 | 
	
		
			
				|  |  | -					invIdGnList.add(omOrder.getCInvCode() + omOrder.getCColor() + rkItem.getCBatch());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		for (FabricOMOrder omOrder : omOrderListGw){
 | 
	
		
			
				|  |  | -			List<FabricMoOrderRK> omRkList = omOrder.getFabricMoOrderRKList();
 | 
	
		
			
				|  |  | -			if (oConvertUtils.listIsNotEmpty(omRkList)) {
 | 
	
		
			
				|  |  | -				for (FabricMoOrderRK rkItem : omRkList) {
 | 
	
		
			
				|  |  | -					invIdGwList.add(omOrder.getCInvCode() + omOrder.getCColor() + rkItem.getCBatch());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		List<FabricPoOrderOut> invOutGnList = new ArrayList<>();
 | 
	
		
			
				|  |  | -		if (invIdGnList.size()>0){
 | 
	
		
			
				|  |  | -			invOutGnList = fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		List<FabricPoOrderOut> invOutGwList = new ArrayList<>();
 | 
	
		
			
				|  |  | -		if (invIdGwList.size()>0){
 | 
	
		
			
				|  |  | -			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){
 | 
	
		
			
				|  |  | -			boolean bOmFind = false;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			double inLeft = itemIn.getIQuantity();
 | 
	
		
			
				|  |  | -			for (FabricMoOrderCK outItem : omOutListAll){
 | 
	
		
			
				|  |  | -				if (outItem.getCBatchOut().equalsIgnoreCase(itemIn.getCBatch()) &&
 | 
	
		
			
				|  |  | -					outItem.getCInvCodeOut().equalsIgnoreCase(itemIn.getCInvCode()) &&
 | 
	
		
			
				|  |  | -					outItem.getCColorOut().equalsIgnoreCase(itemIn.getCColor())){
 | 
	
		
			
				|  |  | -					double outLeft = outItem.getIQuantity();
 | 
	
		
			
				|  |  | -					bOmFind = true;
 | 
	
		
			
				|  |  | -					inLeft -= outLeft;
 | 
	
		
			
				|  |  | -					if (inLeft<0){
 | 
	
		
			
				|  |  | -						outLeft = inLeft*-1;
 | 
	
		
			
				|  |  | -					}else{
 | 
	
		
			
				|  |  | -						outLeft = 0;
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					outItem.setIQuantity(outLeft);
 | 
	
		
			
				|  |  | -					if (inLeft<=0){
 | 
	
		
			
				|  |  | -						break;
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			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().equalsIgnoreCase(itemIn.getCBatch()) &&
 | 
	
		
			
				|  |  | -								outItem.getCInvCode().equalsIgnoreCase(itemIn.getCInvCode()) &&
 | 
	
		
			
				|  |  | -								outItem.getCColor().equalsIgnoreCase(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);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		List<FabricCostInvoice> costInvoiceList = new ArrayList<>();
 | 
	
		
			
				|  |  | -		// 计算总转入成本
 | 
	
		
			
				|  |  | -		for (FabricPoOrderIn itemIn : allInList){
 | 
	
		
			
				|  |  | -			if (itemIn.getIQuantity()>0){
 | 
	
		
			
				|  |  | -				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setCVCName(itemIn.getCInvName());
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setCVenAbbName("");
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setCBusType("转出成本");
 | 
	
		
			
				|  |  | -				BigDecimal bdVal = new BigDecimal(itemIn.getIQuantity()*itemIn.getIPrice()*-1);
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -				if (fabricCostInvoice.getIMoney()!=0) {
 | 
	
		
			
				|  |  | -					costInvoiceList.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// 分组
 | 
	
		
			
				|  |  | -		List<FabricCostInvoice> costInvoiceListGroup = new ArrayList<>();
 | 
	
		
			
				|  |  | -		for (FabricCostInvoice fabricCostInvoice : costInvoiceList){
 | 
	
		
			
				|  |  | -			Optional<FabricCostInvoice> findOpt = costInvoiceListGroup.stream().filter(e->
 | 
	
		
			
				|  |  | -					e.getCVCName().equals(fabricCostInvoice.getCVCName()) &&
 | 
	
		
			
				|  |  | -							e.getCVenAbbName().equals(fabricCostInvoice.getCVenAbbName())).findFirst();
 | 
	
		
			
				|  |  | -			if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | -				FabricCostInvoice find = findOpt.get();
 | 
	
		
			
				|  |  | -				BigDecimal bdVal = new BigDecimal(find.getIMoney()+fabricCostInvoice.getIMoney());
 | 
	
		
			
				|  |  | -				find.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -			}else{
 | 
	
		
			
				|  |  | -				costInvoiceListGroup.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return costInvoiceListGroup;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  |  	// 根据文件id,获取文件内容
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	public byte[] getFileContent(String fileId){
 | 
	
	
		
			
				|  | @@ -1462,188 +984,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  | -	 * 委外出库材料,找出不在采购入库和委外入库中,计算转入成本
 | 
	
		
			
				|  |  | -	 * @param poOrderList - 采购入库详情
 | 
	
		
			
				|  |  | -	 * @param omOrderListGn - 委外订单国内
 | 
	
		
			
				|  |  | -	 * @param omOrderListGw - 委外订单国外
 | 
	
		
			
				|  |  | -	 * @return
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private List<FabricCostInvoice> getInCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
 | 
	
		
			
				|  |  | -		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
 | 
	
		
			
				|  |  | -		List<FabricPoOrder> poOrderListReal = poOrderList.stream().filter(e->!e.getCPOID().equals("来源余料") &&
 | 
	
		
			
				|  |  | -				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -		// 合并所有采购入库+委外入库的物料批次。借用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().equalsIgnoreCase(itemIn.getCInvCode()) &&
 | 
	
		
			
				|  |  | -									e.getCColor().equalsIgnoreCase(itemIn.getCColor()) &&
 | 
	
		
			
				|  |  | -									e.getCBatch().equalsIgnoreCase(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());
 | 
	
		
			
				|  |  | -				outCopy.setCVCName(omOrder.getCVCName());
 | 
	
		
			
				|  |  | -				outCopy.setCVenAbbName(omOrder.getCVenAbbName());
 | 
	
		
			
				|  |  | -				outCopy.setCPlanCode(omOut.getCPlanCode());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				omOutListAll.add(outCopy);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		for (FabricMoOrderCK itemOut : omOutListAll){
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			double outLeft = itemOut.getIQuantity();
 | 
	
		
			
				|  |  | -			for (FabricPoOrderIn itemIn : allInList){
 | 
	
		
			
				|  |  | -				if (itemOut.getCBatchOut().equalsIgnoreCase(itemIn.getCBatch()) &&
 | 
	
		
			
				|  |  | -						itemOut.getCInvCodeOut().equalsIgnoreCase(itemIn.getCInvCode()) &&
 | 
	
		
			
				|  |  | -						itemOut.getCColorOut().equalsIgnoreCase(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);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		List<FabricCostInvoice> costInvoiceList = new ArrayList<>();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// 计算总转入成本
 | 
	
		
			
				|  |  | -		for (FabricMoOrderCK itemOut : omOutListAll){
 | 
	
		
			
				|  |  | -			if (itemOut.getIQuantity()>0){
 | 
	
		
			
				|  |  | -				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setCVCName(itemOut.getCVCName());
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setCVenAbbName(itemOut.getCPlanCode()+" "+itemOut.getCVenAbbName());
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setCBusType("转入成本");
 | 
	
		
			
				|  |  | -				BigDecimal bdVal = new BigDecimal(itemOut.getIQuantity()*itemOut.getIPrice());
 | 
	
		
			
				|  |  | -				fabricCostInvoice.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -				if (fabricCostInvoice.getIMoney()!=0) {
 | 
	
		
			
				|  |  | -					costInvoiceList.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		// 分组
 | 
	
		
			
				|  |  | -		List<FabricCostInvoice> costInvoiceListGroup = new ArrayList<>();
 | 
	
		
			
				|  |  | -		for (FabricCostInvoice fabricCostInvoice : costInvoiceList){
 | 
	
		
			
				|  |  | -			Optional<FabricCostInvoice> findOpt = costInvoiceListGroup.stream().filter(e->
 | 
	
		
			
				|  |  | -					e.getCVCName().equals(fabricCostInvoice.getCVCName()) &&
 | 
	
		
			
				|  |  | -					e.getCVenAbbName().equals(fabricCostInvoice.getCVenAbbName())).findFirst();
 | 
	
		
			
				|  |  | -			if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | -				FabricCostInvoice find = findOpt.get();
 | 
	
		
			
				|  |  | -				BigDecimal bdVal = new BigDecimal(find.getIMoney()+fabricCostInvoice.getIMoney());
 | 
	
		
			
				|  |  | -				find.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | -			}else{
 | 
	
		
			
				|  |  | -				costInvoiceListGroup.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return costInvoiceListGroup;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 委外订单分组,根据供应商分类,供应商名称,供应商简称,供应商编码,物料编号,物料名称,颜色,计量单位,染厂色号,
 | 
	
		
			
				|  |  | -	 *  计算委外订单数量,材料出库数量,委外入库数量
 | 
	
		
			
				|  |  | -	 *  同时把委外订单子表id逗号分割,放到MODetailsID字段
 | 
	
		
			
				|  |  | -	 * @param omOrderList
 | 
	
		
			
				|  |  | -	 * @return
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private List<FabricOMOrder> groupOmOrderList(List<FabricOMOrder> omOrderList){
 | 
	
		
			
				|  |  | -		List<FabricOMOrder> ret = new ArrayList<>();
 | 
	
		
			
				|  |  | -		for (FabricOMOrder omOrder : omOrderList){
 | 
	
		
			
				|  |  | -			Optional<FabricOMOrder> findOpt = ret.stream().filter(e->e.getGroupId().equals(omOrder.getGroupId())).findFirst();
 | 
	
		
			
				|  |  | -			if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | -				FabricOMOrder find = findOpt.get();
 | 
	
		
			
				|  |  | -				find.setIQuantityOut(DoubleOperation.add(find.getIQuantityOut(), omOrder.getIQuantityOut()));
 | 
	
		
			
				|  |  | -				find.setIQuantity(DoubleOperation.add(find.getIQuantity(), omOrder.getIQuantity()));
 | 
	
		
			
				|  |  | -				find.setIQuantityIn(DoubleOperation.add(find.getIQuantityIn(), omOrder.getIQuantityIn()));
 | 
	
		
			
				|  |  | -				find.setMODetailsID(find.getMODetailsID()+","+omOrder.getMODetailsID());
 | 
	
		
			
				|  |  | -			}else{
 | 
	
		
			
				|  |  | -				ret.add(omOrder);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return ret;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 设置委外订单余料数据
 | 
	
		
			
				|  |  | -	 * @param fabricOMOrderList
 | 
	
		
			
				|  |  | -	 * @param code
 | 
	
		
			
				|  |  | +	 * 设置委外订单余料数据
 | 
	
		
			
				|  |  | +	 * @param fabricOMOrderList
 | 
	
		
			
				|  |  | +	 * @param code
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1651,9 +998,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  		// 获取本次委外入库的形态转换
 | 
	
		
			
				|  |  |  		List<Map<String,Object>> fabricAssemVouchList = fabricLossMapper.getMoAssemVouchList(code);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		// 采购入库被其他委外订单使用的信息
 | 
	
		
			
				|  |  | +		// 委外入库被其他委外订单使用的信息
 | 
	
		
			
				|  |  |  		List<FabricPoOrderOut> fabricPoOrderOutList = fabricLossMapper.getMoOrderInToOther(code);
 | 
	
		
			
				|  |  | -		// 采购入库仓库库存
 | 
	
		
			
				|  |  | +		// 委外入库仓库库存
 | 
	
		
			
				|  |  |  		List<FabricPoOrderOut> poOrderStockList = fabricLossMapper.getMoStockList(code);
 | 
	
		
			
				|  |  |  		// 采购订单设置分配数量、委外供应商、余纱、采购损耗
 | 
	
		
			
				|  |  |  		for (FabricOMOrder omOrder : fabricOMOrderList){
 | 
	
	
		
			
				|  | @@ -1754,4 +1101,1148 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 | 
	
		
			
				|  |  |  		return null;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置表头信息,不含总成本
 | 
	
		
			
				|  |  | +	 * @param ret
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setHeadInfo(FabricLoss ret){
 | 
	
		
			
				|  |  | +		List<String> lstContractNo = new ArrayList<>(); // 成衣合同号
 | 
	
		
			
				|  |  | +		List<String> lstCdefine22 = new ArrayList<>();  // 款号
 | 
	
		
			
				|  |  | +		List<String> lstCpersonName = new ArrayList<>(); // 业务员
 | 
	
		
			
				|  |  | +		String code = ret.getCCode();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<FabricLoss> fabricLossList = fabricLossMapper.getFabricLossData(code);
 | 
	
		
			
				|  |  | +		for (FabricLoss fabricLoss : fabricLossList){
 | 
	
		
			
				|  |  | +			if (oConvertUtils.isNotEmpty(fabricLoss.getContractNo()) &&
 | 
	
		
			
				|  |  | +					!lstContractNo.contains(fabricLoss.getContractNo())){
 | 
	
		
			
				|  |  | +				lstContractNo.add(fabricLoss.getContractNo());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (oConvertUtils.isNotEmpty(fabricLoss.getCDefine22()) &&
 | 
	
		
			
				|  |  | +					!lstCdefine22.contains(fabricLoss.getCDefine22())){
 | 
	
		
			
				|  |  | +				lstCdefine22.add(fabricLoss.getCDefine22());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (oConvertUtils.isNotEmpty(fabricLoss.getCPersonName()) &&
 | 
	
		
			
				|  |  | +					!lstCpersonName.contains(fabricLoss.getCPersonName())){
 | 
	
		
			
				|  |  | +				lstCpersonName.add(fabricLoss.getCPersonName());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (lstContractNo.size()>0){
 | 
	
		
			
				|  |  | +			ret.setContractNo(String.join(",",lstContractNo));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (lstCdefine22.size()>0){
 | 
	
		
			
				|  |  | +			ret.setCDefine22(String.join(",",lstCdefine22));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (lstCpersonName.size()>0){
 | 
	
		
			
				|  |  | +			ret.setCPersonName(String.join(",",lstCpersonName));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		//制单人
 | 
	
		
			
				|  |  | +		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 | 
	
		
			
				|  |  | +		ret.setMakingPeople(sysUser.getRealname());
 | 
	
		
			
				|  |  | +		//计划员
 | 
	
		
			
				|  |  | +		List<String> planner = fabricLossMapper.getPlanner(code);
 | 
	
		
			
				|  |  | +		if (oConvertUtils.listIsNotEmpty(planner)){
 | 
	
		
			
				|  |  | +			ret.setPlanner(String.join(",", planner));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 日期
 | 
	
		
			
				|  |  | +		ret.setDateTime(DateUtils.getDate());
 | 
	
		
			
				|  |  | +		// 排单数量
 | 
	
		
			
				|  |  | +		ret.setNumber(oConvertUtils.getDouble(fabricLossMapper.getNumber(code),0));
 | 
	
		
			
				|  |  | +		// 销售出库数量
 | 
	
		
			
				|  |  | +		Double dOutSum = oConvertUtils.getDouble(fabricLossMapper.getSaleOutSum(code),0);
 | 
	
		
			
				|  |  | +		if (dOutSum>ret.getNumber()) {
 | 
	
		
			
				|  |  | +			dOutSum = ret.getNumber();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		ret.setOutboundNumber(dOutSum);
 | 
	
		
			
				|  |  | +		// 销售订单附件
 | 
	
		
			
				|  |  | +		List<AccessorItem> accessorItemList = fabricLossMapper.getSoAccList(ret.getContractNo());
 | 
	
		
			
				|  |  | +		accessorItemList.forEach(e->e.setFileurl("/report/FabricLoss/getFile?fileId="+e.getCFileId()+"&filename="+e.getFilename()));
 | 
	
		
			
				|  |  | +		ret.setAccessorItemList(accessorItemList);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置采购入库订单,不含来源余纱和其他入库的纱。分配数量、余纱、采购损耗不设置,等委外出库使用再算
 | 
	
		
			
				|  |  | +	 * @param ret
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setPoOrderList(FabricLoss ret){
 | 
	
		
			
				|  |  | +		String code = ret.getCCode();
 | 
	
		
			
				|  |  | +		// 采购订单数据
 | 
	
		
			
				|  |  | +		List<FabricPoOrder> fabricPoOrderListTmp = fabricLossMapper.getPurchaseList(code);
 | 
	
		
			
				|  |  | +		//采购订购单数据把不同订单合并
 | 
	
		
			
				|  |  | +		List<FabricPoOrder> fabricPoOrderList= new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricPoOrder fabricPoOrder: fabricPoOrderListTmp){
 | 
	
		
			
				|  |  | +			String cInvName = fabricPoOrder.getCInvName();
 | 
	
		
			
				|  |  | +			Optional<FabricPoOrder> findItemOpt = fabricPoOrderList.stream().filter(e->e.getCInvName().equals(cInvName)).findFirst();
 | 
	
		
			
				|  |  | +			if (findItemOpt.isPresent()){
 | 
	
		
			
				|  |  | +				FabricPoOrder findItem = findItemOpt.get();
 | 
	
		
			
				|  |  | +				findItem.setIQuantityIn(DoubleOperation.add(findItem.getIQuantityIn(),fabricPoOrder.getIQuantityIn()));
 | 
	
		
			
				|  |  | +				findItem.setIQuantity(DoubleOperation.add(findItem.getIQuantity(),fabricPoOrder.getIQuantity()));
 | 
	
		
			
				|  |  | +				findItem.setCPOID(findItem.getCPOID()+","+fabricPoOrder.getCPOID());
 | 
	
		
			
				|  |  | +				if (findItem.getCVenAbbName().indexOf(fabricPoOrder.getCVenAbbName()) == -1){
 | 
	
		
			
				|  |  | +					findItem.setCVenAbbName(findItem.getCVenAbbName()+","+fabricPoOrder.getCVenAbbName());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if (findItem.getCVenName().indexOf(fabricPoOrder.getCVenName()) == -1){
 | 
	
		
			
				|  |  | +					findItem.setCVenName(findItem.getCVenName()+","+fabricPoOrder.getCVenName());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				fabricPoOrderList.add(fabricPoOrder);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 获取本次采购入库详情
 | 
	
		
			
				|  |  | +		List<FabricPoOrderIn> fabricPoOrderInList = fabricLossMapper.getPurchaseInList(code);
 | 
	
		
			
				|  |  | +		// 设置未开票数量和未结算数量,采购单价
 | 
	
		
			
				|  |  | +		for (FabricPoOrderIn fabricPoOrderIn: fabricPoOrderInList){
 | 
	
		
			
				|  |  | +			fabricPoOrderIn.setIQuantityNInvoice(DoubleOperation.sub(fabricPoOrderIn.getIQuantity(),fabricPoOrderIn.getIQuantityInvoice()));
 | 
	
		
			
				|  |  | +			fabricPoOrderIn.setIQuantityNSettle(DoubleOperation.sub(fabricPoOrderIn.getIQuantity(),fabricPoOrderIn.getIQuantitySettle()));
 | 
	
		
			
				|  |  | +			BigDecimal bNum = new BigDecimal(fabricPoOrderIn.getIPrice());
 | 
	
		
			
				|  |  | +			fabricPoOrderIn.setIPrice(bNum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 采购入库仓库库存
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> poOrderStockList = fabricLossMapper.getPurchaseStockList(code);
 | 
	
		
			
				|  |  | +		// 采购入库被其他委外订单使用的信息
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> fabricPoOrderOutList = fabricLossMapper.getPoOrderInToOther(code);
 | 
	
		
			
				|  |  | +		// 设置入库信息,及库存
 | 
	
		
			
				|  |  | +		for (FabricPoOrder fabricPoOrder : fabricPoOrderList){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 设置入库信息
 | 
	
		
			
				|  |  | +			List<FabricPoOrderIn> tmpFabricPoOrderInList = fabricPoOrderInList.stream().filter(e->
 | 
	
		
			
				|  |  | +							fabricPoOrder.getId().equalsIgnoreCase(e.getParentId())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			fabricPoOrder.setFabricPoOrderInList(tmpFabricPoOrderInList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 设置被其他委外订单使用信息
 | 
	
		
			
				|  |  | +			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");
 | 
	
		
			
				|  |  | +				if (index1 == -1) {
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				int index2 = cCode.indexOf("-", index1);
 | 
	
		
			
				|  |  | +				if (index2 == -1) {
 | 
	
		
			
				|  |  | +					index2 = cCode.length();
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				item.setCPlanCode(cCode.substring(index1,index2));
 | 
	
		
			
				|  |  | +				if (tmpFabricPoOrderInList.size()>0){
 | 
	
		
			
				|  |  | +					item.setIPrice(tmpFabricPoOrderInList.get(0).getIPrice());
 | 
	
		
			
				|  |  | +					item.setIMoney(item.getIPrice()*item.getIQuantity());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// 设置仓库库存
 | 
	
		
			
				|  |  | +			List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
 | 
	
		
			
				|  |  | +							fabricPoOrder.getId().equalsIgnoreCase(e.getParentId())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			fabricPoOrder.setFabricPoOrderOutList(findPoOrderStockList);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		ret.setFabricPoOrderList(fabricPoOrderList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | +		// 获取委外材料出库单,已核销的取核销数量
 | 
	
		
			
				|  |  | +		List<Map<String,Object>> fabricOmOutList = fabricLossMapper.getOmOutList(code);
 | 
	
		
			
				|  |  | +		// 获取本次采购入库的形态转换
 | 
	
		
			
				|  |  | +		List<Map<String,Object>> fabricAssemVouchList = fabricLossMapper.getAssemVouchList(code);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 采购入库被其他委外订单使用的信息
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> fabricPoOrderOutList = fabricLossMapper.getPoOrderInToOther(code);
 | 
	
		
			
				|  |  | +		// 采购入库仓库库存
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> poOrderStockList = fabricLossMapper.getPurchaseStockList(code);
 | 
	
		
			
				|  |  | +		// 采购订单设置分配数量、委外供应商、余纱、采购损耗
 | 
	
		
			
				|  |  | +		for (FabricPoOrder fabricPoOrder : fabricPoOrderList){
 | 
	
		
			
				|  |  | +			// 获取采购形态转换物料
 | 
	
		
			
				|  |  | +			List<Map<String, Object>> tmpAssemVouchList = fabricAssemVouchList.stream().filter(e->
 | 
	
		
			
				|  |  | +					oConvertUtils.getString(e.get("cInvCode")).equals(fabricPoOrder.getCInvCode()) &&
 | 
	
		
			
				|  |  | +							oConvertUtils.getString(e.get("cColor")).equals(fabricPoOrder.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			//&&
 | 
	
		
			
				|  |  | +			//								fabricPoOrder.getCBatch().indexOf(oConvertUtils.getString(e.get("cAVBatch")))>-1
 | 
	
		
			
				|  |  | +			// 未形态转换物料
 | 
	
		
			
				|  |  | +			List<Map<String, Object>> tmpOmOutList1 = fabricOmOutList.stream().filter(e->
 | 
	
		
			
				|  |  | +					oConvertUtils.getString(e.get("cInvCode")).equals(fabricPoOrder.getCInvCode()) &&
 | 
	
		
			
				|  |  | +							oConvertUtils.getString(e.get("cColor")).equals(fabricPoOrder.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			// &&
 | 
	
		
			
				|  |  | +			//								fabricPoOrder.getCBatch().indexOf(oConvertUtils.getString(e.get("cBatch")))>-1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 形态转换物料
 | 
	
		
			
				|  |  | +			List<Map<String, Object>> tmpOmOutList2 = fabricOmOutList.stream().filter(out->{
 | 
	
		
			
				|  |  | +				return tmpAssemVouchList.stream().filter(e ->
 | 
	
		
			
				|  |  | +						oConvertUtils.getString(e.get("cInvCode2")).equals(oConvertUtils.getString(out.get("cInvCode"))) &&
 | 
	
		
			
				|  |  | +								oConvertUtils.getString(e.get("cColor2")).equals(oConvertUtils.getString(out.get("cColor")))
 | 
	
		
			
				|  |  | +				).count() > 0;
 | 
	
		
			
				|  |  | +			}).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			// &&
 | 
	
		
			
				|  |  | +			//								oConvertUtils.getString(e.get("cAVBatch2")).equals(oConvertUtils.getString(out.get("cBatch")))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			tmpOmOutList1.addAll(tmpOmOutList2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			List<String> omcVenAbbNameList = new ArrayList<>();
 | 
	
		
			
				|  |  | +			double outSum = 0;
 | 
	
		
			
				|  |  | +			for (Map<String, Object> out : tmpOmOutList1){
 | 
	
		
			
				|  |  | +				outSum += oConvertUtils.getDouble(out.get("iQuantity").toString(),0);
 | 
	
		
			
				|  |  | +				String omcVenAbbName = oConvertUtils.getString(out.get("cVenAbbName").toString());
 | 
	
		
			
				|  |  | +				if (!omcVenAbbNameList.contains(omcVenAbbName)){
 | 
	
		
			
				|  |  | +					omcVenAbbNameList.add(omcVenAbbName);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (omcVenAbbNameList.size()>0){
 | 
	
		
			
				|  |  | +				fabricPoOrder.setOmcVenAbbName(String.join(",", omcVenAbbNameList));
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			BigDecimal bOutSum = new BigDecimal(outSum);
 | 
	
		
			
				|  |  | +			outSum = bOutSum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
 | 
	
		
			
				|  |  | +			fabricPoOrder.setIQuantityOut(outSum);
 | 
	
		
			
				|  |  | +			double leftSum = fabricPoOrder.getIQuantityIn()-fabricPoOrder.getIQuantityOut();
 | 
	
		
			
				|  |  | +			BigDecimal bLeftSum = new BigDecimal(leftSum);
 | 
	
		
			
				|  |  | +			leftSum = bLeftSum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
 | 
	
		
			
				|  |  | +			fabricPoOrder.setIQuantityLeft(leftSum);
 | 
	
		
			
				|  |  | +			double leftRate = 0;
 | 
	
		
			
				|  |  | +			if (fabricPoOrder.getIQuantityIn() != 0) {
 | 
	
		
			
				|  |  | +				leftRate = leftSum / fabricPoOrder.getIQuantityIn();
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			BigDecimal bLeftRate = new BigDecimal(leftRate);
 | 
	
		
			
				|  |  | +			leftRate = bLeftRate.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
 | 
	
		
			
				|  |  | +			fabricPoOrder.setIQuantityLeftRate(leftRate);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 设置入库信息
 | 
	
		
			
				|  |  | +			List<FabricPoOrderIn> tmpFabricPoOrderInList = fabricPoOrderInList.stream().filter(e->
 | 
	
		
			
				|  |  | +					e.getCInvCode().equals(fabricPoOrder.getCInvCode()) &&
 | 
	
		
			
				|  |  | +							oConvertUtils.getString(e.getCColor()).equals(oConvertUtils.getString(fabricPoOrder.getCColor()))).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			fabricPoOrder.setFabricPoOrderInList(tmpFabricPoOrderInList);
 | 
	
		
			
				|  |  | +			// 设置被其他委外订单使用信息
 | 
	
		
			
				|  |  | +			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");
 | 
	
		
			
				|  |  | +				if (index1 == -1) {
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				int index2 = cCode.indexOf("-", index1);
 | 
	
		
			
				|  |  | +				if (index2 == -1) {
 | 
	
		
			
				|  |  | +					index2 = cCode.length();
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				item.setCPlanCode(cCode.substring(index1,index2));
 | 
	
		
			
				|  |  | +				if (tmpFabricPoOrderInList.size()>0){
 | 
	
		
			
				|  |  | +					item.setIPrice(tmpFabricPoOrderInList.get(0).getIPrice());
 | 
	
		
			
				|  |  | +					item.setIMoney(item.getIPrice()*item.getIQuantity());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// 设置仓库库存
 | 
	
		
			
				|  |  | +			List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
 | 
	
		
			
				|  |  | +					fabricPoOrder.getCInvCode().equals(e.getCInvCode()) &&
 | 
	
		
			
				|  |  | +							oConvertUtils.getString(fabricPoOrder.getCColor()).equals(e.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			findFabricPoOrderOutList.addAll(findPoOrderStockList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			fabricPoOrder.setFabricPoOrderOutList(findFabricPoOrderOutList);
 | 
	
		
			
				|  |  | +		}*/
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	private final String[] CVCOrderKeyList = {"织","染","印"};
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置委外信息
 | 
	
		
			
				|  |  | +	 * @param ret
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setOmOrderList(FabricLoss ret, FabricLoss editData){
 | 
	
		
			
				|  |  | +		String code = ret.getCCode();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> fabricOMOrderListAll = fabricLossMapper.getOmOrderListAll(code);
 | 
	
		
			
				|  |  | +		if (fabricOMOrderListAll.size() == 0){
 | 
	
		
			
				|  |  | +			ret.setSuccess(false);
 | 
	
		
			
				|  |  | +			ret.setMessage("本计划没有面料委外,无面损表");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 委外订单分组,MODetailsID会包含多个号,逗号分割
 | 
	
		
			
				|  |  | +		fabricOMOrderListAll = groupOmOrderList(fabricOMOrderListAll);
 | 
	
		
			
				|  |  | +		// 织、染、印、其他排序
 | 
	
		
			
				|  |  | +		fabricOMOrderListAll.forEach(e->{
 | 
	
		
			
				|  |  | +			e.setOrder(-1);
 | 
	
		
			
				|  |  | +			for (int i=0; i<CVCOrderKeyList.length;i++){
 | 
	
		
			
				|  |  | +				if (e.getCVCName().indexOf(CVCOrderKeyList[i])==0){
 | 
	
		
			
				|  |  | +					e.setOrder(i);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (e.getOrder() == -1){
 | 
	
		
			
				|  |  | +				e.setOrder(CVCOrderKeyList.length);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> omOrderListOrderAllList = fabricOMOrderListAll.stream().sorted(Comparator.comparing(FabricOMOrder::getOrder)).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 设置详情及成本
 | 
	
		
			
				|  |  | +		/*
 | 
	
		
			
				|  |  | +		omOrderListOrderAllList = setFabricOMOrderOutDetail(omOrderListOrderAllList, code, editData);
 | 
	
		
			
				|  |  | +		omOrderListOrderAllList = setFabricOMOrderInDetail(omOrderListOrderAllList, code);*/
 | 
	
		
			
				|  |  | +		setOmOrderDetail(code, omOrderListOrderAllList, ret.getFabricPoOrderList(), editData);
 | 
	
		
			
				|  |  | +		// 设置余料去向
 | 
	
		
			
				|  |  | +		omOrderListOrderAllList = setFabricOMOrderLeftDetail(omOrderListOrderAllList, code);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 委外订单附件
 | 
	
		
			
				|  |  | +		List<AccessorItem> omAccList = fabricLossMapper.getOmAccList(code);
 | 
	
		
			
				|  |  | +		omAccList.forEach(e->e.setFileurl("/report/FabricLoss/getFile?fileId="+e.getCFileId()+"&filename="+e.getFilename()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 设置附件
 | 
	
		
			
				|  |  | +		omOrderListOrderAllList.forEach(e->{
 | 
	
		
			
				|  |  | +			List<AccessorItem> accessorItemList1 = omAccList.stream().filter(a->a.getCInvId().equals(e.getCInvCode()+e.getCColor())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			e.setAccessorItemList(accessorItemList1);
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +		// 多发/少发,根/米,损耗设置
 | 
	
		
			
				|  |  | +		for (FabricOMOrder fabricOMOrder : omOrderListOrderAllList){
 | 
	
		
			
				|  |  | +			double dLoss = 0;
 | 
	
		
			
				|  |  | +			if (fabricOMOrder.getIQuantityOut()!=0) {
 | 
	
		
			
				|  |  | +				dLoss = (1 - fabricOMOrder.getIQuantityIn() / fabricOMOrder.getIQuantityOut()) * 100;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if ("02".equals(fabricOMOrder.getCComUnitCode())){  // 根
 | 
	
		
			
				|  |  | +				fabricOMOrder.setIQuantityPCS(fabricOMOrder.getIQuantityIn());
 | 
	
		
			
				|  |  | +			}else if ("04".equals(fabricOMOrder.getCComUnitCode())){    // 米
 | 
	
		
			
				|  |  | +				fabricOMOrder.setIQuantityM(fabricOMOrder.getIQuantityIn());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			BigDecimal bDLoss = new BigDecimal(dLoss);
 | 
	
		
			
				|  |  | +			fabricOMOrder.setCQuantityLoss(bDLoss.setScale(2, BigDecimal.ROUND_HALF_UP).toString()+"%");
 | 
	
		
			
				|  |  | +			fabricOMOrder.setIQuantityMoreLess(DoubleOperation.sub(fabricOMOrder.getIQuantityIn(),fabricOMOrder.getIQuantity()));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 委外订单国外子表id
 | 
	
		
			
				|  |  | +		List<String> omDetailIdListGw = fabricLossMapper.getOmOrderListGw(code);
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> fabricOMOrderListGn = omOrderListOrderAllList.stream().filter(all->{
 | 
	
		
			
				|  |  | +			return omDetailIdListGw.stream().filter(detailId->all.getMODetailsID().indexOf(detailId)>-1).count()==0;
 | 
	
		
			
				|  |  | +		}).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> fabricOMOrderListGw = omOrderListOrderAllList.stream().filter(all->{
 | 
	
		
			
				|  |  | +			return omDetailIdListGw.stream().filter(detailId->all.getMODetailsID().indexOf(detailId)>-1).count()>0;
 | 
	
		
			
				|  |  | +		}).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		ret.setFabricOMOrderList1(fabricOMOrderListGn);
 | 
	
		
			
				|  |  | +		ret.setFabricOMOrderList2(fabricOMOrderListGw);
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 委外订单分组,根据供应商分类,供应商名称,供应商简称,供应商编码,物料编号,物料名称,颜色,计量单位,染厂色号,
 | 
	
		
			
				|  |  | +	 *  计算委外订单数量,材料出库数量,委外入库数量
 | 
	
		
			
				|  |  | +	 *  同时把委外订单子表id逗号分割,放到MODetailsID字段
 | 
	
		
			
				|  |  | +	 * @param omOrderList
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private List<FabricOMOrder> groupOmOrderList(List<FabricOMOrder> omOrderList){
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> ret = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricOMOrder omOrder : omOrderList){
 | 
	
		
			
				|  |  | +			Optional<FabricOMOrder> findOpt = ret.stream().filter(e->e.getGroupId().equals(omOrder.getGroupId())).findFirst();
 | 
	
		
			
				|  |  | +			if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | +				FabricOMOrder find = findOpt.get();
 | 
	
		
			
				|  |  | +				find.setIQuantityOut(DoubleOperation.add(find.getIQuantityOut(), omOrder.getIQuantityOut()));
 | 
	
		
			
				|  |  | +				find.setIQuantity(DoubleOperation.add(find.getIQuantity(), omOrder.getIQuantity()));
 | 
	
		
			
				|  |  | +				find.setIQuantityIn(DoubleOperation.add(find.getIQuantityIn(), omOrder.getIQuantityIn()));
 | 
	
		
			
				|  |  | +				find.setMODetailsID(find.getMODetailsID()+","+omOrder.getMODetailsID());
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				ret.add(omOrder);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置成本发票
 | 
	
		
			
				|  |  | +	 * @param ret
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setCostInvoiceList(FabricLoss ret, FabricLoss editData){
 | 
	
		
			
				|  |  | +		String code = ret.getCCode();
 | 
	
		
			
				|  |  | +		// 委外订单所有
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> omOrderList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		omOrderList.addAll(ret.getFabricOMOrderList1());
 | 
	
		
			
				|  |  | +		omOrderList.addAll(ret.getFabricOMOrderList2());
 | 
	
		
			
				|  |  | +		// 获取要计算成本的采购入库
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> fabricCostInvoiceList1 = fabricLossMapper.getPurchuseInPriceList(code);
 | 
	
		
			
				|  |  | +		// 根据类型、工厂、采购类型分组。根据委外出库,获取出库成本。
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> fabricCostInvoiceList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricCostInvoice fabricCostInvoice : fabricCostInvoiceList1){
 | 
	
		
			
				|  |  | +			Optional<FabricCostInvoice> findItem = fabricCostInvoiceList.stream().filter(e->
 | 
	
		
			
				|  |  | +					e.getId().equals(fabricCostInvoice.getId())).findFirst();
 | 
	
		
			
				|  |  | +			FabricCostInvoice newItem = new FabricCostInvoice();
 | 
	
		
			
				|  |  | +			if (findItem.isPresent()) {
 | 
	
		
			
				|  |  | +				newItem = findItem.get();
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				newItem.setCBusType(fabricCostInvoice.getCBusType());
 | 
	
		
			
				|  |  | +				newItem.setIMoney(new Double(0));
 | 
	
		
			
				|  |  | +				newItem.setCVCName(fabricCostInvoice.getCVCName());
 | 
	
		
			
				|  |  | +				newItem.setCVenName(fabricCostInvoice.getCVenName());
 | 
	
		
			
				|  |  | +				newItem.setCVenAbbName(fabricCostInvoice.getCVenAbbName());
 | 
	
		
			
				|  |  | +				fabricCostInvoiceList.add(newItem);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			Double money = newItem.getIMoney();
 | 
	
		
			
				|  |  | +			for (FabricOMOrder omOrder : omOrderList){
 | 
	
		
			
				|  |  | +				List<FabricMoOrderCK> ckList = omOrder.getFabricMoOrderCKList();
 | 
	
		
			
				|  |  | +				if (ckList != null) {
 | 
	
		
			
				|  |  | +					List<FabricMoOrderCK> findList1 = ckList.stream().filter(e->
 | 
	
		
			
				|  |  | +							e.getInvOutId().equalsIgnoreCase(fabricCostInvoice.getInvId())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +					for (FabricMoOrderCK ckItem : findList1) {
 | 
	
		
			
				|  |  | +						money+=ckItem.getIMoney();
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			BigDecimal bdValue = new BigDecimal(money);
 | 
	
		
			
				|  |  | +			newItem.setIMoney(bdValue.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//获取委外订单发票金额
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> fabricCostInvoiceList2 = fabricLossMapper.getOmInvoiceMoneyList(code);
 | 
	
		
			
				|  |  | +		fabricCostInvoiceList.addAll(fabricCostInvoiceList2);
 | 
	
		
			
				|  |  | +		//获取委外订单运费发票金额
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> fabricCostInvoiceList3 = fabricLossMapper.getOmInvoiceMoneyYfList(code);
 | 
	
		
			
				|  |  | +		fabricCostInvoiceList.addAll(fabricCostInvoiceList3);
 | 
	
		
			
				|  |  | +		// 织、染、印排序
 | 
	
		
			
				|  |  | +		fabricCostInvoiceList.forEach(e->{
 | 
	
		
			
				|  |  | +			e.setOrder(-1);
 | 
	
		
			
				|  |  | +			for (int i=0; i<CVCOrderKeyList.length;i++){
 | 
	
		
			
				|  |  | +				if (e.getCVCName().indexOf(CVCOrderKeyList[i])==0){
 | 
	
		
			
				|  |  | +					e.setOrder(i);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (e.getOrder() == -1){
 | 
	
		
			
				|  |  | +				e.setOrder(CVCOrderKeyList.length);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +		fabricCostInvoiceList = fabricCostInvoiceList.stream().sorted(Comparator.comparing(FabricCostInvoice::getOrder)).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 转入成本
 | 
	
		
			
				|  |  | +		fabricCostInvoiceList.addAll(getInCost(ret.getFabricPoOrderList(), omOrderList));
 | 
	
		
			
				|  |  | +		// 转出成本
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> outCostList = getOutCost(ret.getFabricPoOrderList(), ret.getFabricOMOrderList1(), ret.getFabricOMOrderList2());
 | 
	
		
			
				|  |  | +		// 设置修改的工厂
 | 
	
		
			
				|  |  | +		if (editData != null){
 | 
	
		
			
				|  |  | +			List<FabricCostInvoice> editCostList = editData.getFabricCostInvoiceList();
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(editCostList)){
 | 
	
		
			
				|  |  | +				for (FabricCostInvoice item : outCostList){
 | 
	
		
			
				|  |  | +					Optional<FabricCostInvoice> findOpt = editCostList.stream().filter(e->e.getCVCName().equalsIgnoreCase(item.getCVCName()) &&
 | 
	
		
			
				|  |  | +							"转出成本".equalsIgnoreCase(e.getCBusType())).findFirst();
 | 
	
		
			
				|  |  | +					if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | +						item.setCVenAbbName(findOpt.get().getCVenAbbName());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		fabricCostInvoiceList.addAll(outCostList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		ret.setFabricCostInvoiceList(fabricCostInvoiceList);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 委外出库材料,找出不在采购入库和委外入库中,计算转入成本
 | 
	
		
			
				|  |  | +	 * @param poOrderList - 采购入库详情
 | 
	
		
			
				|  |  | +	 * @param omOrderList - 委外订单
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private List<FabricCostInvoice> getInCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderList){
 | 
	
		
			
				|  |  | +		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
 | 
	
		
			
				|  |  | +		List<FabricPoOrder> poOrderListReal = poOrderList.stream().filter(e->!e.getCPOID().equals("来源余料") &&
 | 
	
		
			
				|  |  | +				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		// 合并所有采购入库物料批次。借用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.getInvId().equalsIgnoreCase(itemIn.getInvId())).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);
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 合并所有委外入库物料批次。借用FabricPoOrderIn类
 | 
	
		
			
				|  |  | +		for (FabricOMOrder item : omOrderList){
 | 
	
		
			
				|  |  | +			List<FabricMoOrderRK> inList = item.getFabricMoOrderRKList();
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(inList)){
 | 
	
		
			
				|  |  | +				for (FabricMoOrderRK itemIn : inList){
 | 
	
		
			
				|  |  | +					Optional<FabricPoOrderIn> findItemOpt = allInList.stream().filter(e->
 | 
	
		
			
				|  |  | +							e.getInvId().equalsIgnoreCase(itemIn.getInvId())).findFirst();
 | 
	
		
			
				|  |  | +					if (findItemOpt.isPresent()){
 | 
	
		
			
				|  |  | +						FabricPoOrderIn formatItem = findItemOpt.get();
 | 
	
		
			
				|  |  | +						Double dMoney = formatItem.getIPrice()*formatItem.getIQuantity()+itemIn.getIPrice()*itemIn.getIQuantityIn();
 | 
	
		
			
				|  |  | +						Double dQuantity = formatItem.getIQuantity()+itemIn.getIQuantityIn();
 | 
	
		
			
				|  |  | +						formatItem.setIPrice(dMoney/dQuantity);
 | 
	
		
			
				|  |  | +						formatItem.setIQuantity(dQuantity);
 | 
	
		
			
				|  |  | +					}else {
 | 
	
		
			
				|  |  | +						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<FabricMoOrderCK> omOutListAll = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricOMOrder omOrder : omOrderList){
 | 
	
		
			
				|  |  | +			List<FabricMoOrderCK> outList = omOrder.getFabricMoOrderCKList();
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(outList)) {
 | 
	
		
			
				|  |  | +				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());
 | 
	
		
			
				|  |  | +					outCopy.setCVCName(omOrder.getCVCName());
 | 
	
		
			
				|  |  | +					outCopy.setCVenAbbName(omOrder.getCVenAbbName());
 | 
	
		
			
				|  |  | +					outCopy.setCPlanCode(omOut.getCPlanCode());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					omOutListAll.add(outCopy);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 出-入
 | 
	
		
			
				|  |  | +		for (FabricMoOrderCK itemOut : omOutListAll){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			double outLeft = itemOut.getIQuantity();
 | 
	
		
			
				|  |  | +			for (FabricPoOrderIn itemIn : allInList){
 | 
	
		
			
				|  |  | +				if (itemOut.getInvOutId().equalsIgnoreCase(itemIn.getInvId())){
 | 
	
		
			
				|  |  | +					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);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> costInvoiceList = new ArrayList<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 计算总转入成本
 | 
	
		
			
				|  |  | +		for (FabricMoOrderCK itemOut : omOutListAll){
 | 
	
		
			
				|  |  | +			if (itemOut.getIQuantity()>0){
 | 
	
		
			
				|  |  | +				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setCVCName(itemOut.getCVCName());
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setCVenAbbName(itemOut.getCPlanCode()+" "+itemOut.getCVenAbbName());
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setCBusType("转入成本");
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setIMoney(DoubleOperation.mul(itemOut.getIQuantity(),itemOut.getIPrice(), 2));
 | 
	
		
			
				|  |  | +				if (fabricCostInvoice.getIMoney()!=0) {
 | 
	
		
			
				|  |  | +					costInvoiceList.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 分组
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> costInvoiceListGroup = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricCostInvoice fabricCostInvoice : costInvoiceList){
 | 
	
		
			
				|  |  | +			Optional<FabricCostInvoice> findOpt = costInvoiceListGroup.stream().filter(e->
 | 
	
		
			
				|  |  | +					e.getId().equalsIgnoreCase(fabricCostInvoice.getId())).findFirst();
 | 
	
		
			
				|  |  | +			if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | +				FabricCostInvoice find = findOpt.get();
 | 
	
		
			
				|  |  | +				BigDecimal bdVal = new BigDecimal(find.getIMoney()+fabricCostInvoice.getIMoney());
 | 
	
		
			
				|  |  | +				find.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				costInvoiceListGroup.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return costInvoiceListGroup;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 根据采购入库详情,委外订单详情,获取转出成本。(入库数量-出库数量) * 单价
 | 
	
		
			
				|  |  | +	 * @param poOrderList - 采购入库详情
 | 
	
		
			
				|  |  | +	 * @param omOrderListGn - 委外订单国内
 | 
	
		
			
				|  |  | +	 * @param omOrderListGw - 委外订单国外
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private List<FabricCostInvoice> getOutCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
 | 
	
		
			
				|  |  | +		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
 | 
	
		
			
				|  |  | +		List<FabricPoOrder> poOrderListReal = poOrderList.stream().filter(e->!e.getCPOID().equals("来源余料") &&
 | 
	
		
			
				|  |  | +				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		// 合并所有采购入库+委外入库的物料批次。借用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.getInvId().equalsIgnoreCase(itemIn.getInvId())).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());
 | 
	
		
			
				|  |  | +						formatItem.setCInvName(itemIn.getCInvName());
 | 
	
		
			
				|  |  | +						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());
 | 
	
		
			
				|  |  | +					formatItem.setCBusType("1");        // 国内
 | 
	
		
			
				|  |  | +					formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
 | 
	
		
			
				|  |  | +					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());
 | 
	
		
			
				|  |  | +					formatItem.setCBusType("2");        // 国外
 | 
	
		
			
				|  |  | +					formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
 | 
	
		
			
				|  |  | +					allInList.add(formatItem);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<String> invIdGnList = new ArrayList<>();// 国内入库物料编码
 | 
	
		
			
				|  |  | +		List<String> invIdGwList = new ArrayList<>();// 国外入库物料编码
 | 
	
		
			
				|  |  | +		for (FabricOMOrder omOrder : omOrderListGn){
 | 
	
		
			
				|  |  | +			List<FabricMoOrderRK> omRkList = omOrder.getFabricMoOrderRKList();
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(omRkList)) {
 | 
	
		
			
				|  |  | +				for (FabricMoOrderRK rkItem : omRkList) {
 | 
	
		
			
				|  |  | +					invIdGnList.add(omOrder.getCInvCode() + omOrder.getCColor() + rkItem.getCBatch());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		for (FabricOMOrder omOrder : omOrderListGw){
 | 
	
		
			
				|  |  | +			List<FabricMoOrderRK> omRkList = omOrder.getFabricMoOrderRKList();
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(omRkList)) {
 | 
	
		
			
				|  |  | +				for (FabricMoOrderRK rkItem : omRkList) {
 | 
	
		
			
				|  |  | +					invIdGwList.add(omOrder.getCInvCode() + omOrder.getCColor() + rkItem.getCBatch());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> invOutGnList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		if (invIdGnList.size()>0){
 | 
	
		
			
				|  |  | +			invOutGnList = fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> invOutGwList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		if (invIdGwList.size()>0){
 | 
	
		
			
				|  |  | +			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();
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(outList)) {
 | 
	
		
			
				|  |  | +				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){
 | 
	
		
			
				|  |  | +			boolean bOmFind = false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			double inLeft = itemIn.getIQuantity();
 | 
	
		
			
				|  |  | +			for (FabricMoOrderCK outItem : omOutListAll){
 | 
	
		
			
				|  |  | +				if (outItem.getInvOutId().equalsIgnoreCase(itemIn.getInvId())){
 | 
	
		
			
				|  |  | +					double outLeft = outItem.getIQuantity();
 | 
	
		
			
				|  |  | +					bOmFind = true;
 | 
	
		
			
				|  |  | +					inLeft -= outLeft;
 | 
	
		
			
				|  |  | +					if (inLeft<0){
 | 
	
		
			
				|  |  | +						outLeft = inLeft*-1;
 | 
	
		
			
				|  |  | +					}else{
 | 
	
		
			
				|  |  | +						outLeft = 0;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					outItem.setIQuantity(outLeft);
 | 
	
		
			
				|  |  | +					if (inLeft<=0){
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			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.getInvId().equalsIgnoreCase(itemIn.getInvId())){
 | 
	
		
			
				|  |  | +							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);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> costInvoiceList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		// 计算总转入成本
 | 
	
		
			
				|  |  | +		for (FabricPoOrderIn itemIn : allInList){
 | 
	
		
			
				|  |  | +			if (itemIn.getIQuantity()>0){
 | 
	
		
			
				|  |  | +				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setCVCName(itemIn.getCInvName());
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setCVenAbbName("");
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setCBusType("转出成本");
 | 
	
		
			
				|  |  | +				BigDecimal bdVal = new BigDecimal(itemIn.getIQuantity()*itemIn.getIPrice()*-1);
 | 
	
		
			
				|  |  | +				fabricCostInvoice.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +				if (fabricCostInvoice.getIMoney()!=0) {
 | 
	
		
			
				|  |  | +					costInvoiceList.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 分组
 | 
	
		
			
				|  |  | +		List<FabricCostInvoice> costInvoiceListGroup = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricCostInvoice fabricCostInvoice : costInvoiceList){
 | 
	
		
			
				|  |  | +			Optional<FabricCostInvoice> findOpt = costInvoiceListGroup.stream().filter(e->
 | 
	
		
			
				|  |  | +					e.getId().equalsIgnoreCase(fabricCostInvoice.getId())).findFirst();
 | 
	
		
			
				|  |  | +			if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | +				FabricCostInvoice find = findOpt.get();
 | 
	
		
			
				|  |  | +				BigDecimal bdVal = new BigDecimal(find.getIMoney()+fabricCostInvoice.getIMoney());
 | 
	
		
			
				|  |  | +				find.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				costInvoiceListGroup.add(fabricCostInvoice);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return costInvoiceListGroup;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置委外订单详情,包含成本
 | 
	
		
			
				|  |  | +	 * @param code - 计划号
 | 
	
		
			
				|  |  | +	 * @param omOrderList - 待计算的委外订单
 | 
	
		
			
				|  |  | +	 * @param poOrderList - 采购订单-取采购入库数据
 | 
	
		
			
				|  |  | +	 * @param editData - 用户修改的数据
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setOmOrderDetail(String code,
 | 
	
		
			
				|  |  | +	                                             List<FabricOMOrder> omOrderList,
 | 
	
		
			
				|  |  | +			                                     List<FabricPoOrder> poOrderList,
 | 
	
		
			
				|  |  | +	                                             FabricLoss editData){
 | 
	
		
			
				|  |  | +		// 设置用户修改内容的数据
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> editOmList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		if (editData != null){
 | 
	
		
			
				|  |  | +			if (editData.getFabricOMOrderList1() != null){
 | 
	
		
			
				|  |  | +				editOmList.addAll(editData.getFabricOMOrderList1());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (editData.getFabricOMOrderList2() != null){
 | 
	
		
			
				|  |  | +				editOmList.addAll(editData.getFabricOMOrderList2());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 获取采购入库单
 | 
	
		
			
				|  |  | +		List<FabricPoOrderIn> poOrderInList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricPoOrder order : poOrderList){
 | 
	
		
			
				|  |  | +			poOrderInList.addAll(order.getFabricPoOrderInList());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		poOrderInList.forEach(e->e.setITempUseSum(0.0));
 | 
	
		
			
				|  |  | +		// 获取材料出库
 | 
	
		
			
				|  |  | +		// 获取委外订单行id,出库物料信息,出库数量
 | 
	
		
			
				|  |  | +		List<FabricMoOrderCK> rowOutList = fabricLossMapper.getOmRowOutList(code);
 | 
	
		
			
				|  |  | +		rowOutList.forEach(e->e.setBCurPlan(false));
 | 
	
		
			
				|  |  | +		// 委外入库
 | 
	
		
			
				|  |  | +		List<FabricMoOrderRK> rowInList = fabricLossMapper.getOmInDetailList(code);
 | 
	
		
			
				|  |  | +		rowInList.forEach(e->e.setITempUseSum(0.0));
 | 
	
		
			
				|  |  | +		// 设置是否本计划入库标识
 | 
	
		
			
				|  |  | +		List<String> otherInInvId = new ArrayList<>();  // 其他入库的物料
 | 
	
		
			
				|  |  | +		for (FabricMoOrderCK outItem : rowOutList){
 | 
	
		
			
				|  |  | +			if (poOrderInList.stream().filter(e->e.getInvId().equalsIgnoreCase(outItem.getInvOutId())).count()>0 ||
 | 
	
		
			
				|  |  | +			rowInList.stream().filter(e->e.getInvId().equalsIgnoreCase(outItem.getInvOutId())).count()>0){
 | 
	
		
			
				|  |  | +				outItem.setBCurPlan(true);
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				otherInInvId.add(outItem.getInvOutId());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 查询物料入库信息
 | 
	
		
			
				|  |  | +		List<FabricCommonIn> otherInList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		if (otherInInvId.size()>0) {
 | 
	
		
			
				|  |  | +			otherInList = fabricLossMapper.getInListByInvId(otherInInvId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			otherInList.forEach(e -> e.setITempUseSum(0.0));
 | 
	
		
			
				|  |  | +			// 设置其他委外订单入库的材料成本,只计算一层
 | 
	
		
			
				|  |  | +			setOtherOmInPriceList(code, otherInList);
 | 
	
		
			
				|  |  | +			// 设置形态转换入库成本
 | 
	
		
			
				|  |  | +			setAssemVouchInPriceList(otherInList);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 设置非本次委外加工出入库成本
 | 
	
		
			
				|  |  | +		List<FabricMoOrderCK> findOutList = rowOutList.stream().filter(e->e.getIQuantityOut()>0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		List<FabricMoOrderCK> calCkList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricMoOrderCK outItem : findOutList){
 | 
	
		
			
				|  |  | +			// 先设置本次采购入库的
 | 
	
		
			
				|  |  | +			List<FabricPoOrderIn> findPoInList = poOrderInList.stream().filter(e->e.getInvId().equalsIgnoreCase(outItem.getInvOutId())&&DoubleOperation.sub(e.getIQuantity(),e.getITempUseSum())>0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			for (FabricPoOrderIn inItem : findPoInList){
 | 
	
		
			
				|  |  | +				FabricMoOrderCK calItem = outItem.getByPoIn(editOmList, inItem);
 | 
	
		
			
				|  |  | +				calCkList.add(calItem);
 | 
	
		
			
				|  |  | +				if (outItem.getIQuantityOut()<=0){
 | 
	
		
			
				|  |  | +					break;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (outItem.getIQuantityOut()<=0){
 | 
	
		
			
				|  |  | +				continue;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// 设置非本次委外和其他入库的
 | 
	
		
			
				|  |  | +			List<FabricCommonIn> findOtherInList = otherInList.stream().filter(e->e.getInvId().equalsIgnoreCase(outItem.getInvOutId())&&DoubleOperation.sub(e.getIQuantity(),e.getITempUseSum())>0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			for (FabricCommonIn inItem : findOtherInList){
 | 
	
		
			
				|  |  | +				FabricMoOrderCK calItem = outItem.getByCommonIn(editOmList, inItem);
 | 
	
		
			
				|  |  | +				calCkList.add(calItem);
 | 
	
		
			
				|  |  | +				if (outItem.getIQuantityOut()<=0){
 | 
	
		
			
				|  |  | +					break;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 设置本次委外入库的
 | 
	
		
			
				|  |  | +		boolean bFind = false;
 | 
	
		
			
				|  |  | +		do {
 | 
	
		
			
				|  |  | +			bFind = false;
 | 
	
		
			
				|  |  | +			for (FabricOMOrder omOrder : omOrderList){
 | 
	
		
			
				|  |  | +				if (omOrder.getFabricMoOrderCKList() == null){
 | 
	
		
			
				|  |  | +					omOrder.setFabricMoOrderCKList(new ArrayList<>());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				// 已经设置过的忽略
 | 
	
		
			
				|  |  | +				if (oConvertUtils.listIsNotEmpty(omOrder.getFabricMoOrderCKList())){
 | 
	
		
			
				|  |  | +					break;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				// 不存在未算成本的出库单
 | 
	
		
			
				|  |  | +				if (rowOutList.stream().filter(e->e.getIQuantityOut()>0&&omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString())>-1).count() == 0) {
 | 
	
		
			
				|  |  | +					bFind = true;
 | 
	
		
			
				|  |  | +					// 设置订单出库明细
 | 
	
		
			
				|  |  | +					List<FabricMoOrderCK> findCkList = calCkList.stream().filter(e -> omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString()) > -1).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +					omOrder.setFabricMoOrderCKList(findCkList);
 | 
	
		
			
				|  |  | +					// 设置入库明细及入库成本
 | 
	
		
			
				|  |  | +					List<FabricMoOrderRK> findRkList = rowInList.stream().filter(e -> omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString()) > -1).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +					omOrder.setFabricMoOrderRKList(findRkList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					Double iMoneyCk = 0.0;
 | 
	
		
			
				|  |  | +					for (FabricMoOrderCK item : findCkList) {
 | 
	
		
			
				|  |  | +						iMoneyCk += item.getIMoney();
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					for (FabricMoOrderRK fabricMoOrderRK : findRkList) {
 | 
	
		
			
				|  |  | +						fabricMoOrderRK.setISumBillQuantityN(DoubleOperation.sub(fabricMoOrderRK.getIQuantityIn(), fabricMoOrderRK.getISumBillQuantity()));
 | 
	
		
			
				|  |  | +						fabricMoOrderRK.setISQuantityN(DoubleOperation.sub(fabricMoOrderRK.getIQuantityIn(), fabricMoOrderRK.getISQuantity()).doubleValue());
 | 
	
		
			
				|  |  | +						if (omOrder.getIQuantityIn() != 0) {
 | 
	
		
			
				|  |  | +							Double curIMoneyCk = iMoneyCk * fabricMoOrderRK.getIQuantityIn() / omOrder.getIQuantityIn();
 | 
	
		
			
				|  |  | +							fabricMoOrderRK.setIPrice(DoubleOperation.div(DoubleOperation.add(fabricMoOrderRK.getIProcessFee(), curIMoneyCk), fabricMoOrderRK.getIQuantityIn(), 4));
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					// 根据入库成本设置出库成本
 | 
	
		
			
				|  |  | +					List<FabricMoOrderCK> findNcalCkList = rowOutList.stream().filter(e->e.getIQuantityOut()>0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +					for (FabricMoOrderCK ncalCkItem : findNcalCkList){
 | 
	
		
			
				|  |  | +						List<FabricMoOrderRK> findTmpRkList = findRkList.stream().filter(e->e.getInvId().equalsIgnoreCase(ncalCkItem.getInvOutId())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +						if (findTmpRkList.size() == 0){
 | 
	
		
			
				|  |  | +							continue;
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						for (FabricMoOrderRK tmpRkItem : findTmpRkList){
 | 
	
		
			
				|  |  | +							FabricMoOrderCK calItem = ncalCkItem.getByMoIn(editOmList, tmpRkItem);
 | 
	
		
			
				|  |  | +							calCkList.add(calItem);
 | 
	
		
			
				|  |  | +							if (ncalCkItem.getIQuantityOut()<=0){
 | 
	
		
			
				|  |  | +								break;
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}while(bFind);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置其他物料委外入库的数量和单价
 | 
	
		
			
				|  |  | +	 * @param code - 计划号
 | 
	
		
			
				|  |  | +	 * @param commonInList - 入库信息
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setOtherOmInPriceList(String code,List<FabricCommonIn> commonInList){
 | 
	
		
			
				|  |  | +		// 获取其他计划委外入库信息
 | 
	
		
			
				|  |  | +		commonInList = commonInList.stream().filter(e->
 | 
	
		
			
				|  |  | +				"委外加工".equals(e.getCBusType()) &&
 | 
	
		
			
				|  |  | +						e.getCPlanCode().indexOf(code) !=0 &&
 | 
	
		
			
				|  |  | +						e.getCPlanCode().length()>0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		if (commonInList.size()>0){
 | 
	
		
			
				|  |  | +			List<Integer> moDetailIdList = new ArrayList<>();
 | 
	
		
			
				|  |  | +			for (FabricCommonIn item : commonInList){
 | 
	
		
			
				|  |  | +				moDetailIdList.add(item.getMODetailsID());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// 出入库详情
 | 
	
		
			
				|  |  | +			List<Map<String,Object>> inOutDetailList = fabricLossMapper.getOmInOutInfoListByDetailId(moDetailIdList);
 | 
	
		
			
				|  |  | +			// 获取委外订单出库物料详情
 | 
	
		
			
				|  |  | +			List<FabricMoOrderCK> outList = fabricLossMapper.getOmRowOutListByDetailId(moDetailIdList);
 | 
	
		
			
				|  |  | +			// 获取委外订单出入物料入库详情
 | 
	
		
			
				|  |  | +			List<String> invIdList = new ArrayList<>();
 | 
	
		
			
				|  |  | +			outList.forEach(e->invIdList.add(e.getInvOutId()));
 | 
	
		
			
				|  |  | +			List<FabricCommonIn> inList = fabricLossMapper.getInListByInvId(invIdList);
 | 
	
		
			
				|  |  | +			// 设置形态转换的源头单价
 | 
	
		
			
				|  |  | +			setAssemVouchInPriceList(inList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 每行设置金额
 | 
	
		
			
				|  |  | +			for (FabricCommonIn item : commonInList){
 | 
	
		
			
				|  |  | +				Integer detailId = item.getMODetailsID();
 | 
	
		
			
				|  |  | +				List<Map<String,Object>> findInOutList = inOutDetailList.stream().filter(e->e.get("MODetailsID").toString().equals(detailId)).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +				if (findInOutList.size() == 0){
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				Double iProcessFee = oConvertUtils.getDouble(findInOutList.get(0).get("iProcessFee").toString(),0);// 加工费
 | 
	
		
			
				|  |  | +				Double iQuantityIn = oConvertUtils.getDouble(findInOutList.get(0).get("iQuantityIn").toString(),0);// 入库数量
 | 
	
		
			
				|  |  | +				Double iOutTotalMoney = 0.0;//出库材料费用总额
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				for (FabricMoOrderCK ckItem : outList){
 | 
	
		
			
				|  |  | +					if (ckItem.getMODetailsID().equals(item.getMODetailsID())){
 | 
	
		
			
				|  |  | +						for (FabricCommonIn inItem : inList){
 | 
	
		
			
				|  |  | +							if (inItem.getInvId().equalsIgnoreCase(ckItem.getInvOutId())){
 | 
	
		
			
				|  |  | +								iOutTotalMoney = DoubleOperation.add(iOutTotalMoney, DoubleOperation.mul(inItem.getIPrice(),ckItem.getIQuantityOut(),2));
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				// 入库单价
 | 
	
		
			
				|  |  | +				Double iPrice = DoubleOperation.div(DoubleOperation.add(iProcessFee,iOutTotalMoney),iQuantityIn,4);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				item.setIPrice(iPrice);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 设置物料形态转换入库的数量和单价
 | 
	
		
			
				|  |  | +	 * findOtherInList - 其他入库数量及单价
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setAssemVouchInPriceList(List<FabricCommonIn> commonInList){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 如果形态转换物料,转换前入库是转换入库,获取源头入库单
 | 
	
		
			
				|  |  | +		List<FabricAssemVouchsOrgIn> assemVouchsInvIdList = new ArrayList<>();// 形态转换物料id
 | 
	
		
			
				|  |  | +		for (FabricCommonIn commonIn : commonInList){
 | 
	
		
			
				|  |  | +			if ("转换入库".equalsIgnoreCase(commonIn.getCBusType())) {
 | 
	
		
			
				|  |  | +				FabricAssemVouchsOrgIn orgIn = new FabricAssemVouchsOrgIn();
 | 
	
		
			
				|  |  | +				orgIn.setCInvIdFinal(commonIn.getInvId());
 | 
	
		
			
				|  |  | +				orgIn.setCInvIdAfter(commonIn.getInvId());
 | 
	
		
			
				|  |  | +				orgIn.setCBusType(commonIn.getCBusType());
 | 
	
		
			
				|  |  | +				assemVouchsInvIdList.add(orgIn);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 获取物业原始入库单信息
 | 
	
		
			
				|  |  | +		while (assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).count()>0){
 | 
	
		
			
				|  |  | +			// 获取转换入库物料id
 | 
	
		
			
				|  |  | +			List<String> invIdList = assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).map(FabricAssemVouchsOrgIn::getCInvIdAfter).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			// 获取转换前入入库内容
 | 
	
		
			
				|  |  | +			List<FabricAssemVouchsOrgIn> orgInList = fabricLossMapper.getAssemVouchsOrgInList(invIdList);
 | 
	
		
			
				|  |  | +			if (orgInList.size() == 0){
 | 
	
		
			
				|  |  | +				break;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			for (FabricAssemVouchsOrgIn item : assemVouchsInvIdList){
 | 
	
		
			
				|  |  | +				if ("转换入库".equalsIgnoreCase(item.getCBusType())){
 | 
	
		
			
				|  |  | +					Optional<FabricAssemVouchsOrgIn> findOpt = orgInList.stream().filter(e->e.getCInvIdAfter().equals(item.getCInvIdAfter())).findFirst();
 | 
	
		
			
				|  |  | +					if (findOpt.isPresent()){
 | 
	
		
			
				|  |  | +						FabricAssemVouchsOrgIn findItem = findOpt.get();
 | 
	
		
			
				|  |  | +						item.setCBusType(findItem.getCBusType());
 | 
	
		
			
				|  |  | +						item.setCTableName(findItem.getCTableName());
 | 
	
		
			
				|  |  | +						item.setCInvIdAfter(findItem.getCInvIdBefore());
 | 
	
		
			
				|  |  | +						item.setAutoId(findItem.getAutoId());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 设置采购入库单价
 | 
	
		
			
				|  |  | +		List<Integer> autoIdList = assemVouchsInvIdList.stream().filter(e->"rdrecords01".equalsIgnoreCase(e.getCTableName())).map(FabricAssemVouchsOrgIn::getAutoId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		if (autoIdList.size()>0){
 | 
	
		
			
				|  |  | +			List<FabricInPrice> priceList = fabricLossMapper.getPoInPriceList(autoIdList);
 | 
	
		
			
				|  |  | +			setAssemVouchsInPrice(commonInList, assemVouchsInvIdList, priceList);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 设置其他入库单价
 | 
	
		
			
				|  |  | +		autoIdList = assemVouchsInvIdList.stream().filter(e->"rdrecords08".equalsIgnoreCase(e.getCTableName())).map(FabricAssemVouchsOrgIn::getAutoId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		if (autoIdList.size()>0){
 | 
	
		
			
				|  |  | +			List<FabricInPrice> priceList = fabricLossMapper.getOtherInPriceList(autoIdList);
 | 
	
		
			
				|  |  | +			setAssemVouchsInPrice(commonInList, assemVouchsInvIdList, priceList);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 根据形态转换物料,设置采购入库/其他入库价格
 | 
	
		
			
				|  |  | +	 * @param commonInList - 入库信息
 | 
	
		
			
				|  |  | +	 * @param assemVouchsOrgInList - 形态转换信息
 | 
	
		
			
				|  |  | +	 * @param priceList - 价格信息
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setAssemVouchsInPrice(List<FabricCommonIn> commonInList, List<FabricAssemVouchsOrgIn> assemVouchsOrgInList,
 | 
	
		
			
				|  |  | +	                                    List<FabricInPrice> priceList){
 | 
	
		
			
				|  |  | +		priceList.forEach(e->{
 | 
	
		
			
				|  |  | +			commonInList.forEach(i->{
 | 
	
		
			
				|  |  | +				if (assemVouchsOrgInList.stream().filter(v->
 | 
	
		
			
				|  |  | +						v.getAutoId().equals(e.getAutoId())&&
 | 
	
		
			
				|  |  | +								i.getInvId().equalsIgnoreCase(v.getCInvIdFinal())).count()>0){
 | 
	
		
			
				|  |  | +					i.setIPrice(DoubleOperation.getScale(e.getIPrice(),4));
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			});
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 根据委外订单设置分配数量、余纱、采购损耗,来源余纱、其他入库的纱
 | 
	
		
			
				|  |  | +	 * @param ret
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private void setPoOrderListByOmOrderList(FabricLoss ret) {
 | 
	
		
			
				|  |  | +		String code = ret.getCCode();
 | 
	
		
			
				|  |  | +		// 获取所有委外订单
 | 
	
		
			
				|  |  | +		List<FabricOMOrder> allOmOrderList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		if (oConvertUtils.listIsNotEmpty(ret.getFabricOMOrderList1())) {
 | 
	
		
			
				|  |  | +			allOmOrderList.addAll(ret.getFabricOMOrderList1());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (oConvertUtils.listIsNotEmpty(ret.getFabricOMOrderList2())) {
 | 
	
		
			
				|  |  | +			allOmOrderList.addAll(ret.getFabricOMOrderList2());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 获取委外出库、入库内容
 | 
	
		
			
				|  |  | +		List<FabricMoOrderCK> moOrderCKList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		List<FabricMoOrderRK> moOrderRKList = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (FabricOMOrder o : allOmOrderList){
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(o.getFabricMoOrderCKList())) {
 | 
	
		
			
				|  |  | +				moOrderCKList.addAll(o.getFabricMoOrderCKList());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(o.getFabricMoOrderRKList())) {
 | 
	
		
			
				|  |  | +				moOrderRKList.addAll(o.getFabricMoOrderRKList());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		moOrderCKList.forEach(e -> e.setITempUseSum(0.0));
 | 
	
		
			
				|  |  | +		moOrderRKList.forEach(e -> e.setITempUseSum(0.0));
 | 
	
		
			
				|  |  | +		// 去掉委外入库的内容
 | 
	
		
			
				|  |  | +		for (FabricMoOrderRK moOrderRK : moOrderRKList) {
 | 
	
		
			
				|  |  | +			Double dInLeft = moOrderRK.getIQuantityIn();    // 入库剩余数量
 | 
	
		
			
				|  |  | +			for (FabricMoOrderCK ck : moOrderCKList) {
 | 
	
		
			
				|  |  | +				if (!ck.getInvOutId().equalsIgnoreCase(moOrderRK.getInvId())){
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				Double dCurOutSum = ck.getIQuantityOut();   // 出库单出库数量
 | 
	
		
			
				|  |  | +				if (DoubleOperation.sub(dCurOutSum, ck.getITempUseSum()) <= 0) {
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				Double dRealOut = dInLeft >= dCurOutSum ? dCurOutSum : dInLeft;// 对比入库单,本条出库数量
 | 
	
		
			
				|  |  | +				ck.setITempUseSum(DoubleOperation.add(ck.getITempUseSum(), dRealOut));// 出库累计数量
 | 
	
		
			
				|  |  | +				dInLeft = DoubleOperation.sub(dInLeft, dRealOut);    // 入库剩余数量
 | 
	
		
			
				|  |  | +				if (dInLeft <= 0) {
 | 
	
		
			
				|  |  | +					break;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 去掉出库为0的数据
 | 
	
		
			
				|  |  | +		moOrderCKList = moOrderCKList.stream().filter(e->DoubleOperation.sub(e.getIQuantityOut(), e.getITempUseSum()) > 0).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +		// 根据采购订单轮询,设置分配数量、余纱、损耗
 | 
	
		
			
				|  |  | +		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList();
 | 
	
		
			
				|  |  | +		for (FabricPoOrder poOrder : poOrderList){
 | 
	
		
			
				|  |  | +			Double dOutSum = 0.0;
 | 
	
		
			
				|  |  | +			if (oConvertUtils.listIsNotEmpty(poOrder.getFabricPoOrderInList())) {
 | 
	
		
			
				|  |  | +				for (FabricPoOrderIn orderIn : poOrder.getFabricPoOrderInList()) {
 | 
	
		
			
				|  |  | +					Double dInLeft = orderIn.getIQuantity();    // 入库剩余数量
 | 
	
		
			
				|  |  | +					for (FabricMoOrderCK ck : moOrderCKList){
 | 
	
		
			
				|  |  | +						if (!ck.getInvOutId().equalsIgnoreCase(orderIn.getInvId())){
 | 
	
		
			
				|  |  | +							continue;
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						Double dCurOutSum = ck.getIQuantityOut();   // 出库单出库数量
 | 
	
		
			
				|  |  | +						if (DoubleOperation.sub(dCurOutSum,ck.getITempUseSum())<=0){
 | 
	
		
			
				|  |  | +							continue;
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						Double dRealOut = dInLeft>=dCurOutSum?dCurOutSum:dInLeft;// 对比入库单,本条出库数量
 | 
	
		
			
				|  |  | +						ck.setITempUseSum(DoubleOperation.add(ck.getITempUseSum(),dRealOut));// 出库累计数量
 | 
	
		
			
				|  |  | +						dInLeft = DoubleOperation.sub(dInLeft,dRealOut);    // 入库剩余数量
 | 
	
		
			
				|  |  | +						dOutSum = DoubleOperation.add(dOutSum, dRealOut);
 | 
	
		
			
				|  |  | +						if (dInLeft<=0){
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// 设置分配数量、余纱、损耗
 | 
	
		
			
				|  |  | +			poOrder.setIQuantityOut(dOutSum);
 | 
	
		
			
				|  |  | +			poOrder.setIQuantityLeft(DoubleOperation.sub(poOrder.getIQuantityIn(),dOutSum));
 | 
	
		
			
				|  |  | +			poOrder.setIQuantityLeftRate(DoubleOperation.div(poOrder.getIQuantityLeft(),poOrder.getIQuantityIn(), 4));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 设置来源余纱和其他入库的纱:批号是期初的,算来源余纱;物料名称是杂纱的,算其他入库的纱
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> lyysList = new ArrayList<>();    // 来源余纱
 | 
	
		
			
				|  |  | +		List<FabricPoOrderOut> qtrkList = new ArrayList<>();    // 其他入库的纱
 | 
	
		
			
				|  |  | +		for (FabricMoOrderCK moOrderCK : moOrderCKList){
 | 
	
		
			
				|  |  | +			// 非采购展现物料过滤
 | 
	
		
			
				|  |  | +			if (!moOrderCK.isPoInventory()){
 | 
	
		
			
				|  |  | +				continue;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			FabricPoOrderOut poOrderOut = FabricPoOrderOut.getByMoOut(moOrderCK);
 | 
	
		
			
				|  |  | +			// 批号是期初的,或者普通采购入库的非杂纱,算来源余纱
 | 
	
		
			
				|  |  | +			if ("期初".equalsIgnoreCase(moOrderCK.getCBatchOut()) ||
 | 
	
		
			
				|  |  | +					"普通采购".equalsIgnoreCase(moOrderCK.getCBusType()) && !"杂纱".equalsIgnoreCase(moOrderCK.getCInvNameOut())){
 | 
	
		
			
				|  |  | +				lyysList.add(poOrderOut);
 | 
	
		
			
				|  |  | +			}else if ("其他入库".equalsIgnoreCase(moOrderCK.getCBusType()) ||
 | 
	
		
			
				|  |  | +					"转换入库".equalsIgnoreCase(moOrderCK.getCBusType()) ||
 | 
	
		
			
				|  |  | +					"杂纱".equalsIgnoreCase(moOrderCK.getCInvNameOut())){
 | 
	
		
			
				|  |  | +				qtrkList.add(poOrderOut);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		ret.getFabricPoOrderList().addAll(FabricPoOrder.getByPoOrderOutList(lyysList,"来源余料"));
 | 
	
		
			
				|  |  | +		ret.getFabricPoOrderList().addAll(FabricPoOrder.getByPoOrderOutList(qtrkList,"其他入库"));
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 |