異常機制
- 核心異常類:PendingException,較其它異常增加了錯誤碼的屬性。
- 原則上從service,web層的方法調用中,不允許拋出其它非運行時異常,需要將之轉換為PendingException
- 在某些父類中有將異常轉化為PendingException的方法
protected PendingException toPendingException(Exception ex, ResBean sysFailedResBean, String message) {
// 當是PendingException時的處理
if (ex instanceof PendingException) {
PendingException pendingException = (PendingException) ex;
error("操作異常:錯誤碼 = " + pendingException.getCode() + " , 錯誤信息 = " + pendingException.getMessage());
return pendingException;
// 其它異常的處理
} else {
error("操作異常:" + message, ex);
return sysFailedResBean.toException(message);
}
}
@Override
@RpcMethod("更新商品自定義信息")
public void updateGoodsSelfDef(@RequestBody GoodsSelfDefUpdateRequest request) throws PendingException {
validateThrow(request);
newTransactionTemplate.execute(status -> {
try {
// 1.更新商品信息
Goods sql = Goods.builder()
.aliasName(request.getAliasName())
.efficacy(replaceSemicolon(request.getEfficacy()))
.searchKeywords(addSemicolon(request.getSearchKeywords()))
.build();
if(CollectionUtils.isNotEmpty(request.getGuaranteeCodes())) {
sql.setGuarantees(String.join(",", request.getGuaranteeCodes()));
}
if(!sql.isAllFiledsNull()) {
sql.setId(request.getGoodsId());
goodsFacade.update(sql);
}
// 2.更新商品分類信息
updateCategoryGoods(request.getStoreId(), request.getGoodsId(), request.getCategoryIds());
// 3.更新商品標簽信息
updateTagGoods(request.getStoreId(), request.getGoodsId(), request.getGoodsTagIds());
// 3.更新商品活動圖片信息
commonProfFacade.updateAttachmentList(AttachmentRequest.builder()
.businessId(request.getGoodsId())
.businessType(BusinessType.GOODS_SPECIAL)
.attachmentList(request.getGoodsSpecialImages())
.build());
// 清除緩存
goodsCache.clearCache(request.getGoodsId());
return Boolean.TRUE;
} catch (Exception ex) {
status.setRollbackOnly();
error("商品信息更新失敗", ex);
throw toRpcRuntime(ex);
}
});
}