From 671b836ea629891889fad234c135f7e6f4b17745 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 12 五月 2025 19:34:46 +0800
Subject: [PATCH] 质检功能优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspectResult.java                    |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java         |    1 
 rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml                               |   40 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java                     |   58 ++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java                 |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java                        |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java                         |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java            |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java |   10 +
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx                                        |   38 +++-
 rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx                                                |    8 -
 rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx                                           |  125 +++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java          |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java        |   87 ++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java            |   12 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java    |   21 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java       |    2 
 rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx                                                 |    4 
 rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx                                              |    4 
 19 files changed, 394 insertions(+), 37 deletions(-)

diff --git a/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx b/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx
index 3c01e8c..44c3407 100644
--- a/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx
+++ b/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx
@@ -116,7 +116,7 @@
                 actions={(
                     <TopToolbar>
                         <AsnCreatButton />
-                        <MyCreateButton onClick={() => { setOpCreateDialog(true) }} />
+                        {/* <MyCreateButton onClick={() => { setOpCreateDialog(true) }} /> */}
                         <FilterButton />
                         <SelectColumnsButton preferenceKey='qlyInspect' />
                         <MyExportButton />
@@ -174,6 +174,8 @@
 
 const PrintLabelButton = () => {
     const record = useRecordContext();
+
+
 }
 
 const InspectionButton = () => {
diff --git a/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx b/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx
index 56e5e25..ffaa64c 100644
--- a/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx
+++ b/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx
@@ -102,14 +102,6 @@
                 storeKey="qlyIsptItem"
                 resource="qlyIsptItem"
                 filter={{ ispectId: isptId }}
-                sx={{
-                    flexGrow: 1,
-                    transition: (theme) =>
-                        theme.transitions.create(['all'], {
-                            duration: theme.transitions.duration.enteringScreen,
-                        }),
-                    marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
-                }}
                 title={"menu.qlyIsptItem"}
                 empty={false}
                 filters={filters}
diff --git a/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx b/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
index 142f9d4..fbccc69 100644
--- a/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
+++ b/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
@@ -65,7 +65,7 @@
 }));
 
 const QlyIsptItemResult = (props) => {
-    const { record, drawerVal, setDrawerVal } = props
+    const { record, drawerVal, setDrawerVal, from } = props
     const translate = useTranslate();
     const [createDialog, setCreateDialog] = useState(false);
     const handleClose = (event, reason) => {
@@ -97,7 +97,7 @@
                 <List
                     storeKey="IsptItem"
                     resource="qlyIsptItem/ispt/result"
-                    filter={{ id: record?.id }}
+                    filter={{ id: record?.id, type: '1' }}
                     empty={false}
                     filters={false}
                     sort={{ field: "create_time", order: "desc" }}
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
index 911e62c..7218a76 100644
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -45,6 +45,8 @@
 import MyField from "../components/MyField";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
 import * as Common from '@/utils/common';
+import WarehouseIsptResult from "./WarehouseIsptResult"
+
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -96,21 +98,13 @@
 
 const WarehouseAreasItemList = () => {
     const translate = useTranslate();
-
+    const [itemInfo, setItemInfo] = useState({})
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
 
     return (
         <Box display="flex">
             <List
-                sx={{
-                    flexGrow: 1,
-                    transition: (theme) =>
-                        theme.transitions.create(['all'], {
-                            duration: theme.transitions.duration.enteringScreen,
-                        }),
-                    marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
-                }}
                 title={"menu.warehouseAreasItem"}
                 empty={false}
                 filters={filters}
@@ -118,25 +112,35 @@
                 actions={(
                     <TopToolbar>
                         <FilterButton />
-                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                         <SelectColumnsButton preferenceKey='warehouseAreasItem' />
                         <MyExportButton />
                     </TopToolbar>
                 )}
                 perPage={DEFAULT_PAGE_SIZE}
             >
-               <DynamicFields />
+                <DynamicFields
+                    drawerVal={drawerVal}
+                    setDrawerVal={setDrawerVal}
+                    itemInfo={itemInfo}
+                    setItemInfo={setItemInfo} />
             </List>
             <WarehouseAreasItemCreate
                 open={createDialog}
                 setOpen={setCreateDialog}
             />
-            <PageDrawer
+            <WarehouseIsptResult
+                record={itemInfo}
+                drawerVal={drawerVal}
+                from="warehosueItem"
+                setDrawerVal={setDrawerVal}
+            >
+            </WarehouseIsptResult>
+            {/* <PageDrawer
                 title='WarehouseAreasItem Detail'
                 drawerVal={drawerVal}
                 setDrawerVal={setDrawerVal}
             >
-            </PageDrawer>
+            </PageDrawer> */}
         </Box>
     )
 }
@@ -145,6 +149,7 @@
 
 
 const DynamicFields = (props) => {
+    const { drawerVal, setDrawerVal, itemInfo, setItemInfo } = props
     const translate = useTranslate();
     const notify = useNotify();
     const [columns, setColumns] = useState([]);
@@ -169,6 +174,13 @@
                 <NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" />,
                 <NumberField source="workQty" label="table.field.warehouseAreasItem.workQty" />,
                 <NumberField source="qty" label="table.field.warehouseAreasItem.qty" />,
+                <MyField source="isptQty" label="table.field.qlyIsptItem.anfme"
+                    onClick={(event, record, val) => {
+                        event.stopPropagation();
+                        setItemInfo(record)
+                        setDrawerVal(!!drawerVal && drawerVal === val ? null : val);
+                    }}
+                />,
                 <TextField source="splrBatch" label="table.field.warehouseAreasItem.splrBtch" />,
                 <TextField source="batch" label="table.field.warehouseAreasItem.batch" />,
                 <TextField source="unit" label="table.field.warehouseAreasItem.unit" />,
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx
new file mode 100644
index 0000000..4e2d90a
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx
@@ -0,0 +1,125 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+    List,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    SelectColumnsButton,
+    EditButton,
+    FilterButton,
+    CreateButton,
+    ExportButton,
+    BulkDeleteButton,
+    WrapperField,
+    useRecordContext,
+    useTranslate,
+    useNotify,
+    useListContext,
+    FunctionField,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+    TextInput,
+    DateTimeInput,
+    DateInput,
+    SelectInput,
+    NumberInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    AutocompleteInput,
+    DeleteButton,
+    useGetOne,
+    Button,
+    useRefresh,
+    useGetRecordId,
+} from 'react-admin';
+import { Box, Typography, Card, Stack, LinearProgress, Dialog, DialogActions, DialogContent, DialogTitle, } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import DialogCloseButton from "../components/DialogCloseButton";
+import request from '@/utils/request';
+import MyField from "@/page/components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
+
+
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 200
+    },
+}));
+
+const WarehouseIsptResult = (props) => {
+    const { record, drawerVal, setDrawerVal, from } = props
+    const translate = useTranslate();
+    const [createDialog, setCreateDialog] = useState(false);
+    const handleClose = (event, reason) => {
+        if (reason !== "backdropClick") {
+            setDrawerVal(false);
+        }
+    };
+
+    return (
+        <Dialog
+            open={drawerVal}
+            onClose={handleClose}
+            aria-labelledby="form-dialog-title"
+            fullWidth
+            disableRestoreFocus
+            maxWidth="lg"
+        >
+            <DialogTitle id="form-dialog-title" sx={{
+                position: 'sticky',
+                top: 0,
+                backgroundColor: 'background.paper',
+                zIndex: 1000
+            }}>
+                <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+                    <DialogCloseButton onClose={handleClose} />
+                </Box>
+            </DialogTitle>
+            <DialogContent sx={{ mt: 2 }}>
+                <List
+                    storeKey="ReceiptIsptItem"
+                    resource="warehouseAreasItem/ispts"
+                    filter={{ id: record?.id}}
+                    empty={false}
+                    filters={false}
+                    sort={{ field: "create_time", order: "desc" }}
+                    actions={false}
+                    perPage={DEFAULT_ITEM_PAGE_SIZE}
+                >
+                    <StyledDatagrid
+                        preferenceKey='ReceiptIsptItem'
+                        bulkActionButtons={false}
+                        rowClick={false}
+                        omit={['id', 'memo', 'dlyQty', 'label', 'stockBatch', 'picPath', 'ispectId']}
+                    >
+                        <NumberField source="id" />
+                        <NumberField source="ispectId" label="table.field.qlyIsptItem.ispectId" />
+                        <TextField source="matnrCode" label="table.field.qlyIsptItem.matnrCode" />
+                        <TextField source="maktx" label="table.field.qlyIsptItem.maktx" />
+                        <TextField source="label" label="table.field.qlyIsptItem.label" />
+                        <TextField source="splrBatch" label="table.field.qlyIsptItem.splrBatch" />
+                        <NumberField source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />
+                        <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" />
+                        <TextField source="splrName" label="table.field.qlyIsptItem.splrName" />
+                        <NumberField source="isptResult$" label="table.field.qlyIsptItem.isptResult" />
+                    </StyledDatagrid>
+                </List>
+            </DialogContent>
+        </Dialog>
+    )
+}
+
+export default WarehouseIsptResult;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index c012a35..3b87f18 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -349,6 +349,7 @@
                 .eq(WarehouseAreasItem::getAsnCode, item.getAsnCode())
                 .eq(!Cools.isEmpty(item.getIsptResult()), WarehouseAreasItem::getIsptResult, item.getIsptResult())
                 .eq(StringUtils.isNotBlank(item.getSplrBatch()), WarehouseAreasItem::getSplrBatch, item.getSplrBatch()));
