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; 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 }) => ({ 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) { 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("任务生成成功"); } 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"; /** * 拣料出库 */ public static final String TASK_TYPE_OUT_PICK = "pick"; 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("任务生成成功"); } 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()); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/OrderOutItemDto.java
@@ -2,7 +2,6 @@ import com.vincent.rsf.server.manager.entity.LocItem; import com.vincent.rsf.server.manager.utils.Synchro; import io.swagger.annotations.ApiOperation; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -15,8 +14,7 @@ @Accessors(chain = true) public class OrderOutItemDto { @Delegate(excludes = Synchro.class) @Delegate(types = LocItem.class) private LocItem locItem; private List<staListDto> staNos; @@ -29,6 +27,7 @@ private String staName; } public void sync(Object source) { Synchro.Copy(source, this); } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java
New file @@ -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; } 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: 正常 0: 冻结 */ 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); 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); } 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() + ",不处于F.在库状态,不可执行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) { //拣料出库 @@ -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("任务生成完成!!"); } /** 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; @@ -413,18 +421,61 @@ throw new CoolException("未找到当前策略"); } List<OrderOutItemDto> locItems = null; if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { locItems = efficiencyFirst(param.getOrderId()); } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { } locItems = getOutOrderList(param.getOrderId(), waveRule); 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()); locItemQueryWrapper.eq("batch", asnOrderItem.getSplrBatch()); LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>(); locItemQueryWrapper.eq(LocItem::getMatnrCode, asnOrderItem.getMatnrCode()); locItemQueryWrapper.eq(LocItem::getBatch, asnOrderItem.getSplrBatch()); String applySql = String.format( "EXISTS (SELECT 1 FROM man_loc ml " + "WHERE ml.use_status = '%s'" + @@ -434,18 +485,34 @@ ); locItemQueryWrapper.apply(applySql); List<LocItem> locItems = locItemService.list(locItemQueryWrapper); locItems.sort((s1, s2) -> LocUtils.isShallowLoc(s1.getLocCode()) ? -1 : 0); locItems.sort(Comparator .comparing((LocItem item) -> !LocUtils.isShallowLoc(item.getLocCode())) ); return locItems; } private List<OrderOutItemDto> efficiencyFirst(Long orderId) { private List<LocItem> getFirstInFirstOutItemList(AsnOrderItem asnOrderItem) { LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>(); locItemQueryWrapper.eq(LocItem::getMatnrCode, asnOrderItem.getMatnrCode()); locItemQueryWrapper.eq(LocItem::getBatch, asnOrderItem.getSplrBatch()); locItemQueryWrapper.orderByAsc(LocItem::getCreateTime); String applySql = String.format( "EXISTS (SELECT 1 FROM man_loc ml " + "WHERE ml.use_status = '%s'" + "AND ml.id = man_loc_item.loc_id " + ")", LocStsType.LOC_STS_TYPE_F.type ); locItemQueryWrapper.apply(applySql); List<LocItem> locItems = locItemService.list(locItemQueryWrapper); return locItems; } private List<OrderOutItemDto> getOutOrderList(Long orderId, WaveRule waveRule) { List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnId, orderId) ); List<OrderOutItemDto> list = new ArrayList<>(); Set<String> exist = new HashSet<>(); Set<ExistDto> existDtos = new HashSet<>(); for (AsnOrderItem asnOrderItem : asnOrderItems) { @@ -456,32 +523,42 @@ continue; } List<LocItem> locItems = null; locItems = getEfficiencyFirstItemList(asnOrderItem); if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { locItems = getEfficiencyFirstItemList(asnOrderItem); } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { locItems = getFirstInFirstOutItemList(asnOrderItem); } else { locItems = getFirstInFirstOutItemList(asnOrderItem); } for (LocItem locItem : locItems) { Loc loc = locService.getById(locItem.getLocId()); List<LocItem> itemList = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocCode, locItem.getLocCode())); 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>() .eq(DeviceSite::getChannel, loc.getChannel()) .eq(DeviceSite::getType, issued.doubleValue() >= locItem.getAnfme() && itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) ); if (!deviceSites.isEmpty()) { List<OrderOutItemDto.staListDto> maps = new ArrayList<>(); for (DeviceSite sta : deviceSites) { OrderOutItemDto.staListDto staListDto = new OrderOutItemDto.staListDto(); staListDto.setStaNo(sta.getSite()); staListDto.setStaName(sta.getSite()); maps.add(staListDto); } orderOutItemDto.setStaNos(maps); //默认获取第一站点 DeviceSite deviceSite = deviceSites.stream().findFirst().get(); orderOutItemDto.setSiteNo(deviceSite.getSite()); } List<OrderOutItemDto.staListDto> maps = new ArrayList<>(); for (DeviceSite sta : deviceSites) { OrderOutItemDto.staListDto staListDto = new OrderOutItemDto.staListDto(); staListDto.setStaNo(sta.getSite()); staListDto.setStaName(sta.getSite()); maps.add(staListDto); } orderOutItemDto.setStaNos(maps); list.add(orderOutItemDto); 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