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