Commit c01b30ae34834b1636036b8dd6e8c395dfafc2cb

Authored by 谭毅彬
2 parents 839db355 0cabee59

Merge branch 'develop' of http://git.huahengcloud.com/wms/wms4.git into develop

ant-design-vue-jeecg/src/api/api.js
... ... @@ -151,6 +151,8 @@ export const autoCombination = (params) => postAction('/shipment/shipmentCombina
151 151 export const autoShipment = (params) => postAction('/shipment/shipmentHeader/autoShipment', params);
152 152 //自动预配盘出库
153 153 export const autoShipmentAdvice = (params) => postAction('/shipment/shipmentHeader/autoShipmentAdvice', params);
  154 +//备货
  155 +export const stockUp = (params) => postAction('/shipment/shipmentHeader/stockUp', params);
154 156 //平库路径指引
155 157 export const autoFlatShipmentAdvice = (params) => postAction('/shipment/shipmentHeader/autoFlatShipmentAdvice', params);
156 158 //根据序列号扣减预配盘的库存
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue
... ... @@ -120,6 +120,7 @@
120 120 <div class="table-operator">
121 121 <a-button v-has="'shipmentHeader:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
122 122 <a-button v-has="'shipmentHeader:mergeShipment'" @click="mergeShipment" type="primary">合并单据</a-button>
  123 + <a-button v-has="'shipmentHeader:stockUp'" @click="stockUp" type="primary">备货</a-button>
123 124 <a-button v-has="'shipmentHeader:export'" type="primary" icon="download" @click="handleExportXls('出库单')">导出</a-button>
124 125 <a-upload v-has="'shipmentHeader:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
125 126 <a-button type="primary" icon="import">导入</a-button>
... ... @@ -275,7 +276,7 @@ import {downFile, getAction} from &#39;@/api/manage&#39;
275 276 import ShipmentDetailList from './ShipmentDetailList'
276 277 import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelectUtil'
277 278 import '@/assets/less/TableExpand.less'
278   -import {getCompanyList, backErpShipment, getZoneList, autoFlatShipmentAdvice} from '@/api/api'
  279 +import {getCompanyList, backErpShipment, getZoneList, autoFlatShipmentAdvice, stockUp} from '@/api/api'
279 280 import {getShipmentTypeList} from '@/api/api'
280 281 import {getCustomerList} from '@/api/api'
281 282 import {autoCombination} from '@/api/api'
... ... @@ -712,6 +713,31 @@ export default {
712 713 this.searchQuery();
713 714 });
714 715 },
  716 + stockUp() {
  717 + if (this.selectedRowKeys.length <= 0) {
  718 + this.$message.warning('至少选择一条记录!')
  719 + return
  720 + }
  721 + var shipmentHeaderList = []
  722 + for (var a = 0; a < this.selectedRowKeys.length; a++) {
  723 + if (this.selectionRows[a] != null && this.selectionRows[a].firstStatus == 0 && this.selectionRows[a].lastStatus == 0) {
  724 + shipmentHeaderList.push(this.selectionRows[a])
  725 + }
  726 + }
  727 + if (shipmentHeaderList.length > 0) {
  728 + stockUp(shipmentHeaderList).then(res => {
  729 + this.loading = false
  730 + if (res.success) {
  731 + this.$message.success(res.message)
  732 + this.searchQuery()
  733 + } else {
  734 + this.$message.error(res.message)
  735 + }
  736 + })
  737 + } else {
  738 + this.$message.error("至少选择两条符合条件的记录!")
  739 + }
  740 + },
