rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -197,7 +197,7 @@ drawerVal={drawerVal} setDrawerVal={setDrawerVal} > <OutStockPublic record={select} /> <OutStockPublic record={select} open={drawerVal}/> </PageEditDrawer> </Box > ) rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
@@ -34,15 +34,16 @@ AutocompleteInput, DeleteButton, SimpleForm, required, Form, SaveButton, useRefresh, useGetList, useGetOne, } 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 } from '@mui/x-data-grid'; import request from '@/utils/request'; import DictSelect from "../../components/DictSelect"; import ConfirmationNumberOutlinedIcon from '@mui/icons-material/ConfirmationNumberOutlined'; import CloseSharpIcon from '@mui/icons-material/CloseSharp'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -51,11 +52,41 @@ '& .RaDatagrid-row': { cursor: 'auto' }, '& .column-maktx': { width: 200 } })); const OutStockPublic = (props) => { const { record } = props; const { record, open } = props; const notify = useNotify(); const translate = useTranslate(); const [formData, setFormData] = useState({ orderId: record?.id }); useEffect(() => { getWaveRule() }, [formData, open]) const getWaveRule = async () => { if (formData.waveId == null && formData.waveId == undefined) { return } const res = await request.post('/outStock/order/getOutTaskItems', { ...formData }); if (res?.data?.code === 200) { setRows(res.data.data.records) } else { notify(res.data.msg); } } const handleChange = (value, name) => { setFormData((prevData) => ({ ...prevData, [name]: value })); }; return ( <> @@ -63,6 +94,26 @@ <Grid sx={{ display: "flex" }} container rowSpacing={2} columnSpacing={2}> <Grid item xl={6} gap={2} > <Card> <Form> <ReferenceInput source="type" reference="waveRule" > <AutocompleteInput label="table.field.waveRule.type" onChange={(e) => handleChange(e, 'waveId')} value={formData.type} validate={required()} /> </ReferenceInput> </Form> {/* <DictSelect label={translate("table.field.waveRule.type")} onChange={(e) => handleChange(e.target.value, 'type')} value={formData.type} dictTypeCode="sys_wave_rule_code" required /> */} <List resource="outStockItem" storeKey='outStockItem' @@ -77,7 +128,9 @@ empty={false} filter={{ asnId: record?.id, deleted: 0 }} sort={{ field: "create_time", order: "desc" }} actions={false} actions={( <SelectColumnsButton preferenceKey='outStock' /> )} perPage={DEFAULT_ITEM_PAGE_SIZE} > <LinearProgress @@ -87,7 +140,7 @@ preferenceKey='outStockItem' bulkActionButtons={false} rowClick={false} omit={['id', 'splrName', 'qty']} omit={['id', 'splrName', 'qty', 'poCode', 'workQty']} > <NumberField source="id" /> <TextField source="asnCode" label="table.field.outStockItem.asnCode" /> @@ -120,6 +173,10 @@ disableRowSelectionOnClick /> </Box> <Box sx={{ textAlign: 'center' }}> <Button label="toolbar.close" variant="outlined" size="medium" startIcon={<CloseSharpIcon />} sx={{ margin: '3.5em' }} /> <Button label="toolbar.confirm" variant="contained" size="medium" startIcon={<ConfirmationNumberOutlinedIcon />} /> </Box> </Card> </Grid> </Grid> @@ -129,6 +186,7 @@ } const rows = [ { id: 1, locCode: '03-02-1-2-1', container: 'Snow', batch: 'Jon', curQty: 14 }, { id: 2, locCode: '03-02-1-2-1', container: 'Lannister', batch: 'Cersei', curQty: 31 }, rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/OrderOutItemDto.java
@@ -4,12 +4,14 @@ import com.vincent.rsf.server.manager.utils.Synchro; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Delegate; import java.util.List; @EqualsAndHashCode(callSuper = true) @Data public class OrderOutItemDto extends LocItem { @Data public class OrderOutItemDto { @Delegate private LocItem locItem; private List<staListDto> staNos; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrderOutTaskParam.java
@@ -8,7 +8,7 @@ @ApiModel(value = "OrderOutTaskParam", description = "订单出库param") public class OrderOutTaskParam implements Serializable { private String waveId; private Long waveId; private Long orderId; rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveRuleType.java
New file @@ -0,0 +1,17 @@ package com.vincent.rsf.server.manager.enums; public enum WaveRuleType { Efficiency_First("1","效率优先"), First_In_First_Out("2","先进先出") ; public Integer type; public String desc; WaveRuleType(String type, String desc) { this.type = Integer.parseInt(type); this.desc = desc; } } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -28,6 +28,7 @@ import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import com.vincent.rsf.server.manager.enums.WaveRuleType; /** * @author Ryan @@ -405,15 +406,15 @@ if (Cools.isEmpty(param.getOrderId())){ throw new CoolException("单据id为空"); } WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>().eq(WaveRule::getCode, param.getWaveId())); WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>().eq(WaveRule::getId, param.getWaveId())); if (Cools.isEmpty(waveRule)){ throw new CoolException("未找到当前策略"); } List<OrderOutItemDto> locItems = null; switch (waveRule.getType()) { case 1: locItems = efficiencyFirst(param.getOrderId()); break; if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { locItems = efficiencyFirst(param.getOrderId()); } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { } return R.ok(locItems); } @@ -421,7 +422,7 @@ private List<LocItem> getEfficiencyFirstItemList(AsnOrderItem asnOrderItem){ QueryWrapper<LocItem> locItemQueryWrapper = new QueryWrapper<>(); locItemQueryWrapper.eq("matnr_code", asnOrderItem.getMatnrCode()); locItemQueryWrapper.eq("batch", asnOrderItem.getBatch()); locItemQueryWrapper.eq("batch", asnOrderItem.getSplrBatch()); String applySql = String.format( "EXISTS (SELECT 1 FROM man_loc ml " + "WHERE ml.use_status = '%s'" + @@ -431,9 +432,7 @@ ); locItemQueryWrapper.apply(applySql); List<LocItem> locItems = locItemService.list(locItemQueryWrapper); locItems.sort((s1,s2)->{ return LocUtils.isShallowLoc(s1.getLocCode())?1:0; }); locItems.sort((s1,s2)-> LocUtils.isShallowLoc(s1.getLocCode())?-1:0); return locItems; }