From 1a4f64865ad5f7eefaded61d09def3fdfec4b177 Mon Sep 17 00:00:00 2001 From: chenhao Date: Thu, 4 Dec 2025 10:53:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(sip):=20=E6=96=B0=E5=A2=9E=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E5=87=BA=E5=BA=93=E4=BB=B7=E5=90=8C=E6=AD=A5=E5=8F=8A?= =?UTF-8?q?=E5=BA=94=E4=BB=98=E5=8D=95=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 InventoryInfo.listByDeliveryId 方法以支持按出库单查询库存信息 - 在 InventoryDeliveryServiceImpl 中实现保存出库信息时同步更新出库价 - 实现出库时自动生成应付单逻辑,包括税率配置读取与金额计算 - 增加 selectOutPriceByCode 查询用于获取项目产品的价格信息 - 扩展 VendorInfo 支持付款类型枚举,区分入库付款与出库付款 - 修改 OmsPayableBill 实体类,增加项目编码、名称等字段并优化结构 - 优化应付单 Controller 接口,支持更灵活的查询条件 - 重构应付单 Mapper XML 文件,增强关联查询与筛选功能 - 在应付单 Service 层新增事务控制与默认付款计划创建逻辑 - 移除前端精确货币舍入工具函数,改用 decimal.js 进行高精度运算 - 注册全局计算工具至 Vue 实例,替换原有金额计算方式提升准确性 --- oms_web/oms_vue/package.json | 3 +- oms_web/oms_vue/src/main.js | 2 + oms_web/oms_vue/src/utils/calc.js | 38 +++++++++ oms_web/oms_vue/src/utils/ruoyi.js | 6 -- .../src/views/approve/order/ConfigInfo.vue | 6 +- .../src/views/project/info/ProductConfig.vue | 33 ++++---- .../components/PurchaseOrderDetail.vue | 12 +-- .../components/PurchaseOrderDetailView.vue | 8 +- .../controller/OmsPayableBillController.java | 20 +++-- .../com/ruoyi/sip/domain/OmsPayableBill.java | 22 +++-- .../java/com/ruoyi/sip/domain/VendorInfo.java | 14 ++++ .../ruoyi/sip/mapper/InventoryInfoMapper.java | 1 + .../sip/mapper/InventoryOuterMapper.java | 3 + .../ruoyi/sip/mapper/VendorInfoMapper.java | 2 + .../sip/service/IInventoryInfoService.java | 2 + .../ruoyi/sip/service/IVendorInfoService.java | 1 + .../impl/InventoryDeliveryServiceImpl.java | 48 +++++++++++ .../impl/InventoryInfoServiceImpl.java | 5 ++ .../impl/OmsInventoryInnerServiceImpl.java | 40 +++++----- .../impl/OmsPayableBillServiceImpl.java | 36 +++++++-- .../service/impl/VendorInfoServiceImpl.java | 5 ++ .../mapper/finance/OmsPayableBillMapper.xml | 80 ++++++++++++++----- .../mapper/inventory/InventoryInfoMapper.xml | 6 ++ .../mapper/inventory/InventoryOuterMapper.xml | 10 +++ .../mapper/system/VendorInfoMapper.xml | 4 + 25 files changed, 312 insertions(+), 95 deletions(-) create mode 100644 oms_web/oms_vue/src/utils/calc.js diff --git a/oms_web/oms_vue/package.json b/oms_web/oms_vue/package.json index 9b44bc24..dccf5b15 100644 --- a/oms_web/oms_vue/package.json +++ b/oms_web/oms_vue/package.json @@ -48,7 +48,8 @@ "vue-cropper": "0.5.5", "vue-router": "3.4.9", "vuedraggable": "2.24.3", - "vuex": "3.6.0" + "vuex": "3.6.0", + "decimal.js": "10.4.2" }, "devDependencies": { "@vue/cli-plugin-babel": "4.4.6", diff --git a/oms_web/oms_vue/src/main.js b/oms_web/oms_vue/src/main.js index da017509..189b9dfc 100644 --- a/oms_web/oms_vue/src/main.js +++ b/oms_web/oms_vue/src/main.js @@ -4,7 +4,9 @@ import Cookies from 'js-cookie' import Element from 'element-ui' import './assets/styles/element-variables.scss' +import * as Calc from '@/utils/calc' +Vue.prototype.$calc = Calc // 全局挂载 import '@/assets/styles/index.scss' // global css import '@/assets/styles/ruoyi.scss' // ruoyi css import App from './App' diff --git a/oms_web/oms_vue/src/utils/calc.js b/oms_web/oms_vue/src/utils/calc.js new file mode 100644 index 00000000..37c814de --- /dev/null +++ b/oms_web/oms_vue/src/utils/calc.js @@ -0,0 +1,38 @@ +import Decimal from 'decimal.js' + +// 默认保留小数位(你可根据业务修改,比如金额一般 2 位) +const DEFAULT_DP = 2 + +// 内部方法:统一转换 Decimal,避免 null/undefined 报错 +function D(n) { + return new Decimal(n || 0) +} + +/** + * 保留小数位 & 四舍五入 + * @param value 数值 + * @param dp 保留位数(默认 DEFAULT_DP) + */ +export function toFixed(value, dp = DEFAULT_DP) { + return D(value).toDecimalPlaces(dp).toNumber() +} + +// 加法 +export function add(a, b, dp = DEFAULT_DP) { + return D(a).plus(b).toDecimalPlaces(dp).toNumber() +} + +// 减法 +export function sub(a, b, dp = DEFAULT_DP) { + return D(a).minus(b).toDecimalPlaces(dp).toNumber() +} + +// 乘法 +export function mul(a, b, dp = DEFAULT_DP) { + return D(a).times(b).toDecimalPlaces(dp).toNumber() +} + +// 除法 +export function div(a, b, dp = DEFAULT_DP) { + return D(a).div(b || 1).toDecimalPlaces(dp).toNumber() +} diff --git a/oms_web/oms_vue/src/utils/ruoyi.js b/oms_web/oms_vue/src/utils/ruoyi.js index ae9eadfb..3de2d98d 100644 --- a/oms_web/oms_vue/src/utils/ruoyi.js +++ b/oms_web/oms_vue/src/utils/ruoyi.js @@ -226,9 +226,3 @@ export function getNormalPath(p) { export function blobValidate(data) { return data.type !== 'application/json' } -export function preciseCurrencyRound(amount,decimalPlace) { - if (decimalPlace){ - return Number(Math.round(amount + `e${decimalPlace}`) + `e-${decimalPlace}`); - } - return Number(Math.round(amount + 'e2') + 'e-2'); -} diff --git a/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue b/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue index 7a7c3db1..488e46dd 100644 --- a/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue +++ b/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue @@ -206,7 +206,6 @@