From 8f5cdc2bae1ca3ebbe79db52b54591e8a0fb9321 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 17 四月 2025 16:25:05 +0800 Subject: [PATCH] 问题修复 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java | 11 + rsf-admin/src/page/components/MyExportButton.jsx | 39 +++-- rsf-admin/src/page/components/ConfirmButton.jsx | 2 rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx | 69 ++++++++- rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx | 12 + rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx | 10 + rsf-admin/src/i18n/core/chineseMessages.js | 2 rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx | 44 +++++- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java | 31 +++- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderLogService.java | 2 rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderLogController.java | 27 +++ rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java | 4 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java | 6 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java | 1 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java | 72 ++++++++++ rsf-admin/src/i18n/zh.js | 2 rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx | 27 +-- rsf-admin/src/i18n/en.js | 2 21 files changed, 297 insertions(+), 72 deletions(-) diff --git a/rsf-admin/src/i18n/core/chineseMessages.js b/rsf-admin/src/i18n/core/chineseMessages.js index 5cb87b2..375e8c7 100644 --- a/rsf-admin/src/i18n/core/chineseMessages.js +++ b/rsf-admin/src/i18n/core/chineseMessages.js @@ -23,7 +23,7 @@ remove: "绉婚櫎", save: "淇濆瓨", search: "鎼滅储", - select_all: "鍏ㄩ儴閫変腑", + select_all_button: "鍏ㄩ儴閫変腑", select_row: "閫変腑涓�琛�", show: "鏄剧ず", sort: "鎺掑簭", diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index 0ca7c32..6752740 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -886,6 +886,8 @@ batch: 'batch', confirm: 'confirm', cancel: "cancel", + bulkExport: "Bulk Export", + continue: 'Continue Receipt', selectSite: 'Select Site', top: "top", resort: "sort", diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index 32fb483..d4d0bb5 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -895,8 +895,10 @@ unenable: '绂佺敤', locInit: '搴撲綅鍒濆鍖�', siteInit: '绔欑偣鍒濆鍖�', + continue: '缁х画鏀惰揣', batch: '鎵归噺鎿嶄綔', confirm: '纭', + bulkExport: "鎵归噺瀵煎嚭", selectSite: '閫夋嫨绔欑偣', cancel: "鍙栨秷", top: "缃《", diff --git a/rsf-admin/src/page/components/ConfirmButton.jsx b/rsf-admin/src/page/components/ConfirmButton.jsx index c315e7c..446a506 100644 --- a/rsf-admin/src/page/components/ConfirmButton.jsx +++ b/rsf-admin/src/page/components/ConfirmButton.jsx @@ -20,7 +20,7 @@ setOpen(false); }; - const handleConfirm = (event) => { + const handleConfirm = (event) => { handleClose(event); onConfirm(); }; diff --git a/rsf-admin/src/page/components/MyExportButton.jsx b/rsf-admin/src/page/components/MyExportButton.jsx index f70dced..8922271 100644 --- a/rsf-admin/src/page/components/MyExportButton.jsx +++ b/rsf-admin/src/page/components/MyExportButton.jsx @@ -6,12 +6,14 @@ useDataProvider, useNotify, useListContext, + useUnselectAll, } from "react-admin"; const MyExportButton = (props) => { const { maxResults = 1000, onClick, + ids, label = "ra.action.export", icon = defaultIcon, exporter: customExporter, @@ -19,16 +21,18 @@ ...rest } = props; - const { filter, filterValues, resource, sort, total } = useListContext(); - + const { filter, selectedIds, filterValues, resource, sort, total } = useListContext(); + const unSelect = useUnselectAll(resource); + console.log(selectedIds); const dataProvider = useDataProvider(); const notify = useNotify(); - - const handleClick = useCallback( + const handleClick = + // useCallback( (event) => { dataProvider .export(resource, { sort, + ids: selectedIds, filter: filter ? { ...filterValues, ...filter } : filterValues, pagination: { page: 1, perPage: maxResults }, meta, @@ -43,6 +47,7 @@ document.body.appendChild(link); link.click(); link.remove(); + unSelect(); }) .catch((error) => { console.error(error); @@ -51,19 +56,19 @@ if (typeof onClick === "function") { onClick(event); } - }, - [ - dataProvider, - filter, - filterValues, - maxResults, - notify, - onClick, - resource, - sort, - meta, - ], - ); + } + // [ + // dataProvider, + // filter, + // filterValues, + // maxResults, + // notify, + // onClick, + // resource, + // sort, + // meta, + // ], + // ); return ( <Button diff --git a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx index 3cb07de..ce29d0c 100644 --- a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx +++ b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx @@ -31,6 +31,9 @@ ReferenceArrayInput, AutocompleteInput, DeleteButton, + Button, + useRecordSelection, + useRefresh, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -40,10 +43,11 @@ import MyCreateButton from "../../components/MyCreateButton"; import MyExportButton from '../../components/MyExportButton'; import PageDrawer from "../../components/PageDrawer"; -import MyField from "../../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; - +import request from '@/utils/request'; +import ConfirmButton from '../../components/ConfirmButton'; +import CachedIcon from '@mui/icons-material/Cached'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { height: '.9em' @@ -54,7 +58,7 @@ '& .column-name': { }, '& .opt': { - width: 200 + width: 150 }, })); @@ -118,7 +122,6 @@ actions={( <TopToolbar> <FilterButton /> - {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */} <SelectColumnsButton preferenceKey='asnOrderLog' /> <MyExportButton /> </TopToolbar> @@ -127,7 +130,11 @@ > <StyledDatagrid preferenceKey='asnOrderLog' - bulkActionButtons={false} + bulkActionButtons={ + <> + <MyExportButton /> + </> + } rowClick={'edit'} expand={false} expandSingle={true} @@ -145,12 +152,15 @@ <DateField source="arrTime" label="table.field.asnOrderLog.arrTime" showTime /> <TextField source="rleStatus$" label="table.field.asnOrderLog.rleStatus" sortable={false} /> <TextField source="ntyStatus$" label="table.field.asnOrderLog.ntyStatus" sortable={false} /> - <TextField source="updateBy$" label="common.field.updateBy" /> + <TextField source="updateBy$" label="common.field.updateBy" /> <DateField source="updateTime" label="common.field.updateTime" showTime /> - <TextField source="createBy$" label="common.field.createBy"/> + <TextField source="createBy$" label="common.field.createBy" /> <DateField source="createTime" label="common.field.createTime" showTime /> <BooleanField source="statusBool" label="common.field.status" sortable={false} /> <TextField source="memo" label="common.field.memo" sortable={false} /> + <WrapperField cellClassName="opt" label="common.field.opt"> + <ContinueButton /> + </WrapperField> </StyledDatagrid> </List> <AsnOrderLogCreate @@ -168,3 +178,23 @@ } export default AsnOrderLogList; + + +const ContinueButton = () => { + const refresh = useRefresh(); + const record = useRecordContext(); + const notify = useNotify(); + const continueReceipt = async () => { + const { data: { code, data, msg } } = await request.post(`/asnOrderLog/continue/${record.id}`); + if (code === 200) { + notify(msg); + } else { + notify(msg); + } + refresh(); + } + + return ( + <ConfirmButton label={"toolbar.continue"} startIcon={<CachedIcon />} onConfirm={continueReceipt} /> + ) + } \ No newline at end of file diff --git a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx index 958deb6..112f7f2 100644 --- a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx +++ b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx @@ -53,6 +53,16 @@ aside={<EditBaseAside />} > <SimpleForm + sx={{ + '& .MuiInputBase-input.MuiFilledInput-input.Mui-disabled': { + bgcolor: "white", + color: "black", + '-webkit-text-fill-color': "rgba(0, 0, 0)" + }, + '& .MuiFormLabel-root.MuiInputLabel-root.Mui-disabled': { + color: 'rgba(0, 0, 0, 0.77)' + } + }} shouldUnregister warnWhenUnsavedChanges toolbar={<FormToolbar />} diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx index d5e2a44..f8fe1fb 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx @@ -119,7 +119,7 @@ }} title={"menu.asnOrderItem"} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filter={{ asnId: asnId }} + filter={{ asnId: asnId, deleted: 0 }} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx index 1a1356a..a9c7a64 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx @@ -11,6 +11,7 @@ CreateButton, ExportButton, BulkDeleteButton, + useDataProvider, WrapperField, useRecordContext, useTranslate, @@ -34,6 +35,7 @@ DeleteButton, Button, useRedirect, + useUnselectAll, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -45,16 +47,15 @@ import BillStatusField from '../../components/BillStatusField'; import ConfirmButton from '../../components/ConfirmButton'; import PageDrawer from "../../components/PageDrawer"; -import MyField from "../../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; -import * as Common from '@/utils/common'; import ConstructionIcon from "@mui/icons-material/Construction"; -import FileDownloadIcon from '@mui/icons-material/FileDownload'; import EditIcon from '@mui/icons-material/Edit'; import TaskIcon from '@mui/icons-material/Task'; import CloseIcon from '@mui/icons-material/Close'; import request from '@/utils/request'; import DictionarySelect from "../../components/DictionarySelect"; +import ExitToAppIcon from '@mui/icons-material/ExitToApp'; + const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -106,18 +107,18 @@ ] -const AsnOrderList = () => { +const AsnOrderList = (props) => { const translate = useTranslate(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); const [modalType, setmodalType] = useState(0); const [select, setSelect] = useState(0); const billReload = useRef(); - const location = useLocation(); const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []; return ( <Box display="flex"> <List + resource="asnOrder" sx={{ flexGrow: 1, transition: (theme) => @@ -129,6 +130,7 @@ title={"menu.asnOrder"} empty={<EmptyData onClick={() => { setCreateDialog(true); setmodalType(0) }} />} filters={filters} + filter={{deleted: 0}} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> @@ -143,7 +145,14 @@ <StyledDatagrid sx={{ width: '100%' }} preferenceKey='asnOrder' - bulkActionButtons={<> <InspectionsButton /><BulkDeleteButton mutationMode={OPERATE_MODE} /></>} + bulkActionButtons={ + <> + <InspectionsButton /> + <MyExportButton /> + {/* <BtnBulkExport></BtnBulkExport> */} + <BulkDeleteButton mutationMode={OPERATE_MODE} + /> + </>} rowClick={false} expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo', 'poId', 'rleStatus$']} @@ -265,11 +274,56 @@ } } - return ( <Button onClick={inspection} label={"toolbar.inspection"}> <ConstructionIcon /> </Button> + ) +} + +const BtnBulkExport = () => { + const { filter, selectedIds, filterValues, resource, sort, total } = useListContext(); + const refresh = useRefresh(); + const dataProvider = useDataProvider(); + const notify = useNotify(); + const unSelect = useUnselectAll(resource); + + const bulkExport = () => { + getExport() + unSelect(); + } + const getExport = () => { + dataProvider + .export(resource, { + ids: selectedIds, + pagination: { page: 1, perPage: 1000 }, + }) + .then((res) => { + const url = window.URL.createObjectURL( + new Blob([res.data], { type: res.headers["content-type"] }), + ); + const link = document.createElement("a"); + link.href = url; + link.setAttribute("download", `${resource}.xlsx`); + document.body.appendChild(link); + link.click(); + link.remove(); + }) + .catch((error) => { + console.error(error); + notify("ra.notification.http_error", { type: "error" }); + }); + if (typeof onClick === "function") { + onClick(event); + } + }; + + return ( + <> + <Button label="toolbar.bulkExport" onClick={bulkExport}> + <ExitToAppIcon /> + </Button> + </> ) } @@ -287,7 +341,6 @@ notify(msg); } } - return ( record.exceStatus === 1 && (record.anfme === record.qty ? <Button onClick={requestComplete} label={"toolbar.complete"} color="success"> diff --git a/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx b/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx index 03e1721..f9b848c 100644 --- a/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx +++ b/rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx @@ -36,15 +36,11 @@ } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; -import QlyInspectCreate from "./QlyInspectCreate"; -import QlyInspectPanel from "./QlyInspectPanel"; import EmptyData from "../../components/EmptyData"; import MyCreateButton from "../../components/MyCreateButton"; import MyExportButton from '../../components/MyExportButton'; import PageDrawer from "../../components/PageDrawer"; -import MyField from "../../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; -import * as Common from '@/utils/common'; import ConstructionIcon from "@mui/icons-material/Construction"; import CloseIcon from "@mui/icons-material/Close"; import TaskIcon from '@mui/icons-material/Task'; @@ -69,6 +65,9 @@ const filters = [ <SearchInput source="condition" alwaysOn />, + <ReferenceInput source="isptStatus" label="table.field.qlyInspect.isptStatus" reference="dictData" filter={{ dictTypeCode: 'sys_qly_inspect_status' }} alwaysOn> + <AutocompleteInput source="value" optionText='label' optionValue="value" label="table.field.qlyInspect.isptStatus"></AutocompleteInput> + </ReferenceInput>, <TextInput source="code" label="table.field.qlyInspect.code" />, <TextInput source="wkType" label="table.field.qlyInspect.wkType" />, <NumberInput source="safeQty" label="table.field.qlyInspect.safeQty" />, @@ -95,6 +94,7 @@ return ( <Box display="flex"> <List + resource="qlyInspect" sx={{ flexGrow: 1, transition: (theme) => @@ -152,9 +152,9 @@ <InspectionButton /> <CompleteButton /> <CloseButton /> - </WrapperField> - </StyledDatagrid> - </List> + </WrapperField> + </StyledDatagrid> + </List> {/* <QlyInspectCreate open={createDialog} setOpen={setCreateDialog} @@ -182,17 +182,16 @@ const [createDialog, setCreateDialog] = useState(false); return ( - <> + record.isptStatus != 1 && record.isptStatus != 3 ? (<> <Button onClick={() => setCreateDialog(true)} label={"toolbar.quality"}> <ConstructionIcon /> </Button> - <InspectModal open={createDialog} setOpen={setCreateDialog} ispectId={record.id} /> - </> + </>) : (<></>) ) } @@ -202,7 +201,6 @@ const refresh = useRefresh(); const requestComplete = async () => { const { data: { code, data, msg } } = await request.post(`/qlyInspect/update`, { ...record, isptStatus: '1' }); - if (code === 200) { notify(msg); refresh() @@ -211,11 +209,10 @@ } } - return ( - <Button onClick={requestComplete} label={"toolbar.complete"} mutationMode={OPERATE_MODE}> + record.isptStatus != 1 && record.isptStatus != 3 ? (<Button onClick={requestComplete} label={"toolbar.complete"} mutationMode={OPERATE_MODE}> <TaskIcon /> - </Button> + </Button>) : (<></>) ) } @@ -259,8 +256,6 @@ <AddIcon /> </Button> } - - <AsnSelModal open={createDialog} setOpen={setCreateDialog} diff --git a/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx b/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx index 7f123d6..b1c51b6 100644 --- a/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx +++ b/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx @@ -42,9 +42,19 @@ aside={<EditBaseAside />} > <SimpleForm + sx={{ + '& .MuiInputBase-input.MuiFilledInput-input.Mui-disabled': { + bgcolor: "white", + color: "black", + '-webkit-text-fill-color': "rgba(0, 0, 0)" + }, + '& .MuiFormLabel-root.MuiInputLabel-root.Mui-disabled': { + color: 'rgba(0, 0, 0, 0.77)' + } + }} shouldUnregister warnWhenUnsavedChanges - toolbar={<FormToolbar />} + toolbar={<></>} mode="onTouched" defaultValues={{}} > 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 198b8f1..70b0ec2 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 @@ -224,7 +224,7 @@ } //TODO /**鏀惰揣鏁伴噺绱姞锛�1. 浼氬嚭瓒呮敹鎯呭喌 2. 浼氭湁鏀惰揣涓嶈冻鎯呭喌*/ Double rcptedQty = asnOrder.getQty() + receiptQty; - asnOrder.setQty(rcptedQty).setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val)); + asnOrder.setQty(rcptedQty).setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val); if (!asnOrderMapper.updateById(asnOrder)) { throw new CoolException("宸叉敹璐ф暟閲忎慨鏀瑰け璐ワ紒锛�"); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java index 69e88b9..7cb5cfb 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java @@ -240,17 +240,30 @@ String column = Utils.toSymbolCase(field.getName(), '_'); columns.add(column); } +// if (!columns.isEmpty()) { +// for (int i=0;i<columns.size();i++){ +// String column = columns.get(i); +// String condition = where.getCondition(); +// +// if (i == 0) { +// queryWrapper.and(wrapper -> wrapper.like("`" + column + "`", condition)); +// } else { +// queryWrapper.or().like("`" + column + "`", condition); +// } +// } +// } if (!columns.isEmpty()) { - for (int i=0;i<columns.size();i++){ - String column = columns.get(i); - String condition = where.getCondition(); - - if (i == 0) { - queryWrapper.and(wrapper -> wrapper.like("`" + column + "`", condition)); - } else { - queryWrapper.or().like("`" + column + "`", condition); + queryWrapper.and(wrapper -> { + for (int i=0;i<columns.size();i++){ + String column = columns.get(i); + String condition = where.getCondition(); + if (i == 0) { + wrapper.or().like("`" + column + "`", condition); + } else { + wrapper.or().like("`" + column + "`", condition); + } } - } + }); } } return queryWrapper; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java index b6458c5..84681bd 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java @@ -1,5 +1,7 @@ package com.vincent.rsf.server.manager.controller; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; @@ -124,9 +126,14 @@ public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { List<AsnOrder> orders = new ArrayList<>(); if (!Objects.isNull(map.get("ids"))) { - orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, map.get("ids")).eq(AsnOrder::getStatus, 1)); + List<Long> ids = JSONArray.parseArray(JSONObject.toJSONString(map.get("ids")), Long.class); + if (!ids.isEmpty()) { + orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, ids)); + } else { + orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>()); + } } else { - orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().last("limit 1")); + orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>()); } ExcelUtil.build(ExcelUtil.create(orders, AsnOrder.class), response); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderLogController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderLogController.java index 4c75ffd..4bd9745 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderLogController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderLogController.java @@ -1,5 +1,7 @@ package com.vincent.rsf.server.manager.controller; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; @@ -9,9 +11,11 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.entity.AsnOrderLog; import com.vincent.rsf.server.manager.service.AsnOrderLogService; import com.vincent.rsf.server.system.controller.BaseController; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -104,7 +108,28 @@ @PreAuthorize("hasAuthority('manager:asnOrderLog:list')") @PostMapping("/asnOrderLog/export") public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { - ExcelUtil.build(ExcelUtil.create(asnOrderLogService.list(), AsnOrderLog.class), response); + List<AsnOrderLog> orders = new ArrayList<>(); + if (!Objects.isNull(map.get("ids"))) { + List<Long> ids = JSONArray.parseArray(JSONObject.toJSONString(map.get("ids")), Long.class); + if (!ids.isEmpty()) { + orders = asnOrderLogService.list(new LambdaQueryWrapper<AsnOrderLog>().in(AsnOrderLog::getId, ids)); + } else { + orders = asnOrderLogService.list(new LambdaQueryWrapper<>()); + } + } else { + orders = asnOrderLogService.list(new LambdaQueryWrapper<>()); + } + ExcelUtil.build(ExcelUtil.create(orders, AsnOrderLog.class), response); + } + + @ApiOperation("缁х画鏀惰揣") + @PreAuthorize("hasAuthority('manager:asnOrderLog:update')") + @PostMapping("/asnOrderLog/continue/{id}") + public R continuRcpt(@PathVariable Long id) { + if (Objects.isNull(id)) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return asnOrderLogService.continueRecipt(id); } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java index 767d42d..784cdfa 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java @@ -184,7 +184,6 @@ * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� */ @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") - @TableLogic private Integer deleted; /** diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java index 38b863f..cc2bdf9 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java @@ -41,6 +41,7 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; + @ApiModelProperty("涓诲崟ID") private Long asnId; @@ -124,7 +125,6 @@ * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� */ @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") - @TableLogic private Integer deleted; /** diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java index 51c539f..98148e4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java @@ -17,11 +17,11 @@ ASN_EXCE_STATUS_TASK_CLOSE("4", "宸插叧闂�") ; AsnExceStatus(String val, String desc) { - this.val = val; + this.val = Short.parseShort(val); this.desc = desc; } - public String val; + public Short val; public String desc; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderLogService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderLogService.java index c66b58d..fba08e8 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderLogService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderLogService.java @@ -1,8 +1,10 @@ package com.vincent.rsf.server.manager.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.entity.AsnOrderLog; public interface AsnOrderLogService extends IService<AsnOrderLog> { + R continueRecipt(Long id); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java index a607ac5..440a2b5 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java @@ -1,12 +1,84 @@ package com.vincent.rsf.server.manager.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; +import com.vincent.rsf.server.manager.entity.AsnOrder; +import com.vincent.rsf.server.manager.entity.AsnOrderItem; +import com.vincent.rsf.server.manager.entity.AsnOrderItemLog; +import com.vincent.rsf.server.manager.enums.AsnExceStatus; import com.vincent.rsf.server.manager.mapper.AsnOrderLogMapper; import com.vincent.rsf.server.manager.entity.AsnOrderLog; +import com.vincent.rsf.server.manager.service.AsnOrderItemLogService; +import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.manager.service.AsnOrderLogService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vincent.rsf.server.manager.service.AsnOrderService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; @Service("asnOrderLogService") public class AsnOrderLogServiceImpl extends ServiceImpl<AsnOrderLogMapper, AsnOrderLog> implements AsnOrderLogService { + @Autowired + private AsnOrderItemLogService asnOrderItemLogService; + @Autowired + private AsnOrderItemService asnOrderItemService; + @Autowired + private AsnOrderService asnOrderService; + /** + * @author Ryan + * @description 缁х画鏀惰揣 + * @param + * @return + * @time 2025/4/17 15:08 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R continueRecipt(Long id) { + AsnOrderLog orderLog = this.getOne(new LambdaQueryWrapper<AsnOrderLog>().eq(AsnOrderLog::getId, id)); + if (Objects.isNull(orderLog)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + AsnOrder order = new AsnOrder(); + BeanUtils.copyProperties(orderLog, order); + order.setId(orderLog.getAsnId()) + .setDeleted(0) + .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val); + if (!asnOrderService.saveOrUpdate(order)) { + throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒"); + } + List<AsnOrderItemLog> itemLogs = asnOrderItemLogService + .list(new LambdaQueryWrapper<AsnOrderItemLog>() + .eq(AsnOrderItemLog::getLogId, id)); + List<AsnOrderItem> orderItems = new ArrayList<>(); + if (!Objects.isNull(itemLogs) || !itemLogs.isEmpty()) { + for (AsnOrderItemLog itemLog : itemLogs) { + AsnOrderItem item = new AsnOrderItem(); + BeanUtils.copyProperties(itemLog, item); + item.setId(itemLog.getAsnItemId()) + .setAsnId(order.getId()) + .setDeleted(0); + orderItems.add(item); + } + if (!asnOrderItemService.saveOrUpdateBatch(orderItems)) { + throw new CoolException("鏄庣粏淇濆瓨澶辫触"); + } + } + if (!this.removeById(orderLog.getId())) { + throw new CoolException("鍘嗗彶鍗曟嵁鍒犻櫎澶辫触锛侊紒"); + } + if (!asnOrderItemLogService.remove(new LambdaQueryWrapper<AsnOrderItemLog>() + .eq(AsnOrderItemLog::getLogId, orderLog.getId()))) { + throw new CoolException("鍘嗗彶鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒"); + } + + return R.ok(); + } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java index 08d52a5..741bcda 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java @@ -258,7 +258,7 @@ if (Objects.isNull(asrder) || Objects.isNull(asrder.getId())) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - asrder.setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE.val)); + asrder.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE.val); if (!this.updateById(asrder)) { throw new CoolException("鍗曟嵁鍏抽棴澶辫触锛侊紒"); @@ -272,7 +272,7 @@ // } AsnOrder order = this.getById(asrder.getId()); AsnOrderLog orderLog = new AsnOrderLog(); - order.setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val)); + order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val); BeanUtils.copyProperties(order, orderLog); orderLog.setId(null); orderLog.setAsnId(order.getId()); @@ -280,7 +280,7 @@ if (!this.saveOrUpdate(order)) { throw new CoolException("鐘舵�佷慨鏀瑰け璐ワ紒锛�"); } - orderLog.setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE.val)); + orderLog.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_CLOSE.val); if (!asnOrderLogService.save(orderLog)) { throw new CoolException("涓诲崟鍘嗗彶妗f坊鍔犲け璐ワ紒锛�"); } -- Gitblit v1.9.1