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