From 3fa423ef9c04a4d0c2adbda721cde7589371d559 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期五, 01 八月 2025 17:11:02 +0800 Subject: [PATCH] 库位明细修改 --- rsf-admin/src/page/orders/asnOrder/AsnOrderEdit.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewServiceImpl.java | 218 ++++++++++++++++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java | 6 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java | 30 +- rsf-admin/src/page/locPreview/index.jsx | 0 rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java | 3 rsf-admin/src/page/locPreview/LocItemEdit.jsx | 2 rsf-admin/src/page/locPreview/LocQueryList.jsx | 33 +- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java | 180 ++++++++++++++++++++ rsf-admin/src/i18n/zh.js | 2 rsf-admin/src/page/locPreview/LocItemList.jsx | 12 rsf-admin/src/page/orders/transfer/TransferEdit.jsx | 17 + rsf-admin/src/i18n/en.js | 2 rsf-admin/src/page/ResourceContent.js | 6 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewService.java | 20 ++ rsf-admin/src/page/locPreview/LocListAside.jsx | 0 16 files changed, 476 insertions(+), 57 deletions(-) diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index 44535ed..4c30e8a 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -189,7 +189,7 @@ taskLog: 'TaskLog', orderItem: 'OrderItem', order: 'Order', - locItem: 'LocItem', + locPreview: 'LocItem', stock: 'Stock Manage', histories: 'Histories', wareWork: 'Warehouse Working', diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index b69562c..caa2ded 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -192,7 +192,7 @@ taskItemLog: '浠诲姟鏄庣粏鍘嗗彶妗�', stock: '鍏ュ嚭搴撳巻鍙�', stockItem: '鍗曟嵁鏄庣粏', - locItem: '搴撲綅鏄庣粏', + locPreview: '搴撲綅鏄庣粏', histories: '鍘嗗彶妗�', wareWork: '浠撳簱浣滀笟', statistics: '搴撳瓨鏌ヨ', diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js index bccaf3d..dcd570c 100644 --- a/rsf-admin/src/page/ResourceContent.js +++ b/rsf-admin/src/page/ResourceContent.js @@ -45,7 +45,7 @@ import outStock from "./orders/outStock"; import deviceBind from "./deviceBind"; import wave from "./orders/wave"; -import locItem from "./locItem"; +import locPreview from "./locPreview"; import basStation from "./basicInfo/basStation"; import warehouseStock from "./statistics/stockManage"; import basContainer from "./basicInfo/basContainer"; @@ -144,8 +144,8 @@ return deviceBind; case "wave": return wave; - case "locItem": - return locItem; + case "locPreview": + return locPreview; case "basStation": return basStation; case "basContainer": diff --git a/rsf-admin/src/page/locItem/LocItemEdit.jsx b/rsf-admin/src/page/locPreview/LocItemEdit.jsx similarity index 98% rename from rsf-admin/src/page/locItem/LocItemEdit.jsx rename to rsf-admin/src/page/locPreview/LocItemEdit.jsx index 55686cf..11d78da 100644 --- a/rsf-admin/src/page/locItem/LocItemEdit.jsx +++ b/rsf-admin/src/page/locPreview/LocItemEdit.jsx @@ -55,8 +55,6 @@ return ( <> <Edit - redirect="list" - resource="locItem" mutationMode={EDIT_MODE} actions={<CustomerTopToolBar />} aside={<EditBaseAside />} diff --git a/rsf-admin/src/page/locItem/LocItemList.jsx b/rsf-admin/src/page/locPreview/LocItemList.jsx similarity index 96% rename from rsf-admin/src/page/locItem/LocItemList.jsx rename to rsf-admin/src/page/locPreview/LocItemList.jsx index 69f7261..e00a57d 100644 --- a/rsf-admin/src/page/locItem/LocItemList.jsx +++ b/rsf-admin/src/page/locPreview/LocItemList.jsx @@ -157,23 +157,23 @@ }), marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} - storeKey="locItem" - resource="loc/items" - title={"menu.locItem"} + storeKey="locPreview" + resource="loc/preview" + title={"menu.locPreview"} empty={false} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <FilterButton /> - {/* <SelectColumnsButton preferenceKey='loc' /> */} + <SelectColumnsButton preferenceKey='loc' /> </TopToolbar> )} perPage={DEFAULT_PAGE_SIZE} aside={<LocListAside />} > <StyledDatagrid - preferenceKey='locItem' + preferenceKey='locPreview' align="left" bulkActionButtons={false} rowClick={() => false} @@ -200,7 +200,7 @@ <BooleanField source="statusBool" label="common.field.status" sortable={false} align="left" /> <TextField source="memo" label="common.field.memo" sortable={false} /> <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} resource="locItem" label="toolbar.detail" /> + <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} label="toolbar.detail" /> </WrapperField> </StyledDatagrid> </List> diff --git a/rsf-admin/src/page/locItem/LocListAside.jsx b/rsf-admin/src/page/locPreview/LocListAside.jsx similarity index 100% rename from rsf-admin/src/page/locItem/LocListAside.jsx rename to rsf-admin/src/page/locPreview/LocListAside.jsx diff --git a/rsf-admin/src/page/locItem/LocQueryList.jsx b/rsf-admin/src/page/locPreview/LocQueryList.jsx similarity index 94% rename from rsf-admin/src/page/locItem/LocQueryList.jsx rename to rsf-admin/src/page/locPreview/LocQueryList.jsx index 64efb9d..6103c42 100644 --- a/rsf-admin/src/page/locItem/LocQueryList.jsx +++ b/rsf-admin/src/page/locPreview/LocQueryList.jsx @@ -1,5 +1,4 @@ import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; -import { useNavigate } from 'react-router-dom'; import { List, DatagridConfigurable, @@ -34,10 +33,11 @@ DeleteButton, useGetRecordId, } from 'react-admin'; -import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; -import { styled } from '@mui/material/styles'; -import PageDrawer from "../components/PageDrawer"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; +import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; +import PageDrawer from "../components/PageDrawer"; +import { useNavigate } from 'react-router-dom'; +import { styled } from '@mui/material/styles'; import request from '@/utils/request'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ @@ -53,10 +53,10 @@ width: 100 }, '& .MuiTableCell-root': { - whiteSpace: 'nowrap', - overflow: 'visible', - textOverflow: 'unset' - } + whiteSpace: 'nowrap', + overflow: 'visible', + textOverflow: 'unset' + } })); const filters = [ @@ -95,9 +95,9 @@ ] const LocItemList = () => { - const translate = useTranslate(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); + const translate = useTranslate(); const locId = useGetRecordId(); return ( @@ -111,15 +111,15 @@ }), marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} - title={"menu.locItem"} + title={"menu.locPreview"} empty={false} - filter={{locId: locId}} + filter={{ locId: locId }} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <FilterButton /> - <SelectColumnsButton preferenceKey='locItem' /> + <SelectColumnsButton preferenceKey='locPreview' /> </TopToolbar> )} perPage={DEFAULT_PAGE_SIZE} @@ -140,11 +140,12 @@ const DynamicFields = (props) => { - const translate = useTranslate(); - const notify = useNotify(); const [columns, setColumns] = useState([]); const { isLoading } = useListContext(); + const translate = useTranslate(); const refresh = useRefresh(); + const notify = useNotify(); + useEffect(() => { getDynamicFields(); }, []); @@ -205,12 +206,12 @@ )} {columns.length > 0 && <StyledDatagrid - preferenceKey='locItem' + preferenceKey='locPreview' bulkActionButtons={false} rowClick={false} expand={false} expandSingle={true} - omit={['id', 'createTime','spec', 'model', 'locId', 'orderId', 'trackCode', 'orderItemId', 'matnrId', 'splrBatch','createBy$', 'memo', 'fieldsIndex','statusBool']} + omit={['id', 'createTime', 'spec', 'model', 'locId', 'orderId', 'trackCode', 'orderItemId', 'matnrId', 'splrBatch', 'createBy$', 'memo', 'fieldsIndex', 'statusBool']} > {columns.map((column) => column)} </StyledDatagrid>} diff --git a/rsf-admin/src/page/locItem/index.jsx b/rsf-admin/src/page/locPreview/index.jsx similarity index 100% rename from rsf-admin/src/page/locItem/index.jsx rename to rsf-admin/src/page/locPreview/index.jsx diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderEdit.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderEdit.jsx index bb1e884..9a86482 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderEdit.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderEdit.jsx @@ -47,7 +47,7 @@ <SimpleForm shouldUnregister warnWhenUnsavedChanges - toolbar={<FormToolbar />} + toolbar={false} mode="onTouched" defaultValues={{}} > diff --git a/rsf-admin/src/page/orders/transfer/TransferEdit.jsx b/rsf-admin/src/page/orders/transfer/TransferEdit.jsx index bc709f9..a12c97d 100644 --- a/rsf-admin/src/page/orders/transfer/TransferEdit.jsx +++ b/rsf-admin/src/page/orders/transfer/TransferEdit.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.js"; + import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from "@/config/setting.js"; -import EditBaseAside from "../../components/EditBaseAside.jsx"; -import CustomerTopToolBar from "../../components/EditTopToolBar.jsx"; -import MemoInput from "../../components/MemoInput.jsx"; import StatusSelectInput from "../../components/StatusSelectInput.jsx"; +import CustomerTopToolBar from "../../components/EditTopToolBar.jsx"; +import EditBaseAside from "../../components/EditBaseAside.jsx"; +import { Stack, Grid, Box, Typography } from "@mui/material"; +import { useWatch, useFormContext } from "react-hook-form"; +import MemoInput from "../../components/MemoInput.jsx"; import TransferItemList from "./TransferItemList.jsx"; +import * as Common from "@/utils/common.js"; const FormToolbar = () => { const { getValues } = useFormContext(); @@ -92,7 +93,7 @@ autoFocus readOnly /> - <NumberInput label="table.field.transfer.type" source="type" readOnly/> + <TextInput label="table.field.transfer.type" source="type$" readOnly/> <SelectInput label="table.field.transfer.source" source="source" @@ -106,7 +107,7 @@ /> <SelectInput label="table.field.transfer.exceStatus" - source="exceStatus" + source="exceStatus$" readOnly choices={[ { id: 0, name: "鏈墽琛�" }, diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java new file mode 100644 index 0000000..f9d4673 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java @@ -0,0 +1,180 @@ +package com.vincent.rsf.server.manager.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.vincent.rsf.framework.common.Cools; +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; +import com.vincent.rsf.server.common.annotation.OperationLog; +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.common.utils.ExcelUtil; +import com.vincent.rsf.server.manager.controller.params.LocMastInitParam; +import com.vincent.rsf.server.manager.controller.params.LocModifyParams; +import com.vincent.rsf.server.manager.entity.Loc; +import com.vincent.rsf.server.manager.enums.LocStsType; +import com.vincent.rsf.server.manager.service.LocService; +import com.vincent.rsf.server.system.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.*; +import java.util.stream.Collectors; + + +@Api(tags = "搴撲綅淇℃伅") +@RestController +public class LocPreviewController extends BaseController { + + @Autowired + private LocService locService; + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @PostMapping("/loc/preview/page") + public R page(@RequestBody Map<String, Object> map) { + BaseParam baseParam = buildParam(map, BaseParam.class); + PageParam<Loc, BaseParam> pageParam = new PageParam<>(baseParam, Loc.class); + List<String> list = new ArrayList<>(); + list.add("row"); + list.add("col"); + list.add("lev"); + return R.ok().add(locService.page(pageParam, pageParam.buildWrapper(true,list))); + } + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @PostMapping("/loc/preview/list") + public R list(@RequestBody Map<String, Object> map) { + return R.ok().add(locService.list()); + } + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @PostMapping("/loc/preview/areaNoUse/list") + public R areaNoUselist(@RequestBody Map<String, Object> map) { + String locCode = map.get("locCode").toString(); + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, locCode),false); + List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>() + .eq(Loc::getAreaId, loc.getAreaId()) + .eq(Loc::getChannel,loc.getChannel()) + .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) + ); + List<String> list1 = list.stream().map(obj -> obj.getCode()).collect(Collectors.toList()); + return R.ok(list1); + } + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @PostMapping({"/loc/preview/many/{ids}", "/loc/preview/many/{ids}"}) + public R many(@PathVariable Long[] ids) { + return R.ok().add(locService.listByIds(Arrays.asList(ids))); + } + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @GetMapping("/loc/preview/{id}") + public R get(@PathVariable("id") Long id) { + return R.ok().add(locService.getById(id)); + } + + @PreAuthorize("hasAuthority('manager:locPreview:save')") + @OperationLog("Create 搴撲綅淇℃伅琛�") + @PostMapping("/loc/preview/save") + public R save(@RequestBody Loc loc) { + if (Objects.isNull(loc.getWarehouseId())) { + throw new CoolException("浠撳簱ID涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(loc.getAreaId())) { + throw new CoolException("浠撳簱ID涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(loc.getTypeIds())) { + throw new CoolException("搴撲綅绫诲瀷涓嶈兘涓虹┖锛侊紒"); + } + String join = StringUtils.join(loc.getTypeIds(), ","); + loc.setType(join); + loc.setCreateBy(getLoginUserId()); + loc.setUpdateBy(getLoginUserId()); + if (!locService.save(loc)) { + return R.error("Save Fail"); + } + + if (!locService.saveType(loc)) { + throw new CoolException("搴撲綅绫诲瀷鍏宠仈鍏崇郴淇濆瓨澶辫触锛侊紒"); + } + return R.ok("Save Success").add(loc); + } + + @PreAuthorize("hasAuthority('manager:locPreview:update')") + @OperationLog("Update 搴撲綅淇℃伅琛�") + @PostMapping("/loc/preview/update") + @Transactional(rollbackFor = Exception.class) + public R update(@RequestBody Loc loc) { + loc.setUpdateBy(getLoginUserId()); + String join = StringUtils.join(loc.getTypeIds(), ","); + loc.setType(join); + if (Objects.isNull(loc.getTypeIds())) { + throw new CoolException("搴撲綅绫诲瀷涓嶈兘涓虹┖锛侊紒"); + } + if (!locService.updateById(loc)) { + return R.error("Update Fail"); + } + if (!locService.updateLoc(loc)) { + throw new CoolException("搴撲綅绫诲瀷鍏宠仈鍏崇郴淇敼澶辫触!锛�"); + } + return R.ok("Update Success").add(loc); + } + + @PreAuthorize("hasAuthority('manager:locPreview:remove')") + @OperationLog("Delete 搴撲綅淇℃伅琛�") + @PostMapping("/loc/preview/remove/{ids}") + public R remove(@PathVariable Long[] ids) { + if (!locService.removeByIds(Arrays.asList(ids))) { + return R.error("Delete Fail"); + } + return R.ok("Delete Success").add(ids); + } + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @PostMapping("/loc/preview/query") + public R query(@RequestParam(required = false) String condition) { + List<KeyValVo> vos = new ArrayList<>(); + LambdaQueryWrapper<Loc> wrapper = new LambdaQueryWrapper<>(); + if (!Cools.isEmpty(condition)) { + wrapper.like(Loc::getCode, condition); + } + locService.page(new Page<>(1, 30), wrapper).getRecords().forEach( + item -> vos.add(new KeyValVo(item.getId(), item.getCode())) + ); + return R.ok().add(vos); + } + + @PreAuthorize("hasAuthority('manager:locPreview:list')") + @ApiOperation("搴撲綅瀵煎嚭") + @PostMapping("/loc/preview/export") + public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { + List<Loc> locs = new ArrayList<>(); + if (Objects.isNull(map.get("ids"))) { + locs = locService.list(); + } else { + locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getStatus, 1)); + } + ExcelUtil.build(ExcelUtil.create(locs, Loc.class), response); + } + + @PreAuthorize("hasAuthority('manager:locPreview:update')") + @ApiOperation("搴撲綅鎵归噺淇敼") + @PostMapping("/loc/preview/modify") + public R batchUpdate(@RequestBody LocModifyParams locs) { + if (Objects.isNull(locs)) { + throw new CoolException("鍙備负涓嶈兘涓虹┖锛侊紒"); + } + return locService.modifyLocs(locs); + } + + + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java index cde90ee..9a2c374 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java @@ -156,7 +156,7 @@ @ApiOperation("鍗曟嵁淇℃伅淇敼") @PostMapping("/transfer/items/update") @PreAuthorize("hasAuthority('manager:transfer:update')") - public R orderAndrItemUpdate(@RequestBody TransferItemParams params) throws Exception { + public R orderAndrItemUpdate(@RequestBody TransferItemParams params) { if (Objects.isNull(params)) { return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } @@ -167,7 +167,7 @@ @ApiOperation("鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭�") @PostMapping("/transfer/locs/items") @PreAuthorize("hasAuthority('manager:transfer:list')") - public R locsPage(@RequestBody OrgLocParams params) throws Exception { + public R locsPage(@RequestBody OrgLocParams params) { if (Objects.isNull(params)) { return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } @@ -184,7 +184,7 @@ @PostMapping("/transfer/template/download") @ApiOperation("涓嬭浇鐩樼偣鍗曟ā鏉�") @PreAuthorize("hasAuthority('manager:transfer:update')") - public void downloadTemplate(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { + public void downloadTemplate(@RequestBody Map<String, Object> map, HttpServletResponse response) { CheckOrderTemplate template = ExcelUtil.mockData(CheckOrderTemplate.class); List<CheckOrderTemplate> list = Arrays.asList(template); ExcelUtil.build(ExcelUtil.create(list, CheckOrderTemplate.class, true), response); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewService.java new file mode 100644 index 0000000..32675a0 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewService.java @@ -0,0 +1,20 @@ +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.LocMastInitParam; +import com.vincent.rsf.server.manager.controller.params.LocModifyParams; +import com.vincent.rsf.server.manager.entity.Loc; + +public interface LocPreviewService extends IService<Loc> { + + R modifyLocs(LocModifyParams locs); + + R initLocs(LocMastInitParam param, Long loginUserId); + + boolean saveType(Loc typeIds); + + boolean updateLoc(Loc loc); + + R batchBindLocs(LocModifyParams locs); +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewServiceImpl.java new file mode 100644 index 0000000..4ca756f --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocPreviewServiceImpl.java @@ -0,0 +1,218 @@ +package com.vincent.rsf.server.manager.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vincent.rsf.framework.common.Cools; +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; +import com.vincent.rsf.server.manager.controller.params.LocMastInitParam; +import com.vincent.rsf.server.manager.controller.params.LocModifyParams; +import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.mapper.LocMapper; +import com.vincent.rsf.server.manager.mapper.LocTypeRelaMapper; +import com.vincent.rsf.server.manager.utils.Shelves; +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 java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@Service("locPreviewService") +public class LocPreviewServiceImpl extends ServiceImpl<LocMapper, Loc> implements LocPreviewService { + + @Autowired + private WarehouseAreasService warehouseAreasService; + + @Autowired + private LocTypeRelaService locTypeRelaService; + + @Autowired + private LocAreaRelaService locAreaRelaService; + + @Autowired + private LocAreaService locAreaService; + + @Autowired + private LocTypeRelaMapper locTypeRelaMapper; + + @Override + public R modifyLocs(LocModifyParams locs) { + if (locs.getId().isEmpty()) { + throw new CoolException("搴撲綅ID涓嶈兘涓虹┖锛侊紒"); + } + Loc loc = locs.getLoc(); + + if (Objects.isNull(loc)) { + throw new CoolException("淇敼搴撲綅淇℃伅涓嶈兘涓虹┖锛侊紒"); + } + + String join = loc.getType(); + if (!Objects.isNull(loc.getTypeIds()) && !loc.getTypeIds().isEmpty()) { + join = StringUtils.join(loc.getTypeIds(), ","); + } + boolean update = this.update(new LambdaUpdateWrapper<Loc>() + .in(Loc::getId, locs.getId()) + .eq(Loc::getStatus, 1) + .set(!Objects.isNull(loc.getAreaId()), Loc::getAreaId, loc.getAreaId()) + .set(!Objects.isNull(loc.getWarehouseId()), Loc::getWarehouseId, loc.getWarehouseId()) + .set(!Objects.isNull(loc.getUseStatus()), Loc::getUseStatus, loc.getUseStatus()) + .set(!Objects.isNull(loc.getTypeIds()) && !loc.getTypeIds().isEmpty(), Loc::getType, join) + .set(!Objects.isNull(loc.getLength()), Loc::getLength, loc.getLength()) + .set(!Objects.isNull(loc.getWidth()), Loc::getWidth, loc.getWidth()) + .set(!Objects.isNull(loc.getHeight()), Loc::getHeight, loc.getHeight()) + .set(!Objects.isNull(loc.getChannel()), Loc::getChannel, loc.getChannel()) + .set(!Objects.isNull(loc.getFlagLabelMange()), Loc::getFlagLabelMange, loc.getFlagLabelMange()) + .set(!Objects.isNull(loc.getStatus()), Loc::getStatus, loc.getStatus())); + if (!update) { + throw new CoolException("搴撲綅淇℃伅淇敼澶辫触锛侊紒"); + } + + return R.ok(loc); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public R initLocs(LocMastInitParam param, Long loginUserId) { + //娓呯┖琛� +// this.baseMapper.deleteAll(); + //娓呯┖褰撳墠搴撳尯搴撲綅 + List<Loc> locs = this.list(new LambdaQueryWrapper<Loc>().eq(Loc::getWarehouseId, param.getWarehouseId()).eq(Loc::getAreaId, param.getAreaId())); + if (!locs.isEmpty()) { + if (!this.remove(new LambdaQueryWrapper<Loc>().eq(Loc::getWarehouseId, param.getWarehouseId()).eq(Loc::getAreaId, param.getAreaId()))) { + throw new CoolException("鍒濆鍖栧け璐ワ細鏁版嵁鍒犻櫎澶辫触锛侊紒"); + } + } + WarehouseAreas warehouseAreas = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>() + .eq(WarehouseAreas::getWarehouseId, param.getWarehouseId()) + .eq(WarehouseAreas::getId, param.getAreaId())); + if (Objects.isNull(warehouseAreas)) { + throw new CoolException("搴撳尯涓嶅瓨鍦紒锛�"); + } + String join = StringUtils.join(param.getTypeIds(), ","); + + String[] split = warehouseAreas.getCode().split("\\."); + if (split.length == 0){ + throw new CoolException("搴撳尯缂栫爜閿欒锛侊紒"); + } + StringBuilder locStar = new StringBuilder(); + for (int i = 0; i < split.length; i++) { + locStar.append(split[i]).append("-"); + } + + List<Loc> list = new ArrayList<>(); + Integer chanl = 0; //榛樿绗竴宸烽亾 + for (int r = param.getStartRow(); r <= param.getEndRow(); r++) { + try{ + Shelves shelves = new Shelves(param.getEndRow() - param.getStartRow() + 1, param.getChannel(),param.getStartRow()); + for (List<Integer> node : shelves.nodes){ + if (node.contains(r)) { + if (!Cools.isEmpty(param.getStartChannel()) && param.getStartChannel() > 0){ + chanl = shelves.nodes.indexOf(node) + param.getStartChannel(); + }else { + chanl = shelves.nodes.indexOf(node) + 1; + } + break; + } + } + }catch (Exception e){ + throw new CoolException("瑙f瀽宸烽亾鍙峰け璐�"); + } + for (int b = param.getStartBay(); b <= param.getEndBay(); b++) { + for (int l = param.getStartLev(); l <= param.getEndLev(); l++) { + // 鑾峰彇搴撲綅鍙� + String locNo = locStar + String.format("%d", r) + String.format("-%d", b) + String.format("-%d", l); + Loc loc = new Loc(); + loc.setCode(locNo) + .setUseStatus("O") + .setRow(r) + .setCol(b) + .setLev(l) + .setChannel(chanl) + .setType(join) + .setAreaId(param.getAreaId()) + .setUpdateBy(loginUserId) + .setCreateBy(loginUserId) + .setWarehouseId(warehouseAreas.getWarehouseId()); + list.add(loc); + } + } + } + + if (!this.saveBatch(list)) { + throw new CoolException("搴撲綅鍒濆鍖栧け璐ワ紒锛�"); + } + List<LocTypeRela> locTypeRelas = new ArrayList<>(); + for (Long typeId : param.getTypeIds()) { + for (Loc loc : list) { + LocTypeRela typeRela = new LocTypeRela(); + typeRela.setLocId(loc.getId()).setTypeId(typeId); + locTypeRelas.add(typeRela); + } + } + if (!locTypeRelaService.saveBatch(locTypeRelas)) { + throw new CoolException("搴撲綅绫诲瀷鍏宠仈澶辫触锛侊紒"); + } + return R.ok("鍒濆鍖栨垚鍔燂紒锛�"); + } + + @Override + public boolean saveType(Loc loc) { + List<LocTypeRela> relas = new ArrayList<>(); + loc.getTypeIds().forEach(id -> { + LocTypeRela typeRela = new LocTypeRela(); + typeRela.setTypeId(id) + .setLocId(loc.getId()); + relas.add(typeRela); + }); + if (!locTypeRelaService.saveOrUpdateBatch(relas)) { + throw new CoolException("搴撲綅鍏宠仈鍏崇郴淇濆瓨澶辫触锛侊紒"); + } + return true; + } + + @Override + public boolean updateLoc(Loc loc) { + locTypeRelaMapper.delete(new LambdaQueryWrapper<LocTypeRela>().eq(LocTypeRela::getLocId, loc.getId())); + List<LocTypeRela> relas = new ArrayList<>(); + loc.getTypeIds().forEach(id -> { + LocTypeRela typeRela = new LocTypeRela(); + typeRela.setTypeId(id) + .setLocId(loc.getId()); + relas.add(typeRela); + }); + if (!locTypeRelaService.saveOrUpdateBatch(relas)) { + throw new CoolException("搴撲綅鍏宠仈鍏崇郴淇濆瓨澶辫触锛侊紒"); + } + return true; + } + + @Override + public R batchBindLocs(LocModifyParams locs) { + if (locs.getId().isEmpty()) { + throw new CoolException("搴撲綅ID涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(locs.getLocAreaId())) { + throw new CoolException("淇敼搴撲綅淇℃伅涓嶈兘涓虹┖锛侊紒"); + } + List<LocArea> locAreas = locAreaService.list(new LambdaQueryWrapper<LocArea>().eq(LocArea::getId, locs.getLocAreaId())); + if (locAreas.isEmpty()) { + throw new CoolException("搴撲綅鍒嗗尯涓嶅瓨鍦紒锛�"); + } + List<LocAreaRela> relas = new ArrayList<>(); + locs.getId().forEach(id -> { + LocAreaRela locAreaRela = new LocAreaRela(); + locAreaRela.setLocId(id) + .setLocAreaId(locs.getLocAreaId()); + relas.add(locAreaRela); + }); + if (!locAreaRelaService.saveBatch(relas)) { + throw new CoolException("搴撲綅鍒嗗尯澶辫触锛侊紒"); + } + + return R.ok(); + } +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java index 0a56217..7d9b618 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java @@ -48,21 +48,21 @@ if (Objects.isNull(wkOrderItem.getAnfme()) || Double.compare(wkOrderItem.getAnfme(), 0.0) <= 0) { throw new CoolException("璁″垝鏁颁笉鑳戒负绌猴紒锛�"); } - //淇濆瓨鎵╁睍瀛楁 - try { - StringBuffer sb = new StringBuffer(); - if (Objects.isNull(wkOrderItem.getFieldsIndex()) || StringUtils.isBlank(wkOrderItem.getFieldsIndex())) { - sb.append(wkOrderItem.getMatnrId() + wkOrderItem.getBatch() ); - //鑾峰彇16浣島uid - String uuid16 = Cools.md5Chinese(sb.toString()); - wkOrderItem.setFieldsIndex(uuid16); - params.put("index", uuid16); - } - //淇濆瓨鎴栨洿鏂板姩鎬佸瓧娈靛�� - FieldsUtils.updateFieldsValue(params); - } catch (Exception e) { - throw new RuntimeException(e); - } +// //淇濆瓨鎵╁睍瀛楁 +// try { +// StringBuffer sb = new StringBuffer(); +// if (Objects.isNull(wkOrderItem.getFieldsIndex()) || StringUtils.isBlank(wkOrderItem.getFieldsIndex())) { +// sb.append(wkOrderItem.getMatnrId() + wkOrderItem.getBatch()); +// //鑾峰彇16浣島uid +// String uuid16 = Cools.md5Chinese(sb.toString()); +// wkOrderItem.setFieldsIndex(uuid16); +// params.put("index", uuid16); +// } +// //淇濆瓨鎴栨洿鏂板姩鎬佸瓧娈靛�� +// FieldsUtils.updateFieldsValue(params); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } wkOrderItem.setUpdateBy(loginUserId).setCreateBy(loginUserId); if (!this.saveOrUpdate(wkOrderItem)) { throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java index ccad70d..5bda303 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java @@ -11,6 +11,7 @@ import com.vincent.rsf.server.manager.enums.WaveRuleType; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.enums.LocStsType; +import org.apache.commons.lang3.StringUtils; import javax.swing.*; import java.math.BigDecimal; @@ -65,7 +66,7 @@ public static List<LocItem> getEfficiencyFirstItemList(String matnrCode, String splrBatch, Double anfme) { LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>(); locItemQueryWrapper.eq(LocItem::getMatnrCode, matnrCode); - locItemQueryWrapper.eq(LocItem::getBatch, splrBatch); + locItemQueryWrapper.eq(StringUtils.isNotBlank(splrBatch), LocItem::getBatch, splrBatch); String applySql = String.format( "EXISTS (SELECT 1 FROM man_loc ml " + "WHERE ml.use_status = '%s'" + -- Gitblit v1.9.1