document
API test

合并采购单

POST

Description or Example

# 核心代码 ```java @RequestMapping("/merge") public R mergePurchaseDetailToPurchase(@RequestBody PurchaseMergeVO purchaseMergeVO) { purchaseService.merge(purchaseMergeVO); return R.ok(); } ``` ```java @Override @Transactional public void merge(PurchaseMergeVO purchaseMergeVO) { Long purchaseId = purchaseMergeVO.getPurchaseId(); if (purchaseId == null || purchaseId == 0L) { // 不存在采购单 // 不存在采购单就手动创建一个采购单 PurchaseEntity purchaseEntity = new PurchaseEntity(); purchaseEntity.setCreateTime(new Date()) .setUpdateTime(new Date()) .setPriority(ProductConstant.Priority.DEFAULT_PRIORITY.getCode()) .setStatus(WareConstant.PurchaseStatus.PURCHASE_NEW.getCode()); this.save(purchaseEntity); purchaseId = purchaseEntity.getId(); // 赋值采购单ID }else { // 有了采购单, 但不一定是合法的采购单 PurchaseEntity purchaseEntity = this.getById(purchaseId); Integer status = purchaseEntity.getStatus(); if (WareConstant.PurchaseStatus.PURCHASE_ALLOCATION.getCode() < status) { // 采购单状态码大于已分配状态码, 说明一定是不合法装填 throw new RuntimeException("采购单状态不合法"); } // 更新采购单的更新时间 this.updateById(purchaseEntity.setUpdateTime(new Date())); } // 无论如何, 这里的采购单id都存在 Long finalPurchaseId = purchaseId; if (purchaseMergeVO.getItems() != null) { List<PurchaseDetailEntity> purchaseDetailEntities = Arrays.stream(purchaseMergeVO.getItems()).map(purchaseDetailId -> { PurchaseDetailEntity purchaseDetailEntity = new PurchaseDetailEntity(); purchaseDetailEntity.setPurchaseId(finalPurchaseId) .setStatus(WareConstant.PurchaseDetailStatus.PURCHASE_DETAIL_ALLOCATION.getCode()) // 更新状态 .setId(purchaseDetailId); // 更新需要id return purchaseDetailEntity; }).collect(Collectors.toList()); purchaseDetailService.updateBatchById(purchaseDetailEntities); } } ``` # 扩展知识 ## 为什么还需要判断采购单的合法性? > 我们由前面的逻辑可知, 页面查询出来的采购单一定是合法的, 但不能保证永远都是合法的, 即因为管理系统不可能是单人应用, 在我们查询出合法采购单的时候, 可能有人会将采购单领取了, 查询出来的采购单就不合法了, 因此, 还需要判断采购单的状态