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