如果此处出现空指针异常必定是两个可能:
当然先说前提:代码是完全跟着老师一步一步来的,其次前端不能用老师的最终代码,有部分数据写入与目前p99有冲突
我是直接把老师的后端的service包以及controller包进行复制进去避免了出错
在b站上,有同学提到这个空指针异常
错误复现:
首先先根据报错信息进行代码定位,如图此时是定在了item的循环处,我的错误在于postman的请求json中的items写错了item
这里的id是采购单的id,而items是采购需求的id,此时如果已经引入了feign到了product必须对照着商品的skuid进行编写采购任务,其次采购单必须为已分配状态,在这里隐藏的坑一定是在后台系统新建采购单和采购任务的时候,以及postman的请求路径及json参数以及格式,如果仍有错误,请根据PurchaseServiceImpl的done方法一条条往下进行理清数据步骤关系,关注报错信息,如下为done与postman请求
@Transactional
@Override
public void done(PurchaseDoneVo doneVo) {
Long id = doneVo.getId();
//2、改变采购项的状态
Boolean flag = true;
List<PurchaseItemDoneVo> items = doneVo.getItems();
List<PurchaseDetailEntity> updates = new ArrayList<>();
for (PurchaseItemDoneVo item : items) {
PurchaseDetailEntity detailEntity = new PurchaseDetailEntity();
if(item.getStatus() == WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode()){
flag = false;
detailEntity.setStatus(item.getStatus());
}else{
detailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.FINISH.getCode());
3、将成功采购的进行入库
PurchaseDetailEntity entity = detailService.getById(item.getItemId());
wareSkuService.addStock(entity.getSkuId(),entity.getWareId(),entity.getSkuNum());
}
detailEntity.setId(item.getItemId());
updates.add(detailEntity);
}
detailService.updateBatchById(updates);
//1、改变采购单状态
PurchaseEntity purchaseEntity = new PurchaseEntity();
purchaseEntity.setId(id);
purchaseEntity.setStatus(flag?WareConstant.PurchaseStatusEnum.FINISH.getCode():WareConstant.PurchaseStatusEnum.HASERROR.getCode());
purchaseEntity.setUpdateTime(new Date());
this.updateById(purchaseEntity);
}
{"id":4,"items":[{"itemId":1,"status":3},{"itemId":2,"status":3}]}