| | |
| | | stockTransfer: { |
| | | orgLoc: '源库位', |
| | | tarLoc: '目标库位', |
| | | inputLoc: '输入库位' |
| | | inputLoc: '输入库位', |
| | | inputChannel: '输入巷道' |
| | | |
| | | }, |
| | | outBound: { |
| | | stockWithdrawal: '提取库存', |
| | |
| | | |
| | | |
| | | const getLocs = async (ids) => { |
| | | const { data: { code, data, msg } } = await request.post('/check/locs/' + ids); |
| | | let params = {matnrCode: ids} |
| | | const { data: { code, data, msg } } = await request.post('/check/locs/', params); |
| | | if (code === 200) { |
| | | setRows(data) |
| | | const matnrs = selectedMatnr.filter(item => data.some(bigData => bigData.matnrCode === item)); |
| | |
| | | setRows={setRows} |
| | | record={record} |
| | | formData={formData} |
| | | selectedMatnr={selectedMatnr} |
| | | selectedIds={selectedIds} |
| | | setDialog={setDialog} |
| | | setSelectedIds={setSelectedIds} |
| | |
| | | |
| | | import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText } from "@mui/material"; |
| | | import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText, TextField } from "@mui/material"; |
| | | import React, { useState, useRef, useEffect, useMemo } from "react"; |
| | | import QueryStatsIcon from '@mui/icons-material/QueryStats'; |
| | | import request from '@/utils/request'; |
| | | import { DataGrid, useGridApiContext, GridActionsCellItem, useGridApiRef } from '@mui/x-data-grid'; |
| | | import { |
| | | List, |
| | |
| | | } from 'react-admin'; |
| | | |
| | | const CheckPreviewTable = (props) => { |
| | | const { rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog, formData } = props; |
| | | const { rows, gridRef, setRows, record, selectedIds, setSelectedIds, selectedMatnr, setDialog, formData } = props; |
| | | // const translate = useTranslate(); |
| | | // const refresh = useRefresh(); |
| | | // const notify = useNotify(); |
| | |
| | | }); |
| | | |
| | | const CustomToolBar = () => { |
| | | const [queryParams, setQueryParams] = useState({ locCode: null, channel: null, matnrCode: selectedMatnr }); |
| | | const notify = useNotify(); |
| | | const queryClick = async () => { |
| | | console.log(queryParams); |
| | | console.log(rows); |
| | | const { data: { code, data, msg } } = await request.post('/check/locs/', queryParams); |
| | | if (code === 200) { |
| | | setRows(data) |
| | | } else { |
| | | notify(msg); |
| | | } |
| | | } |
| | | |
| | | const handleChange = (e) => { |
| | | const { name, value } = e.target; |
| | | setQueryParams(() => ({ |
| | | ...queryParams, |
| | | [name]: value |
| | | })); |
| | | |
| | | }; |
| | | |
| | | const selectSiteNo = () => { |
| | | setDialog(true) |
| | | } |
| | | return ( |
| | | <Box sx={{ |
| | | p: 1, |
| | | display: 'flex', |
| | | justifyContent: 'flex-end', |
| | | borderTop: '1px solid rgba(224, 224, 224, 1)' |
| | | }}> |
| | | <Button |
| | | onClick={selectSiteNo} |
| | | variant="outlined" |
| | | label="toolbar.modiftySite" |
| | | size="medium" |
| | | sx={{ mr: 1 }} /> |
| | | </Box> |
| | | <> |
| | | <Box sx={{ |
| | | p: 1, |
| | | display: 'flex', |
| | | justifyContent: 'space-between', |
| | | borderTop: '1px solid rgba(224, 224, 224, 1)' |
| | | }}> |
| | | <Box sx={{ |
| | | '& > :not(style)': { m: 1, width: '25ch' }, |
| | | display: 'flex', |
| | | }}> |
| | | <TextField |
| | | label={translate("table.field.stockTransfer.inputLoc")} |
| | | size="small" |
| | | name="locCode" |
| | | value={queryParams?.locCode} |
| | | onChange={handleChange} |
| | | sx={{ mr: 1 }} /> |
| | | |
| | | <TextField |
| | | label={translate("table.field.stockTransfer.inputChannel")} |
| | | size="small" |
| | | name="channel" |
| | | value={queryParams?.channel} |
| | | onChange={handleChange} |
| | | sx={{ mr: 1 }} /> |
| | | |
| | | <Box sx={{ |
| | | '& > :not(style)': { m: 1, width: '11ch' }, |
| | | }}> |
| | | <Button variant="contained" |
| | | size="medium" |
| | | startIcon={<QueryStatsIcon />} |
| | | label="toolbar.query" |
| | | onClick={queryClick} /> |
| | | </Box> |
| | | </Box> |
| | | <Box sx={{ |
| | | '& > :not(style)': { m: 1, width: '13ch' }, |
| | | }}> |
| | | <Button |
| | | onClick={selectSiteNo} |
| | | variant="outlined" |
| | | label="toolbar.modiftySite" |
| | | size="medium" |
| | | sx={{ mr: 1 }} /> |
| | | </Box> |
| | | </Box> |
| | | |
| | | </> |
| | | ); |
| | | } |
| | | |
| | | |
| | | |
| | | const OutStockSite = (params) => { |
| | | const { id, field, siteNo, row: { staNos } } = params; |
| | |
| | | } |
| | | |
| | | return ( |
| | | <DataGrid |
| | | storeKey={"locItemPreview"} |
| | | rows={rows} |
| | | columns={columns} |
| | | slots={{ toolbar: CustomToolBar }} |
| | | apiRef={gridRef} |
| | | checkboxSelection |
| | | disableRowSelectionOnClick |
| | | hideFooterPagination={true} // 隐藏分页控件 |
| | | hideFooter={false} |
| | | onRowSelectionModelChange={(ids) => { |
| | | setSelectedIds(ids) |
| | | }} |
| | | /> |
| | | <Box sx={{ maxHeight: 780 }}> |
| | | <DataGrid |
| | | sx={{ maxHeight: 730 }} |
| | | storeKey={"locItemPreview"} |
| | | rows={rows} |
| | | columns={columns} |
| | | slots={{ toolbar: CustomToolBar }} |
| | | apiRef={gridRef} |
| | | checkboxSelection |
| | | disableRowSelectionOnClick |
| | | hideFooterPagination={true} // 隐藏分页控件 |
| | | hideFooter={false} |
| | | onRowSelectionModelChange={(ids) => { |
| | | setSelectedIds(ids) |
| | | }} |
| | | /> |
| | | </Box> |
| | | |
| | | ) |
| | | } |
| | | |
| | |
| | | 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.AsnOrderAndItemsParams; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckOrderItemParams; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckOrderParams; |
| | | import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; |
| | | import com.vincent.rsf.server.manager.controller.params.*; |
| | | import com.vincent.rsf.server.manager.entity.WkOrder; |
| | | import com.vincent.rsf.server.manager.entity.WkOrderItem; |
| | | import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate; |
| | |
| | | |
| | | |
| | | @ApiOperation("获取在库物料列表") |
| | | @PostMapping("/check/locs/{matnrs}") |
| | | @PostMapping("/check/locs") |
| | | @PreAuthorize("hasAuthority('manager:check:list')") |
| | | public R getAllLocByMatnr(@PathVariable String[] matnrs) { |
| | | if (Objects.isNull(matnrs)) { |
| | | public R getAllLocByMatnr(@RequestBody CheckLocQueryParams params) { |
| | | if (Objects.isNull(params)) { |
| | | return R.error("参数不能为空!!"); |
| | | } |
| | | return checkOrderService.getAllLocByMatnr(Arrays.asList(matnrs)); |
| | | return checkOrderService.getAllLocByMatnr(params); |
| | | } |
| | | |
| | | |
New file |
| | |
| | | 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; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @Accessors |
| | | @ApiModel(value = "CheckLocQueryParams", description ="盘点单物料查询参数" ) |
| | | public class CheckLocQueryParams { |
| | | |
| | | @ApiModelProperty("物料编码") |
| | | private List<String> matnrCode; |
| | | |
| | | @ApiModelProperty("巷道") |
| | | private String channel; |
| | | |
| | | @ApiModelProperty("库们编码") |
| | | private String locCode; |
| | | } |
| | |
| | | @TableField(exist = false) |
| | | private Double outQty; |
| | | |
| | | @ApiModelProperty("巷道") |
| | | @TableField(exist = false) |
| | | private Integer channel; |
| | | |
| | | /** |
| | | * 物料名称 |
| | | */ |
| | |
| | | @Repository |
| | | public interface LocItemMapper extends BaseMapper<LocItem> { |
| | | |
| | | List<LocItem> listByMatnr(@Param("type") String type, @Param(Constants.WRAPPER) LambdaQueryWrapper<LocItem> matnr); |
| | | List<LocItem> listByMatnr(@Param("type") String type, @Param("channel") String channel, @Param(Constants.WRAPPER) LambdaQueryWrapper<LocItem> matnr); |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckOrderItemParams; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckOrderParams; |
| | | import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; |
| | | import com.vincent.rsf.server.manager.controller.params.*; |
| | | import com.vincent.rsf.server.manager.entity.WkOrder; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | |
| | | |
| | | R genCheckPreview(OrderOutTaskParam param); |
| | | |
| | | R getAllLocByMatnr(List<String> matnrs); |
| | | R getAllLocByMatnr(CheckLocQueryParams matnrs); |
| | | |
| | | R genCheckOutTask(List<CheckOrderParams> checkParams, Long loginUserId); |
| | | } |
| | |
| | | package com.vincent.rsf.server.manager.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckLocQueryParams; |
| | | import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; |
| | | import com.vincent.rsf.server.manager.entity.LocItem; |
| | | import com.vincent.rsf.server.manager.entity.Task; |
| | |
| | | |
| | | Task genMoveTask(LocToTaskParams map, Long loginUserId); |
| | | |
| | | List<LocItem> listByMatnr(List<String> matnrs); |
| | | List<LocItem> listByMatnr(CheckLocQueryParams matnrs); |
| | | } |
| | |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.common.utils.ExcelUtil; |
| | | import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckOrderItemParams; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckOrderParams; |
| | | import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; |
| | | import com.vincent.rsf.server.manager.controller.params.*; |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate; |
| | | import com.vincent.rsf.server.manager.enums.*; |
| | |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | public R getAllLocByMatnr(List<String> matnrs) { |
| | | public R getAllLocByMatnr(CheckLocQueryParams matnrs) { |
| | | if (Objects.isNull(matnrs.getMatnrCode()) && matnrs.getMatnrCode().isEmpty()) { |
| | | throw new CoolException("参数不能为空!!"); |
| | | } |
| | | List<LocItem> locItems = locItemService.listByMatnr(matnrs); |
| | | if (!locItems.isEmpty()) { |
| | | List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type); |
| | |
| | | import com.vincent.rsf.server.api.service.WcsService; |
| | | import com.vincent.rsf.server.api.utils.LocUtils; |
| | | import com.vincent.rsf.server.common.constant.Constants; |
| | | import com.vincent.rsf.server.manager.controller.params.CheckLocQueryParams; |
| | | import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.enums.*; |
| | |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | public List<LocItem> listByMatnr(List<String> matnr) { |
| | | public List<LocItem> listByMatnr(CheckLocQueryParams matnr) { |
| | | LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<LocItem>() |
| | | .in(!matnr.isEmpty(), LocItem::getMatnrCode, matnr); |
| | | return this.baseMapper.listByMatnr(LocStsType.LOC_STS_TYPE_F.type, wrapper); |
| | | .eq(StringUtils.isNotBlank(matnr.getLocCode()), LocItem::getLocCode, matnr.getLocCode()) |
| | | // .eq(StringUtils.isNotBlank(matnr.getChannel()), LocItem::getChannel, matnr.getChannel()) |
| | | .in(!matnr.getMatnrCode().isEmpty(), LocItem::getMatnrCode, matnr.getMatnrCode()); |
| | | return this.baseMapper.listByMatnr(LocStsType.LOC_STS_TYPE_F.type, matnr.getChannel(), wrapper); |
| | | } |
| | | } |
| | |
| | | li.loc_id, |
| | | li.loc_code, |
| | | l.barcode, |
| | | l.channel, |
| | | li.matnr_id, |
| | | li.matnr_code, |
| | | li.maktx, |
| | |
| | | man_loc_item li |
| | | INNER JOIN man_loc l ON l.id = li.loc_id |
| | | WHERE l.use_status = #{type} |
| | | <if test="channel != null"> |
| | | AND l.channel = #{channel} |
| | | </if> |
| | | GROUP BY |
| | | loc_id, |
| | | matnr_id, |