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