oms修改

This commit is contained in:
赵辉
2026-02-06 15:25:23 +08:00
parent 669583d20a
commit 73e7811b13
4 changed files with 87 additions and 420 deletions
+1 -6
View File
@@ -139,12 +139,7 @@
<version>3.6.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.mhd</groupId>
<artifactId>mhd_transport</artifactId>
<version>3.6.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.linke.transport.interfaces.dto.warehouse.inBoundOrder.InboundOrderDTO;
//import com.linke.transport.interfaces.dto.warehouse.inBoundOrder.InboundOrderDTO;
import com.mhd.common.core.domain.entity.R;
import com.mhd.oms.domain.reservationOrder.entity.ReservationAddressMulti;
import com.mhd.oms.domain.reservationOrder.entity.ReservationCargoInfo;
@@ -22,7 +22,7 @@ import com.mhd.oms.domain.reservationOrder.repository.facade.IOmsAddressMultiSer
import com.mhd.oms.domain.reservationOrder.repository.mapper.*;
import com.mhd.oms.enums.*;
import com.mhd.oms.infrastructure.feign.ThirdPartyServiceFeign;
import com.mhd.oms.infrastructure.feign.TransportServiceFeign;
//import com.mhd.oms.infrastructure.feign.TransportServiceFeign;
import com.mhd.oms.interfaces.dto.resevationOrder.*;
import com.mhd.oms.util.DictDataUtils;
import com.mhd.oms.util.OrderSequence;
@@ -32,7 +32,7 @@ import com.mhd.system.api.UserServiceFeign;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.core.domain.po.UserPo;
import com.mhd.user.domain.userAggregate.repository.po.UserShipperPo;
import com.mhd.common.core.domain.po.UserShipperPo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -69,8 +69,8 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
@Resource
private UserServiceFeign userServiceFeign;
@Resource
private TransportServiceFeign transportServiceFeign;
// @Resource
// private TransportServiceFeign transportServiceFeign;
@Resource
@@ -546,7 +546,7 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
OmsCargoInfoDTO tmsCargoInfoDTO = allCargoList.get(0);
String goodsTypeId = tmsCargoInfoDTO.getGoodsTypeId();
if (ObjectUtil.isNotEmpty(goodsTypeId)) {
processMaterialInventoryInbound(Long.valueOf(swzlUserId), orderCode, allCargoList);
// processMaterialInventoryInbound(Long.valueOf(swzlUserId), orderCode, allCargoList);
}
}
//保存付款方
@@ -933,91 +933,91 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
return sysDepartInterfaceInfoPos.get(0).getInterfaceTypeValue();
}
private void processMaterialInventoryInbound(Long swzlUserId, String tmsOrderNo, List<OmsCargoInfoDTO> allCargoList) {
// 1. 库存货物:cargoType = STOCK
List<OmsCargoInfoDTO> stockCargoList = allCargoList.stream()
.filter(cargoInfo -> CargoTypeEnum.STOCK.getCode().equals(cargoInfo.getCargoType()))
.collect(Collectors.toList());
// 2. 物料货物:cargoType = MATERIAL
List<OmsCargoInfoDTO> materialCargoList = allCargoList.stream()
.filter(cargoInfo -> CargoTypeEnum.MATERIAL.getCode().equals(cargoInfo.getCargoType()))
.collect(Collectors.toList());
// 3. 手动输入货物:cargoType = MANUAL
List<OmsCargoInfoDTO> manualCargoList = allCargoList.stream()
.filter(cargoInfo -> CargoTypeEnum.MANUAL.getCode().equals(cargoInfo.getCargoType()))
.collect(Collectors.toList());
log.info("货物分类统计 - 总数: {}, 库存货物: {}, 物料货物: {}, 手动输入货物: {}",
allCargoList.size(), stockCargoList.size(), materialCargoList.size(), manualCargoList.size());
// 只对物料货物执行自动入库逻辑
if (!materialCargoList.isEmpty()) {
log.info("开始处理物料货物入库,物料数量: {}", materialCargoList.size());
InboundOrderDTO.Create stockCreateDTO = new InboundOrderDTO.Create();
stockCreateDTO.setOwnerId(swzlUserId);
stockCreateDTO.setTmsOrderNo(tmsOrderNo);
stockCreateDTO.setRemarks("TMS自动入库");
stockCreateDTO.setDetails(getStockCreateDetailForMaterials(materialCargoList));
R<Long> r = transportServiceFeign.createInboundOrder(stockCreateDTO);
if (r.getCode() != 200 || Objects.isNull(r.getData())) {
throw new ServiceException(r.getMsg());
}
R<List<com.mhd.oms.infrastructure.feign.po.Inventory>> inventoryResult = transportServiceFeign.getInventoryItemByInboundOrderId(
r.getData());
if (inventoryResult.getCode() != 200 || CollectionUtil.isEmpty(inventoryResult.getData())) {
throw new ServiceException(r.getMsg());
}
Map<Long, Long> materialToInventoryMap = inventoryResult
.getData()
.stream()
.collect(Collectors.toMap(com.mhd.oms.infrastructure.feign.po.Inventory::getMaterialId, com.mhd.oms.infrastructure.feign.po.Inventory::getId));
// 更新物料货物的goodsTypeId
for (OmsCargoInfoDTO cargoInfo : materialCargoList) {
if (Objects.nonNull(cargoInfo.getGoodsTypeId())) {
Long materialId = Long.valueOf(cargoInfo.getGoodsTypeId());
Long inventoryId = materialToInventoryMap.get(materialId);
if (Objects.nonNull(inventoryId)) {
cargoInfo.setGoodsTypeId(String.valueOf(inventoryId));
log.info("物料货物goodsTypeId已更新: 物料ID {} -> 库存ID {}", materialId, inventoryId);
} else {
log.warn("未找到物料ID {} 对应的库存ID", materialId);
}
}
}
log.info("物料货物入库处理完成,并已更新goodsTypeId为对应的inventoryId");
}
// 手动输入货物直接跳过入库操作,后续会直接保存到数据库
if (!manualCargoList.isEmpty()) {
log.info("发现 {} 个手动输入的货物条目,将跳过入库操作直接保存", manualCargoList.size());
}
}
// private void processMaterialInventoryInbound(Long swzlUserId, String tmsOrderNo, List<OmsCargoInfoDTO> allCargoList) {
// // 1. 库存货物:cargoType = STOCK
// List<OmsCargoInfoDTO> stockCargoList = allCargoList.stream()
// .filter(cargoInfo -> CargoTypeEnum.STOCK.getCode().equals(cargoInfo.getCargoType()))
// .collect(Collectors.toList());
//
// // 2. 物料货物:cargoType = MATERIAL
// List<OmsCargoInfoDTO> materialCargoList = allCargoList.stream()
// .filter(cargoInfo -> CargoTypeEnum.MATERIAL.getCode().equals(cargoInfo.getCargoType()))
// .collect(Collectors.toList());
//
// // 3. 手动输入货物:cargoType = MANUAL
// List<OmsCargoInfoDTO> manualCargoList = allCargoList.stream()
// .filter(cargoInfo -> CargoTypeEnum.MANUAL.getCode().equals(cargoInfo.getCargoType()))
// .collect(Collectors.toList());
//
// log.info("货物分类统计 - 总数: {}, 库存货物: {}, 物料货物: {}, 手动输入货物: {}",
// allCargoList.size(), stockCargoList.size(), materialCargoList.size(), manualCargoList.size());
//
// // 只对物料货物执行自动入库逻辑
// if (!materialCargoList.isEmpty()) {
// log.info("开始处理物料货物入库,物料数量: {}", materialCargoList.size());
//
// InboundOrderDTO.Create stockCreateDTO = new InboundOrderDTO.Create();
// stockCreateDTO.setOwnerId(swzlUserId);
// stockCreateDTO.setTmsOrderNo(tmsOrderNo);
// stockCreateDTO.setRemarks("TMS自动入库");
// stockCreateDTO.setDetails(getStockCreateDetailForMaterials(materialCargoList));
//
// R<Long> r = transportServiceFeign.createInboundOrder(stockCreateDTO);
// if (r.getCode() != 200 || Objects.isNull(r.getData())) {
// throw new ServiceException(r.getMsg());
// }
//
// R<List<com.mhd.oms.infrastructure.feign.po.Inventory>> inventoryResult = transportServiceFeign.getInventoryItemByInboundOrderId(
// r.getData());
// if (inventoryResult.getCode() != 200 || CollectionUtil.isEmpty(inventoryResult.getData())) {
// throw new ServiceException(r.getMsg());
// }
//
// Map<Long, Long> materialToInventoryMap = inventoryResult
// .getData()
// .stream()
// .collect(Collectors.toMap(com.mhd.oms.infrastructure.feign.po.Inventory::getMaterialId, com.mhd.oms.infrastructure.feign.po.Inventory::getId));
//
// // 更新物料货物的goodsTypeId
// for (OmsCargoInfoDTO cargoInfo : materialCargoList) {
// if (Objects.nonNull(cargoInfo.getGoodsTypeId())) {
// Long materialId = Long.valueOf(cargoInfo.getGoodsTypeId());
// Long inventoryId = materialToInventoryMap.get(materialId);
// if (Objects.nonNull(inventoryId)) {
// cargoInfo.setGoodsTypeId(String.valueOf(inventoryId));
// log.info("物料货物goodsTypeId已更新: 物料ID {} -> 库存ID {}", materialId, inventoryId);
// } else {
// log.warn("未找到物料ID {} 对应的库存ID", materialId);
// }
// }
// }
//
// log.info("物料货物入库处理完成,并已更新goodsTypeId为对应的inventoryId");
// }
//
// // 手动输入货物直接跳过入库操作,后续会直接保存到数据库
// if (!manualCargoList.isEmpty()) {
// log.info("发现 {} 个手动输入的货物条目,将跳过入库操作直接保存", manualCargoList.size());
// }
// }
/**
* 为物料货物创建入库单明细
* @param materialCargoList 物料货物列表
// * @param materialCargoList 物料货物列表
* @return 入库单明细列表
*/
private static List<InboundOrderDTO.Detail> getStockCreateDetailForMaterials(List<OmsCargoInfoDTO> materialCargoList) {
return materialCargoList
.stream()
.map((item) -> {
InboundOrderDTO.Detail detail = new InboundOrderDTO.Detail();
detail.setMaterialId(Long.valueOf(item.getGoodsTypeId()));
detail.setQuantity(item.getCargoNum());
detail.setMachineSerialNo(item.getMachineCode());
return detail;
})
.collect(Collectors.toList());
}
// private static List<InboundOrderDTO.Detail> getStockCreateDetailForMaterials(List<OmsCargoInfoDTO> materialCargoList) {
// return materialCargoList
// .stream()
// .map((item) -> {
// InboundOrderDTO.Detail detail = new InboundOrderDTO.Detail();
// detail.setMaterialId(Long.valueOf(item.getGoodsTypeId()));
// detail.setQuantity(item.getCargoNum());
// detail.setMachineSerialNo(item.getMachineCode());
// return detail;
// })
// .collect(Collectors.toList());
// }
@Override
public boolean saveBatch(Collection<ReservationOrder> entityList, int batchSize) {
@@ -1,277 +0,0 @@
//package com.mhd.oms.infrastructure.feign;
//
//import com.mhd.common.core.constant.ServiceNameConstants;
//import com.mhd.common.core.domain.dto.BasicAgreementDTO;
//import com.mhd.common.core.domain.dto.SysMultistageDictDto;
//import com.mhd.common.core.domain.dto.SysProvinceCityCountyDTO;
//import com.mhd.common.core.domain.dto.open.SystemOpenApiLogDTO;
//import com.mhd.common.core.domain.dto.open.ThirdPartyServiceReqLogDTO;
//import com.mhd.common.core.domain.entity.R;
//import com.mhd.common.core.domain.po.SysMultistageDictPo;
//import com.mhd.common.core.web.domain.AjaxResult;
//import com.mhd.common.core.web.page.TableDataInfo;
//import com.mhd.oms.infrastructure.feign.dto.AbnormalAddressBookDTO;
//import com.mhd.oms.infrastructure.feign.dto.NoticeMessageLoggingDto;
//import com.mhd.oms.infrastructure.feign.dto.QueryExpenseAccountDTO;
//import com.mhd.oms.infrastructure.feign.po.NoticeMessageLoggingPo;
//import com.mhd.system.api.domain.SysDictData;
//import com.mhd.system.api.feign.FeignAutoConfiguration;
//import com.mhd.system.api.model.LoginUser;
//import io.swagger.annotations.ApiOperation;
//import org.springframework.cloud.openfeign.FeignClient;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
///**
// * @Description
// * @Author zg
// * @Version 1.0
// * @Date 2023/11/1 13:40
// */
//@FeignClient(contextId = "SystemServiceFeign", value = ServiceNameConstants.SYSTEM_SERVICE, configuration = FeignAutoConfiguration.class)
//public interface SystemServiceFeign {
//
// /**
// * 多级分类字典,根据code查询字典信息
// * 此接口查询多级分类字典,如果是一级字典,则只需传入字典code,如果是二级或三级字典,则还需要传入父类code,否则会查询失败
// *
// * @param multistageDictCode 本级code
// * @param parentDictCode 父级code
// * @return
// */
// @GetMapping("/basicApi/getMultistageDictInfoByCode")
// public AjaxResult getMultistageDictInfoByCode(@RequestParam("multistageDictCode") String multistageDictCode, @RequestParam("parentDictCode") String parentDictCode);
//
//
// /**
// * 查询多级分类字典
// *
// * @param sysMultistageDictDto
// * @return
// */
// @GetMapping("/basicApi/selectMultistageDictList")
// public AjaxResult selectMultistageDictList(SysMultistageDictDto sysMultistageDictDto);
//
// /**
// * 根据字典类型查询字典数据信息
// *
// * @param dictType
// * @return
// */
// @GetMapping("/dict/data/type/{dictType}")
// public AjaxResult selectListByDictType(@PathVariable("dictType") String dictType);
//
//
// /**
// * 根据县级编码,查询省市县信息
// *
// * @param sysProvinceDTO
// * @return
// */
// @PostMapping("/basicApi/findAreaInfo")
// public AjaxResult selectFindAreaInfoList(@RequestBody SysProvinceCityCountyDTO sysProvinceDTO);
//
// /**
// * 根据市区编码查询市区信息
// *
// * @param sysProvinceDTO
// * @return
// */
// @PostMapping("/basicApi/findAreaInfoByCityCode")
// public AjaxResult findAreaInfoByCityCode(@RequestBody SysProvinceCityCountyDTO sysProvinceDTO);
//
// /**
// * 根据省份编码查询省份信息
// *
// * @param sysProvinceDTO
// * @return
// */
// @PostMapping("/basicApi/findAreaInfoByProvince")
// public AjaxResult findAreaInfoByProvince(@RequestBody SysProvinceCityCountyDTO sysProvinceDTO);
//
//
// //=================================
//
// /**
// * 查询字典数据详细
// *
// * @param dictCode
// * @return
// */
// @GetMapping("/dict/data/{dictCode}")
// public AjaxResult getTopOrganization(@PathVariable("dictCode") Long dictCode);
//
// /**
// * 根据条件查询字典数据列表
// * @param sysDictData
// * @return
// */
// @PostMapping("/dict/data/findDatalist")
// public AjaxResult findDatalist(@RequestBody SysDictData sysDictData);
//
// /**
// * 根据条件查询分类字典数据列表
// * @param
// * @return
// */
// @PostMapping("/basicApi/getMultistageDictList")
// public R<List<SysMultistageDictPo>> getMultistageDictList(@RequestBody SysMultistageDictDto sysMultistageDictDto);
//
// /**
// * 根据条件查询分类字典数据列表
// * @param
// * @return
// */
// @PostMapping("/basicApi/getMultistageDictTreeList")
// public R<List<SysMultistageDictPo>> getMultistageDictTreeList(@RequestBody SysMultistageDictDto sysMultistageDictDto);
//
//
// /**
// * 根据条件查询分类字典数据列表
// * @param
// * @return
// */
// @PostMapping("/dict/data/getDictDataList")
// public R<List<SysDictData>> getDictDataList(@RequestBody SysDictData sysDictData);
//
// /**
// * 查询省市县三级
// *
// * @param sysProvinceDTO
// * @return
// */
// @PostMapping("/basicApi/selectAreaChildrenList")
// public TableDataInfo selectAreaChildrenList(@RequestBody SysProvinceCityCountyDTO sysProvinceDTO);
//
// /**
// * 根据code查询分类字典信息
// *
// * @param multistageDictCode
// * @return
// */
// @GetMapping(value = "/basicApi/getMultistageDictInfoByCode/{multistageDictCode}")
// public AjaxResult getMultistageDictInfoByCode(@PathVariable(value = "multistageDictCode", required = true) String multistageDictCode);
//
// /**
// * 根据code查询多级分类字典集合
// *
// * @param code
// * @return
// */
// @GetMapping(value = "/basicApi/getSysMultistageDictList/{code}")
// public AjaxResult getSysMultistageDictList(@PathVariable(value = "code") String code);
//
// /**
// * 根据topCode查询多级分类字典集合(同一父级字典下所有)
// *
// * @param topCode
// * @return
// */
// @GetMapping(value = "/basicApi/getTopMultistageDictList/{topCode}")
// public AjaxResult getTopMultistageDictList(@PathVariable(value = "topCode") String topCode);
//
// /**
// * 新增消息通知 单条
// *
// * @param noticeMessageLoggingDto
// * @return
// */
// @PostMapping("/messageManageApi/addMessageLogging")
// public AjaxResult addMessageLogging(@RequestBody NoticeMessageLoggingDto noticeMessageLoggingDto);
//
// /**
// * 消息记录列表查询-feign
// *
// * @return
// */
// @ApiOperation("消息记录列表查询-feign")
// @PostMapping("/messageManageApi/noticeMessageLoggingListByFeign")
// public List<NoticeMessageLoggingPo> noticeMessageLoggingListByFeign(@RequestBody NoticeMessageLoggingDto noticeMessageLoggingDto);
//
// /**
// * 新增消息通知 批量
// *
// * @param noticeMessageLoggingDto
// * @return
// */
// @PostMapping("/messageManageApi/addMessageLoggingList")
// public AjaxResult addMessageLoggingList(@RequestBody NoticeMessageLoggingDto noticeMessageLoggingDto);
//
// /**
// * 根据协议code和租户查询系统协议
// */
// @GetMapping("/basicApi/findAgreementByCodeAndOrg")
// public AjaxResult findAgreementByCodeAndOrg(BasicAgreementDTO basicAgreementDTO);
//
// /**
// * 获取指定组织的开关按钮配置-feign
// */
// @ApiOperation("获取指定组织的开关按钮配置")
// @GetMapping("/userConfigSwitchApi/getUserConfigSwitchInfoByOrgId")
// public AjaxResult getUserConfigSwitchInfoByOrgId(@RequestParam("organizationId") Long organizationId);
//
// /**
// * 获取当前租户开关按钮配置-feign
// */
// @ApiOperation("获取当前租户开关配置信息")
// @PostMapping("/userConfigSwitchApi/getUserConfigSwitchInfoByFeign")
// public AjaxResult getUserConfigSwitchInfoByFeign(@RequestBody LoginUser loginUser);
//
// @ApiOperation("根据code、一级组织ID查询多级分类字典集合")
// @GetMapping(value = "/basicApi/getSysMultistageDictByCodeAndTopOrgId")
// public AjaxResult getSysMultistageDictByCodeAndTopOrgId(@RequestParam("code") String code, @RequestParam("topOrgId") Long topOrgId);
//
// @ApiOperation("根据topCode、一级组织ID查询多级分类字典集合(同一父级字典下所有)")
// @GetMapping(value = "/basicApi/getMultistageDictListByTopCodeAndTopOrgId")
// public AjaxResult getMultistageDictListByTopCodeAndTopOrgId(@RequestParam("topCode") String topCode, @RequestParam("topOrgId") Long topOrgId);
//
// @ApiOperation("新增多级分类字典-开放接口")
// @PostMapping("/basicApi/addMultistageDictByOpen")
// public AjaxResult addMultistageDictByOpen(@RequestBody SysMultistageDictDto sysMultistageDictDto);
//
// /**
// * @description 保存请求服务日志
// * @author ZhouGY
// * @date 2024/1/26 17:03
// * @param systemOpenApiLogDTO
// */
// @PostMapping(value = "/systemOpenApiLogApi/save")
// public AjaxResult saveLog(@RequestBody SystemOpenApiLogDTO systemOpenApiLogDTO);
//
// /**
// * @description 保存三方服务日志
// * @author ZhouGY
// * @date 2024/1/26 17:03
// * @param thirdPartyServiceReqLogDTO
// */
// @PostMapping(value = "/thirdPartyServiceReqLogApi/save")
// public AjaxResult saveThirdPartyServiceReqLog(@RequestBody ThirdPartyServiceReqLogDTO thirdPartyServiceReqLogDTO);
//
// /**
// * 获取用户所在租户的开关配置信息
// * @return
// */
// @GetMapping("/userConfigSwitchApi/getUserConfigSwitchInfo")
// public AjaxResult getUserConfigSwitchInfo();
//
// /**
// * 编辑异常匹配地址簿
// * @return
// */
// @PostMapping("/abnormalAddressBookApi/saveBatchAddressBook")
// public AjaxResult saveBatchAddressBook(@RequestBody List<AbnormalAddressBookDTO> abnormalAddressBookDTOList);
//
// /**
// * 匹配地址簿
// * @return
// */
// @PostMapping("/abnormalAddressBookApi/matchAddressBook")
// public AjaxResult matchAddressBook(@RequestBody AbnormalAddressBookDTO abnormalAddressBookDTO);
// /**
// * 查询社会车辆-费用科目
// * @return
// */
// @GetMapping("/expenseAccountApi/selectSocialVehicleExpenseAccount")
// public R<List<QueryExpenseAccountDTO>> selectSocialVehicleExpenseAccount();
//}
@@ -1,51 +0,0 @@
package com.mhd.oms.infrastructure.feign;
import com.linke.transport.interfaces.dto.warehouse.inBoundOrder.InboundOrderDTO;
import com.linke.transport.interfaces.dto.warehouse.outBoundOrder.OutboundOrderDTO;
import com.mhd.common.core.constant.ServiceNameConstants;
import com.mhd.common.core.domain.entity.R;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.oms.infrastructure.feign.po.Inventory;
import com.mhd.system.api.feign.FeignAutoConfiguration;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@FeignClient(contextId = "transportServiceFeign", value = ServiceNameConstants.TRANSPORT_CENTER, configuration = FeignAutoConfiguration.class)
public interface TransportServiceFeign {
/**
* 创建入库单。
*
* @param createDTO 入库单信息,包括货主名称、备注、以及入库物料明细列表。
* @return 返回一个包含入库单据ID的包装对象。
*/
@PostMapping("/inboundOrders")
R<Long> createInboundOrder(@ApiParam(value = "入库单信息") @RequestBody InboundOrderDTO.Create createDTO);
/**
* Retrieves a list of inventory items associated with the specified inbound order ID.
*
* @param inboundOrderId the ID of the inbound order used to lookup the inventory items
* @return a response object containing a list of inventory items linked to the given inbound order ID
*/
@GetMapping("/inventory/getInventoryByInboundOrderId/{inboundOrderId}")
R<List<Inventory>> getInventoryItemByInboundOrderId(@PathVariable("inboundOrderId") Long inboundOrderId);
@GetMapping("/vehicleApi/getVehicleInfoById")
AjaxResult getVehicleInfoById(@RequestParam(value = "vehicleId" ,required = true) Long vehicleId);
/**
* 仓储出库接口
*
* @param createDTO 出库单参数
* @return 出库单据ID
*/
@PostMapping("/outboundOrders")
R<Long> createOutboundOrder(@ApiParam(value = "出库单创建信息", required = true) @Valid @RequestBody OutboundOrderDTO.Create createDTO);
}