|
@@ -181,7 +181,92 @@ public class BizBeforeCheckoutVerifyController extends BaseController {
|
|
List<BizSupplierProductProcess> supplierProductProcesses = bizSupplierProductProcesses.stream().filter(b -> b.getSupplierId().equals(bizSupplier.getId()) && b.getProductId().equals(bizProduct.getId())).collect(Collectors.toList());
|
|
List<BizSupplierProductProcess> supplierProductProcesses = bizSupplierProductProcesses.stream().filter(b -> b.getSupplierId().equals(bizSupplier.getId()) && b.getProductId().equals(bizProduct.getId())).collect(Collectors.toList());
|
|
addList.addAll(getBalanceAccounts(l, bizOutsourcedOrder, bizSupplier, bizOutsourcedOrderDetail, detailProcesses, bizDaywork, bizProduct, furnaceNoInfo, receiptDetails, bizProcessInspecion, process, processDetails, items, lot, supplierProductProcesses));
|
|
addList.addAll(getBalanceAccounts(l, bizOutsourcedOrder, bizSupplier, bizOutsourcedOrderDetail, detailProcesses, bizDaywork, bizProduct, furnaceNoInfo, receiptDetails, bizProcessInspecion, process, processDetails, items, lot, supplierProductProcesses));
|
|
});
|
|
});
|
|
- System.out.println("184: " + addList.size());
|
|
|
|
|
|
+// System.out.println("184: " + addList.size());
|
|
|
|
+ List<Long> outsourceOrderIds = addList.stream().map(BizOutsourceBalanceAccount::getOutsourceOrderId).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ // 判断假设是按支结算则直接算,假设是按炉结算
|
|
|
|
+ // 应得金额
|
|
|
|
+ // 实得金额 = round((应得金额-其他扣款+差补额-运费-料扣金额/(1+税率/100), 4)
|
|
|
|
+ // 含税金额 = round((应得金额-其他扣款+差补额-运费-料扣金额, 4)
|
|
|
|
+ // 运费 round(运费单价【sfc10100.yfprc】 * 发出箱数 , 4)
|
|
|
|
+ if (outsourceOrderIds.size() == 1) {
|
|
|
|
+ BizOutsourcedOrder bizOutsourcedOrder = outsourcedOrder.get(0);
|
|
|
|
+ if (bizOutsourcedOrder.getSettlementType().equals("1")) {
|
|
|
|
+ // 按支结算
|
|
|
|
+ addList.forEach(l -> {
|
|
|
|
+ // 是否有表面处理
|
|
|
|
+ if (l.getSupplier().getSurfaceTreatment().equals("N")) {
|
|
|
|
+ if (l.getSupplierCode().equals("99024")) {
|
|
|
|
+ if (l.getProcessCode().equals("99000")) {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getReceiptNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ } else {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getOutputNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getReceiptNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (l.getSupplierCode().equals("99024")) {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getOutputNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ } else {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getReceiptNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // 按炉结算 炉数*加工单价* (1.00 + 税率 /100.00 )
|
|
|
|
+ BizOutsourceBalanceAccount item = addList.get(0);
|
|
|
|
+ item.setPlanAmount(BigDecimal.ONE.multiply(item.getSupplier().getFreightPrice()).multiply(BigDecimal.ONE.add(item.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ bizOutsourcedOrderDetails.forEach(l -> {
|
|
|
|
+ BizOutsourceBalanceAccount item = addList.stream().filter(e -> e.getOutsourceOrderDetailId().equals(l.getId())).collect(Collectors.toList()).get(0);
|
|
|
|
+ item.setFreightAmount(item.getSupplier().getFreightDeductUnitPrice().multiply(BigDecimal.valueOf(item.getCarrierNum())));
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // 八成用不上,但是假设出现多选审核就可能用得上了。
|
|
|
|
+ outsourcedOrder.forEach(t -> {
|
|
|
|
+ if (t.getSettlementType().equals("1")) {
|
|
|
|
+ // 按支结算
|
|
|
|
+ addList.stream().filter(e -> e.getOutsourceOrderId().equals(t.getId())).forEach(l -> {
|
|
|
|
+ if (l.getSupplier().getSurfaceTreatment().equals("N")) {
|
|
|
|
+ if (l.getSupplierCode().equals("99024")) {
|
|
|
|
+ if (l.getProcessCode().equals("99000")) {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getReceiptNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ } else {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getOutputNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getReceiptNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (l.getSupplierCode().equals("99024")) {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getOutputNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ } else {
|
|
|
|
+ l.setPlanAmount(BigDecimal.valueOf(l.getReceiptNum()).multiply(l.getProcessPrice()).multiply(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // 按炉结算 round(炉数 * 加工单价 * (1.00 + 税率 /100.00 ),4)
|
|
|
|
+ BizOutsourceBalanceAccount item = addList.stream().filter(e -> e.getOutsourceOrderId().equals(t.getId())).collect(Collectors.toList()).get(0);
|
|
|
|
+ item.setPlanAmount(BigDecimal.ONE.multiply(item.getSupplier().getFreightPrice()).multiply(BigDecimal.ONE.add(item.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP))).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ bizOutsourcedOrderDetails.forEach(l -> {
|
|
|
|
+ BizOutsourceBalanceAccount item = addList.stream().filter(e -> e.getOutsourceOrderDetailId().equals(l.getId())).collect(Collectors.toList()).get(0);
|
|
|
|
+ item.setFreightAmount(item.getSupplier().getFreightDeductUnitPrice().multiply(BigDecimal.valueOf(item.getCarrierNum())));
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ addList.forEach(l -> {
|
|
|
|
+ BigDecimal planAmount = l.getPlanAmount() == null ? BigDecimal.ZERO : l.getPlanAmount();
|
|
|
|
+ BigDecimal otherCost = l.getOtherCost() == null ? BigDecimal.ZERO : l.getOtherCost();
|
|
|
|
+ BigDecimal fillDifferencePrice = l.getFillDifferencePrice() == null ? BigDecimal.ZERO : l.getFillDifferencePrice();
|
|
|
|
+ BigDecimal freightAmount = l.getFreightAmount() == null ? BigDecimal.ZERO : l.getFreightAmount();
|
|
|
|
+ BigDecimal materialLossAmount = l.getMaterialLossAmount() == null ? BigDecimal.ZERO : l.getMaterialLossAmount();
|
|
|
|
+ BigDecimal taxAmount = planAmount.subtract(otherCost).add(fillDifferencePrice).subtract(freightAmount).subtract(materialLossAmount);
|
|
|
|
+ l.setAcutalAmount(taxAmount.divide(BigDecimal.ONE.add(l.getTaxRate().divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP)), 4, RoundingMode.HALF_UP));
|
|
|
|
+ l.setTaxAmount(taxAmount.setScale(4, RoundingMode.HALF_UP));
|
|
|
|
+ });
|
|
bizOutsourceBalanceAccountService.saveBatch(addList);
|
|
bizOutsourceBalanceAccountService.saveBatch(addList);
|
|
} else {
|
|
} else {
|
|
throw new RuntimeException(jsonObject.getStr("msg"));
|
|
throw new RuntimeException(jsonObject.getStr("msg"));
|
|
@@ -233,6 +318,7 @@ public class BizBeforeCheckoutVerifyController extends BaseController {
|
|
balanceAccount.setProcessAlias(v.getProcessAlias());
|
|
balanceAccount.setProcessAlias(v.getProcessAlias());
|
|
balanceAccount.setProcessCode(v.getProcessCode());
|
|
balanceAccount.setProcessCode(v.getProcessCode());
|
|
balanceAccount.setOutsourceOrderDetailProcessId(v.getId());
|
|
balanceAccount.setOutsourceOrderDetailProcessId(v.getId());
|
|
|
|
+ balanceAccount.setOutsourceOrderId(bizOutsourcedOrder.getId());
|
|
// 产品数量
|
|
// 产品数量
|
|
balanceAccount.setProductNum(lot.getProductionQuantity());
|
|
balanceAccount.setProductNum(lot.getProductionQuantity());
|
|
// 批次投产数量
|
|
// 批次投产数量
|
|
@@ -243,7 +329,10 @@ public class BizBeforeCheckoutVerifyController extends BaseController {
|
|
balanceAccount.setReceiptNum(receiptDetail.getAuditNum());
|
|
balanceAccount.setReceiptNum(receiptDetail.getAuditNum());
|
|
// 工序单价
|
|
// 工序单价
|
|
balanceAccount.setProcessPrice(supplierProductProcess.getPrice());
|
|
balanceAccount.setProcessPrice(supplierProductProcess.getPrice());
|
|
- // 补差额 当前公式没看到 先不管
|
|
|
|
|
|
+ // 材料单价 inv10100.zjunprc
|
|
|
|
+ balanceAccount.setMaterialPrice(l.getBizMaterialBase().getZjunprc());
|
|
|
|
+ // 销售单价 inc10100.unprc
|
|
|
|
+ balanceAccount.setSalePrice(l.getProduct().getUnprc());
|
|
// 实投料量 假设为直条料或圆盘料或半成品料
|
|
// 实投料量 假设为直条料或圆盘料或半成品料
|
|
if (l.getBizMaterialBase().getXzcode().equals("11") || l.getBizMaterialBase().getXzcode().equals("12") || l.getBizMaterialBase().getType().equals("2")) {
|
|
if (l.getBizMaterialBase().getXzcode().equals("11") || l.getBizMaterialBase().getXzcode().equals("12") || l.getBizMaterialBase().getType().equals("2")) {
|
|
// 计算公式 实际投料直径 / 2 * 实际投料直径 / 2 * 3.14 * 原料密度 / 1000 * (产品长度 + 公差长度【bom30101.gccd(材料基本信息表)按cpart产品编码取,生产计划随时变动结算时实时获取】) / 原材料利用率 / 10000
|
|
// 计算公式 实际投料直径 / 2 * 实际投料直径 / 2 * 3.14 * 原料密度 / 1000 * (产品长度 + 公差长度【bom30101.gccd(材料基本信息表)按cpart产品编码取,生产计划随时变动结算时实时获取】) / 原材料利用率 / 10000
|
|
@@ -264,9 +353,9 @@ public class BizBeforeCheckoutVerifyController extends BaseController {
|
|
balanceAccount.setMaterialLoss(materialLoss);
|
|
balanceAccount.setMaterialLoss(materialLoss);
|
|
}
|
|
}
|
|
|
|
|
|
- System.out.println("263 getMaterialLoss: " + l.getMaterialLoss());
|
|
|
|
|
|
+// System.out.println("263 getMaterialLoss: " + l.getMaterialLoss());
|
|
balanceAccount.setMaterialLoss(balanceAccount.getMaterialLoss() == null || balanceAccount.getMaterialLoss() < 0 ? 0 : balanceAccount.getMaterialLoss());
|
|
balanceAccount.setMaterialLoss(balanceAccount.getMaterialLoss() == null || balanceAccount.getMaterialLoss() < 0 ? 0 : balanceAccount.getMaterialLoss());
|
|
- System.out.println("265 getMaterialLoss: " + l.getMaterialLoss());
|
|
|
|
|
|
+// System.out.println("265 getMaterialLoss: " + l.getMaterialLoss());
|
|
|
|
|
|
// 表面表示是否有表面处理
|
|
// 表面表示是否有表面处理
|
|
balanceAccount.setSurfaceTreatment(l.getSupplier().getSurfaceTreatment());
|
|
balanceAccount.setSurfaceTreatment(l.getSupplier().getSurfaceTreatment());
|
|
@@ -304,7 +393,7 @@ public class BizBeforeCheckoutVerifyController extends BaseController {
|
|
balanceAccount.setWastePrice(l.getProcessPrice().setScale(4, RoundingMode.HALF_UP));
|
|
balanceAccount.setWastePrice(l.getProcessPrice().setScale(4, RoundingMode.HALF_UP));
|
|
}
|
|
}
|
|
// System.out.println(l.getSupplier().getWastePriceCategory());
|
|
// System.out.println(l.getSupplier().getWastePriceCategory());
|
|
- System.out.println("303 getMaterialLossl: "+ balanceAccount.getMaterialLoss());
|
|
|
|
|
|
+// System.out.println("303 getMaterialLossl: "+ balanceAccount.getMaterialLoss());
|
|
// System.out.println(l.getWastePrice());
|
|
// System.out.println(l.getWastePrice());
|
|
// System.out.println(l.getSupplier().getTaxRatio());
|
|
// System.out.println(l.getSupplier().getTaxRatio());
|
|
BigDecimal wastePrice = balanceAccount.getWastePrice() == null ? BigDecimal.ZERO : balanceAccount.getWastePrice();
|
|
BigDecimal wastePrice = balanceAccount.getWastePrice() == null ? BigDecimal.ZERO : balanceAccount.getWastePrice();
|
|
@@ -326,13 +415,12 @@ public class BizBeforeCheckoutVerifyController extends BaseController {
|
|
// 扣料金额 round(料损数量 * 废品加工单价 * 1.13【*税率】 ,4) // (1 + 税率 /100.00 ),2)
|
|
// 扣料金额 round(料损数量 * 废品加工单价 * 1.13【*税率】 ,4) // (1 + 税率 /100.00 ),2)
|
|
balanceAccount.setMaterialLossAmount(BigDecimal.valueOf(l.getMaterialLoss()).multiply(l.getWastePrice().multiply(BigDecimal.ONE.add(BigDecimal.valueOf(l.getSupplier().getTaxRatio()).divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP)))).setScale(2, RoundingMode.HALF_UP));
|
|
balanceAccount.setMaterialLossAmount(BigDecimal.valueOf(l.getMaterialLoss()).multiply(l.getWastePrice().multiply(BigDecimal.ONE.add(BigDecimal.valueOf(l.getSupplier().getTaxRatio()).divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP)))).setScale(2, RoundingMode.HALF_UP));
|
|
}
|
|
}
|
|
- // 长度是产品长度么
|
|
|
|
- // 判断假设是按支结算则直接算,假设是按炉结算
|
|
|
|
- // 应得金额
|
|
|
|
- // 实得金额
|
|
|
|
- // 含税金额
|
|
|
|
- // 材料单价
|
|
|
|
- // 销售单价
|
|
|
|
|
|
+ // 利用率
|
|
|
|
+ balanceAccount.setUtilizationRatio(l.getBizMaterialBaseInfo().getUtrate());
|
|
|
|
+ // 长度是产品长度
|
|
|
|
+ balanceAccount.setLength(l.getProduct().getLenght());
|
|
|
|
+ balanceAccount.setSupplier(l.getSupplier());
|
|
|
|
+
|
|
addList.add(balanceAccount);
|
|
addList.add(balanceAccount);
|
|
});
|
|
});
|
|
return addList;
|
|
return addList;
|