From becc33ce9681fcc75d26eb2b8fbe650d53cb1f89 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 30 七月 2025 14:55:26 +0800 Subject: [PATCH] 1. 调拔单功能优化 2. 7.30问题及bug修复 --- rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx | 2 rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx | 4 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java | 2 rsf-admin/src/page/orders/purchase/PurchaseEdit.jsx | 25 ++++ rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx | 6 - rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java | 106 ++++++++++++--------- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java | 2 rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx | 123 +++++++++++++----------- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java | 5 + rsf-admin/src/page/orders/transfer/TransferOrders.jsx | 2 11 files changed, 162 insertions(+), 117 deletions(-) diff --git a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx index 8e4d183..dc87470 100644 --- a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx +++ b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx @@ -144,8 +144,8 @@ omit={['id', 'orderId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$']} > <NumberField source="id" /> - <NumberField source="asnId" label="table.field.asnOrderItemLog.asnId" /> - <TextField source="asnCode" label="table.field.asnOrderItemLog.asnCode" /> + <NumberField source="asnId" label="table.field.asnOrderItemLog.orderId" /> + <TextField source="asnCode" label="table.field.asnOrderItemLog.orderCode" /> <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" /> <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" /> <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" /> diff --git a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx index e0369b6..8eb27ae 100644 --- a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx +++ b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx @@ -35,19 +35,22 @@ useRecordSelection, useRefresh, } from 'react-admin'; -import { Box, Typography, Card, Stack } from '@mui/material'; -import { styled } from '@mui/material/styles'; -import AsnOrderLogCreate from "./AsnOrderLogCreate"; -import AsnOrderLogPanel from "./AsnOrderLogPanel"; -import EmptyData from "../../components/EmptyData"; +import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; +import DictionarySelect from "../../components/DictionarySelect"; import MyCreateButton from "../../components/MyCreateButton"; import MyExportButton from '../../components/MyExportButton'; +import { Box, Typography, Card, Stack } from '@mui/material'; +import ConfirmButton from '../../components/ConfirmButton'; import PageDrawer from "../../components/PageDrawer"; -import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; +import AsnOrderLogCreate from "./AsnOrderLogCreate"; +import CachedIcon from '@mui/icons-material/Cached'; +import EmptyData from "../../components/EmptyData"; +import AsnOrderLogPanel from "./AsnOrderLogPanel"; +import { styled } from '@mui/material/styles'; 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' @@ -61,53 +64,59 @@ width: 150 }, '& .MuiTableCell-root': { - whiteSpace: 'nowrap', - overflow: 'visible', - textOverflow: 'unset' - } + whiteSpace: 'nowrap', + overflow: 'visible', + textOverflow: 'unset' + } })); -const filters = [ - <SearchInput source="condition" alwaysOn />, - <TextInput source="code" label="table.field.asnOrderLog.code" />, - <TextInput source="poCode" label="table.field.asnOrderLog.poCode" />, - <NumberInput source="poId" label="table.field.asnOrderLog.poId" />, - <TextInput source="type" label="table.field.asnOrderLog.type" />, - <TextInput source="wkType" label="table.field.asnOrderLog.wkType" />, - <NumberInput source="anfme" label="table.field.asnOrderLog.anfme" />, - <NumberInput source="qty" label="table.field.asnOrderLog.qty" />, - <TextInput source="logisNo" label="table.field.asnOrderLog.logisNo" />, - <DateInput source="arrTime" label="table.field.asnOrderLog.arrTime" />, - <SelectInput source="rleStatus" label="table.field.asnOrderLog.rleStatus" - choices={[ - { id: 0, name: ' 姝e父' }, - { id: 1, name: ' 宸查噴鏀�' }, - ]} - />, - <SelectInput source="ntyStatus" label="table.field.asnOrderLog.ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - { id: 2, name: ' 閮ㄥ垎涓婃姤' }, - ]} - />, - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, -] const AsnOrderLogList = () => { const translate = useTranslate(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); + const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_order_type')) || []; + + const filters = [ + <SearchInput source="condition" alwaysOn />, + <TextInput source="code" label="table.field.asnOrderLog.code" />, + <TextInput source="poCode" label="table.field.asnOrderLog.poCode" />, + <NumberInput source="poId" label="table.field.asnOrderLog.poId" />, + // <TextInput source="type" label="table.field.asnOrderLog.type" />, + // <TextInput source="wkType" label="table.field.asnOrderLog.wkType" />, + <NumberInput source="anfme" label="table.field.asnOrderLog.anfme" />, + <NumberInput source="qty" label="table.field.asnOrderLog.qty" />, + <TextInput source="logisNo" label="table.field.asnOrderLog.logisNo" />, + <DateInput source="arrTime" label="table.field.asnOrderLog.arrTime" />, + // <SelectInput source="ntyStatus" label="table.field.asnOrderLog.ntyStatus" + // choices={[ + // { id: 0, name: ' 鏈笂鎶�' }, + // { id: 1, name: ' 宸蹭笂鎶�' }, + // { id: 2, name: ' 閮ㄥ垎涓婃姤' }, + // ]} + // />, + <AutocompleteInput + choices={dicts} + optionText="label" + label="table.field.asnOrder.type" + source="type" + // defaultValue="in" + optionValue="value" + parse={v => v} + alwaysOn + />, + <ReferenceInput source="wkType" reference="dictData" filter={{ dictTypeCode: 'sys_business_type', group: "1" }} label="table.field.asnOrder.wkType" alwaysOn> + <AutocompleteInput label="table.field.asnOrder.wkType" optionValue="value" /> + </ReferenceInput>, + <DictionarySelect + label='table.field.asnOrder.exceStatus' + name="exceStatus" + group="1" + dictTypeCode="sys_asn_exce_status" + alwaysOn + />, + ] return ( <Box display="flex"> @@ -139,7 +148,7 @@ rowClick={'edit'} expand={false} expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo','logisNo', 'poId', 'rleStatus$','statusBool','createBy$']} + omit={['id', 'createTime', 'createBy', 'memo', 'logisNo', 'poId', 'rleStatus$', 'statusBool', 'createBy$']} > <NumberField source="id" /> <TextField source="code" label="table.field.asnOrderLog.code" /> @@ -186,16 +195,16 @@ 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(); + 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} /> + record.type == 'in' ? <ConfirmButton label={"toolbar.continue"} startIcon={<CachedIcon />} onConfirm={continueReceipt} /> : <></> ) - } \ No newline at end of file +} \ No newline at end of file diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx index c5457c1..1a1913e 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx @@ -95,12 +95,6 @@ <NumberInput source="qty" label="table.field.asnOrder.qty" />, <TextInput source="logisNo" label="table.field.asnOrder.logisNo" />, <DateInput source="arrTime" label="table.field.asnOrder.arrTime" />, - <SelectInput source="rleStatus" label="table.field.asnOrder.rleStatus" - choices={[ - { id: 0, name: ' 姝e父' }, - { id: 1, name: ' 宸查噴鏀�' }, - ]} - />, <TextInput label="common.field.memo" source="memo" />, <DictionarySelect label='table.field.asnOrder.exceStatus' diff --git a/rsf-admin/src/page/orders/purchase/PurchaseEdit.jsx b/rsf-admin/src/page/orders/purchase/PurchaseEdit.jsx index 3953ed2..1a0c2f7 100644 --- a/rsf-admin/src/page/orders/purchase/PurchaseEdit.jsx +++ b/rsf-admin/src/page/orders/purchase/PurchaseEdit.jsx @@ -55,9 +55,23 @@ <SimpleForm shouldUnregister warnWhenUnsavedChanges - toolbar={<FormToolbar />} + toolbar={false} mode="onTouched" defaultValues={{}} + sx={{ + "& .MuiFormLabel-root.MuiInputLabel-root.Mui-disabled": { + bgcolor: 'white', + WebkitTextFillColor: "rgba(0, 0, 0)" + }, + + "& .MuiInputBase-input.MuiFilledInput-input.Mui-disabled": { + bgcolor: 'white', + WebkitTextFillColor: "rgba(0, 0, 0)" + }, + "& .MuiFilledInput-root.MuiInputBase-sizeSmall": { + bgcolor: 'white', + } + }} // validate={(values) => { }} > <Grid container width={{ xs: '100%', xl: '100%' }} rowSpacing={3} columnSpacing={3}> @@ -81,6 +95,7 @@ source="type" optionValue="value" parse={v => v} + readOnly /> <AutocompleteInput choices={business} @@ -89,16 +104,19 @@ source="wkType" optionValue="value" parse={v => v} + readOnly /> <TextInput label="table.field.purchase.source" source="source" parse={v => v} + readOnly validate={required()} /> <NumberInput label="table.field.purchase.anfme" source="anfme" + readOnly validate={required()} /> </Stack> @@ -106,25 +124,30 @@ <TextInput label="table.field.purchase.project" source="project" + readOnly parse={v => v} /> <TextInput label="table.field.purchase.channel" source="channel" parse={v => v} + readOnly /> <TextInput label="table.field.purchase.platCode" source="platCode" parse={v => v} + readOnly /> <DateInput label="table.field.purchase.startTime" source="startTime" + readOnly /> <DateInput label="table.field.purchase.endTime" source="endTime" + readOnly /> </Stack> </Grid> diff --git a/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx b/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx index ba27383..e6ff1af 100644 --- a/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx +++ b/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx @@ -108,7 +108,7 @@ actions={( <TopToolbar> <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */} <SelectColumnsButton preferenceKey='purchaseItem' /> {/* <MyExportButton /> */} </TopToolbar> diff --git a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx index ba4d7f7..be8eac0 100644 --- a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx +++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx @@ -81,7 +81,7 @@ omit={['id', 'memo']} > <NumberField source="id" /> - <TextField source="code" label="table.field.transferOrder.code" /> + <TextField source="code" label="table.field.transferOrder.code"/> <TextField source="poCode" label="table.field.transferOrder.poCode" /> <TextField source="type$" label="table.field.transferOrder.type" /> <TextField cellClassName="wkType" source="wkType$" label="table.field.transferOrder.wkType" /> 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 109120c..c8b78f0 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 @@ -243,7 +243,7 @@ throw new CoolException("鏁版嵁閿欒锛侊紒"); } if (!one.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val)) { - throw new CoolException("鍑哄簱鍗曟湭瀹屾垚锛屾棤娉曞畬鎴愭敹璐э紒锛�"); + throw new CoolException("璋冩嫈鍑哄簱鍗曟湭瀹屾垚锛屼笉鍙墽琛屾敹璐ф搷浣滐紒锛�"); } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java index 5ad4d08..ffb2dd6 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java @@ -1,17 +1,13 @@ package com.vincent.rsf.server.manager.schedules; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.exception.CoolException; -import com.vincent.rsf.server.manager.entity.WkOrder; -import com.vincent.rsf.server.manager.entity.WkOrderItem; -import com.vincent.rsf.server.manager.entity.AsnOrderItemLog; -import com.vincent.rsf.server.manager.entity.AsnOrderLog; +import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.AsnExceStatus; import com.vincent.rsf.server.manager.enums.OrderType; -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.vincent.rsf.server.manager.service.AsnOrderService; +import com.vincent.rsf.server.manager.enums.POExceStatus; +import com.vincent.rsf.server.manager.service.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -20,6 +16,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -34,69 +31,66 @@ public class AsnOrderLogSchedule { @Autowired + private PurchaseService purchaseService; + @Autowired + private DeliveryService deliveryService; + @Autowired private AsnOrderService asnOrderService; @Autowired private AsnOrderItemService asnOrderItemService; - @Autowired private AsnOrderLogService asnOrderLogService; - @Autowired private AsnOrderItemLogService asnOrderItemLogService; /** - * @author Ryan - * @description 鍒犻櫎宸插畬鎴愯鍗曞姞鍏og琛� * @param * @return + * @author Ryan + * @description 鍒犻櫎宸插畬鎴愯鍗曞姞鍏og琛� * @time 2025/3/19 19:09 */ - @Scheduled(cron = "0 0/05 * * * ? ") + @Scheduled(cron = "0/35 * * * * ? ") @Transactional(rollbackFor = Exception.class) public void moveOrderToLog() { List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>() - .eq(WkOrder::getType, OrderType.ORDER_IN.type) + .eq(WkOrder::getType, OrderType.ORDER_IN.type) .eq(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val)); if (wkOrders.isEmpty()) { return; } - moveOrderToLog(wkOrders, OrderType.ORDER_IN.type); + try { + moveOrderToLog(wkOrders, OrderType.ORDER_IN.type); + } catch (Exception e) { + throw new CoolException(e.getMessage()); + } } /** - * @author Ryan - * @description 鍑哄簱鍗曞畬鎴愬悗锛岀姸鎬佷慨鏀� - * @param - * @return - * @time 2025/6/16 08:35 - */ -// @Scheduled(cron = "0/30 * * * * ? ") + * @param + * @return + * @author Ryan + * @description 鍑哄簱鍗曞畬鎴愬悗锛岀姸鎬佷慨鏀� + * @time 2025/6/16 08:35 + */ + @Scheduled(cron = "0/30 * * * * ? ") @Transactional(rollbackFor = Exception.class) public void outStockComplete() { List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>() - .eq(WkOrder::getType, OrderType.ORDER_OUT.type) - .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val) + .eq(WkOrder::getType, OrderType.ORDER_OUT.type) + .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val) .apply("anfme = work_qty") ); if (wkOrders.isEmpty()) { return; } - moveOrderToLog(wkOrders, OrderType.ORDER_OUT.type); + try { + moveOrderToLog(wkOrders, OrderType.ORDER_OUT.type); + } catch (Exception e) { + throw new CoolException(e.getMessage()); + } } - -// /** -// * @author Ryan -// * @date 2025/7/30 -// * @description: 鏇存柊璋冩嫈鍗曠姸鎬� -// * @version 1.0 -// */ -// @Scheduled(cron = "0/30 * * * * ? ") -// @Transactional(rollbackFor = Exception.class) -// public void updateTransferExc() { -// -// } - /** @@ -107,7 +101,8 @@ * @description 娣诲姞鍘嗗彶鍗曟嵁 * @time 2025/6/16 08:56 */ - private void moveOrderToLog(List<WkOrder> wkOrders, String type) { + @Transactional(rollbackFor = Exception.class) + public void moveOrderToLog(List<WkOrder> wkOrders, String type) throws Exception{ Set<Long> longSet = wkOrders.stream().map(WkOrder::getId).collect(Collectors.toSet()); List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() .in(WkOrderItem::getOrderId, longSet)); @@ -145,15 +140,34 @@ if (!asnOrderItemLogService.saveBatch(logs)) { throw new CoolException("鍗曟嵁鏄庣粏鍘嗗彶妗d繚瀛樺け璐ワ紒锛�"); } + + //鏇存柊PO/DO鍗曟墽琛岀姸鎬� + if (type.equals(OrderType.ORDER_IN.type)) { + if (!Objects.isNull(order.getPoId())) { + if (!purchaseService.update(new LambdaUpdateWrapper<Purchase>() + .set(Purchase::getExceStatus, POExceStatus.PO_EXCE_STATUS_ALL_DONE.val) + .eq(Purchase::getId, order.getPoId()))) { + throw new CoolException("PO鍗曟洿鏂扮姸鎬佹洿鏂板け璐ワ紒锛�"); + } + } + } else { + if (!Objects.isNull(order.getPoId())) { + if (!deliveryService.update(new LambdaUpdateWrapper<Delivery>() + .eq(Delivery::getId, order.getPoId()) + .set(Delivery::getExceStatus, POExceStatus.PO_EXCE_STATUS_ALL_DONE.val))) { + throw new CoolException("DO鍗曟洿鏂扮姸鎬佹洿鏂板け璐�"); + } + } + } } - if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>() - .in(WkOrderItem::getOrderId, longSet))) { - throw new CoolException("鍘熷崟鎹槑缁嗗垹闄ゅけ璐ワ紒锛�"); - } - if (!this.asnOrderService.removeByIds(longSet)) { - throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�"); - } +// if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>() +// .in(WkOrderItem::getOrderId, longSet))) { +// throw new CoolException("鍘熷崟鎹槑缁嗗垹闄ゅけ璐ワ紒锛�"); +// } +// if (!this.asnOrderService.removeByIds(longSet)) { +// throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�"); +// } } 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 2b7b816..688e732 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 @@ -53,7 +53,7 @@ .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val); WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, orderLog.getCode())); - if (Objects.isNull(wkOrder)) { + if (!Objects.isNull(wkOrder)) { throw new CoolException("鏀惰揣鍗曟嵁宸叉坊鍔狅紝鍒锋柊鍚庡啀鎿嶄綔锛侊紒"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java index dbaeed5..0a64954 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryItemServiceImpl.java @@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -50,6 +51,7 @@ * @return */ @Override + @Transactional(rollbackFor = Exception.class) public R excelImport(MultipartFile file, Map<String, Object> hashMap, Long loginUserId) throws Exception { ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), DeliveryTemplate.class, ExcelUtil.getDefaultImportParams()); if (result.getList().isEmpty()) { @@ -116,6 +118,9 @@ sbFaild.append(orderTemplate.getMatnrCode()).append("鐗╂枡涓嶅瓨鍦�"); throw new CoolException(sbFaild.toString()); } + if (!matnr.getName().equals(orderTemplate.getMaktx())) { + throw new CoolException("瀵煎叆鐗╂枡鍚嶇О涓庡簱鍐呭悕绉颁笉涓�鑷达紒锛�"); + } orderItem.setDeliveryId(order.getId()) .setDeliveryCode(order.getCode()) .setSplrBatch(orderTemplate.getSplrBatch()) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java index b34fdcb..13530da 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java @@ -23,7 +23,7 @@ @Override public Delivery removeDo(List<Long> list) { - List<Delivery> deliveries = this.list(new LambdaQueryWrapper<Delivery>().eq(Delivery::getId, list)); + List<Delivery> deliveries = this.list(new LambdaQueryWrapper<Delivery>().in(Delivery::getId, list)); if (deliveries.isEmpty()) { throw new BusinessException("鏁版嵁閿欒锛氬崟鎹俊鎭笉瀛樺湪锛侊紒"); } -- Gitblit v1.9.1