+
         if (!Objects.isNull(serviceOne)) {
             item.setId(serviceOne.getId());
             item.setAnfme(item.getAnfme() + serviceOne.getAnfme());
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
index a3cfdec..af8e95b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
@@ -13,12 +13,15 @@
 import com.vincent.rsf.server.manager.controller.params.IsptOrderParam;
 import com.vincent.rsf.server.manager.controller.params.QlyInspectAndItem;
 import com.vincent.rsf.server.manager.entity.QlyInspect;
+import com.vincent.rsf.server.manager.entity.QlyIsptItem;
 import com.vincent.rsf.server.manager.service.QlyInspectService;
+import com.vincent.rsf.server.manager.service.QlyIsptItemService;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.controller.BaseController;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -27,12 +30,15 @@
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
+@Slf4j
 @Api(tags = "璐ㄦ淇℃伅")
 @RestController
 public class QlyInspectController extends BaseController {
 
     @Autowired
     private QlyInspectService qlyInspectService;
+    @Autowired
+    private QlyIsptItemService qlyIsptItemService;
 
     @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
     @PostMapping("/qlyInspect/page")
@@ -140,7 +146,11 @@
             return R.error("鏈夋槑缁嗗崟鎹凡鍦ㄨ川妫�涓紒锛�");
         }
         if (!qlyInspectService.removeByIds(Arrays.asList(ids))) {
-            return R.error("Delete Fail");
+            return R.error("涓诲崟鍒犻櫎澶辫触锛侊紒");
+        }
+
+        if (!qlyIsptItemService.remove(new LambdaQueryWrapper<QlyIsptItem>().in(QlyIsptItem::getIspectId, ids))) {
+            return R.error("鏄庣粏鍒犻櫎澶辫触锛侊紒");
         }
         return R.ok("Delete Success").add(ids);
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
index 2635d05..d9dc12b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
@@ -49,6 +50,26 @@
         return R.ok().add(page);
     }
 
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PostMapping("/warehouseAreasItem/ispts/page")
+    public R getIsptPage(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WarehouseAreasItem, BaseParam> pageParam = new PageParam<>(baseParam, WarehouseAreasItem.class);
+        QueryWrapper<WarehouseAreasItem> queryWrapper = pageParam.buildWrapper(true);
+        /**鎷兼帴鎵╁睍瀛楁*/
+        IPage<WarehouseAreasItem> page = warehouseAreasItemService.pageByItemId(pageParam, queryWrapper);
+        List<WarehouseAreasItem> records = page.getRecords();
+        for (WarehouseAreasItem record : records) {
+            if (!Objects.isNull(record.getFieldsIndex())) {
+                Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
+                record.setExtendFields(fields);
+            }
+        }
+        page.setRecords(records);
+        return R.ok().add(page);
+    }
+
     @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
     @PostMapping("/warehouseAreasItem/list")
     public R list(@RequestBody Map<String, Object> map) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
