From d3f479a5e246d808688f85ca0b59e86c92621dbf Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 二月 2026 14:38:50 +0800
Subject: [PATCH] 标签浮点处理
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 17 +++--
rsf-admin/src/layout/TabsBar.jsx | 124 +++++++++++++++++++++++++----------------
2 files changed, 86 insertions(+), 55 deletions(-)
diff --git a/rsf-admin/src/layout/TabsBar.jsx b/rsf-admin/src/layout/TabsBar.jsx
index 6ffa4c4..cf1d663 100644
--- a/rsf-admin/src/layout/TabsBar.jsx
+++ b/rsf-admin/src/layout/TabsBar.jsx
@@ -275,47 +275,47 @@
setContextMenuTab(null);
};
- // 鍏抽棴宸︿晶鏍囩椤碉紙淇濈暀鎸囧畾鏍囩椤靛強鍏跺彸渚х殑鎵�鏈夋爣绛鹃〉锛�
- // const handleCloseLeft = (keepTabPath) => {
- // const keepTabIndex = tabs.findIndex(tab => tab.path === keepTabPath);
- // if (keepTabIndex < 0) {
- // return;
- // }
+ //鍏抽棴宸︿晶鏍囩椤碉紙淇濈暀鎸囧畾鏍囩椤靛強鍏跺彸渚х殑鎵�鏈夋爣绛鹃〉锛�
+ const handleCloseLeft = (keepTabPath) => {
+ const keepTabIndex = tabs.findIndex(tab => tab.path === keepTabPath);
+ if (keepTabIndex < 0) {
+ return;
+ }
- // // 淇濈暀鎸囧畾鏍囩椤靛強鍏跺彸渚х殑鎵�鏈夋爣绛鹃〉
- // const newTabs = tabs.slice(keepTabIndex);
+ // 淇濈暀鎸囧畾鏍囩椤靛強鍏跺彸渚х殑鎵�鏈夋爣绛鹃〉
+ const newTabs = tabs.slice(keepTabIndex);
- // // 纭繚dashboard濮嬬粓鍦ㄧ涓�浣嶏紙濡傛灉瀛樺湪锛�
- // const dashboardTab = newTabs.find(tab => tab.path === '/dashboard');
- // if (dashboardTab && newTabs[0].path !== '/dashboard') {
- // const dashboardIndex = newTabs.findIndex(tab => tab.path === '/dashboard');
- // if (dashboardIndex > 0) {
- // newTabs.splice(dashboardIndex, 1);
- // newTabs.unshift(dashboardTab);
- // }
- // }
+ // 纭繚dashboard濮嬬粓鍦ㄧ涓�浣嶏紙濡傛灉瀛樺湪锛�
+ const dashboardTab = newTabs.find(tab => tab.path === '/dashboard');
+ if (dashboardTab && newTabs[0].path !== '/dashboard') {
+ const dashboardIndex = newTabs.findIndex(tab => tab.path === '/dashboard');
+ if (dashboardIndex > 0) {
+ newTabs.splice(dashboardIndex, 1);
+ newTabs.unshift(dashboardTab);
+ }
+ }
- // saveTabs(newTabs);
- // setTabs(newTabs);
- // setContextMenu(null);
- // setContextMenuTab(null);
- // };
+ saveTabs(newTabs);
+ setTabs(newTabs);
+ setContextMenu(null);
+ setContextMenuTab(null);
+ };
// 鍏抽棴鍙充晶鏍囩椤碉紙淇濈暀鎸囧畾鏍囩椤靛強鍏跺乏渚х殑鎵�鏈夋爣绛鹃〉锛�
- // const handleCloseRight = (keepTabPath) => {
- // const keepTabIndex = tabs.findIndex(tab => tab.path === keepTabPath);
- // if (keepTabIndex < 0) {
- // return;
- // }
+ const handleCloseRight = (keepTabPath) => {
+ const keepTabIndex = tabs.findIndex(tab => tab.path === keepTabPath);
+ if (keepTabIndex < 0) {
+ return;
+ }
- // // 淇濈暀鎸囧畾鏍囩椤靛強鍏跺乏渚х殑鎵�鏈夋爣绛鹃〉
- // const newTabs = tabs.slice(0, keepTabIndex + 1);
+ // 淇濈暀鎸囧畾鏍囩椤靛強鍏跺乏渚х殑鎵�鏈夋爣绛鹃〉
+ const newTabs = tabs.slice(0, keepTabIndex + 1);
- // saveTabs(newTabs);
- // setTabs(newTabs);
- // setContextMenu(null);
- // setContextMenuTab(null);
- // };
+ saveTabs(newTabs);
+ setTabs(newTabs);
+ setContextMenu(null);
+ setContextMenuTab(null);
+ };
// 澶勭悊鍙抽敭鑿滃崟
const handleContextMenu = (event, tab) => {
@@ -373,18 +373,18 @@
};
// 鍙抽敭鑿滃崟锛氬叧闂乏渚ф爣绛�
- // const handleCloseLeftTabs = () => {
- // if (contextMenuTab) {
- // handleCloseLeft(contextMenuTab.path);
- // }
- // };
+ const handleCloseLeftTabs = () => {
+ if (contextMenuTab) {
+ handleCloseLeft(contextMenuTab.path);
+ }
+ };
// 鍙抽敭鑿滃崟锛氬叧闂彸渚ф爣绛�
- // const handleCloseRightTabs = () => {
- // if (contextMenuTab) {
- // handleCloseRight(contextMenuTab.path);
- // }
- // };
+ const handleCloseRightTabs = () => {
+ if (contextMenuTab) {
+ handleCloseRight(contextMenuTab.path);
+ }
+ };
// 鑾峰彇褰撳墠鏍囩椤电储寮�
@@ -549,13 +549,33 @@
? { top: contextMenu.mouseY, left: contextMenu.mouseX }
: undefined
}
+ PaperProps={{
+ sx: {
+ minWidth: 120,
+ borderRadius: '8px',
+ boxShadow: '0 4px 20px rgba(0,0,0,0.08)',
+ mt: 0.5,
+ py: 0.5,
+ },
+ }}
+ MenuListProps={{
+ sx: { py: 0 },
+ }}
>
{contextMenuTab && contextMenuTab.closable && (
- <MenuItem onClick={handleCloseCurrentTab}>
+ <MenuItem
+ onClick={handleCloseCurrentTab}
+ sx={{
+ fontSize: '0.8125rem',
+ py: 0.75,
+ px: 1.5,
+ minHeight: 'auto',
+ }}
+ >
{t('ra.action.close', '鍏抽棴褰撳墠鏍囩')}
</MenuItem>
)}
- {/* {contextMenuTab && canCloseLeftForTab(contextMenuTab.path) && (
+ {contextMenuTab && canCloseLeftForTab(contextMenuTab.path) && (
<MenuItem onClick={handleCloseLeftTabs}>
{t('ra.action.closeLeft', '鍏抽棴宸︿晶鏍囩')}
</MenuItem>
@@ -564,9 +584,17 @@
<MenuItem onClick={handleCloseRightTabs}>
{t('ra.action.closeRight', '鍏抽棴鍙充晶鏍囩')}
</MenuItem>
- )} */}
+ )}
{contextMenuTab && canCloseOthersForTab(contextMenuTab.path) && (
- <MenuItem onClick={handleCloseOtherTabs}>
+ <MenuItem
+ onClick={handleCloseOtherTabs}
+ sx={{
+ fontSize: '0.8125rem',
+ py: 0.75,
+ px: 1.5,
+ minHeight: 'auto',
+ }}
+ >
{t('ra.action.closeOthers', '鍏抽棴鍏朵粬鏍囩')}
</MenuItem>
)}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index 9da1c20..2bc9667 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -29,6 +29,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -47,6 +48,8 @@
public Logger logger = LoggerFactory.getLogger(this.getClass());
+ /** 鍑哄簱鍓╀綑閲忓宸細灏忎簬绛変簬姝ゅ�艰涓哄凡鍒嗛厤瀹岋紝閬垮厤娴偣璇樊浜х敓澶氫綑鈥滃簱瀛樹笉瓒斥�濊 */
+ private static final BigDecimal ISSUED_TOLERANCE = new BigDecimal("0.000001");
@Autowired
private AsnOrderItemService asnOrderItemService;
@@ -681,9 +684,8 @@
Set<ExistDto> existDtos = new HashSet<>();
for (WkOrderItem wkOrderItem : wkOrderItems) {
BigDecimal issued = new BigDecimal(wkOrderItem.getAnfme().toString())
- .subtract(new BigDecimal(wkOrderItem.getWorkQty().toString())
- );
- if (issued.doubleValue() <= 0) {
+ .subtract(new BigDecimal(wkOrderItem.getWorkQty().toString()));
+ if (issued.compareTo(ISSUED_TOLERANCE) <= 0) {
continue;
}
List<LocItem> locItems = new ArrayList<>();
@@ -697,7 +699,7 @@
for (LocItem locItem : locItems) {
Loc loc = locService.getById(locItem.getLocId());
List<LocItem> itemList = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocCode, locItem.getLocCode()));
- if (issued.doubleValue() > 0) {
+ if (issued.compareTo(ISSUED_TOLERANCE) > 0) {
ExistDto existDto = new ExistDto().setBatch(locItem.getBatch()).setMatnr(locItem.getMatnrCode()).setLocNo(locItem.getLocCode());
if (existDtos.add(existDto)) {
locItem.setOutQty(issued.doubleValue() >= locItem.getAnfme() ? locItem.getAnfme() : issued.doubleValue());
@@ -730,14 +732,15 @@
}
}
}
- if (issued.doubleValue() > 0) {
+ if (issued.compareTo(ISSUED_TOLERANCE) > 0) {
+ double remaining = issued.setScale(6, RoundingMode.HALF_UP).doubleValue();
LocItem locItem = new LocItem()
.setId(new Random().nextLong())
.setMatnrCode(wkOrderItem.getMatnrCode())
.setMaktx(wkOrderItem.getMaktx())
.setAnfme(0.00)
- .setWorkQty(issued.doubleValue())
- .setOutQty(issued.doubleValue())
+ .setWorkQty(remaining)
+ .setOutQty(remaining)
.setUnit(wkOrderItem.getStockUnit())
.setBatch(wkOrderItem.getSplrBatch());
OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
--
Gitblit v1.9.1