From cfe6e4118d6a37b7a8551fac195e714afcfcc951 Mon Sep 17 00:00:00 2001 From: liuxiaoxu <1793812695@qq.com> Date: Thu, 8 Aug 2024 20:04:59 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E9=94=80=E5=94=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E6=80=BB=E7=BB=8F=E7=90=86=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=94=80=E5=94=AE=E4=BC=B0=E4=BB=B7=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=20=E9=87=87=E8=B4=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=94=80=E5=94=AE=E4=BC=B0=E4=BB=B7=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=96=B0=E5=A2=9E=20=E7=89=A9=E6=96=99=E5=90=88?= =?UTF-8?q?=E8=AE=A1=E5=92=8C=E6=95=B0=E9=87=8F=E5=90=88=E8=AE=A1=E7=9A=84?= =?UTF-8?q?=E5=9B=9E=E6=98=BE=20=E5=B7=A5=E7=A8=8B=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=94=80=E5=94=AE=E4=BC=B0=E4=BB=B7=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=96=B0=E5=A2=9E=20=E7=89=A9=E6=96=99=E5=90=88?= =?UTF-8?q?=E8=AE=A1=E5=92=8C=E6=95=B0=E9=87=8F=E5=90=88=E8=AE=A1=E7=9A=84?= =?UTF-8?q?=E5=9B=9E=E6=98=BE=20=E9=94=80=E5=94=AE=E4=BC=B0=E4=BB=B7?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=89=8D=E7=AB=AF=E9=A1=B5=E9=9D=A2=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=BB=8F=E8=90=A5=E6=88=90=E6=9C=AC=E6=8C=89=E9=92=AE?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=89=93=E5=BC=80=E7=BB=8F=E8=90=A5?= =?UTF-8?q?=E6=88=90=E6=9C=AC=E9=A1=B5=E9=9D=A2=E7=9A=84js=E6=96=B9?= =?UTF-8?q?=E6=B3=95=20=E9=94=80=E5=94=AE=E4=BC=B0=E4=BB=B7=E5=90=8E?= =?UTF-8?q?=E7=AB=AFController=E5=B1=82=20=E6=96=B0=E5=A2=9E=E7=BB=8F?= =?UTF-8?q?=E8=90=A5=E6=88=90=E6=9C=AC=20=E9=94=80=E5=94=AE=E4=BC=B0?= =?UTF-8?q?=E4=BB=B7-=E6=80=BB=E7=BB=8F=E7=90=86=EF=BC=9B=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BF=9D=E5=AD=98=E9=94=80=E5=94=AE=E4=BC=B0=E4=BB=B7?= =?UTF-8?q?-=E6=80=BB=E7=BB=8F=E7=90=86=20=E6=96=B0=E5=A2=9E=20=E6=80=BB?= =?UTF-8?q?=E7=BB=8F=E7=90=86=E6=B7=BB=E5=8A=A0=E9=94=80=E5=94=AE=E4=BC=B0?= =?UTF-8?q?=E4=BB=B7=E5=90=8E=E7=AB=AF=E6=8E=A5=E5=8F=A3=EF=BC=9A=E6=8C=89?= =?UTF-8?q?=E7=85=A7=E5=B7=B2=E7=9F=A5=E7=9A=8415=E4=B8=AA=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E8=A7=84=E5=88=99=E8=AE=A1=E7=AE=97=E6=AF=8F=E4=B8=AA?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=9A=84=E6=95=B0=E6=8D=AE=E5=B9=B6=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=88=B0=E6=95=B0=E6=8D=AE=E5=BA=93=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E6=9F=A5=E8=AF=A2=E9=94=80=E5=94=AE=E4=BC=B0?= =?UTF-8?q?=E4=BB=B7=E8=AF=A6=E6=83=85=E7=89=A9=E6=96=99=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=96=B0=E5=A2=9E=E5=88=A9=E6=B6=A6=E7=8E=87?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=92=8C=E5=90=AB=E7=A8=8E=E7=BB=8F=E8=90=A5?= =?UTF-8?q?=E6=88=90=E6=9C=AC=E5=AD=97=E6=AE=B5=20=E7=89=A9=E6=96=99?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=AD=90=E8=A1=A8=E5=8C=85=E6=8B=ACform?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E7=9A=84=E6=95=B0=E6=8D=AE=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=B1=BB=E6=96=B0=E5=A2=9E=20=E5=A4=9A=E6=A1=A3=E5=88=A9?= =?UTF-8?q?=E6=B6=A6=E7=8E=87=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SalesEstimateController.java | 33 +- .../VO/SalesEstimateDetailMaterialVo.java | 22 + .../sales/service/ISalesEstimateService.java | 7 + ...alesEstimateDetailMaterialServiceImpl.java | 3 + .../impl/SalesEstimateServiceImpl.java | 227 +++++ .../templates/sales/estimate/ceoAdd.html | 884 ++++++++++++++++++ .../sales/estimate/engineeringAdd.html | 4 +- .../templates/sales/estimate/estimate.html | 15 +- .../templates/sales/estimate/purchaseAdd.html | 4 +- 9 files changed, 1188 insertions(+), 11 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAdd.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesEstimateController.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesEstimateController.java index 6f17d25e..1146e450 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesEstimateController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesEstimateController.java @@ -170,7 +170,6 @@ public class SalesEstimateController extends BaseController - /** * 加载新增销售估价-工程 子表物料选择弹窗 */ @@ -197,10 +196,8 @@ public class SalesEstimateController extends BaseController - - /** - * 新增Bom销售估价-采购 + * 新增采购成本 销售估价-采购 */ @GetMapping("/purchaseAdd/{salesEstimateId}") public String purchaseAdd(@PathVariable("salesEstimateId") Long salesEstimateId, ModelMap map) @@ -227,6 +224,33 @@ public class SalesEstimateController extends BaseController } + /** + * 新增经营成本 销售估价-总经理 + */ + @GetMapping("/ceoAdd/{salesEstimateId}") + public String ceoAdd(@PathVariable("salesEstimateId") Long salesEstimateId, ModelMap map) + { + SalesEstimate salesEstimate = salesEstimateService.selectSalesEstimateById(salesEstimateId); + map.put("salesEstimate", salesEstimate); + SalesEstimateDetailVo salesEstimateDetailVo = salesEstimateService.getSalesEstimateDetailVo(); + map.put("salesEstimateDetailVo",salesEstimateDetailVo); + return prefix + "/ceoAdd"; + } + + + + /** + * 修改保存销售估价-总经理 + */ + @RequiresPermissions("sales:estimate:ceoAdd") + @Log(title = "销售估价", businessType = BusinessType.UPDATE) + @PostMapping("/ceoAdd") + @ResponseBody + public AjaxResult ceoAddSave(@RequestBody SalesEstimate salesEstimate) + { + return toAjax(salesEstimateService.ceoAddSalesEstimate(salesEstimate)); + } + /** * 加载新增销售估价 物料选择弹窗 @@ -238,7 +262,6 @@ public class SalesEstimateController extends BaseController } - /** * 新增销售估价 物料选择 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/SalesEstimateDetailMaterialVo.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/SalesEstimateDetailMaterialVo.java index b3786444..0c6030f8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/SalesEstimateDetailMaterialVo.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/VO/SalesEstimateDetailMaterialVo.java @@ -37,4 +37,26 @@ public class SalesEstimateDetailMaterialVo extends SalesEstimateDetailMaterial { /** 含税经营成本(RMB) */ private BigDecimal taxOperatingCosts; + + /** 利润率 */ + private BigDecimal profitRate; + + /** A挡利润率 */ + private BigDecimal aProfitRate; + + /** B挡利润率 */ + private BigDecimal bProfitRate; + + /** C挡利润率 */ + private BigDecimal cProfitRate; + + /** D挡利润率 */ + private BigDecimal dProfitRate; + + /** E挡利润率 */ + private BigDecimal eProfitRate; + + /** F挡利润率 */ + private BigDecimal fProfitRate; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesEstimateService.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesEstimateService.java index 51c46d8e..ff6ae112 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesEstimateService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesEstimateService.java @@ -93,4 +93,11 @@ public interface ISalesEstimateService * @return */ int purchaseAddSalesEstimate(SalesEstimate salesEstimate); + + /** + * 总经理添加销售估价 + * @param salesEstimate + * @return + */ + int ceoAddSalesEstimate(SalesEstimate salesEstimate); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateDetailMaterialServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateDetailMaterialServiceImpl.java index 0d377576..506cd440 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateDetailMaterialServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateDetailMaterialServiceImpl.java @@ -95,9 +95,12 @@ public class SalesEstimateDetailMaterialServiceImpl implements ISalesEstimateDet vo.setNoTaxLaborCosts(salesEstimateDetail.getNoTaxLaborCosts()); vo.setNoTaxManagesCosts(salesEstimateDetail.getNoTaxManagesCosts()); vo.setNoTaxOperatingCosts(salesEstimateDetail.getNoTaxOperatingCosts()); + vo.setTaxOperatingCosts(salesEstimateDetail.getTaxOperatingCosts()); vo.setNoTaxPromotionalCosts(salesEstimateDetail.getNoTaxPromotionalCosts()); vo.setNoTaxServiceCosts(salesEstimateDetail.getNoTaxServiceCosts()); vo.setNoTaxShippingCosts(salesEstimateDetail.getNoTaxShippingCosts()); + vo.setProfitRate(salesEstimateDetail.getProfitRate()); + } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateServiceImpl.java index cfc59d34..63257e2b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateServiceImpl.java @@ -1,5 +1,7 @@ package com.ruoyi.sales.service.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; import java.util.List; @@ -272,4 +274,229 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService return salesEstimateMapper.updateSalesEstimate(salesEstimate); } + + /** + * 总经理添加销售估价 + * + * @param salesEstimate 销售估价 + * @return 结果 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public int ceoAddSalesEstimate(SalesEstimate salesEstimate) { + String loginName = ShiroUtils.getLoginName(); // 获取当前登录用户的名称 + salesEstimate.setUpdateBy(loginName); // 设置更新人的信息 + salesEstimate.setUpdateTime(new Date()); // 设置更新时间 + salesEstimate.setEstimateStatus("3"); // 设置销售估价的状态 + + BigDecimal usdRate = salesEstimate.getUsdRate(); // 获取美元汇率 + List salesEstimateDetailList = salesEstimate.getSalesEstimateDetailList(); // 获取销售估价详情列表 + + for (SalesEstimateDetail salesEstimateDetail : salesEstimateDetailList) { // 遍历销售估价详情列表 + BigDecimal noTaxLaborCosts = salesEstimateDetail.getNoTaxLaborCosts(); // 获取不含税的人工成本 + BigDecimal noTaxPromotionalCosts = salesEstimateDetail.getNoTaxPromotionalCosts(); // 获取不含税的推广成本 + BigDecimal noTaxBusinessCosts = salesEstimateDetail.getNoTaxBusinessCosts(); // 获取不含税的业务成本 + BigDecimal noTaxManagesCosts = salesEstimateDetail.getNoTaxManagesCosts(); // 获取不含税的管理成本 + BigDecimal noTaxMaterialCosts = salesEstimateDetail.getNoTaxMaterialCosts(); // 获取不含税的物料成本 + BigDecimal profitRate = salesEstimateDetail.getProfitRate().divide(BigDecimal.valueOf(100)); // 获取利润率并转换为小数形式 + Long materialNum = salesEstimateDetail.getMaterialNum(); // 获取物料数量 + + // 计算不含税总经营成本 + BigDecimal noAllTaxOperatingCosts = calculateNoTaxOperatingCosts( + noTaxLaborCosts, noTaxPromotionalCosts, noTaxBusinessCosts, noTaxManagesCosts); + + // 计算含税总经营成本 + BigDecimal allTaxOperatingCosts = calculateTaxOperatingCosts(noAllTaxOperatingCosts); + + // 计算总含税物料成本 + BigDecimal taxMaterialCosts = calculateTaxMaterialCosts(noTaxMaterialCosts); + + List estimateDetailMaterialList = salesEstimate.getEstimateDetailMaterialList(); // 获取物料详情列表 + // 计算物料总不含税采购成本 + BigDecimal totalNoTaxPurchaseRmb = calculateTotalNoTaxPurchaseRmb(estimateDetailMaterialList); + // 计算物料总含税采购成本 + BigDecimal totalTaxPurchaseRmb = calculateTotalTaxPurchaseRmb(estimateDetailMaterialList); + + // 计算不含税经营成本(RMB),并保留两位小数 + BigDecimal noTaxOperatingCost = calculateNoTaxOperatingCost(totalNoTaxPurchaseRmb, noTaxMaterialCosts, noAllTaxOperatingCosts) + .setScale(2, RoundingMode.HALF_UP); + // 计算含税经营成本(RMB),并保留两位小数 + BigDecimal taxOperatingCost = calculateTaxOperatingCost(totalTaxPurchaseRmb, taxMaterialCosts, allTaxOperatingCosts) + .setScale(2, RoundingMode.HALF_UP); + + // 计算不含税料号估价成本,并保留两位小数 + BigDecimal noTaxEstimateCost = calculateNoTaxEstimateCost(totalNoTaxPurchaseRmb, noAllTaxOperatingCosts, noTaxMaterialCosts) + .setScale(2, RoundingMode.HALF_UP); + // 计算含税料号估价成本,并保留两位小数 + BigDecimal taxEstimateCost = calculateTaxEstimateCost(totalTaxPurchaseRmb, allTaxOperatingCosts, taxMaterialCosts) + .setScale(2, RoundingMode.HALF_UP); + + // 计算不含税单价(RMB),并保留两位小数 + BigDecimal noTaxUnitPriceRmb = calculateNoTaxUnitPriceRmb(noTaxEstimateCost, profitRate) + .setScale(2, RoundingMode.HALF_UP); + // 计算含税单价(RMB),并保留两位小数 + BigDecimal taxUnitPriceRmb = calculateTaxUnitPriceRmb(taxEstimateCost, profitRate) + .setScale(2, RoundingMode.HALF_UP); + + // 计算不含税总价(RMB),并保留两位小数 + BigDecimal allNoTaxRmb = calculateAllNoTaxRmb(noTaxUnitPriceRmb, materialNum) + .setScale(2, RoundingMode.HALF_UP); + // 计算含税总价(RMB),并保留两位小数 + BigDecimal allTaxRmb = calculateAllTaxRmb(taxUnitPriceRmb, materialNum) + .setScale(2, RoundingMode.HALF_UP); + + // 计算不含税单价(美元),并保留两位小数 + BigDecimal noTaxUnitPriceDollar = calculateNoTaxUnitPriceDollar(noTaxUnitPriceRmb, usdRate) + .setScale(2, RoundingMode.HALF_UP); + // 计算含税单价(美元),并保留两位小数 + BigDecimal taxUnitPriceDollar = calculateTaxUnitPriceDollar(taxUnitPriceRmb, usdRate) + .setScale(2, RoundingMode.HALF_UP); + + // 计算不含税总价(美元),并保留两位小数 + BigDecimal allNoTaxDollar = calculateAllNoTaxDollar(noTaxUnitPriceDollar, materialNum) + .setScale(2, RoundingMode.HALF_UP); + // 计算含税总价(美元),并保留两位小数 + BigDecimal allTaxDollar = calculateAllTaxDollar(taxUnitPriceDollar, materialNum) + .setScale(2, RoundingMode.HALF_UP); + + // 更新 SalesEstimateDetail 对象中的值 + updateSalesEstimateDetail(salesEstimateDetail, + noTaxOperatingCost, taxOperatingCost, + noTaxUnitPriceRmb, taxUnitPriceRmb, + allNoTaxRmb, allTaxRmb, + noTaxUnitPriceDollar, taxUnitPriceDollar, + allNoTaxDollar, allTaxDollar); + + // 更新销售估价详情数据 + int updateSalesEstimateDetailResult = salesEstimateDetailMapper.updateSalesEstimateDetail(salesEstimateDetail); + if (updateSalesEstimateDetailResult <= 0) { + throw new BusinessException("更新销售估价详情数据失败"); + } + } + + // 更新销售估价数据 + return salesEstimateMapper.updateSalesEstimate(salesEstimate); + } + + // 计算不含税总经营成本 + private BigDecimal calculateNoTaxOperatingCosts(BigDecimal noTaxLaborCosts, BigDecimal noTaxPromotionalCosts, BigDecimal noTaxBusinessCosts, BigDecimal noTaxManagesCosts) { + return noTaxLaborCosts.add(noTaxPromotionalCosts).add(noTaxBusinessCosts).add(noTaxManagesCosts); + } + + // 计算含税总经营成本 + private BigDecimal calculateTaxOperatingCosts(BigDecimal noAllTaxOperatingCosts) { + return noAllTaxOperatingCosts.multiply(BigDecimal.valueOf(1.13)); + } + + // 计算总含税物料成本 + private BigDecimal calculateTaxMaterialCosts(BigDecimal noTaxMaterialCosts) { + return noTaxMaterialCosts.multiply(BigDecimal.valueOf(1.13)); + } + + // 计算物料总不含税采购成本 + private BigDecimal calculateTotalNoTaxPurchaseRmb(List estimateDetailMaterialList) { + BigDecimal totalNoTaxPurchaseRmb = BigDecimal.ZERO; + for (SalesEstimateDetailMaterial detailMaterial : estimateDetailMaterialList) { + BigDecimal noTaxPurchaseRmb = detailMaterial.getNoTaxPurchaseRmb(); // 获取不含税采购单价 + Long useNum = detailMaterial.getUseNum(); // 获取用量 + totalNoTaxPurchaseRmb = totalNoTaxPurchaseRmb.add(noTaxPurchaseRmb.multiply(new BigDecimal(useNum))); // 计算总不含税采购成本 + } + return totalNoTaxPurchaseRmb; + } + + // 计算物料总含税采购成本 + private BigDecimal calculateTotalTaxPurchaseRmb(List estimateDetailMaterialList) { + BigDecimal totalTaxPurchaseRmb = BigDecimal.ZERO; + for (SalesEstimateDetailMaterial detailMaterial : estimateDetailMaterialList) { + BigDecimal taxPurchaseRmb = detailMaterial.getTaxPurchaseRmb(); // 获取含税采购单价 + Long useNum = detailMaterial.getUseNum(); // 获取用量 + totalTaxPurchaseRmb = totalTaxPurchaseRmb.add(taxPurchaseRmb.multiply(new BigDecimal(useNum))); // 计算总含税采购成本 + } + return totalTaxPurchaseRmb; + } + + // 计算不含税经营成本(RMB) + private BigDecimal calculateNoTaxOperatingCost(BigDecimal totalNoTaxPurchaseRmb, BigDecimal noTaxMaterialCosts, BigDecimal noAllTaxOperatingCosts) { + return totalNoTaxPurchaseRmb.divide(noTaxMaterialCosts, 2, RoundingMode.HALF_UP) + .multiply(noAllTaxOperatingCosts); + } + + // 计算含税经营成本(RMB) + private BigDecimal calculateTaxOperatingCost(BigDecimal totalTaxPurchaseRmb, BigDecimal taxMaterialCosts, BigDecimal allTaxOperatingCosts) { + return totalTaxPurchaseRmb.divide(taxMaterialCosts, 2, RoundingMode.HALF_UP) + .multiply(allTaxOperatingCosts); + } + + // 计算不含税料号估价成本 + private BigDecimal calculateNoTaxEstimateCost(BigDecimal totalNoTaxPurchaseRmb, BigDecimal noAllTaxOperatingCosts, BigDecimal noTaxMaterialCosts) { + return totalNoTaxPurchaseRmb.add(noAllTaxOperatingCosts) + .add(totalNoTaxPurchaseRmb.divide(noTaxMaterialCosts, 2, RoundingMode.HALF_UP) + .multiply(noAllTaxOperatingCosts)); + } + + // 计算含税料号估价成本 + private BigDecimal calculateTaxEstimateCost(BigDecimal totalTaxPurchaseRmb, BigDecimal allTaxOperatingCosts, BigDecimal taxMaterialCosts) { + return totalTaxPurchaseRmb.add(allTaxOperatingCosts) + .add(totalTaxPurchaseRmb.divide(taxMaterialCosts, 2, RoundingMode.HALF_UP) + .multiply(allTaxOperatingCosts)); + } + + // 计算不含税单价(RMB) + private BigDecimal calculateNoTaxUnitPriceRmb(BigDecimal noTaxEstimateCost, BigDecimal profitRate) { + return noTaxEstimateCost.divide(BigDecimal.ONE.subtract(profitRate), 2, RoundingMode.HALF_UP); + } + + // 计算含税单价(RMB) + private BigDecimal calculateTaxUnitPriceRmb(BigDecimal taxEstimateCost, BigDecimal profitRate) { + return taxEstimateCost.divide(BigDecimal.ONE.subtract(profitRate), 2, RoundingMode.HALF_UP); + } + + // 计算不含税总价(RMB) + private BigDecimal calculateAllNoTaxRmb(BigDecimal noTaxUnitPriceRmb, Long materialNum) { + return noTaxUnitPriceRmb.multiply(new BigDecimal(materialNum)); + } + + // 计算含税总价(RMB) + private BigDecimal calculateAllTaxRmb(BigDecimal taxUnitPriceRmb, Long materialNum) { + return taxUnitPriceRmb.multiply(new BigDecimal(materialNum)); + } + + // 计算不含税单价(美元) + private BigDecimal calculateNoTaxUnitPriceDollar(BigDecimal noTaxUnitPriceRmb, BigDecimal usdRate) { + return noTaxUnitPriceRmb.divide(usdRate, 2, RoundingMode.HALF_UP); + } + + // 计算含税单价(美元) + private BigDecimal calculateTaxUnitPriceDollar(BigDecimal taxUnitPriceRmb, BigDecimal usdRate) { + return taxUnitPriceRmb.divide(usdRate, 2, RoundingMode.HALF_UP); + } + + // 计算不含税总价(美元) + private BigDecimal calculateAllNoTaxDollar(BigDecimal noTaxUnitPriceDollar, Long materialNum) { + return noTaxUnitPriceDollar.multiply(new BigDecimal(materialNum)); + } + + // 计算含税总价(美元) + private BigDecimal calculateAllTaxDollar(BigDecimal taxUnitPriceDollar, Long materialNum) { + return taxUnitPriceDollar.multiply(new BigDecimal(materialNum)); + } + + // 更新 SalesEstimateDetail 对象中的值 + private void updateSalesEstimateDetail(SalesEstimateDetail salesEstimateDetail, + BigDecimal noTaxOperatingCost, BigDecimal taxOperatingCost, + BigDecimal noTaxUnitPriceRmb, BigDecimal taxUnitPriceRmb, + BigDecimal allNoTaxRmb, BigDecimal allTaxRmb, + BigDecimal noTaxUnitPriceDollar, BigDecimal taxUnitPriceDollar, + BigDecimal allNoTaxDollar, BigDecimal allTaxDollar) { + salesEstimateDetail.setNoTaxOperatingCosts(noTaxOperatingCost); + salesEstimateDetail.setTaxOperatingCosts(taxOperatingCost); + salesEstimateDetail.setNoTaxRmb(noTaxUnitPriceRmb); + salesEstimateDetail.setTaxRmb(taxUnitPriceRmb); + salesEstimateDetail.setAllNoTaxRmb(allNoTaxRmb); + salesEstimateDetail.setAllTaxRmb(allTaxRmb); + salesEstimateDetail.setNoTaxDollar(noTaxUnitPriceDollar); + salesEstimateDetail.setTaxDollar(taxUnitPriceDollar); + salesEstimateDetail.setAllNoTaxDollar(allNoTaxDollar); + salesEstimateDetail.setAllTaxDollar(allTaxDollar); + } } diff --git a/ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAdd.html b/ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAdd.html new file mode 100644 index 00000000..77dbf266 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAdd.html @@ -0,0 +1,884 @@ + + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+ + % +
+
+
+ +
+ +
+ +
+
+ +
+

计算

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/sales/estimate/engineeringAdd.html b/ruoyi-admin/src/main/resources/templates/sales/estimate/engineeringAdd.html index bcd3e09a..f073a98c 100644 --- a/ruoyi-admin/src/main/resources/templates/sales/estimate/engineeringAdd.html +++ b/ruoyi-admin/src/main/resources/templates/sales/estimate/engineeringAdd.html @@ -64,8 +64,8 @@

计算

- - + +
diff --git a/ruoyi-admin/src/main/resources/templates/sales/estimate/estimate.html b/ruoyi-admin/src/main/resources/templates/sales/estimate/estimate.html index 305d8e03..15eed8d3 100644 --- a/ruoyi-admin/src/main/resources/templates/sales/estimate/estimate.html +++ b/ruoyi-admin/src/main/resources/templates/sales/estimate/estimate.html @@ -69,6 +69,8 @@ var restoreFlag = [[${@permission.hasPermi('sales:estimate:restore')}]]; var engineeringAddFlag = [[${@permission.hasPermi('sales:estimate:engineeringAdd')}]]; var purchaseAddFlag = [[${@permission.hasPermi('sales:estimate:purchaseAdd')}]]; + var ceoAddFlag = [[${@permission.hasPermi('sales:estimate:ceoAdd')}]]; + var estimateStatusDatas = [[${@dict.getType('estimate_status')}]]; var commonCurrencyDatas = [[${@dict.getType('sys_common_currency')}]]; @@ -174,7 +176,9 @@ if(row.estimateStatus == '1'){ actions.push('采购成本 '); } - + if(row.estimateStatus == '2'){ + actions.push('经营成本 '); + } return actions.join(''); } }] @@ -195,11 +199,18 @@ $.modal.open("添加BOM", url); } - //采购 添加BOM + //采购 添加采购成本 function purchaseAdd(salesEstimateId){ var url = prefix + "/purchaseAdd/" + salesEstimateId; $.modal.open("采购成本", url); } + + //总经理 添加成本 + function ceoAdd(salesEstimateId){ + var url = prefix + "/ceoAdd/" + salesEstimateId; + $.modal.open("经营成本", url); + } + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/sales/estimate/purchaseAdd.html b/ruoyi-admin/src/main/resources/templates/sales/estimate/purchaseAdd.html index c93c7ff7..c30a1668 100644 --- a/ruoyi-admin/src/main/resources/templates/sales/estimate/purchaseAdd.html +++ b/ruoyi-admin/src/main/resources/templates/sales/estimate/purchaseAdd.html @@ -64,8 +64,8 @@

计算

- - + +