|
|
@@ -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,"其他入库"));
|
|
|
+ }
|
|
|
}
|