index 70a6250..bf0bdee 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -42,6 +42,8 @@
     @ApiModelProperty(value= "ASN涓诲崟鏍囪瘑")
     private Long asnId;
 
+
+
     /**
      * 骞冲彴鏍囪瘑锛堣鍙凤級
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspectResult.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspectResult.java
index 0351555..43c8832 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspectResult.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspectResult.java
@@ -43,6 +43,9 @@
     @ApiModelProperty(value= "璐ㄦ鏄庣粏鍗旾D")
     private Long isptItemId;
 
+    @ApiModelProperty("鏀惰揣鍖哄簱瀛業D")
+    private Long rcptId;
+
     /**
      * 鏁伴噺
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
index 2d9c809..ff43690 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
@@ -47,6 +47,9 @@
 
     @ApiModelProperty("鍗曟嵁鏄庣粏ID")
     private Long asnItemId;
+
+    @ApiModelProperty("鏀惰揣鏄庣粏ID")
+    private Long rcptId;
     /**
      * 缂栧彿
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java
index 41fb1cb..d2172fe 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java
@@ -1,12 +1,19 @@
 package com.vincent.rsf.server.manager.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 @Mapper
 @Repository
 public interface WarehouseAreasItemMapper extends BaseMapper<WarehouseAreasItem> {
 
+    IPage<WarehouseAreasItem> pageByItemId(PageParam<WarehouseAreasItem, BaseParam> pageParam, @Param(Constants.WRAPPER) QueryWrapper<WarehouseAreasItem> queryWrapper);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index 6519f6d..98df1ce 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -2,7 +2,9 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
 import com.vincent.rsf.server.common.config.SysStockProperties;
 import com.vincent.rsf.server.common.utils.CommonUtil;
 import com.vincent.rsf.server.common.utils.DateUtils;
@@ -110,13 +112,20 @@
                             .setAreaName(areaName)
                             .setAsnId(order.getId());
                     items.add(param);
+                    Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getId, item.getMatnrId()));
+                    if (Objects.isNull(matnr)) {
+                        throw new CoolException("鐗╂枡涓嶅瓨鍦紒锛�");
+                    }
+                    //鏇存柊鏀惰揣鍖哄簱瀛�
+                    extracted(one, item, order, matnr);
+
                     if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>().set(AsnOrderItem::getQty, item.getAnfme()).eq(AsnOrderItem::getId, item.getId()))) {
                         throw new CoolException("鏀惰揣鍗曟槑缁嗗畬鎴愭暟閲忎慨鏀瑰け璐ワ紒锛�");
                     }
                 }
-                if (!warehouseAreasItemService.saveBatch(items)) {
-                    throw new CoolException("鏀惰揣鍗曚繚瀛樿嚦鏀惰揣鍖烘墽琛屽け璐ワ紒锛�");
-                }
+//                if (!warehouseAreasItemService.saveBatch(items)) {
+//                    throw new CoolException("鏀惰揣鍗曚繚瀛樿嚦鏀惰揣鍖烘墽琛屽け璐ワ紒锛�");
+//                }
 
                 if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>()
                         .set(AsnOrder::getQty, order.getQty())
@@ -130,6 +139,49 @@
 
 
     /**
+     * @author Ryan
+     * @date 2025/5/12
+     * @description: 鏀惰揣鍖哄簱瀛樻洿鏂�
+     * @version 1.0
+     */
+    private void extracted(WarehouseAreas areasItem, AsnOrderItem orderItem, AsnOrder asnOrder, Matnr matnr) {
+        WarehouseAreasItem item = new WarehouseAreasItem();
+        item.setTrackCode(orderItem.getBarcode())
+                .setAreaName(areasItem.getName())
+                .setAreaId(areasItem.getId())
+                .setAsnItemId(orderItem.getId())
+                .setAsnCode(asnOrder.getCode())
+                .setAsnId(asnOrder.getId())
+                .setProdTime(orderItem.getProdTime())
+                //搴撳瓨鍗曚綅涓烘渶灏忓崟浣�
+                .setUnit(orderItem.getStockUnit())
+                .setStockUnit(orderItem.getStockUnit())
+                .setMatnrCode(matnr.getCode())
+                .setAnfme(orderItem.getAnfme())
+                .setMatnrId(matnr.getId())
+                .setIsptResult(orderItem.getIsptResult())
+                .setMaktx(matnr.getName())
+                .setWeight(matnr.getWeight())
+                .setFieldsIndex(orderItem.getFieldsIndex())
+                .setShipperId(matnr.getShipperId());
+        WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>()
+                .eq(WarehouseAreasItem::getMatnrCode, item.getMatnrCode())
+                .eq(!Cools.isEmpty(item.getFieldsIndex()), WarehouseAreasItem::getFieldsIndex, item.getFieldsIndex())
+                .eq(WarehouseAreasItem::getAsnCode, item.getAsnCode())
+                .eq(!Cools.isEmpty(item.getIsptResult()), WarehouseAreasItem::getIsptResult, item.getIsptResult())
+                .eq(StringUtils.isNotBlank(item.getSplrBatch()), WarehouseAreasItem::getSplrBatch, item.getSplrBatch()));
+        if (!Objects.isNull(serviceOne)) {
+            item.setId(serviceOne.getId());
+            item.setAnfme(item.getAnfme() + serviceOne.getAnfme());
+        }
+        //鏈川妫�
+        if (!warehouseAreasItemService.saveOrUpdate(item)) {
+            throw new CoolException("鏀惰揣澶辫触锛侊紒");
+        }
+    }
+
+
+    /**
      * @return
      * @throws
      * @author Ryan
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 6870db3..d2a4283 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -1,7 +1,11 @@
 package com.vincent.rsf.server.manager.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
 import org.apache.ibatis.annotations.Param;
 
@@ -11,4 +15,5 @@
 
     List<WarehouseAreasItem> getList();
 
+    IPage<WarehouseAreasItem> pageByItemId(PageParam<WarehouseAreasItem, BaseParam> pageParam, QueryWrapper<WarehouseAreasItem> queryWrapper);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
index 92480e9..1e74587 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -250,7 +250,7 @@
         try {
             if (Objects.isNull(asnOrderItem.getFieldsIndex()) || StringUtils.isBlank(asnOrderItem.getFieldsIndex())) {
                 StringBuffer sb = new StringBuffer();
-                if (!asnOrderItem.getExtendFields().isEmpty()) {
+                if (!Objects.isNull(asnOrderItem.getExtendFields()) && !asnOrderItem.getExtendFields().isEmpty()) {
                     Map<String, String> fields = asnOrderItem.getExtendFields();
                     asnOrderItem.getExtendFields().keySet().forEach(key -> {
                         sb.append(fields.get(key));
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
index 1ca78d1..c163e61 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
@@ -174,6 +174,7 @@
                 isptItem.setAsnItemId(orderItem.getId())
                         .setIspectId(inspect.getId())
                         .setRcptQty(orderItem.getAnfme())
+                        .setRcptId(orderItem.getId())
                         .setAnfme(0.0)
                         .setFieldsIndex(orderItem.getFieldsIndex())
                         .setSplrBatch(orderItem.getSplrBatch())
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java
index f4457a3..ddf7c51 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java
@@ -8,17 +8,14 @@
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.controller.params.IsptItemsParams;
-import com.vincent.rsf.server.manager.entity.QlyInspect;
-import com.vincent.rsf.server.manager.entity.QlyInspectResult;
+import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.QlyIsptResult;
 import com.vincent.rsf.server.manager.mapper.QlyIsptItemMapper;
-import com.vincent.rsf.server.manager.entity.QlyIsptItem;
 import com.vincent.rsf.server.manager.service.AsnOrderItemService;
 import com.vincent.rsf.server.manager.service.QlyInspectResultService;
 import com.vincent.rsf.server.manager.service.QlyInspectService;
 import com.vincent.rsf.server.manager.service.QlyIsptItemService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +37,8 @@
     private QlyInspectResultService qlyInspectResultService;
     @Autowired
     private QlyIsptItemService qlyIsptItemService;
+    @Autowired
+    private WarehouseAreasItemServiceImpl warehouseAreasItemService;
 
     /**
      * @param
@@ -76,6 +75,7 @@
 
             QlyInspectResult result = new QlyInspectResult();
             result.setIsptId(item.getIspectId())
+                    .setRcptId(item.getRcptId())
                     .setIsptItemId(item.getId());
             if (!Objects.isNull(item.getDisQty()) && item.getDisQty().compareTo(0.00) > 0) {
                 result.setAnfme(item.getDisQty())
@@ -85,6 +85,7 @@
 
             result = new QlyInspectResult();
             result.setIsptId(item.getIspectId())
+                    .setRcptId(item.getRcptId())
                     .setIsptItemId(item.getId());
             if (!Objects.isNull(item.getSafeQty()) && item.getSafeQty().compareTo(0.00) > 0) {
                 result.setAnfme(item.getSafeQty())
@@ -104,10 +105,28 @@
                     .eq(QlyIsptItem::getId, item.getId()))) {
                 throw new CoolException("鍗曟嵁鏄庣粏鏁伴噺淇敼澶辫触锛侊紒");
             }
+
+            WarehouseAreasItem orderItem = warehouseAreasItemService.getById(item.getRcptId());
+            if (Objects.isNull(orderItem)) {
+                throw new CoolException("鏀惰揣鍗曟嵁涓嶅瓨鍦紒锛�");
+            }
+            Double sum = item.getDisQty() + item.getSafeQty();
+            orderItem.setIsptQty(sum);
+
+            if (!warehouseAreasItemService.updateById(orderItem)) {
+                throw new CoolException("鏀惰揣鍖哄簱瀛樹俊鎭洿鏂板け璐ワ紒锛�");
+            }
+
+            if (Objects.isNull(orderItem.getIsptResult())) {
+                operateReceipt(item, orderItem);
+            } else {
+
+            }
         }
 
         Set<Long> isptIds = isptItem.stream().map(QlyIsptItem::getIspectId).collect(Collectors.toSet());
-        List<QlyInspectResult> items = qlyInspectResultService.list(new LambdaQueryWrapper<QlyInspectResult>().in(QlyInspectResult::getIsptId, isptIds));
+        List<QlyInspectResult> items = qlyInspectResultService.list(new LambdaQueryWrapper<QlyInspectResult>()
+                .in(QlyInspectResult::getIsptId, isptIds));
         Double sum = items.stream().mapToDouble(QlyInspectResult::getAnfme).sum();
         if (sum.compareTo(0.00) > 0) {
             qlyInspectService.update(new LambdaUpdateWrapper<QlyInspect>()
@@ -116,7 +135,56 @@
                     .eq(QlyInspect::getId, isptItem.stream().findFirst().get().getIspectId()));
         }
 
+//        qlyIsptItemService.pageByIsptResult(null, new QueryWrapper<QlyIsptItem>())
         return true;
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/5/12
+     * @description: 璐ㄦ鍚庝慨鏀规敹璐у尯瀛樹俊鎭�
+     * @version 1.0
+     */
+    private void operateReceipt(QlyIsptItem item, WarehouseAreasItem orderItem) {
+        Double sum = item.getDisQty() + item.getSafeQty();
+        if (sum.compareTo(orderItem.getAnfme()) >= 0) {
+            //瀹屾垚璐ㄦ,鍋氭洿鏂版搷浣�
+            if (item.getSafeQty().compareTo(0.0) > 0) {
+                orderItem.setIsptQty(item.getSafeQty());
+                orderItem.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val);
+                if (!warehouseAreasItemService.updateById(orderItem)) {
+                    throw new CoolException("鏀惰揣鍖哄簱瀛樻槑缁嗘洿鏂板け璐ワ紒锛�");
+                }
+            }
+
+            if (item.getDisQty().compareTo(0.0) > 0) {
+                orderItem.setIsptQty(item.getDisQty())
+                        .setId(null)
+                        .setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_DEFECT.val);
+                if (!warehouseAreasItemService.saveOrUpdate(orderItem)) {
+                    throw new CoolException("鏀惰揣鍖哄簱瀛樻槑缁嗘洿鏂板け璐ワ紒锛�");
+                }
+            }
+        } else {
+            //鏈畬鎴愬仛娣诲姞鎿嶄綔
+            if (item.getSafeQty().compareTo(0.0) > 0) {
+                orderItem.setIsptQty(item.getSafeQty())
+                        .setId(null)
+                        .setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val);
+                if (!warehouseAreasItemService.saveOrUpdate(orderItem)) {
+                    throw new CoolException("鏀惰揣鍖哄簱瀛樻槑缁嗘洿鏂板け璐ワ紒锛�");
+                }
+            }
+
+            if (item.getDisQty().compareTo(0.0) > 0) {
+                orderItem.setIsptQty(item.getDisQty())
+                        .setId(null)
+                        .setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_DEFECT.val);
+                if (!warehouseAreasItemService.saveOrUpdate(orderItem)) {
+                    throw new CoolException("鏀惰揣鍖哄簱瀛樻槑缁嗘洿鏂板け璐ワ紒锛�");
+                }
+            }
+        }
     }
 
     /**
@@ -132,7 +200,7 @@
             List<QlyIsptItem> records = page.getRecords();
             for (int i = 0; i < records.size(); i++) {
                 List<QlyInspectResult> results = qlyInspectResultService.list(new QueryWrapper<QlyInspectResult>()
-                        .select("id, ispt_result, SUM(anfme) anfme, ispt_item_id, ispt_id")
+                        .select("id, ispt_result, SUM(anfme) anfme, ispt_item_id, ispt_id, rcpt_id")
                         .lambda()
                         .eq(QlyInspectResult::getIsptItemId, records.get(i).getId()).groupBy(QlyInspectResult::getIsptResult));
                 if (!results.isEmpty()) {
@@ -152,6 +220,11 @@
 
     @Override
     public IPage<QlyIsptItem> pageByIsptResult(PageParam<QlyIsptItem, BaseParam> pageParam, QueryWrapper<QlyIsptItem> queryWrapper) {
-        return this.baseMapper.pageByWrapper(pageParam, queryWrapper);
+        if (Objects.isNull(pageParam)) {
+            PageParam<QlyIsptItem, BaseParam> param = new PageParam<>();
+            return this.baseMapper.selectPage(param, queryWrapper);
+        } else {
+            return this.baseMapper.pageByWrapper(pageParam, queryWrapper);
+        }
     }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
index bc7d6c3..3f9a887 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
@@ -1,5 +1,9 @@
 package com.vincent.rsf.server.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.manager.mapper.WarehouseAreasItemMapper;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
@@ -24,4 +28,10 @@
         }
         return areasItems;
     }
+
+    @Override
+    public IPage<WarehouseAreasItem> pageByItemId(PageParam<WarehouseAreasItem, BaseParam> pageParam, QueryWrapper<WarehouseAreasItem> queryWrapper) {
+        IPage<WarehouseAreasItem> itemIPage = this.baseMapper.pageByItemId(pageParam, queryWrapper);
+        return itemIPage;
+    }
 }
diff --git a/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml
index 28d48ba..efa07bb 100644
--- a/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml
+++ b/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml
@@ -1,5 +1,43 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.vincent.rsf.server.manager.mapper.WarehouseAreasItemMapper">
-
+    <select id="pageByItemId" resultType="com.vincent.rsf.server.manager.entity.WarehouseAreasItem">
+        SELECT *
+        FROM (SELECT qai.id,
+                     area_id,
+                     area_name,
+                     asn_id,
+                     plat_item_id,
+                     po_code,
+                     asn_code,
+                     asn_item_id,
+                     matnr_id,
+                     maktx,
+                     matnr_code,
+                     fields_index,
+                     work_qty,
+                     qty,
+                     splr_batch,
+                     unit,
+                     stock_unit,
+                     brand,
+                     splr_id,
+                     weight,
+                     prod_time,
+                     flag_norm,
+                     qir.anfme,
+                     qir.ispt_result,
+                     track_code,
+                     `status`,
+                     deleted,
+                     tenant_id,
+                     create_by,
+                     create_time,
+                     update_by,
+                     update_time,
+                     memo
+              FROM man_warehouse_areas_item qai
+                       LEFT JOIN man_qly_inspect_result qir ON qai.id = qir.rcpt_id) t
+            ${ew.customSqlSegment}
+    </select>
 </mapper>

--
Gitblit v1.9.1