| | |
| | | TextField, |
| | | NumberField, |
| | | DateField, |
| | | useRefresh, |
| | | BooleanField, |
| | | ReferenceField, |
| | | TextInput, |
| | | Button, |
| | | DateTimeInput, |
| | | DateInput, |
| | | SelectInput, |
| | |
| | | DeleteButton, |
| | | } from 'react-admin'; |
| | | import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting.js'; |
| | | import { Box, Typography, Card, Stack, } from '@mui/material'; |
| | | import MyCreateButton from "../../components/MyCreateButton.jsx"; |
| | | import MyExportButton from '../../components/MyExportButton.jsx'; |
| | | import PageEditDrawer from "../../components/PageEditDrawer"; |
| | | import { Box, Typography, Card, Stack } from '@mui/material'; |
| | | import ConfirmButton from '../../components/ConfirmButton'; |
| | | import PageDrawer from "../../components/PageDrawer.jsx"; |
| | | import EmptyData from "../../components/EmptyData.jsx"; |
| | | import AddTaskIcon from '@mui/icons-material/AddTask'; |
| | | import MyField from "../../components/MyField.jsx"; |
| | | import TransferOrders from "./TransferOrders.jsx"; |
| | | import TransferCreate from "./TransferCreate.jsx"; |
| | | import { styled } from '@mui/material/styles'; |
| | | import TransferPanel from "./TransferPanel.jsx"; |
| | | import * as Common from '@/utils/common.js'; |
| | | import ManualCreate from "./ManualCreate.jsx"; |
| | | import { styled } from '@mui/material/styles'; |
| | | import * as Common from '@/utils/common.js'; |
| | | import request from '@/utils/request'; |
| | | |
| | | |
| | | const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ |
| | | '& .css-1vooibu-MuiSvgIcon-root': { |
| | |
| | | const translate = useTranslate(); |
| | | const [createDialog, setCreateDialog] = useState(false); |
| | | const [drawerVal, setDrawerVal] = useState(false); |
| | | const [select, setSelect] = useState({}); |
| | | |
| | | return ( |
| | | <Box display="flex"> |
| | |
| | | preferenceKey='transfer' |
| | | bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} |
| | | rowClick={(id, resource, record) => false} |
| | | expand={() => <TransferPanel />} |
| | | expand={() => <TransferOrders />} |
| | | expandSingle={true} |
| | | omit={['id', 'createTime', 'createBy$', 'memo', 'orgWareId', 'tarWareId', 'orgAreaId', 'tarAreaId']} |
| | | > |
| | |
| | | <WrapperField cellClassName="opt" label="common.field.opt"> |
| | | <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> |
| | | <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> |
| | | <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} /> |
| | | </WrapperField> |
| | | </StyledDatagrid> |
| | | </List> |
| | |
| | | } |
| | | |
| | | export default TransferList; |
| | | |
| | | //下发执行 |
| | | const PublicButton = ({ setDrawerVal, setSelect }) => { |
| | | const record = useRecordContext(); |
| | | const refresh = useRefresh(); |
| | | const taskEvent = async () => { |
| | | const { data: { code, data, msg } } = await request.post(`/transfer/pub/outStock`, record); |
| | | if (code === 200) { |
| | | notify(msg); |
| | | refresh() |
| | | } else { |
| | | notify(msg); |
| | | } |
| | | refresh(); |
| | | } |
| | | |
| | | return ( |
| | | <ConfirmButton label={"toolbar.publicWorking"} startIcon={<AddTaskIcon />} onConfirm={taskEvent} size={"small"} /> |
| | | ) |
| | | } |
File was renamed from rsf-admin/src/page/orders/transfer/TransferPanel.jsx |
| | |
| | | }, |
| | | })); |
| | | |
| | | const TransferPanel = () => { |
| | | const TransferOrders = () => { |
| | | const record = useRecordContext(); |
| | | if (!record) return null; |
| | | const translate = useTranslate(); |
| | |
| | | ); |
| | | }; |
| | | |
| | | export default TransferPanel; |
| | | export default TransferOrders; |
| | |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<WkOrder, BaseParam> pageParam = new PageParam<>(baseParam, WkOrder.class); |
| | | QueryWrapper<WkOrder> queryWrapper = pageParam.buildWrapper(true); |
| | | List<String> list = Arrays.asList(OrderType.ORDER_OUT.type); |
| | | List<String> list = Arrays.asList(OrderType.ORDER_OUT.type, OrderType.ORDER_TRANSFER.type); |
| | | queryWrapper.in("type", list); |
| | | return R.ok().add(outStockService.page(pageParam, queryWrapper)); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | 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.common.utils.ExcelUtil; |
| | | import com.vincent.rsf.server.common.annotation.OperationLog; |
| | | import com.vincent.rsf.server.common.domain.BaseParam; |
| | |
| | | return R.ok().add(transferService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @ApiOperation("获取调拔单关联订单") |
| | | @PreAuthorize("hasAuthority('manager:transfer:list')") |
| | | @PostMapping("/transfer/orders/page") |
| | | public R getTransferInfo(@RequestBody Map<String, Object> map) { |
| | |
| | | return R.ok().add(transferService.transfersPage(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @ApiOperation("调拔单生成出库单") |
| | | @PreAuthorize("hasAuthority('manager:transfer:list')") |
| | | @PostMapping("/transfer/pub/outStock") |
| | | public R genOutstock(@RequestBody Transfer transfer) { |
| | | if (Objects.isNull(transfer)) { |
| | | throw new CoolException("参数不能为空!!"); |
| | | } |
| | | return R.ok(transferService.genOutStock(transfer, getLoginUserId())); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('manager:transfer:list')") |
| | | @PostMapping("/transfer/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.vincent.rsf.server.manager.service.CompanysService; |
| | | import lombok.experimental.Accessors; |
| | | import org.checkerframework.checker.units.qual.A; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | |
| | | import com.vincent.rsf.server.system.entity.User; |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | import java.util.Objects; |
| | | |
| | | @Data |
| | | @Accessors(chain = true) |
| | |
| | | // null // 备注 |
| | | // ); |
| | | |
| | | public String getSplrName() { |
| | | if (null == this.splrId) { return null; } |
| | | CompanysService companysService = SpringUtils.getBean(CompanysService.class); |
| | | Companys companys = companysService.getById(this.splrId); |
| | | if (Objects.isNull(companys)) { |
| | | return null; |
| | | } else { |
| | | return companys.getName(); |
| | | } |
| | | } |
| | | |
| | | public String getSplrCode() { |
| | | if (null == this.splrId) { return null; } |
| | | CompanysService companysService = SpringUtils.getBean(CompanysService.class); |
| | | Companys companys = companysService.getById(this.splrId); |
| | | if (Objects.isNull(companys)) { |
| | | return null; |
| | | } else { |
| | | return companys.getCode(); |
| | | } |
| | | } |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | |
| | | |
| | | |
| | | public enum CheckExceStatus { |
| | | //盘点单执行状态 |
| | | //盘点单执行状态 /调拔单执行状态 |
| | | CHECK_ORDER_STATUS_UN_EXCE("0", "未执行"), |
| | | CHECK_ORDER_STATUS_INIT("1", "初始化"), |
| | | CHECK_ORDER_STATUS_EXCE_ING("2", "执行中"), |
| | |
| | | //订单类型 |
| | | ORDER_OUT("out", "出库单"), |
| | | ORDER_IN("in", "入库单"), |
| | | ORDER_TRANSFER("transfer", "调拔单"), |
| | | ORDER_CHECK("check", "盘点单"); |
| | | |
| | | |
| | |
| | | ORDER_WORK_TYPE_PURCHASE("3", "领料退回入库单"), |
| | | ORDER_WORK_TYPE_SALE("4", "销售退回入库单"), |
| | | ORDER_WORK_TYPE_OTHER_IN("5", "其它入库单"), |
| | | ORDER_WORK_TYPE_OTHER_TERANSFER("6", "调拔入库单"), |
| | | ORDER_WORK_TYPE_SUPPLIER("11", "销售出库单"), |
| | | ORDER_WORK_TYPE_RETURN_ORDER("12", "领料出库单"), |
| | | ORDER_WORK_TYPE_PURCHASE_RETURN("13", "采购退回出库单"), |
| | | ORDER_WORK_TYPE_STOCK_OUT("15", "库存出库"), |
| | | ORDER_WORK_TYPE_STOCK_CHECK("16", "盘点出库"), |
| | | |
| | | ORDER_WORK_TYPE_STOCK_TERANSFER("17", "调拔出库单"), |
| | | ORDER_WORK_TYPE_OTHER("14", "其它出库单"); |
| | | |
| | | |
| | |
| | | return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type; |
| | | } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc)) { |
| | | return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type; |
| | | } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc)) { |
| | | return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type; |
| | | } |
| | | return null; |
| | | } |
| | |
| | | return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.desc; |
| | | } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type)) { |
| | | return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc; |
| | | } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)) { |
| | | return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc; |
| | | } |
| | | return null; |
| | | } |
| | |
| | | R updateTransfer(TransferItemParams params, Long loginUserId); |
| | | |
| | | IPage<WkOrder> transfersPage(PageParam<Transfer, BaseParam> pageParam, QueryWrapper<Transfer> transferQueryWrapper); |
| | | |
| | | Transfer genOutStock(Transfer transfer, Long loginUserId); |
| | | } |
| | | |
| | |
| | | import com.vincent.rsf.server.common.domain.PageResult; |
| | | import com.vincent.rsf.server.manager.controller.params.TransferItemParams; |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.enums.AsnExceStatus; |
| | | import com.vincent.rsf.server.manager.enums.CheckExceStatus; |
| | | import com.vincent.rsf.server.manager.enums.OrderSourceType; |
| | | import com.vincent.rsf.server.manager.enums.OrderType; |
| | | import com.vincent.rsf.server.manager.enums.*; |
| | | import com.vincent.rsf.server.manager.mapper.TransferMapper; |
| | | import com.vincent.rsf.server.manager.service.AsnOrderItemService; |
| | | import com.vincent.rsf.server.manager.service.TransferItemService; |
| | | import com.vincent.rsf.server.manager.service.TransferService; |
| | | import com.vincent.rsf.server.manager.service.*; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.vincent.rsf.server.manager.service.WarehouseAreasService; |
| | | import com.vincent.rsf.server.system.constant.SerialRuleCode; |
| | | import com.vincent.rsf.server.system.utils.SerialRuleUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | |
| | | |
| | | @Autowired |
| | | private TransferItemService transferItemService; |
| | | |
| | | @Autowired |
| | | private WarehouseAreasService warehouseAreasService; |
| | | @Autowired |
| | | private OutStockService outStockService; |
| | | @Autowired |
| | | private OutStockItemService outStockItemService; |
| | | |
| | | /** |
| | | * @author Ryan |
| | |
| | | } |
| | | return this.baseMapper.transfersPage(pageParam, one.getId()); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @date 2025/7/28 |
| | | * @description: 调拔单生成出库单 |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Transfer genOutStock(Transfer param, Long loginUserId) { |
| | | Transfer transfer = this.getById(param.getId()); |
| | | if (Objects.isNull(transfer)) { |
| | | throw new CoolException("数据错误:单据不存在!!"); |
| | | } |
| | | List<TransferItem> items = transferItemService.list(new LambdaQueryWrapper<TransferItem>().eq(TransferItem::getTransferId, transfer.getId())); |
| | | if (items.isEmpty()) { |
| | | throw new CoolException("数据错误:调拔单明细不存在!!"); |
| | | } |
| | | WkOrder wkOrder = new WkOrder(); |
| | | String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, transfer); |
| | | if (StringUtils.isBlank(ruleCode)) { |
| | | throw new CoolException("调拔单号生成失败!!"); |
| | | } |
| | | |
| | | Double anfmes = items.stream().mapToDouble(TransferItem::getAnfme).sum(); |
| | | wkOrder.setCode(ruleCode) |
| | | .setAnfme(anfmes) |
| | | .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val) |
| | | .setType(OrderType.ORDER_TRANSFER.type) |
| | | .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type) |
| | | .setCreateBy(loginUserId) |
| | | .setUpdateBy(loginUserId) |
| | | .setCreateTime(new Date()) |
| | | .setUpdateTime(new Date()) |
| | | .setPoCode(transfer.getCode()) |
| | | .setPoId(transfer.getId()); |
| | | if (!outStockService.saveOrUpdate(wkOrder)) { |
| | | throw new CoolException("出库单保存失败!!"); |
| | | } |
| | | |
| | | List<WkOrderItem> orderItems = new ArrayList<>(); |
| | | items.forEach(item -> { |
| | | WkOrderItem orderItem = new WkOrderItem(); |
| | | BeanUtils.copyProperties(item, orderItem); |
| | | orderItem.setOrderCode(wkOrder.getCode()) |
| | | .setSplrBatch(item.getBatch()) |
| | | .setSplrCode(item.getSplrCode()) |
| | | .setSplrName(item.getSplrName()) |
| | | .setOrderId(wkOrder.getId()); |
| | | orderItems.add(orderItem); |
| | | }); |
| | | |
| | | if (!outStockItemService.saveBatch(orderItems)) { |
| | | throw new CoolException("出库单明细保存失败!!"); |
| | | } |
| | | |
| | | transfer.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val); |
| | | |
| | | if (!this.updateById(transfer)) { |
| | | throw new CoolException("调拔单更新失败!!"); |
| | | } |
| | | return transfer; |
| | | } |
| | | } |