控制层
@ApiOperation(value = "买家收货地址设置默认接口", notes = "买家收货地址设置默认业务", produces = "application/json")
@PostMapping("/setDefault")
public BaseResponse<Map<String, Object>> setDefault(@RequestHeader(name = "Authorization", defaultValue = "token") String token,
@RequestBody MemberAddressSetDefaultRequest memberAddressSetDefaultRequest) {
ServiceResult<Boolean> serviceResult = memberAddressService.defaultMemberAddress(
memberAddressSetDefaultRequest.getId(), memberAddressSetDefaultRequest.getMemberId());
if (!serviceResult.getSuccess()) {
return new BaseResponse<>(false, null, serviceResult.getMessage());
}
return new BaseResponse<>(true, null, null);
}
这个接口只用把服务层的事务处理好就行,确保这个状态改为默认后其他状态要改为非默认状态才能提交成功,所以其他逻辑就省略了
model层
public boolean defaultMemberAddress(Integer id, Integer memberId) {
// 事务管理
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(def);
try {
// 参数校验。。这个步骤如果切面处理了参数校验的话可以不写了
if (id == null || id == 0) {
throw new BusinessException("地址id不能为空,请重试!");
}
MemberAddress memberAddress = new MemberAddress();
// 设为默认 状态1就是默认状态,更新的话要传入id不然不知道是谁的地址
memberAddress.setState(MemberAddress.STATE_1);
memberAddress.setId(id);
int count = memberAddressWriteDao.update(memberAddress);
if (count == 0) {
throw new BusinessException("收货地址更新失败,请重试!");
}
// 更新该用户其他地址为非默认
memberAddressWriteDao.updateNotDefByMId(id, memberId);
//事务处理
transactionManager.commit(status);
return true;
} catch (BusinessException be) {
transactionManager.rollback(status);
throw be;
} catch (Exception e) {
transactionManager.rollback(status);
throw e;
}
}