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