From 5a96b6b8174bf2c595e6c691b6ffc3a52970a0e7 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期六, 19 七月 2025 13:36:05 +0800
Subject: [PATCH] 盘点差异单功能优化
---
rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx | 63 +++++++++++++++++++++
rsf-admin/src/page/orders/check/CheckOrderItemList.jsx | 3
rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx | 33 ++++++++--
rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx | 14 ----
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java | 2
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java | 30 ++++++++++
6 files changed, 121 insertions(+), 24 deletions(-)
diff --git a/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx b/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx
index ee9768e..c4e97ff 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx
@@ -41,7 +41,6 @@
import PageDrawer from "../../components/PageDrawer";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
-
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
height: '.9em',
@@ -152,6 +151,7 @@
<TextField source="memo" label="common.field.memo" sortable={false} />
</StyledDatagrid>
</List>
+
{/* <OutOrderItemCreate
open={createDialog}
setOpen={setCreateDialog}
@@ -172,6 +172,7 @@
</>
)
}
+
OutOrderItemList.Context = React.createContext()
export default OutOrderItemList;
diff --git a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
index 053acb4..f813bbb 100644
--- a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
+++ b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
@@ -92,7 +92,6 @@
const CheckDiffList = () => {
const translate = useTranslate();
-
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
@@ -146,7 +145,6 @@
<WrapperField cellClassName="opt" label="common.field.opt">
<EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
{/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */}
- <CheckButton />
</WrapperField>
</StyledDatagrid>
</List>
@@ -165,15 +163,3 @@
}
export default CheckDiffList;
-
-const CheckButton = () => {
- const record = useRecordContext();
- const handleEditClick = (btn) => {
- btn.stopPropagation()
-
- }
-
- return (
- <ConfirmButton label={"ra.action.approved"} startIcon={<ApiOutlinedIcon />} onConfirm={handleEditClick} size={"small"} />
- )
-}
diff --git a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx
index 16208cf..2ebe8e5 100644
--- a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx
+++ b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx
@@ -32,6 +32,8 @@
AutocompleteInput,
DeleteButton,
useGetRecordId,
+ Button,
+ useRefresh,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -39,11 +41,10 @@
import BillStatusField from '../../../components/BillStatusField';
import ApiOutlinedIcon from '@mui/icons-material/ApiOutlined';
import ConfirmButton from '../../../components/ConfirmButton';
-import PageDrawer from "../../../components/PageDrawer";
-import MyField from "../../../components/MyField";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
-import * as Common from '@/utils/common';
import CheckDiffField from "../../../components/CheckDiffField";
+import CheckDiffResonDialog from "./CheckDiffResonDialog";
+import request from '@/utils/request';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
@@ -92,6 +93,13 @@
const orderId = useGetRecordId();
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
+ const [waveRule, setWaveRule] = useState(false);
+
+ //鑾峰彇娉㈡瑙勫垯
+ const closeDialog = async (value) => {
+ setWaveRule(false)
+
+ }
return (
<Box display="flex">
@@ -145,12 +153,13 @@
<TextField source="createBy$" label="common.field.createBy" />
<DateField source="createTime" label="common.field.createTime" showTime />
<TextField source="memo" label="common.field.memo" sortable={false} />
- <BillStatusField cellClassName="status" source="exceStatus" label="table.field.checkOrder.exceStatus" />
+ <BillStatusField cellClassName="status" source="exceStatus$" label="table.field.checkOrder.exceStatus" />
<WrapperField cellClassName="opt" label="common.field.opt">
<CheckButton />
</WrapperField>
</StyledDatagrid>
</List>
+ {/* <CheckDiffResonDialog open={waveRule} setOpen={setWaveRule} onClose={closeDialog} /> */}
</Box>
)
}
@@ -158,13 +167,21 @@
const CheckButton = () => {
const record = useRecordContext();
- const handleEditClick = (btn) => {
- btn.stopPropagation()
-
+ const notify = useNotify();
+ const refresh = useRefresh();
+ const handleEditClick = async () => {
+ record.exceStatus = 2;
+ const { data: { code, data, msg } } = await request.post(`/checkDiffItem/update`, record);
+ if (code === 200) {
+ notify(msg);
+ refresh()
+ } else {
+ notify(msg);
+ }
}
return (
- <ConfirmButton label={"ra.action.approved"} startIcon={<ApiOutlinedIcon />} onConfirm={handleEditClick} size={"small"} />
+ record?.exceStatus != 2 ? <><ConfirmButton label={"ra.action.approved"} startIcon={<ApiOutlinedIcon />} onConfirm={handleEditClick} size={"small"} /></> : <></>
)
}
diff --git a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx
new file mode 100644
index 0000000..4995c2d
--- /dev/null
+++ b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx
@@ -0,0 +1,63 @@
+import { Box, Card, Grid, List, LinearProgress, Select, MenuItem, ListItemText, ListItemAvatar, Avatar, ListItemButton, Dialog, DialogTitle, ListItem, DialogContent, DialogActions, Button } from "@mui/material";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_TYPE } from '@/config/setting';
+import { SimpleForm, TextInput, ReferenceInput, useTranslate, AutocompleteInput } from "react-admin";
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import { Delete, Edit, Add } from '@mui/icons-material';
+import SaveIcon from '@mui/icons-material/Save';
+import request from '@/utils/request';
+
+const CheckDiffResonDialog = (props) => {
+ const translate = useTranslate();
+ const { onClose, selectedValue, open, setOpen } = props;
+ const [siteNos, setSiteNos] = useState([]);
+ const [formData, setFormData] = useState({
+ id: DEFAULT_TYPE
+ });
+
+ const handleClose = () => {
+ onClose(null);
+ }
+
+ const handleSelect = () => {
+ onClose(formData);
+ }
+
+ const handleListItemClick = (value) => {
+ onClose(value);
+ }
+
+ const handleChange = (event) => {
+ console.log(event);
+ setFormData({ id: event })
+ };
+
+ return (
+ <Dialog
+ onClose={handleClose}
+ open={open}
+ aria-labelledby="alert-dialog-title"
+ aria-describedby="alert-dialog-description"
+ >
+ <DialogTitle id="alert-dialog-title">{translate("toolbar.selectWave")}</DialogTitle>
+ <DialogContent sx={{ width: 600 }}>
+ <SimpleForm toolbar={false} defaultValue={formData}>
+ <ReferenceInput source="id" reference="waveRule" >
+ <AutocompleteInput
+ label={'toolbar.selectWave'}
+ defaultValue={DEFAULT_TYPE}
+ onChange={handleChange}
+ />
+ </ReferenceInput>
+ </SimpleForm>
+ </DialogContent>
+ <DialogActions>
+ <Button onClick={handleClose} variant="outlined">{translate('toolbar.cancel')}</Button>
+ <Button onClick={handleSelect} autoFocus startIcon={<SaveIcon />} variant="contained">
+ {translate('toolbar.confirm')}
+ </Button>
+ </DialogActions>
+ </Dialog>
+ );
+}
+
+export default CheckDiffResonDialog;
\ No newline at end of file
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
index 120283a..b3ddb91 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
@@ -1,16 +1,22 @@
package com.vincent.rsf.server.manager.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.common.annotation.OperationLog;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.KeyValVo;
import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.entity.CheckDiff;
import com.vincent.rsf.server.manager.entity.CheckDiffItem;
+import com.vincent.rsf.server.manager.enums.CheckDiffExceStatus;
import com.vincent.rsf.server.manager.service.CheckDiffItemService;
+import com.vincent.rsf.server.manager.service.CheckDiffService;
+import com.vincent.rsf.server.manager.service.impl.CheckDiffServiceImpl;
import com.vincent.rsf.server.system.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -18,12 +24,15 @@
import javax.servlet.http.HttpServletResponse;
import java.util.*;
+import java.util.stream.Collectors;
@RestController
public class CheckDiffItemController extends BaseController {
@Autowired
private CheckDiffItemService checkDiffItemService;
+ @Autowired
+ private CheckDiffService checkDiffService;
@PreAuthorize("hasAuthority('manager:checkDiff:list')")
@PostMapping("/checkDiffItem/page")
@@ -74,6 +83,27 @@
if (!checkDiffItemService.updateById(checkDiffItem)) {
return R.error("Update Fail");
}
+
+ List<CheckDiffItem> diffItems = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>().eq(CheckDiffItem::getCheckId, checkDiffItem.getCheckId()));
+ if (!diffItems.isEmpty()) {
+ Map<Integer, List<CheckDiffItem>> listMap = diffItems.stream().collect(Collectors.groupingBy(CheckDiffItem::getExceStatus));
+ List<CheckDiffItem> checkDiffItems = listMap.get(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val);
+ if (diffItems.size() == checkDiffItems.size()) {
+ if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>()
+ .eq(CheckDiff::getId, checkDiffItem.getCheckId())
+ .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val))) {
+ throw new CoolException("鐩樼偣鍗曠姸鎬佹洿鏂板け璐ワ紒锛�");
+ }
+ } else {
+ if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>()
+ .eq(CheckDiff::getId, checkDiffItem.getCheckId())
+ .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val))) {
+ throw new CoolException("鐩樼偣鍗曠姸鎬佹洿鏂板け璐ワ紒锛�");
+ }
+ }
+ }
+
+
return R.ok("Update Success").add(checkDiffItem);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java
index 000e375..f783c6b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java
@@ -11,7 +11,7 @@
//鐩樼偣宸紓鍗曟墽琛岀姸鎬�
CHECK_DIFF_EXCE_STATUS_INIT("0", "鍒濆鍖�"),
- CHECK_DIFF_EXCE_STATUS_HOLD("1", "寰呭鏍�"),
+ CHECK_DIFF_EXCE_STATUS_HOLD("1", "澶勭悊涓�"),
CHECK_DIFF_EXCE_STATUS_END("2", "宸插鏍�"),
;
--
Gitblit v1.9.1