715 741 autoFlatShipmentAdvice(record) {
716 742 this.loading = true;
717 743 autoFlatShipmentAdvice(record).then((res) => {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
... ... @@ -46,6 +46,8 @@ public interface IHuahengMultiHandlerService {
46 46  
47 47 Result autoFlatShipmentAdvice(String shipmentCode, String warehouseCode);
48 48  
  49 + Result stockUp(List<ShipmentHeader> shipmentHeaderList, String warehouseCode);
  50 +
49 51 Result autoShipment(String shipmentCode, String warehouseCode);
50 52  
51 53 Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
... ... @@ -408,6 +408,18 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
408 408 }
409 409  
410 410 @Override
  411 + public Result stockUp(List<ShipmentHeader> shipmentHeaderList, String warehouseCode) {
  412 + Result result = handleMultiProcess("stockUp", new MultiProcessListener() {
  413 + @Override
  414 + public Result<?> doProcess() {
  415 + Result result = shipmentHeaderService.stockUp(shipmentHeaderList, warehouseCode);
  416 + return result;
  417 + }
  418 + });
  419 + return result;
  420 + }
  421 +
  422 + @Override
411 423 public Result autoShipment(String shipmentCode, String warehouseCode) {
412 424 Result result = handleMultiProcess("combination", new MultiProcessListener() {
413 425 @Override
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java
... ... @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
12 12 import com.baomidou.mybatisplus.annotation.TableField;
13 13 import com.baomidou.mybatisplus.annotation.TableId;
14 14 import com.baomidou.mybatisplus.annotation.TableName;
  15 +import com.fasterxml.jackson.annotation.JsonFormat;
15 16  
16 17 import io.swagger.annotations.ApiModel;
17 18 import io.swagger.annotations.ApiModelProperty;
... ... @@ -124,6 +125,7 @@ public class InventoryDetail implements Serializable {
124 125 /** 入库日期 */
125 126 @Excel(name = "入库日期", width = 15)
126 127 @ApiModelProperty(value = "入库日期")
  128 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
127 129 private Date receiptDate;
128 130 /** 库龄(天) */
129 131 @Excel(name = "库龄(天)", width = 15)
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/IShipmentCombinationService.java
... ... @@ -4,6 +4,7 @@ import java.math.BigDecimal;
4 4 import java.util.List;
5 5  
6 6 import org.jeecg.common.api.vo.Result;
  7 +import org.jeecg.modules.wms.config.location.entity.Location;
7 8 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
8 9 import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel;
9 10 import org.jeecg.modules.wms.shipment.shipmentCombination.entity.FlatShipment;
... ... @@ -11,6 +12,7 @@ import org.jeecg.modules.wms.shipment.shipmentContainerAdvice.entity.ShipmentCon
11 12 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
12 13 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
13 14 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
  15 +import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
14 16  
15 17 /**
16 18 * @author 游杰
... ... @@ -29,6 +31,8 @@ public interface IShipmentCombinationService {
29 31  
30 32 Result autoCombination(String shipmentCode, boolean advice, String warehouseCode);
31 33  
  34 + Result stockUp(List<ShipmentHeader> shipmentHeaderList, String warehouseCode);
  35 +
32 36 Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber);
33 37  
34 38 Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, int forceTaskType, String warehouseCode);
... ... @@ -50,6 +54,10 @@ public interface IShipmentCombinationService {
50 54  
51 55 Result autoCombinationDetail(ShipmentDetail shipmentDetail, boolean advice, BigDecimal shipQty);
52 56  
  57 + Result stockUp(ShipmentDetail shipmentDetail);
  58 +
  59 + Result stockUpMove(Location location);
  60 +
53 61 ShipmentContainerHeader addShipmentContainerHeader(InventoryDetail inventoryDetail, ShipmentDetail shipmentDetail);
54 62  
55 63 ShipmentContainerDetail addShipmentContainerDetail(ShipmentContainerHeader shipmentContainerHeader, CombinationModel combinationModel);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
... ... @@ -299,6 +299,58 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
299 299  
300 300 @Override
301 301 @Transactional(rollbackFor = Exception.class)
  302 + public Result stockUp(List<ShipmentHeader> shipmentHeaderList, String warehouseCode) {
  303 + log.info("备货,单号" + shipmentHeaderList);
  304 + List<String> shipmentCodeList = shipmentHeaderList.stream().map(ShipmentHeader::getCode).collect(Collectors.toList());
  305 + for (ShipmentHeader shipmentHeader : shipmentHeaderList) {
  306 + if (shipmentHeader == null) {
  307 + return Result.error("备货, 系统没有此单据");
  308 + }
  309 + if (shipmentHeader.getLastStatus() >= QuantityConstant.SHIPMENT_HEADER_COMPLETED) {
  310 + return Result.OK("备货,出库单已经作业完毕");
  311 + }
  312 + }
  313 + LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
  314 + shipmentDetailLambdaQueryWrapper.in(ShipmentDetail::getShipmentCode, shipmentCodeList).eq(ShipmentDetail::getWarehouseCode, warehouseCode);
  315 + List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailLambdaQueryWrapper);
  316 + if (shipmentDetailList.isEmpty()) {
  317 + return Result.error("备货, 出库单没有明细", null);
  318 + }
  319 + boolean over = true;
  320 + for (int i = 0; i < shipmentDetailList.size() - 1; i++) {
  321 + for (int j = shipmentDetailList.size() - 1; j > i; j--) {
  322 + ShipmentDetail shipmentDetail1 = shipmentDetailList.get(i);
  323 + ShipmentDetail shipmentDetail2 = shipmentDetailList.get(j);
  324 + if (shipmentDetail1.getMaterialCode().equals(shipmentDetail2.getMaterialCode()) && shipmentDetail1.getBatch().equals(shipmentDetail2.getBatch())
  325 + && shipmentDetail1.getLot().equals(shipmentDetail2.getLot()) && shipmentDetail1.getProject().equals(shipmentDetail2.getProject())
  326 + && shipmentDetail1.getInventoryStatus().equals(shipmentDetail2.getInventoryStatus())) {
  327 + BigDecimal totalQty = shipmentDetail1.getQty().add(shipmentDetail2.getQty());
  328 + shipmentDetail1.setQty(totalQty);
  329 + ShipmentDetail shipmentDetail = new ShipmentDetail();
  330 + shipmentDetail.setId(shipmentDetail1.getId());
  331 + shipmentDetail.setQty(totalQty);
  332 + shipmentDetailList.remove(j);
  333 + }
  334 + }
  335 + }
  336 + for (ShipmentDetail shipmentDetail : shipmentDetailList) {
  337 + if (shipmentDetail.getTaskQty().compareTo(shipmentDetail.getQty()) < 0) {
  338 + over = false;
  339 + }
  340 + Result result = shipmentCombinationService.stockUp(shipmentDetail);
  341 + if (!result.isSuccess()) {
  342 + throw new JeecgBootException(result.getMessage());
  343 + }
  344 + }
  345 + log.info("备货完成,单号" + shipmentHeaderList);
  346 + if (over) {
  347 + return Result.error("出库单已经备货");
  348 + }
  349 + return Result.OK("备货完成");
  350 + }
  351 +
  352 + @Override
  353 + @Transactional(rollbackFor = Exception.class)
302 354 public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber) {
303 355 return shipmentCombinationService.createShipmentTask(shipmentContainerHeader, 0, warehouseCode, shipmentOrder, sequence, sequenceNumber);
304 356 }
... ... @@ -403,6 +455,107 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
403 455  
404 456 @Override
405 457 @Transactional(rollbackFor = Exception.class)
  458 + public Result stockUp(ShipmentDetail shipmentDetail) {
  459 + // 出库数量
  460 + BigDecimal shipmentQty = shipmentDetail.getQty().subtract(shipmentDetail.getTaskQty());
  461 + // 判断是否还有需要出库的物料,如果没有就跳过该物料
  462 + if (shipmentQty.compareTo(BigDecimal.ZERO) <= 0) {
  463 + return Result.OK("备货, 出库数量必须大于0");
  464 + }
  465 + List<InventoryDetail> inventoryList = shipmentCombinationService.getInventorys(shipmentDetail);
  466 + // 去除已锁的库存
  467 + ArrayList<InventoryDetail> removeInventoryList = new ArrayList<>();
  468 + List<ReceiptContainerHeader> receiptContainerHeaderList = receiptContainerHeaderService.getUnCompleteCombineList();
  469 + List<ShipmentContainerHeader> shipmentContainerHeaderList = shipmentContainerHeaderService.getNotCombineList();
  470 + for (InventoryDetail inventoryDetail : inventoryList) {
  471 + String containerCode = inventoryDetail.getContainerCode();
  472 + String warehouseCode = inventoryDetail.getWarehouseCode();
  473 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  474 + if (container == null) {
  475 + return Result.error("备货,没有找到容器:" + containerCode);
  476 + }
  477 + if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
  478 + removeInventoryList.add(inventoryDetail);
  479 + continue;
  480 + }
  481 + for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList) {
  482 + if (receiptContainerHeader.getContainerCode().equals(containerCode)) {
  483 + removeInventoryList.add(inventoryDetail);
  484 + continue;
  485 + }
  486 + }
  487 + for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList) {
  488 + if (shipmentContainerHeader.getContainerCode().equals(containerCode)) {
  489 + removeInventoryList.add(inventoryDetail);
  490 + continue;
  491 + }
  492 + }
  493 + }
  494 + inventoryList.removeAll(removeInventoryList);
  495 + if (inventoryList.size() < 1) {
  496 + return Result.error("备货," + shipmentDetail.getMaterialName() + "没有符合出库条件的库存");
  497 + }
  498 +
  499 + for (InventoryDetail inventoryDetail : inventoryList) {
  500 + BigDecimal inventoryQty = inventoryDetail.getQty().subtract(inventoryDetail.getTaskQty());
  501 + if (inventoryQty.compareTo(BigDecimal.ZERO) == 0) {
  502 + continue;
  503 + }
  504 + // 判断需要配盘数量是否等于0,等于0代表配盘完毕,完毕就退出内循环
  505 + if (shipmentQty.compareTo(BigDecimal.ZERO) == 0) {
  506 + break;
  507 + }
  508 + if (shipmentQty.compareTo(BigDecimal.ZERO) < 0) {
  509 + throw new JeecgBootException("备货,出库数量不能小于0");
  510 + }
  511 + if (inventoryQty.compareTo(shipmentQty) >= 0) {
  512 + shipmentQty = BigDecimal.ZERO;
  513 + } else {
  514 + shipmentQty = shipmentQty.subtract(inventoryQty);
  515 + }
  516 + String locationCode = inventoryDetail.getLocationCode();
  517 + Location location = locationService.getLocationByCode(locationCode, inventoryDetail.getWarehouseCode());
  518 + Result result = shipmentCombinationService.stockUpMove(location);
  519 + if (!result.isSuccess()) {
  520 + throw new JeecgBootException("备货失败" + result.getMessage());
  521 + }
  522 + }
  523 + return Result.OK("备货成功");
  524 + }
  525 +
  526 + @Override
  527 + @Transactional(rollbackFor = Exception.class)
  528 + public Result stockUpMove(Location fromLocation) {
  529 + int rowFlag = fromLocation.getRowFlag();
  530 + Location insideLocation = locationService.getInsideNear(fromLocation);
  531 + if (insideLocation == null) {
  532 + return Result.ok("备货移库, 分配库位时" + fromLocation + "没有找到对应的内侧库位");
  533 + }
  534 + String insideLocationCode = insideLocation.getCode();
  535 + String warehouseCode = insideLocation.getWarehouseCode();
  536 + if (rowFlag == QuantityConstant.ROW_OUT) {
  537 + // 如果对应内侧库位有托盘
  538 + if (StringUtils.isNotEmpty(insideLocation.getContainerCode())) {
  539 + // 如果对应内侧库位有托盘数据,那么不可能会有入库类型的任务,因为正在执行的入库类型的任务 库位是不会有托盘数据的。
  540 + TaskHeader unCompleteTaskHeader = taskHeaderService.getUnCompleteTaskByFromLocationCode(insideLocationCode, warehouseCode);
  541 + if (unCompleteTaskHeader == null) {
  542 + // 找空闲库位,优先找外侧空闲库位,作为移库目的地
  543 + Location destinationLocation = locationService.getEmptyLocation(insideLocation);
  544 + if (destinationLocation == null) {
  545 + return Result.error("备货移库, 移库没有剩余库位");
  546 + }
  547 + Result<TaskHeader> result = taskHeaderService.createTransferTask(insideLocation.getCode(), destinationLocation.getCode(), warehouseCode);
  548 + if (!result.isSuccess()) {
  549 + throw new JeecgBootException("备货移库," + result.getMessage());
  550 + }
  551 + }
  552 + }
  553 + }
  554 + return Result.ok("备货移库成功");
  555 + }
  556 +
  557 + @Override
  558 + @Transactional(rollbackFor = Exception.class)
406 559 @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'详情配盘'", extra = "#extraJsonString", msg = "''", recordReturnValue = true)
407 560 public Result combination(CombinationModel combinationModel) {
408 561 BigDecimal shipmentQty = combinationModel.getShipQty();
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
... ... @@ -471,6 +471,16 @@ public class ShipmentHeaderController extends JeecgController&lt;ShipmentHeader, IS
471 471 return result;
472 472 }
473 473  
  474 + @AutoLog(value = "备货")
  475 + @ApiOperation(value = "备货", notes = "备货")
  476 + @PostMapping("/stockUp")
  477 + @ResponseBody
  478 + public Result stockUp(@RequestBody List<ShipmentHeader> shipmentHeaderList, HttpServletRequest req) {
  479 + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
  480 + Result result = huahengMultiHandlerService.stockUp(shipmentHeaderList, warehouseCode);
  481 + return result;
  482 + }
  483 +
474 484 /**
475 485 * 获取出库单物料库存信息
476 486 * @return
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentDetailService.java
... ... @@ -4,7 +4,6 @@ import java.math.BigDecimal;
4 4 import java.util.List;
5 5  
6 6 import org.jeecg.common.api.vo.Result;
7   -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
8 7 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
9 8  
10 9 import com.baomidou.mybatisplus.extension.service.IService;
... ... @@ -23,6 +22,8 @@ public interface IShipmentDetailService extends IService&lt;ShipmentDetail&gt; {
23 22  
24 23 public List<ShipmentDetail> getShipmentDetailListByShipmentId(Integer id);
25 24  
  25 + List<ShipmentDetail> getShipmentDetailListByShipmentCode(String code);
  26 +
26 27 boolean batchSave(List<ShipmentDetail> shipmentDetailList);
27 28  
28 29 boolean updateTaskQtyAndStatusById(BigDecimal taskQty, int status, int id);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
... ... @@ -54,6 +54,8 @@ public interface IShipmentHeaderService extends IService&lt;ShipmentHeader&gt; {
54 54  
55 55 Result autoFlatShipmentAdvice(String shipmentCode, String warehouseCode);
56 56  
  57 + Result stockUp(List<ShipmentHeader> shipmentHeaderList, String warehouseCode);
  58 +
57 59 Result createShipment(WaveConfig waveConfig, List<WaveConfigDetail> waveConfigDetailList);
58 60  
59 61 Result updateShipmentHeader(ShipmentDetail shipmentDetail);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentDetailServiceImpl.java
... ... @@ -117,6 +117,14 @@ public class ShipmentDetailServiceImpl extends ServiceImpl&lt;ShipmentDetailMapper,
117 117 }
118 118  
119 119 @Override
  120 + public List<ShipmentDetail> getShipmentDetailListByShipmentCode(String code) {
  121 + LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
  122 + shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, code);
  123 + List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailLambdaQueryWrapper);
  124 + return shipmentDetailList;
  125 + }
  126 +
  127 + @Override
120 128 public boolean batchSave(List<ShipmentDetail> shipmentDetailList) {
121 129 return this.saveBatch(shipmentDetailList);
122 130 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
... ... @@ -496,7 +496,7 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl&lt;ShipmentHeaderMapper,
496 496 if (shipmentContainerHeader == null) {
497 497 throw new JeecgBootException("自动出库, 没有找到出库表头:" + shipmentContainerId);
498 498 }
499   - if (shipmentContainerHeader.getStatus().intValue() == QuantityConstant.SHIPMENT_CONTAINER_FINISHED) {
  499 + if (shipmentContainerHeader.getStatus().intValue() > QuantityConstant.SHIPMENT_CONTAINER_BUILD) {
500 500 continue;
501 501 }
502 502 int taskType = shipmentContainerHeader.getTaskType();
... ... @@ -690,6 +690,44 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl&lt;ShipmentHeaderMapper,
690 690  
691 691 @Override
692 692 @Transactional(rollbackFor = Exception.class)
  693 + public Result stockUp(List<ShipmentHeader> shipmentHeaderList, String warehouseCode) {
  694 + for (ShipmentHeader shipmentHeader : shipmentHeaderList) {
  695 + if (shipmentHeader == null) {
  696 + throw new JeecgBootException("备货, 没有找到出库单");
  697 + }
  698 + String shipmentCode = shipmentHeader.getCode();
  699 + if (StringUtils.isEmpty(shipmentCode)) {
  700 + return Result.error("备货, 出库单编码为空");
  701 + }
  702 + if (StringUtils.isEmpty(warehouseCode)) {
  703 + return Result.error("备货, 仓库编码为空");
  704 + }
  705 + String zoneCode = shipmentHeader.getZoneCode();
  706 + if (StringUtils.isEmpty(zoneCode)) {
  707 + throw new JeecgBootException("备货, 库区编码为空");
  708 + }
  709 + Zone zone = zoneService.getZoneByCode(zoneCode, warehouseCode);
  710 + if (zone == null) {
  711 + throw new JeecgBootException("备货, 库区为空");
  712 + }
  713 + String zoneType = zone.getType();
  714 + if (StringUtils.isEmpty(zoneType)) {
  715 + throw new JeecgBootException("备货, 库区类型编码为空");
  716 + }
  717 + if (!zoneType.equals(QuantityConstant.ZONE_TYPE_STEREOSCOPIC)) {
  718 + throw new JeecgBootException("备货, 库区类型必须为立库区类型");
  719 + }
  720 + }
  721 + Result result = shipmentCombinationService.stockUp(shipmentHeaderList, warehouseCode);
  722 + if (!result.isSuccess()) {
  723 + throw new JeecgBootException("备货," + result.getMessage());
  724 + }
  725 +
  726 + return Result.OK("备货成功");
  727 + }
  728 +
  729 + @Override
  730 + @Transactional(rollbackFor = Exception.class)
693 731 public Result createShipment(WaveConfig waveConfig, List<WaveConfigDetail> waveConfigDetailList) {
694 732 String zoneType = null;
695 733 if (StringUtils.isNotEmpty(waveConfig.getZoneCode())) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
... ... @@ -1918,7 +1918,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1918 1918 @Transactional(rollbackFor = Exception.class)
1919 1919 public boolean combineInventoryDetail(String containerCode, String warehouseCode) {
1920 1920 boolean success = false;
1921   -
1922 1921 InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode);
1923 1922 if (inventoryHeader == null) {
1924 1923 throw new JeecgBootException("合并库存时, 没有找到库存头");
... ...