From 2938aa734a2cf0baf93fdced92ea21e37f187365 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 10 六月 2025 11:05:39 +0800 Subject: [PATCH] 出库单下发执行生成任务明细 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 56 +++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java | 27 +++-- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java | 3 rsf-admin/src/page/orders/outStock/OutStockPublic.jsx | 73 ++++++++++---- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java | 30 +++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java | 34 ++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java | 4 rsf-admin/src/page/orders/outStock/OutOrderModal.jsx | 2 rsf-admin/src/page/orders/asnOrder/AsnWareModal.jsx | 3 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java | 8 + rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java | 5 + rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java | 16 ++ rsf-server/src/main/resources/application.yml | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java | 2 14 files changed, 222 insertions(+), 43 deletions(-) diff --git a/rsf-admin/src/page/orders/asnOrder/AsnWareModal.jsx b/rsf-admin/src/page/orders/asnOrder/AsnWareModal.jsx index aa6ffd3..7667817 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnWareModal.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnWareModal.jsx @@ -20,11 +20,9 @@ import TreeSelectInput from "@/page/components/TreeSelectInput"; const AsnWareModal = (props) => { const { open, setOpen, data, setData } = props; - const translate = useTranslate(); const notify = useNotify(); const refresh = useRefresh(); - const handleClose = (event, reason) => { if (reason !== "backdropClick") { setOpen(false); @@ -55,7 +53,6 @@ const hasarr = data.map(el => +el.matnrId) const selectedData = selectedRows.filter(item => !hasarr.includes(item)).map(id => (tableData.find(row => row.id === id))); const value = selectedData.map((el => { - console.log(el); const dynamicFields = dyFields.reduce((acc, item) => { acc[item.fields] = el['extendFields']?.[item.fields] || ''; return acc; diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx index ba39f27..01283a6 100644 --- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx +++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx @@ -13,7 +13,6 @@ ExportButton, BulkDeleteButton, WrapperField, - Toolbar, useRecordContext, useTranslate, useNotify, @@ -45,7 +44,6 @@ import { Grid, margin, Stack, width } from "@mui/system"; import request from '@/utils/request'; import SaveIcon from '@mui/icons-material/Save'; -import debounce from "lodash/debounce"; import CheckCircleIcon from '@mui/icons-material/CheckCircle'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx index 5b60940..b3b7062 100644 --- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx +++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx @@ -1,4 +1,4 @@ -import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText, Tooltip } from "@mui/material"; +import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText, Tooltip, IconButton } from "@mui/material"; import React, { useState, useRef, useEffect, useMemo } from "react"; import { List, @@ -13,7 +13,6 @@ ExportButton, BulkDeleteButton, WrapperField, - Toolbar, useRecordContext, useTranslate, useNotify, @@ -36,14 +35,17 @@ SimpleForm, required, Form, + useRefresh, + useRedirect, } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting'; import { styled } from '@mui/material/styles'; -import { DataGrid, useGridApiContext } from '@mui/x-data-grid'; +import { DataGrid, useGridApiContext, GridActionsCellItem, useGridApiRef } from '@mui/x-data-grid'; import request from '@/utils/request'; import ConfirmationNumberOutlinedIcon from '@mui/icons-material/ConfirmationNumberOutlined'; import CloseSharpIcon from '@mui/icons-material/CloseSharp'; import ConfirmButton from '../../components/ConfirmButton'; +import { Delete, Edit, Add } from '@mui/icons-material'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -60,8 +62,8 @@ const OutStockPublic = (props) => { const { record, open, setOpen } = props; - const dataGridRef = useRef(null); const notify = useNotify(); + const gridRef = useGridApiRef(); const [rows, setRows] = useState({}); const translate = useTranslate(); const [selectedIds, setSelectedIds] = React.useState([]); @@ -91,11 +93,14 @@ [name]: value })); }; + + gridRef.current = useGridApiRef(); + return ( <> <Box> <Grid sx={{ display: "flex" }} container rowSpacing={2} columnSpacing={2}> - <Grid item xl={6} gap={2} > + <Grid item xl={5.7} gap={2} > <Card> <Form> <ReferenceInput @@ -124,9 +129,7 @@ empty={false} filter={{ asnId: record?.id, deleted: 0 }} sort={{ field: "create_time", order: "desc" }} - actions={( - <SelectColumnsButton preferenceKey='outStock' /> - )} + actions={false} perPage={DEFAULT_ITEM_PAGE_SIZE} > <LinearProgress @@ -152,12 +155,13 @@ </List> </Card> </Grid> - <Grid item xl={6} gap={2}> + <Grid item xl={6.3} gap={2}> <Card> - <Box> + <Box sx={{ height: 500, width: '100%' }}> <DataGrid rows={rows} columns={columns} + apiRef={gridRef} initialState={{ pagination: { paginationModel: { @@ -165,17 +169,16 @@ }, }, }} - ref={dataGridRef} checkboxSelection + pageSizeOptions={[15, 25, 35, 45]} onRowSelectionModelChange={(ids) => { setSelectedIds(ids) }} - pageSizeOptions={[15, 25, 35, 45]} /> </Box> <Box sx={{ textAlign: 'center' }}> <CloseButton setOpen={setOpen} /> - <SubmitButton selectedIds={selectedIds} setSelectedIds={setSelectedIds} /> + <SubmitButton selectedIds={selectedIds} setSelectedIds={setSelectedIds} gridRef={gridRef} /> </Box> </Card> </Grid> @@ -187,12 +190,20 @@ //鎻愪氦鎸夐挳 -const SubmitButton = ({ selectedIds, setSelectedIds }) => { - const submit = () => { - if (selectedIds.length < 1) { return } - console.log(selectedIds); +const SubmitButton = ({ selectedIds, setSelectedIds, gridRef }) => { + const notify = useNotify(); + const refresh = useRefresh(); + const redirect = useRedirect(); + const submit = async () => { + const items = gridRef.current?.getSortedRows(); + const { data: { code, data, msg } } = await request.post('/outStock/generate/tasks', { items }); + if (code == 200) { + refresh(); + redirect("/task") + } else { + notify(msg); + } } - return ( <ConfirmButton label="toolbar.confirm" @@ -220,14 +231,13 @@ ) } - const columns = [ { field: 'id', headerName: 'ID', width: 40 }, { field: 'locCode', headerName: '搴撲綅', width: 110 }, { field: 'barcode', headerName: '瀹瑰櫒', width: 120 }, { field: 'batch', headerName: '鎵规', width: 90 }, { field: 'unit', headerName: '鍗曚綅', width: 90 }, - { field: 'workQty', headerName: '鏈鍑哄簱鏁伴噺', width: 110 }, + { field: 'outQty', headerName: '鏈鍑哄簱鏁伴噺', width: 110 }, { field: 'siteNo', headerName: '鍑哄簱鍙�', @@ -241,8 +251,31 @@ <OutStockSite {...params} /> ), }, + { + field: 'actions', + type: 'actions', + headerName: '鎿嶄綔', + with: 120, + getActions: (params) => [ + <GridActionsCellItem + icon={<Delete />} + label="Delete" + onClick={() => handleDelete(params.row.id)} + />, + ] + }, ] +/** + * 鍒犻櫎浜嬩欢 + * @param {*} params + */ +const handleDelete = (params) => { + console.log(params); + +} + + const OutStockSiteNo = React.memo(function OutStockSiteNo(props) { const { value } = props; if (!value) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java index 8940c25..f4be3d9 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java @@ -86,7 +86,13 @@ } param.setType(Constants.TASK_TYPE_OUT_STOCK); - return locItemService.generateTask(param, getLoginUserId()); + try { + locItemService.generateTask(param, getLoginUserId()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return R.ok(); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java index 4441c62..406e377 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java @@ -103,6 +103,11 @@ public static final String TASK_TYPE_OUT_CHECK = "check"; /** + * 鍗曟嵁鍑哄簱 + */ + public static final String TASK_TYPE_ORDER_OUT_STOCK = "OrderOutStock"; + + /** * 鎷f枡鍑哄簱 */ public static final String TASK_TYPE_OUT_PICK = "pick"; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java index 612bce4..108539b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java @@ -97,7 +97,13 @@ } param.setType(Constants.TASK_TYPE_OUT_STOCK); - return locItemService.generateTask(param, getLoginUserId()); + try { + locItemService.generateTask(param, getLoginUserId()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return R.ok(); } /** @@ -129,7 +135,13 @@ } map.setType(Constants.TASK_TYPE_OUT_CHECK); - return R.ok("浠诲姟鐢熸垚鎴愬姛").add(locItemService.generateTask(map, getLoginUserId())); + try { + locItemService.generateTask(map, getLoginUserId()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return R.ok("浠诲姟鐢熸垚鎴愬姛"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java index 83c1aaa..9ee7129 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java @@ -1,5 +1,6 @@ package com.vincent.rsf.server.manager.controller; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -8,6 +9,7 @@ import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; +import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.enums.OrderWorkType; import com.vincent.rsf.server.common.annotation.OperationLog; @@ -28,6 +30,8 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -38,6 +42,8 @@ @RestController @Api(tags = "鍑哄簱鍗曟嵁") public class OutStockController extends BaseController { + + Logger logger = LoggerFactory.getLogger(OutStockController.class); @Autowired private OutStockService outStockService; @@ -235,11 +241,31 @@ @PostMapping("/outStock/order/getOutTaskItems") @PreAuthorize("hasAuthority('manager:outStock:list')") - public R getOrderOutTaskItem(@RequestBody OrderOutTaskParam param){ - if (Cools.isEmpty(param)){ + public R getOrderOutTaskItem(@RequestBody OrderOutTaskParam param) { + if (Cools.isEmpty(param)) { return R.error("鍙傛暟涓嶈兘涓虹┖"); } return outStockService.getOrderOutTaskItem(param); } + + + /** + * 鍑哄簱鍗曠敓鎴愬嚭搴撲换鍔� + * @param params + * @return + */ + @PostMapping("/outStock/generate/tasks") + @ApiOperation("鍑哄簱鍗曠敓鎴愬嚭搴撲换鍔�") + @PreAuthorize("hasAuthority('manager:outStock:list')") + public R genOutStockTask( @RequestBody Map<String, Object> params) { + if (Cools.isEmpty()) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + List<OutStockToTaskParams> taskParams = JSONArray.parseArray(JSONArray.toJSONString(params.get("items")), OutStockToTaskParams.class); + + return outStockService.genOutStockTask(taskParams, getLoginUserId()); + } + + } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java new file mode 100644 index 0000000..0cb5e8d --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java @@ -0,0 +1,34 @@ +package com.vincent.rsf.server.manager.controller.params; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +@ApiModel(value = "OutStockToTaskParams", description = "鍑哄簱鍗曠敓鎴愪换鍔″弬鏁�") +public class OutStockToTaskParams { + + @ApiModelProperty("搴撲綅") + private String locCode; + + @ApiModelProperty("搴撲綅鏄庣粏ID") + private Long id; + + @ApiModelProperty("鎵樼洏鐮�") + private String barcode; + + @ApiModelProperty("鎵规") + private String batch; + + @ApiModelProperty("鍗曚綅") + private String unit; + + @ApiModelProperty("鏁伴噺") + private Double outQty; + + @ApiModelProperty("绔欑偣") + private String siteNo; +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java index 96b195d..3f72e94 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java @@ -172,6 +172,10 @@ @TableField(exist = false) private Map<String, String> extendFields; + @ApiModelProperty("鎵樼洏鐮�") + @TableField(exist = false) + private String barcode; + /** * 鐘舵�� 1: 姝e父 0: 鍐荤粨 */ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java index 2e24cfe..44a86d7 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java @@ -8,7 +8,7 @@ public interface LocItemService extends IService<LocItem> { - R generateTask(LocToTaskParams map, Long loginUserId); + void generateTask(LocToTaskParams map, Long loginUserId) throws Exception; Task genMoveTask(LocToTaskParams map, Long loginUserId); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java index 152874d..a4db92a 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java @@ -4,6 +4,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; +import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.entity.AsnOrder; import java.util.List; @@ -21,4 +22,6 @@ R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId); R getOrderOutTaskItem(OrderOutTaskParam param); + + R genOutStockTask(List<OutStockToTaskParams> params, Long loginUserId); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java index ca4d6b6..7d8c06a 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java @@ -7,7 +7,6 @@ import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto; import com.vincent.rsf.server.api.service.WcsService; import com.vincent.rsf.server.api.utils.LocUtils; -import com.vincent.rsf.server.api.utils.SlaveProperties; import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; import com.vincent.rsf.server.manager.entity.*; @@ -19,6 +18,8 @@ import com.vincent.rsf.server.system.utils.SerialRuleUtils; import lombok.Synchronized; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,6 +30,8 @@ @Service("locItemService") public class LocItemServiceImpl extends ServiceImpl<LocItemMapper, LocItem> implements LocItemService { + + Logger logger = LoggerFactory.getLogger(LocItemServiceImpl.class); @Autowired private LocService locService; @@ -55,7 +58,7 @@ @Override @Synchronized @Transactional(rollbackFor = Exception.class) - public R generateTask(LocToTaskParams map, Long loginUserId) { + public void generateTask(LocToTaskParams map, Long loginUserId) throws Exception { if (Objects.isNull(map.getSiteNo())) { throw new CoolException("绔欑偣涓嶈兘涓虹┖锛�"); } @@ -69,16 +72,21 @@ listMap.keySet().forEach(key -> { Task task = new Task(); Loc loc = locService.getById(key); + logger.info("搴撲綅锛�>{}<UNK>", loc.getCode()); + if (Objects.isNull(loc)) { throw new CoolException("鏁版嵁閿欒锛氭墍閫夊簱瀛樹俊鎭笉瀛樺湪锛侊紒"); } + if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { + throw new CoolException("搴撲綅:" + loc.getCode() + ",涓嶅浜嶧.鍦ㄥ簱鐘舵�侊紝涓嶅彲鎵цR.鍑哄簱棰勭害鎿嶄綔锛侊紒"); + } + loc.setUseStatus(LocStsType.LOC_STS_TYPE_R.type); if (!locService.updateById(loc)) { throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐ワ紒锛�"); } Task moveTask = new Task(); - String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); task.setOrgLoc(loc.getCode()) .setTaskCode(ruleCode) @@ -101,12 +109,12 @@ List<LocItem> locItemList = listMap.get(key); Double outQty = locItemList.stream().mapToDouble(LocItem::getOutQty).sum(); - Task serviceOne = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, loc.getBarcode())); - if (!Objects.isNull(serviceOne)) { - throw new CoolException("鎵樼洏浠诲姟鎵ц涓紝涓嶈兘閲嶅鍒涘缓锛�"); - } +// Task serviceOne = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, loc.getBarcode())); +// if (!Objects.isNull(serviceOne)) { +// throw new CoolException("鎵樼洏浠诲姟鎵ц涓紝涓嶈兘閲嶅鍒涘缓锛�"); +// } - if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK)) { + if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK) || map.getType().equals(Constants.TASK_TYPE_ORDER_OUT_STOCK)) { Double useQty = Math.round((outQty + workQty) * 10000) / 10000.0; if (orgQty.compareTo(useQty) > 0) { //鎷f枡鍑哄簱 @@ -140,6 +148,7 @@ } task.setTaskType(TaskType.TASK_TYPE_CHECK_OUT.type).setWarehType(deviceSite.getDevice()); } + if (!taskService.save(task)) { throw new CoolException("浠诲姟鍒涘缓澶辫触锛侊紒"); } @@ -222,8 +231,6 @@ throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触锛侊紒"); } }); - - return R.ok("浠诲姟鐢熸垚瀹屾垚锛�!"); } /** diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java index 1194ff4..990e9ac 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java @@ -8,9 +8,12 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.utils.LocUtils; +import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.dto.ExistDto; import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto; +import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; +import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.entity.*; @@ -20,6 +23,8 @@ import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,6 +45,9 @@ */ @Service("outStockServiceImpl") public class OutStockServiceImpl extends ServiceImpl<AsnOrderMapper, AsnOrder> implements OutStockService { + + public Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired private AsnOrderItemService asnOrderItemService; @@ -421,6 +429,51 @@ return R.ok(locItems); } + /** + * 鐢熸垚鍑哄簱浠诲姟 + * @param params + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R genOutStockTask(List<OutStockToTaskParams> params, Long loginUserId) { + if (params.isEmpty()) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + + //浼樺厛鐢熸垚娴呭簱浣嶄换鍔� + List<OutStockToTaskParams> Items = params.stream().sorted(Comparator.comparing(OutStockToTaskParams::getLocCode).thenComparing(item -> { + return LocUtils.isShallowLoc(item.getLocCode()) ? 1 : 0; + }).reversed()).collect(Collectors.toList()); + + for (OutStockToTaskParams param : Items) { + if (Objects.isNull(param)) { + continue; + } + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, param.getBarcode())); + if (!Objects.isNull(loc)) { + List<LocItem> locItems = new ArrayList<>(); + LocItem locItem = locItemService.getById(param.getId()); + locItem.setOutQty(param.getOutQty()).setBatch(param.getBatch()); + locItems.add(locItem); + + LocToTaskParams taskParams = new LocToTaskParams(); + taskParams.setType(Constants.TASK_TYPE_OUT_STOCK) + .setOrgLoc(loc.getCode()) + .setItems(locItems) + .setSiteNo(param.getSiteNo()); + try { + locItemService.generateTask(taskParams, loginUserId); + } catch (Exception e) { + logger.error("UNK", e); + throw new CoolException(e.getMessage()); + } + } + } + + return R.ok(); + } + private List<LocItem> getEfficiencyFirstItemList(AsnOrderItem asnOrderItem) { QueryWrapper<LocItem> locItemQueryWrapper = new QueryWrapper<>(); locItemQueryWrapper.eq("matnr_code", asnOrderItem.getMatnrCode()); @@ -463,7 +516,8 @@ if (issued.doubleValue() > 0) { ExistDto existDto = new ExistDto().setBatch(locItem.getBatch()).setMatnr(locItem.getMatnrCode()).setLocNo(locItem.getLocCode()); if (existDtos.add(existDto)) { - locItem.setWorkQty(issued.doubleValue() >= locItem.getAnfme() ? locItem.getAnfme() : issued.doubleValue()); + locItem.setOutQty(issued.doubleValue() >= locItem.getAnfme() ? locItem.getAnfme() : issued.doubleValue()); + locItem.setBarcode(loc.getBarcode()); OrderOutItemDto orderOutItemDto = new OrderOutItemDto(); orderOutItemDto.setLocItem(locItem); List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>() diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml index db51329..ac31a5b 100644 --- a/rsf-server/src/main/resources/application.yml +++ b/rsf-server/src/main/resources/application.yml @@ -25,7 +25,7 @@ # global-config: # field-strategy: 0 configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true call-setters-on-nulls: true -- Gitblit v1.9.1