From 11662208c26eb3d837d4c2d1e7cbbeae5d5c9943 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期一, 18 八月 2025 13:59:13 +0800 Subject: [PATCH] 库存调整功能优化 --- rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx | 2 rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx | 31 ++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CommonExceStatus.java | 22 +++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/ReviseLogController.java | 12 + rsf-server/src/main/java/com/vincent/rsf/server/manager/service/ReviseLogService.java | 3 rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx | 13 + rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java | 13 + rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncMatGroupsParams.java | 39 +++++ rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ReceiveMsgController.java | 20 ++ rsf-admin/src/page/stockManage/locRevise/asnOrder.css | 5 rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx | 19 +- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java | 30 ++++ rsf-admin/src/i18n/zh.js | 1 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java | 96 ++++++++++++- rsf-admin/src/i18n/en.js | 1 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java | 5 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java | 48 +++--- 18 files changed, 305 insertions(+), 57 deletions(-) diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index f9fd34b..e5e7065 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -1339,6 +1339,7 @@ orderPrint: 'Orders Print', quality: "quality", complete: "complete", + confirmTransfer: "Comfirm Transfer", allComfirm: 'All Comfirm', createTransfer: 'Create Transfer Order', createLocRevise: 'Create Stock Revise Order', diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index b7642e8..9d4ef4d 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -1358,6 +1358,7 @@ allComfirm: '鍏ㄩ儴鎻愪氦', quality: "璐ㄦ", complete: "瀹岀粨", + confirmTransfer: "纭璋冩暣", close: "鍏抽棴", createTransfer: '鍒涘缓璋冩嫈鍗�', createLocRevise: '鍒涘缓搴撳瓨璋冩暣鍗�', diff --git a/rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx b/rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx index 48ca819..a8911d0 100644 --- a/rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/LocReviseEdit.jsx @@ -20,15 +20,16 @@ useRecordContext, DeleteButton, } from 'react-admin'; -import { useWatch, useFormContext } from "react-hook-form"; -import { Stack, Grid, Box, Typography } from '@mui/material'; -import * as Common from '@/utils/common'; import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; -import EditBaseAside from "@/page/components/EditBaseAside"; -import CustomerTopToolBar from "@/page/components/EditTopToolBar"; -import MemoInput from "@/page/components/MemoInput"; import StatusSelectInput from "@/page/components/StatusSelectInput"; +import CustomerTopToolBar from "@/page/components/EditTopToolBar"; +import { Stack, Grid, Box, Typography } from '@mui/material'; +import EditBaseAside from "@/page/components/EditBaseAside"; +import { useWatch, useFormContext } from "react-hook-form"; +import MemoInput from "@/page/components/MemoInput"; import ReviseLogList from "./ReviseLogList"; +import * as Common from '@/utils/common'; +import request from '@/utils/request'; const LocReviseEdit = () => { diff --git a/rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx b/rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx index 0fc637c..138f189 100644 --- a/rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/LocReviseList.jsx @@ -25,6 +25,7 @@ TextInput, DateTimeInput, DateInput, + useRefresh, SelectInput, NumberInput, ReferenceInput, @@ -37,8 +38,11 @@ import MyExportButton from '@/page/components/MyExportButton'; import PageEditDrawer from "@/page/components/PageEditDrawer"; import { Box, Typography, Card, Stack } from '@mui/material'; +import ConfirmButton from '../../components/ConfirmButton'; import LocReviseCreate from "./LocReviseCreate"; +import TaskIcon from '@mui/icons-material/Task'; import { styled } from '@mui/material/styles'; +import request from '@/utils/request'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -136,13 +140,14 @@ <TextField source="areaName" label="table.field.locRevise.areaName" /> <TextField source="updateBy$" label="common.field.updateBy" /> <DateField source="updateTime" label="common.field.updateTime" showTime /> - <DateField 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"> <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + <CompleteButton /> </WrapperField> </StyledDatagrid> </List> @@ -160,4 +165,28 @@ ) } + +//瀹屾垚鍗曟嵁 +const CompleteButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + const requestComplete = async () => { + const { data: { code, data, msg } } = await request.post(`/reviseLog/complete/${record.id}`); + if (code === 200) { + notify(msg); + refresh() + } else { + notify(msg); + } + } + + return ( + record.exceStatus == 1 ? <ConfirmButton label={"toolbar.complete"} color="secondary" startIcon={<TaskIcon />} onConfirm={requestComplete} /> : <></> + ) + + +} + + export default LocReviseList; diff --git a/rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx b/rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx index ee0a8fa..1422424 100644 --- a/rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/LocsReviseDetl.jsx @@ -24,6 +24,7 @@ import SelectMatnrInfo from "./SelectMatnrInfo"; import SaveIcon from '@mui/icons-material/Save'; import request from '@/utils/request'; +import "./asnOrder.css"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -176,7 +177,7 @@ </Grid> <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, justifyContent: 'flex-end' }}> <Grid item md={8} sx={{ justifyContent: 'flex-end', display: 'flex' }}> - <Button variant="text" onClick={handleAdd}>{translate("page.whMat.title.add")}</Button> + <Button variant="contained" onClick={handleAdd} >{translate("page.whMat.title.add")}</Button> </Grid> </Box> </Box> @@ -231,13 +232,6 @@ editable: false, }, { - field: 'batch', - headerName: translate('table.field.locItem.batch'), - minWidth: 100, - flex: 1, - editable: true, - }, - { field: 'anfme', headerName: translate('table.field.locItem.anfme') + "*", minWidth: 100, @@ -251,6 +245,15 @@ type: 'number', flex: 1, editable: true, + headerClassName: "custom", + }, + { + field: 'batch', + headerName: translate('table.field.locItem.batch'), + minWidth: 100, + flex: 1, + editable: true, + headerClassName: "custom", }, { field: 'spec', diff --git a/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx b/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx index d0a6fec..b6f8a49 100644 --- a/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx @@ -70,7 +70,7 @@ duration: theme.transitions.duration.enteringScreen, }), }} - title={"menu.reviseLogItem"} + title={false} empty={false} filters={false} pagination={false} diff --git a/rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx b/rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx index 7d8ca87..3656ba1 100644 --- a/rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx @@ -103,7 +103,7 @@ duration: theme.transitions.duration.enteringScreen, }), }} - title={"menu.reviseLog"} + title={false} empty={false} filters={filters} filter={{ reviseId: orderId }} diff --git a/rsf-admin/src/page/stockManage/locRevise/asnOrder.css b/rsf-admin/src/page/stockManage/locRevise/asnOrder.css new file mode 100644 index 0000000..0df941e --- /dev/null +++ b/rsf-admin/src/page/stockManage/locRevise/asnOrder.css @@ -0,0 +1,5 @@ + +.custom { + color: rgb(0, 195, 255) !important; + } + diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ReceiveMsgController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ReceiveMsgController.java index 2e54f21..eb586ca 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ReceiveMsgController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ReceiveMsgController.java @@ -3,10 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; -import com.vincent.rsf.server.api.controller.erp.params.BaseMatParms; -import com.vincent.rsf.server.api.controller.erp.params.OrderParams; -import com.vincent.rsf.server.api.controller.erp.params.QueryOrderParam; -import com.vincent.rsf.server.api.controller.erp.params.SyncLocsParams; +import com.vincent.rsf.server.api.controller.erp.params.*; import com.vincent.rsf.server.api.service.ReceiveMsgService; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.PageParam; @@ -164,6 +161,21 @@ return receiveMsgService.syncLocs(locs); } + /** + * @author Ryan + * @date 2025/8/18 + * @description: 鐗╂枡鍒嗙粍淇℃伅鍚屾 + * @version 1.0 + */ + @PostMapping("/sync/matGroups") + @ApiOperation(value = "鐗╂枡鍒嗙粍淇℃伅鍚屾", tags = "鍩虹淇℃伅鍚屾") + public R syncMatGroup(@RequestBody List<SyncMatGroupsParams> matGroupsParams) { + if (matGroupsParams.isEmpty()) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return receiveMsgService.syncMatGroups(matGroupsParams); + } + } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncMatGroupsParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncMatGroupsParams.java new file mode 100644 index 0000000..5239176 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncMatGroupsParams.java @@ -0,0 +1,39 @@ +package com.vincent.rsf.server.api.controller.erp.params; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@Accessors(chain = true) +@ApiModel(value = "SyncMatGroupsParams", description = "鍚屾鐗╂枡鍒嗕俊鎭弬鏁�") +public class SyncMatGroupsParams implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 鍚嶇О + */ + @ApiModelProperty(value= "鍚嶇О") + private String name; + + /** + * 鍒嗙粍缂栫爜 + */ + @ApiModelProperty("涓婄骇鍒嗙粍缂栫爜") + private String parCode; + + /** + * @author Ryan + * @date 2025/8/18 + * @description: 鍒嗙被缂栫爜 + * @version 1.0 + */ + @ApiModelProperty("鍒嗙被缂栫爜") + private String code; + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java index e442e10..7d56ba1 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java @@ -3,10 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.vincent.rsf.framework.common.R; -import com.vincent.rsf.server.api.controller.erp.params.BaseMatParms; -import com.vincent.rsf.server.api.controller.erp.params.OrderParams; -import com.vincent.rsf.server.api.controller.erp.params.QueryOrderParam; -import com.vincent.rsf.server.api.controller.erp.params.SyncLocsParams; +import com.vincent.rsf.server.api.controller.erp.params.*; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.entity.Loc; @@ -60,4 +57,12 @@ * @version 1.0 */ R syncLocs(List<SyncLocsParams> locs); + + /** + * @author Ryan + * @date 2025/8/18 + * @description: 鐗╂枡鍒嗙粍淇℃伅鍚屾 + * @version 1.0 + */ + R syncMatGroups(List<SyncMatGroupsParams> matGroupsParams); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java index b747497..303f02b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java @@ -237,5 +237,33 @@ return R.ok(); } - + /** + * @author Ryan + * @date 2025/8/18 + * @description: 鐗╂枡淇℃伅鍚屾 + * @version 1.0 + */ + @Override + @Transactional(timeout = 30, rollbackFor = Exception.class) + public R syncMatGroups(List<SyncMatGroupsParams> matGroupsParams) { + List<MatnrGroup> syncMatGroups = new ArrayList<>(); + matGroupsParams.forEach(matGroupsParam -> { + MatnrGroup matnrGroup = new MatnrGroup(); + BeanUtils.copyProperties(matGroupsParam, matnrGroup); + if (Objects.isNull(matGroupsParam.getCode())) { + throw new CoolException("鐗╂枡鍒嗙粍缂栫爜涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(matGroupsParam.getName())) { + throw new CoolException("鍒嗙粍鍚嶇О涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(matGroupsParam.getParCode())) { + throw new CoolException("涓婄骇鐗╂枡鍒嗙粍缂栫爜涓嶈兘涓虹┖锛侊紒"); + } + syncMatGroups.add(matnrGroup); + }); + if (!matnrGroupService.saveBatch(syncMatGroups)) { + throw new CoolException("鐗╂枡鍒嗙粍淇濆瓨澶辫触锛侊紒"); + } + return R.ok(); + } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/ReviseLogController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/ReviseLogController.java index 064997b..d371601 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/ReviseLogController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/ReviseLogController.java @@ -14,6 +14,7 @@ import com.vincent.rsf.server.manager.entity.ReviseLog; import com.vincent.rsf.server.manager.service.ReviseLogService; 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.*; @@ -67,6 +68,7 @@ return R.ok("Save Success").add(reviseLog); } + @PreAuthorize("hasAuthority('manager:locRevise:update')") @OperationLog("Update 搴撲綅璋冩暣鍘嗗彶") @PostMapping("/reviseLog/update") @@ -89,6 +91,16 @@ return R.ok().add(reviseLogService.reviseLoc(reviseLog, getLoginUserId())); } + @PreAuthorize("hasAuthority('manager:locRevise:update')") + @PostMapping("/reviseLog/complete/{id}") + @ApiOperation("纭璋冩暣搴撳瓨") + public R completeTran(@PathVariable("id") Long id) { + if (Objects.isNull(id)) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return reviseLogService.complete(id, getLoginUserId()); + } + @PreAuthorize("hasAuthority('manager:locRevise:remove')") @OperationLog("Delete 搴撲綅璋冩暣鍘嗗彶") @PostMapping("/reviseLog/remove/{ids}") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CommonExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CommonExceStatus.java new file mode 100644 index 0000000..722b3c5 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CommonExceStatus.java @@ -0,0 +1,22 @@ +package com.vincent.rsf.server.manager.enums; + +/** + * @author Ryan + * @date 2025/8/18 + * @description: 閫氱敤鍗曟嵁鎵ц鐘舵�� + * @version 1.0 + */ +public enum CommonExceStatus { + //閫氱敤鎵ц鐘舵�� + COMMON_EXCE_STATUS_UN_EXCE("0", "鏈墽琛�"), + COMMON_EXCE_STATUS_EXCE_ING("1", "鎵ц涓�"), + COMMON_EXCE_STATUS_TASK_DONE("2", "宸插畬鎴�") + ; + CommonExceStatus(String val, String desc) { + this.val = Integer.parseInt(val); + this.desc = desc; + } + + public Integer val; + public String desc; +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java index dc85d6b..44a9291 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java @@ -12,6 +12,7 @@ ORDER_OUT("out", "鍑哄簱鍗�"), ORDER_IN("in", "鍏ュ簱鍗�"), ORDER_TRANSFER("transfer", "璋冩嫈鍗�"), + ORDER_REVISE("revise", "搴撳瓨璋冩暣"), ORDER_CHECK("check", "鐩樼偣鍗�"); @@ -32,6 +33,8 @@ return OrderType.ORDER_CHECK.type; } else if (desc.equals(OrderType.ORDER_TRANSFER.desc)) { return OrderType.ORDER_TRANSFER.type; + } else if (desc.equals(OrderType.ORDER_REVISE.desc)) { + return OrderType.ORDER_REVISE.type; } return null; } @@ -45,6 +48,8 @@ return OrderType.ORDER_CHECK.desc; } else if (type.equals(OrderType.ORDER_TRANSFER.type)) { return OrderType.ORDER_TRANSFER.desc; + } else if (type.equals(OrderType.ORDER_REVISE.type)) { + return OrderType.ORDER_REVISE.desc; } return null; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/ReviseLogService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/ReviseLogService.java index 4ca6f62..419e29b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/ReviseLogService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/ReviseLogService.java @@ -1,6 +1,7 @@ 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.controller.params.ReviseLogParams; import com.vincent.rsf.server.manager.entity.ReviseLog; @@ -9,4 +10,6 @@ public interface ReviseLogService extends IService<ReviseLog> { List<ReviseLog> reviseLoc(ReviseLogParams reviseLog, Long loginUserId); + + R complete(Long params, Long loginUserId); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java index cf8c3b1..402deb4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java @@ -6,6 +6,7 @@ import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.ReviseLogItemParams; import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.CommonExceStatus; import com.vincent.rsf.server.manager.mapper.ReviseLogItemMapper; import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -71,29 +72,29 @@ throw new RuntimeException("搴撳瓨鏄庣粏璋冩暣澶辫触"); } - LocItem one = locItemService.getOne(new LambdaQueryWrapper<LocItem>() - .eq(LocItem::getMatnrId, logItem.getMatnrId()) - .eq(StringUtils.isNotBlank(logItem.getBatch()), LocItem::getBatch, logItem.getBatch()) - .eq(StringUtils.isNotBlank(logItem.getFieldsIndex()), LocItem::getFieldsIndex, logItem.getFieldsIndex()) - .eq(LocItem::getLocCode, logItem.getLocCode())); - if (Objects.isNull(one)) { - LocItem locDetl = new LocItem(); - BeanUtils.copyProperties(logItem, locDetl); - locDetl.setLocId(loc.getId()) - .setLocCode(loc.getCode()) - .setAnfme(logItem.getReviseQty()) - .setUpdateBy(userId) - .setId(null) - .setCreateBy(userId); - if (!locItemService.save(locDetl)) { - throw new CoolException("搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒"); - } - } else { - one.setAnfme(logItem.getReviseQty()); - if (!locItemService.updateById(one)) { - throw new RuntimeException("搴撳瓨鏄庣粏淇敼澶辫触锛侊紒"); - } - } +// LocItem one = locItemService.getOne(new LambdaQueryWrapper<LocItem>() +// .eq(LocItem::getMatnrId, logItem.getMatnrId()) +// .eq(StringUtils.isNotBlank(logItem.getBatch()), LocItem::getBatch, logItem.getBatch()) +// .eq(StringUtils.isNotBlank(logItem.getFieldsIndex()), LocItem::getFieldsIndex, logItem.getFieldsIndex()) +// .eq(LocItem::getLocCode, logItem.getLocCode())); +// if (Objects.isNull(one)) { +// LocItem locDetl = new LocItem(); +// BeanUtils.copyProperties(logItem, locDetl); +// locDetl.setLocId(loc.getId()) +// .setLocCode(loc.getCode()) +// .setAnfme(logItem.getReviseQty()) +// .setUpdateBy(userId) +// .setId(null) +// .setCreateBy(userId); +// if (!locItemService.save(locDetl)) { +// throw new CoolException("搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒"); +// } +// } else { +// one.setAnfme(logItem.getReviseQty()); +// if (!locItemService.updateById(one)) { +// throw new RuntimeException("搴撳瓨鏄庣粏淇敼澶辫触锛侊紒"); +// } +// } }); List<ReviseLog> list = reviseLogService.list(new LambdaQueryWrapper<ReviseLog>().eq(ReviseLog::getReviseId, reviseLog.getReviseId())); @@ -110,6 +111,7 @@ if (!locReviseService.update(new LambdaUpdateWrapper<LocRevise>() .eq(LocRevise::getId, reviseLog.getReviseId()) .set(LocRevise::getAnfme, anfems) + .set(LocRevise::getExceStatus, CommonExceStatus.COMMON_EXCE_STATUS_EXCE_ING.val) .set(LocRevise::getReviseQty, reviseQty))) { throw new RuntimeException("搴撳瓨璋冩暣鍗曚慨鏀瑰け璐ワ紒锛�"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java index 3b03850..baf9048 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java @@ -1,12 +1,15 @@ package com.vincent.rsf.server.manager.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.ReviseLogParams; -import com.vincent.rsf.server.manager.entity.LocRevise; -import com.vincent.rsf.server.manager.entity.ReviseLogItem; +import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.CommonExceStatus; +import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.mapper.ReviseLogMapper; -import com.vincent.rsf.server.manager.entity.ReviseLog; -import com.vincent.rsf.server.manager.service.LocReviseService; -import com.vincent.rsf.server.manager.service.ReviseLogService; +import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -14,7 +17,9 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; @Service("reviseLogService") public class ReviseLogServiceImpl extends ServiceImpl<ReviseLogMapper, ReviseLog> implements ReviseLogService { @@ -24,6 +29,14 @@ @Autowired private ReviseLogService reviseLogService; + + @Autowired + private LocItemService locItemService; + + @Autowired + private LocService locService; + @Autowired + private ReviseLogItemService reviseLogItemService; /** * 搴撳瓨璋冩暣鍗曟槑缁嗘坊鍔� @@ -36,11 +49,11 @@ public List<ReviseLog> reviseLoc(ReviseLogParams revise, Long loginUserId) { LocRevise locRevise = locReviseService.getById(revise.getReviseId()); if (Objects.isNull(locRevise)) { - throw new RuntimeException("璋冩暣鍗曟嵁涓嶅瓨鍦紒锛�"); + throw new CoolException("璋冩暣鍗曟嵁涓嶅瓨鍦紒锛�"); } List<ReviseLog> items = revise.getItems(); if (items.isEmpty()) { - throw new RuntimeException("璋冩暣鍗曟槑缁嗗弬鏁颁负绌猴紒锛�"); + throw new CoolException("璋冩暣鍗曟槑缁嗗弬鏁颁负绌猴紒锛�"); } items.forEach(item -> { ReviseLog reviseLog = new ReviseLog(); @@ -51,9 +64,76 @@ .setUpdateBy(loginUserId) .setReviseCode(locRevise.getCode()) ; if (!reviseLogService.save(reviseLog)) { - throw new RuntimeException("璋冩暣鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); + throw new CoolException("璋冩暣鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); } }); + locRevise.setExceStatus(CommonExceStatus.COMMON_EXCE_STATUS_UN_EXCE.val); + + if (!locReviseService.updateById(locRevise)) { + throw new CoolException("鐘舵�佹洿鏂板け璐ワ紒锛�"); + } return items; } + + /** + * @author Ryan + * @date 2025/8/18 + * @description: 纭璋冩暣搴撳瓨 + * @version 1.0 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R complete(Long id, Long loginUserId) { + LocRevise revise = locReviseService.getById(id); + if (Objects.isNull(revise)) { + throw new CoolException("璋冩暣鍗曚笉瀛樺湪锛侊紒"); + } + if (!revise.getExceStatus().equals(CommonExceStatus.COMMON_EXCE_STATUS_EXCE_ING.val)) { + throw new CoolException("鍗曟嵁鐘舵�佹湭鎵ц鎴栧凡瀹屾垚锛屾棤娉曟墽琛屽畬鎴愭搷浣滐紒锛�"); + } + ReviseLog logs = reviseLogService.getOne(new LambdaQueryWrapper<ReviseLog>().eq(ReviseLog::getReviseId, revise.getId())); + if (Objects.isNull(logs)) { + throw new CoolException("搴撳瓨鏃ュ織涓嶅瓨鍦紒锛�"); + } + List<ReviseLogItem> logItems = reviseLogItemService.list(new LambdaQueryWrapper<ReviseLogItem>().eq(ReviseLogItem::getReviseLogId, logs.getId())); + Map<Long, List<ReviseLogItem>> listMap = logItems.stream().collect(Collectors.groupingBy(ReviseLogItem::getLocId)); + listMap.keySet().forEach(items -> { + Loc loc = locService.getById(items); + if (Objects.isNull(loc)) { + throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�"); + } + listMap.get(items).forEach(logItem -> { + LocItem one = locItemService.getOne(new LambdaQueryWrapper<LocItem>() + .eq(LocItem::getMatnrId, logItem.getMatnrId()) + .eq(StringUtils.isNotBlank(logItem.getBatch()), LocItem::getBatch, logItem.getBatch()) + .eq(StringUtils.isNotBlank(logItem.getFieldsIndex()), LocItem::getFieldsIndex, logItem.getFieldsIndex()) + .eq(LocItem::getLocCode, logItem.getLocCode())); + if (Objects.isNull(one)) { + LocItem locDetl = new LocItem(); + BeanUtils.copyProperties(logItem, locDetl); + locDetl.setLocId(loc.getId()) + .setType(OrderType.ORDER_REVISE.type) + .setLocCode(loc.getCode()) + .setAnfme(logItem.getReviseQty()) + .setUpdateBy(loginUserId) + .setId(null) + .setCreateBy(loginUserId); + if (!locItemService.save(locDetl)) { + throw new CoolException("搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒"); + } + } else { + one.setAnfme(logItem.getReviseQty()); + if (!locItemService.updateById(one)) { + throw new CoolException("搴撳瓨鏄庣粏淇敼澶辫触锛侊紒"); + } + } + }); + }); + + revise.setExceStatus(CommonExceStatus.COMMON_EXCE_STATUS_TASK_DONE.val); + if (!locReviseService.updateById(revise)) { + throw new CoolException("璋冩暣鍗曚慨鏀瑰け璐ワ紒锛�"); + } + return R.ok(); + } } -- Gitblit v1.9.1