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