From 15ed897e0bd9ec3ac56f260e326b21ffd4bafae9 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 13 六月 2025 08:04:25 +0800
Subject: [PATCH] 新增自定义编辑列 新增自定义出库路由
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 2
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java | 9 --
rsf-admin/src/page/orders/outStock/OutOrderModal.jsx | 18 ++++-
rsf-admin/src/page/orders/outStock/OutStockPublic.jsx | 72 ++++++++++++++++++------
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java | 11 +++
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java | 29 +++++++++
rsf-server/src/main/resources/application.yml | 2
rsf-admin/src/i18n/zh.js | 2
rsf-admin/src/page/orders/outStock/OutOrderList.jsx | 9 ++
rsf-admin/src/i18n/en.js | 2
10 files changed, 120 insertions(+), 36 deletions(-)
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 1365548..1d4627b 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -79,6 +79,8 @@
result: 'Contacts import complete. Imported %{success} success, with %{error} errors',
},
loadMore: 'Load More Data',
+ updateSucc: 'Update Success',
+ updateFaild: 'Update Failed',
complete: 'Complete',
deprecate: 'Deprecate',
stockError: 'Empty',
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 119968f..a52e088 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -81,6 +81,8 @@
result: '瀵煎叆瀹屾垚銆傚凡瀵煎叆 %{success} 鎴愬姛, 鍜� %{error} 澶辫触',
},
loadMore: '鍔犺浇鏇村',
+ updateSucc: '鏇存柊鎴愬姛',
+ updateFaild: '鏇存柊澶辫触',
complete: '瀹屾垚',
deprecate: '搴熷純',
stockError: '娌℃湁搴撳瓨',
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index a13d58c..955b074 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -37,6 +37,7 @@
Button,
useRedirect,
useUnselectAll,
+ useRecordSelection,
} from 'react-admin';
import { Box, Typography, Card, Stack, Drawer } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -57,6 +58,7 @@
import AddTaskIcon from '@mui/icons-material/AddTask';
import PageEditDrawer from "../../components/PageEditDrawer";
import OutStockPublic from "./OutStockPublic";
+import OutOrderPreview from "./OutOrderPreview";
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
@@ -114,6 +116,7 @@
const translate = useTranslate();
const [createDialog, setCreateDialog] = useState(false);
const [manualDialog, setManualDialog] = useState(false);
+ const [preview, setPreview] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
const [modalType, setmodalType] = useState(0);
const [select, setSelect] = useState(0);
@@ -191,13 +194,16 @@
<OutOrderModal
open={createDialog}
setOpen={setCreateDialog}
+ preview={preview}
+ setPreview={setPreview}
/>
+ <OutOrderPreview open={preview} setOpen={setPreview} />
<PageEditDrawer
title={"toolbar.publicWorking"}
drawerVal={drawerVal}
setDrawerVal={setDrawerVal}
>
- <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal}/>
+ <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal} />
</PageEditDrawer>
</Box >
)
@@ -257,7 +263,6 @@
const record = useRecordContext();
const notify = useNotify();
const refresh = useRefresh();
-
const createByOrder = async (event) => {
event.stopPropagation();
setCreateDialog(true);
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
index b8222e7..229b284 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -46,6 +46,8 @@
import request from '@/utils/request';
import SaveIcon from '@mui/icons-material/Save';
import CheckCircleIcon from '@mui/icons-material/CheckCircle';
+import EditableTextField from "../../components/EditableTextField";
+import OutOrderPreview from "./OutOrderPreview";
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
@@ -90,9 +92,11 @@
]
const OutOrderModal = (props) => {
- const { open, setOpen, record } = props;
+ const { open, setOpen, preview, setPreview, record } = props;
const translate = useTranslate();
const [params, setParams] = useState({});
+ const [select, setSelect] = useState([]);
+
const [drawerVal, setDrawerVal] = useState(false);
const refresh = useRefresh();
@@ -221,7 +225,7 @@
/>
<StyledDatagrid
preferenceKey='deliveryItem'
- bulkActionButtons={<AddOutStockButton setOpen={setOpen} />}
+ bulkActionButtons={<AddOutStockButton setOpen={setOpen} setPreview={setPreview} setSelect={setSelect}/>}
rowClick={(id, resource, record) => false}
expand={false}
expandSingle={true}
@@ -247,6 +251,9 @@
</Grid>
</DialogContent>
</Grid>
+ <Grid>
+ <OutOrderPreview open={preview} setOpen={setPreview} selectedIds={select} />
+ </Grid>
</Dialog >
)
}
@@ -254,7 +261,7 @@
export default OutOrderModal;
const AddOutStockButton = (props) => {
- const { setOpen } = props;
+ const { setOpen, setPreview, setSelect } = props;
const { selectedIds, onUnselectItems } = useListContext();
const notify = useNotify();
const refresh = useRefresh();
@@ -265,9 +272,10 @@
} else {
notify(res.data.msg);
}
- refresh();
+ setPreview(true)
+ setSelect(selectedIds);
onUnselectItems();
- setOpen(false);
+ // refresh();
}
return (
diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
index e63b5a2..b5748f6 100644
--- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
@@ -69,14 +69,39 @@
const notify = useNotify();
const gridRef = useGridApiRef();
const [rows, setRows] = useState([]);
+ const [fetchRows, setFetchRows] = useState([]);
const translate = useTranslate();
+ const [rowSelectedIds, setRowSelectedIds] = useState([]);
+ const [selectedMatnr, setSelectedMatnr] = useState([]);
const [selectedIds, setSelectedIds] = useState([]);
- const [formData, setFormData] = useState({
- orderId: record?.id,
- waveId: DEFAULT_TYPE
- });
+ const [formData, setFormData] = useState({ orderId: record?.id, waveId: DEFAULT_TYPE });
const [dialog, setDialog] = useState(false);
const [selectedValue, setSelectedValue] = useState({});
+
+ useEffect(() => {
+ if (selectedMatnr.length < 1) {
+ setRows(fetchRows)
+ } else {
+ const mas = fetchRows.filter(item => selectedMatnr.includes(item.matnrCode));
+ setRows(mas)
+ }
+ }, [selectedMatnr])
+
+
+ const handleRowClick = (id, resource, record) => {
+ setRowSelectedIds(prev =>
+ prev.includes(id)
+ ? prev.filter(item => item !== id) // 鍙栨秷閫夋嫨
+ : [...prev, id] // 娣诲姞閫夋嫨
+ );
+
+ //璁剧疆搴撲綅淇℃伅绛涢�夋潯浠�
+ setSelectedMatnr(prev =>
+ prev.includes(record?.matnrCode)
+ ? prev.filter(item => item !== record?.matnrCode) // 鍙栨秷閫夋嫨
+ : [...prev, record?.matnrCode] // 娣诲姞閫夋嫨
+ );
+ };
const handleClickOpen = () => {
setDialog(true);
@@ -85,13 +110,23 @@
const handleClose = (value) => {
setDialog(false);
setSelectedValue(value);
- const newRows = rows.map(item => {
- return selectedIds.includes(item?.id) ? {
- ...item,
- siteNo: value?.site
- } : item
- })
- setRows(newRows);
+ if (selectedIds.length == 0) {
+ const newRows = rows.map(item => {
+ return {
+ ...item,
+ siteNo: value?.site
+ }
+ })
+ setRows(newRows);
+ } else {
+ const newRows = rows.map(item => {
+ return selectedIds.includes(item?.id) ? {
+ ...item,
+ siteNo: value?.site
+ } : item
+ })
+ setRows(newRows);
+ }
};
useEffect(() => {
@@ -107,6 +142,7 @@
const { data: { code, data, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...formData });
if (code === 200) {
setRows(data)
+ setFetchRows(data)
} else {
notify(msg);
}
@@ -161,9 +197,11 @@
sx={{ height: "2px", position: 'absolute', top: 0, left: 0, right: 0, }}
/>
<StyledDatagrid
+ storeKey={"outStockPublic"}
preferenceKey='outStockItem'
bulkActionButtons={<></>}
- rowClick={false}
+ rowClick={handleRowClick}
+ selectedIds={rowSelectedIds}
omit={['id', 'splrName', 'qty', 'poCode', 'workQty']}
>
<NumberField source="id" />
@@ -181,8 +219,8 @@
</Card>
</Grid>
<Grid item xl={6.3} gap={2}>
- <Card>
- <Box sx={{ height: 500, width: '100%' }}>
+ <Card sx={{ minHeight: 1050, height: 'calc(100% - 10px)', width: '100%' }}>
+ <Box>
<PreviewTable
rows={rows}
gridRef={gridRef}
@@ -223,7 +261,6 @@
}
}, [selectedIds])
-
const baseColumns = [
// { field: 'id', headerName: 'ID', width: 40 },
{ field: 'locCode', headerName: '搴撲綅', width: 110 },
@@ -232,8 +269,7 @@
{ field: 'batch', headerName: '鎵规', width: 90 },
{ field: 'unit', headerName: '鍗曚綅', width: 60 },
{ field: 'outQty', headerName: '鍑哄簱鏁伴噺', width: 110, },
- {
- field: 'anfme', headerName: '搴撳瓨鏁伴噺', width: 110,
+ { field: 'anfme', headerName: '搴撳瓨鏁伴噺', width: 110,
renderCell: (params) => (
<OutStockAnfme value={params.value} />
)
@@ -379,6 +415,7 @@
return (
<DataGrid
+ storeKey={"locItemPreview"}
rows={rows}
columns={columns}
slots={{ toolbar: CustomToolBar }}
@@ -393,7 +430,6 @@
/>
)
}
-
//鎻愪氦鎸夐挳
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
index 1ee268e..e140809 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
@@ -63,6 +63,17 @@
}
@PreAuthorize("hasAuthority('manager:outStock:list')")
+ @PostMapping("/outStock/dialog/page")
+ public R dialogPage(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<AsnOrder, BaseParam> pageParam = new PageParam<>(baseParam, AsnOrder.class);
+ QueryWrapper<AsnOrder> queryWrapper = pageParam.buildWrapper(true);
+ List<String> list = Arrays.asList(OrderType.ORDER_OUT.type);
+ queryWrapper.in("type", list);
+ return R.ok().add(outStockService.page(pageParam, queryWrapper));
+ }
+
+ @PreAuthorize("hasAuthority('manager:outStock:list')")
@PostMapping("/outStock/list")
public R list(@RequestBody Map<String, Object> map) {
return R.ok().add(outStockService.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getType, OrderType.ORDER_OUT.type)));
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java
index 0e11b1c..1ad99ee 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
@@ -48,7 +49,32 @@
public R page(@RequestBody Map<String, Object> map) {
BaseParam baseParam = buildParam(map, BaseParam.class);
PageParam<AsnOrderItem, BaseParam> pageParam = new PageParam<>(baseParam, AsnOrderItem.class);
- return R.ok().add(outStockItemService.listByAsnId(pageParam, pageParam.buildWrapper(true)));
+ QueryWrapper<AsnOrderItem> queryWrapper = pageParam.buildWrapper(true);
+ if (!Objects.isNull(map.get("poDetlId"))) {
+ queryWrapper.in("po_detl_id", JSONArray.parseArray(JSONArray.toJSONString(map.get("poDetlId")), Long.class));
+ }
+ return R.ok().add(outStockItemService.listByAsnId(pageParam, queryWrapper));
+ }
+
+
+ @PreAuthorize("hasAuthority('manager:outStockItem:list')")
+ @ApiOperation("鍒嗛〉鑾峰彇鍒楄〃")
+ @PostMapping("/outStockItem/edit/page")
+ public R byPoIdspage(@RequestBody Map<String, Object> map) {
+ List<Long> poDetlIds = new ArrayList<>();
+ if (!Objects.isNull(map.get("poDetlId"))) {
+ poDetlIds = JSONArray.parseArray(JSONArray.toJSONString(map.get("poDetlId")), Long.class);
+ map.remove("poDetlId");
+ }
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<AsnOrderItem, BaseParam> pageParam = new PageParam<>(baseParam, AsnOrderItem.class);
+ QueryWrapper<AsnOrderItem> queryWrapper = pageParam.buildWrapper(true);
+ if (!poDetlIds.isEmpty()) {
+ queryWrapper.in("po_detl_id", poDetlIds);
+ } else {
+ return R.ok();
+ }
+ return R.ok().add(outStockItemService.listByAsnId(pageParam, queryWrapper));
}
@PreAuthorize("hasAuthority('manager:outStockItem:list')")
@@ -106,6 +132,7 @@
return R.ok("Update Success").add(asnOrderItem);
}
+
@PreAuthorize("hasAuthority('manager:outStockItem:remove')")
@OperationLog("Delete 鍑哄簱鍗曟槑缁�")
@PostMapping("/outStockItem/remove/{ids}")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index 3165298..c1b7c48 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -115,18 +115,11 @@
}
Double orgQty = locItems.stream().mapToDouble(LocItem::getAnfme).sum();
- Double workQty = locItems.stream().mapToDouble(LocItem::getWorkQty).sum();
List<LocItem> locItemList = listMap.get(key);
Double outQty = locItemList.stream().mapToDouble(LocItem::getOutQty).sum();
-// Task serviceOne = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, loc.getBarcode()));
-// if (!Objects.isNull(serviceOne)) {
-// throw new CoolException("鎵樼洏浠诲姟鎵ц涓紝涓嶈兘閲嶅鍒涘缓锛�");
-// }
-
if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK) || map.getType().equals(Constants.TASK_TYPE_ORDER_OUT_STOCK)) {
- Double useQty = Math.round((outQty + workQty) * 10000) / 10000.0;
- if (orgQty.compareTo(useQty) > 0) {
+ if (orgQty.compareTo(outQty) > 0) {
//鎷f枡鍑哄簱
DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getSite, siteNo)
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 7948911..01a31d2 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
@@ -446,7 +446,7 @@
if (Objects.isNull(param)) {
continue;
}
- Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, param.getBarcode()));
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, param.getLocCode()).eq(Loc::getBarcode, param.getBarcode()));
if (!Objects.isNull(loc)) {
List<LocItem> locItems = new ArrayList<>();
LocItem locItem = locItemService.getById(param.getId());
diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml
index ac31a5b..db51329 100644
--- a/rsf-server/src/main/resources/application.yml
+++ b/rsf-server/src/main/resources/application.yml
@@ -25,7 +25,7 @@
# global-config:
# field-strategy: 0
configuration:
-# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
cache-enabled: true
call-setters-on-nulls: true
--
Gitblit v1.9.1