11个文件已修改
11个文件已删除
1 文件已重命名
| | |
| | | ntyStatus: "Notify", |
| | | exceStatus: 'bill status' |
| | | }, |
| | | outStock: { |
| | | code: "Code", |
| | | poCode: "poCode", |
| | | poId: "doId", |
| | | type: "Type", |
| | | wkType: "wkType", |
| | | anfme: "anfme", |
| | | qty: "qty", |
| | | logisNo: "logisNo", |
| | | arrTime: "Arrived", |
| | | rleStatus: "Release", |
| | | ntyStatus: "Notify", |
| | | exceStatus: 'bill status' |
| | | }, |
| | | outStockItem: { |
| | | asnId: "ID", |
| | | asnCode: "DO Code", |
| | | poDetlId: "poDetlId", |
| | | poDetlCode: "DO Detl Code", |
| | | matnrId: "matnrId", |
| | | maktx: "maktx", |
| | | anfme: "anfme", |
| | | stockUnit: "stockUnit", |
| | | purQty: "purQty", |
| | | purUnit: "purUnit", |
| | | qty: "qty", |
| | | splrCode: "splrCode", |
| | | splrName: "splrName", |
| | | qrcode: "qrcode", |
| | | barcode: "barcode", |
| | | packName: "packName", |
| | | ntyStatus: "ntyStatus", |
| | | platItemId: 'platItemId' |
| | | }, |
| | | asnOrderItem: { |
| | | asnId: "asnId", |
| | | asnCode: "asnCode", |
| | |
| | | asnId: "主单标识", |
| | | asnCode: "单号", |
| | | poDetlId: "平台明细ID", |
| | | poDetlCode: "DO单", |
| | | matnrId: "物料标识", |
| | | maktx: "物料名称", |
| | | matnrCode: "物料编码", |
| | |
| | | import { useState, useEffect } from 'react'; |
| | | import { |
| | | useTranslate, useNotify |
| | | useTranslate, useNotify, required |
| | | } from 'react-admin'; |
| | | import request from '@/utils/request'; |
| | | import { Select, MenuItem, FormControl, InputLabel } from '@mui/material'; |
| | |
| | | variant="filled" |
| | | onChange={handleChange} |
| | | size='small' |
| | | |
| | | > |
| | | {list.map((item) => ( |
| | | <MenuItem key={item.value} value={item.value}> |
File was renamed from rsf-admin/src/page/orders/outStock/AsnWareModal.jsx |
| | |
| | | import { DataGrid } from '@mui/x-data-grid'; |
| | | import SaveIcon from '@mui/icons-material/Save'; |
| | | import TreeSelectInput from "@/page/components/TreeSelectInput"; |
| | | const AsnWareModal = (props) => { |
| | | const MatnrInfoModal = (props) => { |
| | | const { open, setOpen, data, setData } = props; |
| | | |
| | | const translate = useTranslate(); |
| | |
| | | backgroundColor: 'background.paper', |
| | | zIndex: 1000 |
| | | }}> |
| | | 选择物料 |
| | | {translate("common.action.newAddMats")} |
| | | <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> |
| | | <DialogCloseButton onClose={handleClose} /> |
| | | </Box> |
| | |
| | | ); |
| | | }; |
| | | |
| | | export default AsnWareModal; |
| | | export default MatnrInfoModal; |
| | | |
| | | const AsnWareModalTable = ({ tableData, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => { |
| | | const translate = useTranslate(); |
| | |
| | | { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 }, |
| | | { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 }, |
| | | { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 }, |
| | | |
| | | { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 }, |
| | | { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 }, |
| | | { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 }, |
| | |
| | | { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 }, |
| | | { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false }, |
| | | ]) |
| | | |
| | | |
| | | |
| | | const handleSelectionChange = (ids) => { |
| | |
| | | import DialogCloseButton from "../../components/DialogCloseButton"; |
| | | import StatusSelectInput from "../../components/StatusSelectInput"; |
| | | import ConfirmButton from "../../components/ConfirmButton"; |
| | | import AsnWareModal from "./AsnWareModal"; |
| | | import MatnrInfoModal from "./MatnrInfoModal"; |
| | | import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form"; |
| | | import SaveIcon from '@mui/icons-material/Save'; |
| | | import request from '@/utils/request'; |
| | |
| | | "items": tabelData, |
| | | } |
| | | |
| | | const res = await request.post(`/asnOrder/items/save`, parmas); |
| | | const res = await request.post(`/outStock/items/save`, parmas); |
| | | if (res?.data?.code === 200) { |
| | | setOpen(false); |
| | | refresh(); |
| | |
| | | "orders": formData, |
| | | "items": tabelData, |
| | | } |
| | | const res = await request.post(`/asnOrder/items/update`, parmas); |
| | | const res = await request.post(`/outStock/items/update`, parmas); |
| | | if (res?.data?.code === 200) { |
| | | setOpen(false); |
| | | refresh(); |
| | |
| | | |
| | | |
| | | const handleDelete = async () => { |
| | | const res = await request.post(`/asnOrder/remove/${asnId}`); |
| | | const res = await request.post(`/outStock/remove/${asnId}`); |
| | | if (res?.data?.code === 200) { |
| | | setOpen(false); |
| | | refresh(); |
| | |
| | | }; |
| | | |
| | | const requestGetHead = async () => { |
| | | const res = await request.get(`/asnOrder/${asnId}`); |
| | | const res = await request.get(`/outStock/${asnId}`); |
| | | if (res?.data?.code === 200) { |
| | | setFormData(res.data.data) |
| | | } else { |
| | |
| | | } |
| | | |
| | | const requestGetBody = async () => { |
| | | const res = await request.post(`/asnOrderItem/page`, { asnId }); |
| | | const res = await request.post(`/outStockItem/page`, { asnId }); |
| | | if (res?.data?.code === 200) { |
| | | setTableData(res.data.data.records) |
| | | } else { |
| | |
| | | </Grid> */} |
| | | <Grid item md={2}> |
| | | <DictSelect |
| | | label={translate("table.field.asnOrder.wkType")} |
| | | label={translate("table.field.outStock.wkType")} |
| | | value={formData.wkType} |
| | | variant="filled" |
| | | onChange={(e) => handleChange(e.target.value, 'wkType')} |
| | |
| | | </Grid> |
| | | <Grid item md={2}> |
| | | <TextField |
| | | label={translate("table.field.asnOrder.poCode")} |
| | | label={translate("table.field.outStock.poCode")} |
| | | value={formData.poCode} |
| | | variant="filled" |
| | | size='small' |
| | |
| | | </Grid> |
| | | <Grid item md={2}> |
| | | <TextField |
| | | label={translate("table.field.asnOrder.logisNo")} |
| | | label={translate("table.field.outStock.logisNo")} |
| | | value={formData.logisNo} |
| | | variant="filled" |
| | | size='small' |
| | |
| | | <Grid item md={2}> |
| | | <DateInput |
| | | source="arrTime" |
| | | label="table.field.asnOrder.arrTime" |
| | | label="table.field.outStock.arrTime" |
| | | size='small' |
| | | variant="filled" |
| | | value={formData.arrTime} |
| | |
| | | </Toolbar> |
| | | </DialogActions> |
| | | </Dialog> |
| | | <AsnWareModal |
| | | <MatnrInfoModal |
| | | open={createDialog} |
| | | setOpen={setCreateDialog} |
| | | data={tabelData} |
| | |
| | | const [columns, setColumns] = useState([ |
| | | { |
| | | field: 'maktx', |
| | | headerName: translate('table.field.asnOrderItem.maktx'), |
| | | headerName: translate('table.field.outStockItem.maktx'), |
| | | width: 250, |
| | | editable: false, |
| | | }, |
| | | { |
| | | field: 'matnrCode', |
| | | headerName: translate('table.field.asnOrderItem.matnrCode'), |
| | | headerName: translate('table.field.outStockItem.matnrCode'), |
| | | width: 130, |
| | | editable: false, |
| | | }, |
| | | { |
| | | field: 'anfme', |
| | | headerName: translate('table.field.asnOrderItem.anfme') + "*", |
| | | headerName: translate('table.field.outStockItem.anfme') + "*", |
| | | type: 'number', |
| | | minWidth: 100, |
| | | flex: 1, |
| | |
| | | }, |
| | | { |
| | | field: 'splrCode', |
| | | headerName: translate('table.field.asnOrderItem.splrCode') + "*", |
| | | headerName: translate('table.field.outStockItem.splrCode') + "*", |
| | | minWidth: 100, |
| | | flex: 1, |
| | | editable: true, |
| | |
| | | }, |
| | | { |
| | | field: 'splrName', |
| | | headerName: translate('table.field.asnOrderItem.splrName') + "*", |
| | | headerName: translate('table.field.outStockItem.splrName') + "*", |
| | | minWidth: 100, |
| | | flex: 1, |
| | | editable: true, |
| | |
| | | // }, |
| | | { |
| | | field: 'poCode', |
| | | headerName: translate('table.field.asnOrderItem.poDetlCode') + "*", |
| | | headerName: translate('table.field.outStockItem.poDetlCode') + "*", |
| | | minWidth: 100, |
| | | flex: 1, |
| | | editable: true, |
| | |
| | | |
| | | { |
| | | field: 'stockUnit', |
| | | headerName: translate('table.field.asnOrderItem.stockUnit'), |
| | | headerName: translate('table.field.outStockItem.stockUnit'), |
| | | minWidth: 100, |
| | | flex: 1, |
| | | editable: false, |
| | |
| | | // }, |
| | | { |
| | | field: 'purUnit', |
| | | headerName: translate('table.field.asnOrderItem.purUnit'), |
| | | headerName: translate('table.field.outStockItem.purUnit'), |
| | | minWidth: 100, |
| | | flex: 1, |
| | | editable: false, |
| | |
| | | rows={tabelData} |
| | | columns={columns} |
| | | disableRowSelectionOnClick |
| | | getRowId={(row) => row.matnrId} |
| | | getRowId={(row) => row.matnrId ? row.matnrId : row.id} |
| | | disableColumnFilter |
| | | disableColumnSelector |
| | | disableColumnSorting |
| | |
| | | @PostMapping("/outStock/items/save") |
| | | @ApiOperation("保存主单及明细") |
| | | @PreAuthorize("hasAuthority('manager:outStock:save')") |
| | | public R orderAndItem(@RequestBody AsnOrderAndItemsParams params) throws Exception { |
| | | public R saveOutStock(@RequestBody AsnOrderAndItemsParams params) throws Exception { |
| | | if (Objects.isNull(params)) { |
| | | return R.error("参数不能为空!!"); |
| | | } |
| | | return outStockService.saveOrderAndItems(params, getLoginUserId()); |
| | | return outStockService.saveOutStock(params, getLoginUserId()); |
| | | } |
| | | |
| | | @ApiOperation("单据信息修改") |
| | |
| | | private StockService stockService; |
| | | @Autowired |
| | | private LocService locService; |
| | | @Autowired |
| | | private OrderService orderService; |
| | | @Autowired |
| | | private OrderItemService orderItemService; |
| | | /** |
| | | * @author Ryan |
| | | * @description 完成入库,更新库存 |
| | |
| | | |
| | | R generateWaves(List<Long> ids); |
| | | |
| | | R saveOrderAndItems(AsnOrderAndItemsParams params, Long loginUserId); |
| | | R saveOutStock(AsnOrderAndItemsParams params, Long loginUserId); |
| | | |
| | | R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId); |
| | | } |
| | |
| | | if (StringUtils.isBlank(asnOrderItem.getTrackCode())) { |
| | | String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, asnOrderItem); |
| | | asnOrderItem.setTrackCode(ruleCode).setBarcode(ruleCode); |
| | | ; |
| | | |
| | | } |
| | | if (Objects.isNull(asnOrderItem.getAnfme()) || Double.compare(asnOrderItem.getAnfme(), 0.0) <= 0) { |
| | | throw new CoolException("计划收货数不能为空!!"); |
| | | throw new CoolException("计划数不能为空!!"); |
| | | } |
| | | // if (StringUtils.isBlank(asnOrderItem.getSplrBatch())) { |
| | | // throw new CoolException("供应商批次不能为空!!"); |
| | | // } |
| | | //保存扩展字段 |
| | | try { |
| | | String uuid16 = CommonUtil.randomUUID16(); |
| | |
| | | if (params.getItems().isEmpty()) { |
| | | throw new CoolException("收货通知单明细不能为寒食节!!"); |
| | | } |
| | | params.setOrders(orders); |
| | | |
| | | svaeOrUpdateOrderItem(params,loginUserId); |
| | | |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | private void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception{ |
| | | AsnOrder orders = params.getOrders(); |
| | | |
| | | params.getItems().forEach(item -> { |
| | | item.put("asnId", orders.getId()); |
| | | item.put("asnCode", orders.getCode()); |
| | |
| | | import com.vincent.rsf.framework.common.Cools; |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.api.entity.enums.OrderType; |
| | | import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.enums.AsnExceStatus; |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | private void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception { |
| | | AsnOrder orders = params.getOrders(); |
| | | |
| | | params.getItems().forEach(item -> { |
| | | item.put("asnId", orders.getId()); |
| | | item.put("asnCode", orders.getCode()); |
| | |
| | | * @time 2025/4/29 13:47 |
| | | */ |
| | | @Override |
| | | public R saveOrderAndItems(AsnOrderAndItemsParams params, Long loginUserId) { |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R saveOutStock(AsnOrderAndItemsParams params, Long loginUserId) { |
| | | if (Objects.isNull(params.getOrders())) { |
| | | throw new CoolException("主单信息不能为空"); |
| | | } |
| | |
| | | if (Objects.isNull(orders)) { |
| | | throw new CoolException("单据不能为空!!"); |
| | | } |
| | | if (StringUtils.isBlank(orders.getWkType())) { |
| | | throw new CoolException("业务类型不能为空!!"); |
| | | } |
| | | |
| | | String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders); |
| | | if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) { |
| | | throw new CoolException("编码规则错误:请检查「SYS_OUT_STOCK_CODE」是否设置正确!!"); |
| | | } |
| | | |
| | | orders.setCode(ruleCode) |
| | | .setType(OrderType.ORDER_OUT.type) |
| | | .setUpdateBy(loginUserId) |
| | | .setCreateBy(loginUserId); |
| | | if (!this.save(orders)) { |
| | | throw new CoolException("主单保存失败!!"); |
| | | } |
| | | if (params.getItems().isEmpty()) { |
| | | throw new CoolException("收货通知单明细不能为寒食节!!"); |
| | | throw new CoolException("收货通知单明细不能为空!!"); |
| | | } |
| | | params.setOrders(orders); |
| | | try { |
| | | svaeOrUpdateOrderItem(params,loginUserId); |
| | | } catch (Exception e) { |
| | | throw new CoolException(e.getMessage()); |
| | | } |
| | | |
| | | // svaeOrUpdateOrderItem(params,loginUserId); |
| | | |
| | | |
| | | |
| | | return null; |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @author Ryan |
| | |
| | | */ |
| | | @Override |
| | | public R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) { |
| | | AsnOrder orders = params.getOrders(); |
| | | if (Objects.isNull(orders)) { |
| | | throw new CoolException("主单信息不能为空!!"); |
| | | } |
| | | if (Objects.isNull(orders.getId())) { |
| | | throw new CoolException("数据错误:单据ID不能为空!!"); |
| | | } |
| | | if (!this.updateById(orders)) { |
| | | throw new CoolException("主单修改失败!!"); |
| | | } |
| | | if (Objects.isNull(params.getItems()) || params.getItems().isEmpty()) { |
| | | return R.ok("明细参数不能为空!!"); |
| | | } |
| | | |
| | | try { |
| | | svaeOrUpdateOrderItem(params,loginUserId); |
| | | } catch (Exception e) { |
| | | throw new CoolException(e.getMessage()); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | |
| | | private StockItemService stockItemService; |
| | | @Autowired |
| | | private DeviceSiteService deviceSiteService; |
| | | |
| | | @Autowired |
| | | private OrderService orderService; |
| | | |
| | | @Autowired |
| | | private OrderItemService orderItemService; |
| | | |
| | | @Autowired |
| | | private LocItemService locItemService; |
| | | |
| | | @Autowired |
| | | private DeviceBindService deviceBindService; |
| | | @Autowired |