Commit 5eef2c3d by 陈斌

校验订单

parent 9e91a17e
...@@ -47,6 +47,26 @@ public class OrderInvoiceAdapter { ...@@ -47,6 +47,26 @@ public class OrderInvoiceAdapter {
); );
/** /**
* 校验订单数据
* @param request
* @return
*/
public BaseResponse checkOrderData(CreateOrderInvoiceRequest request){
// 【1】. 订单去重判断
List<String> distinctOrderCodes = request.getOrderCodes().stream().distinct().collect(Collectors.toList());
if(request.getOrderCodes().size() != distinctOrderCodes.size()){
return ResponseUtil.error(ResponseResult.ORDER_CODES_REPEAT);
}
// 【2】 单张发票包含的订单数量限制30
if(request.getOrderCodes().size() > ORDER_INVOICE_NUM_LIMIT){
return ResponseUtil.error(ResponseResult.ORDER_INVOINVE_LIMIT_30);
}
return ResponseUtil.success();
}
/**
* 校验订单开票数据 * 校验订单开票数据
* @return * @return
*/ */
...@@ -55,11 +75,8 @@ public class OrderInvoiceAdapter { ...@@ -55,11 +75,8 @@ public class OrderInvoiceAdapter {
if(CollectionUtils.isEmpty(orders) || orders.size() != request.getOrderCodes().size()){ if(CollectionUtils.isEmpty(orders) || orders.size() != request.getOrderCodes().size()){
return ResponseUtil.error(ResponseResult.ORDER_QUERY_ANY_ERR); return ResponseUtil.error(ResponseResult.ORDER_QUERY_ANY_ERR);
} }
// 【2】 单张发票包含的订单数量限制30
if(orders.size() > ORDER_INVOICE_NUM_LIMIT){ // 【2】 过滤订单状态&&实付金额是否符合开票原则
return ResponseUtil.error(ResponseResult.ORDER_INVOINVE_LIMIT_30);
}
// 【3】 过滤订单状态&&实付金额是否符合开票原则
List<OrderBeanV1> orderBeanV1List = orders.stream() List<OrderBeanV1> orderBeanV1List = orders.stream()
.filter(x -> canOpenOrderInvoiceStatus.contains(x.getStatus())) .filter(x -> canOpenOrderInvoiceStatus.contains(x.getStatus()))
.filter(x -> x.getActualPayAmount() != null).collect(Collectors.toList()); .filter(x -> x.getActualPayAmount() != null).collect(Collectors.toList());
...@@ -67,21 +84,21 @@ public class OrderInvoiceAdapter { ...@@ -67,21 +84,21 @@ public class OrderInvoiceAdapter {
return ResponseUtil.error(ResponseResult.ORDER_INVOICE_OPEN_ERR); return ResponseUtil.error(ResponseResult.ORDER_INVOICE_OPEN_ERR);
} }
Long totalActualPayAmount = orderBeanV1List.stream().map(e -> e.getActualPayAmount()).reduce(Long::sum).get(); Long totalActualPayAmount = orderBeanV1List.stream().map(e -> e.getActualPayAmount()).reduce(Long::sum).get();
// 【4】 实际支付金额为0,不能开票 // 【3】 实际支付金额为0,不能开票
if(null == totalActualPayAmount || totalActualPayAmount == 0 ){ if(null == totalActualPayAmount || totalActualPayAmount == 0 ){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ZERO); return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ZERO);
} }
// 【5】 将前端传的实际支付金额和服务端查出订单【可开票状态】实际支付金额对比,如果不相等,不予开票 // 【4】 将前端传的实际支付金额和服务端查出订单【可开票状态】实际支付金额对比,如果不相等,不予开票
if(totalActualPayAmount != request.getTotalActualPayAmount()){ if(totalActualPayAmount != request.getTotalActualPayAmount()){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ERROR); return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ERROR);
} }
// 【6】 单张发票最大限制1000元,超过最大限额不能开票 // 【5】 单张发票最大限制1000元,超过最大限额不能开票
double actualPayAmount2yuan = new BigDecimal(totalActualPayAmount) double actualPayAmount2yuan = new BigDecimal(totalActualPayAmount)
.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); .divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
if(actualPayAmount2yuan > CommonsConstant.CONSTANTS_ONE_THOUSAND){ if(actualPayAmount2yuan > CommonsConstant.CONSTANTS_ONE_THOUSAND){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_OUT_OF_ONE_THOUSAND); return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_OUT_OF_ONE_THOUSAND);
} }
// 【7】 查询请求订单号是否开过发票,如果存在订单已开过发票,不予处理 // 【6】 查询请求订单号是否开过发票,如果存在订单已开过发票,不予处理
QueryInvoiceByCodesRequest queryInvoiceByCodesRequest = new QueryInvoiceByCodesRequest(); QueryInvoiceByCodesRequest queryInvoiceByCodesRequest = new QueryInvoiceByCodesRequest();
queryInvoiceByCodesRequest.setPartnerId(request.getPartnerId()); queryInvoiceByCodesRequest.setPartnerId(request.getPartnerId());
queryInvoiceByCodesRequest.setOrderCodes(request.getOrderCodes()); queryInvoiceByCodesRequest.setOrderCodes(request.getOrderCodes());
......
...@@ -188,6 +188,7 @@ public enum ResponseResult { ...@@ -188,6 +188,7 @@ public enum ResponseResult {
ORDER_INVOICE_OPEN_ERR("45081", "订单状态不符合开票原则",""), ORDER_INVOICE_OPEN_ERR("45081", "订单状态不符合开票原则",""),
ORDER_INVOICE_QUERY_ERROR("45082", "订单发票查询失败",""), ORDER_INVOICE_QUERY_ERROR("45082", "订单发票查询失败",""),
ORDER_INVOICE_IS_OPENED("45083", "存在选中的订单已开过发票,请重新选择订单",""), ORDER_INVOICE_IS_OPENED("45083", "存在选中的订单已开过发票,请重新选择订单",""),
ORDER_CODES_REPEAT("45084", "同一次开票,选中的订单不能重复,请重新选择订单",""),
/** /**
* 售后单 * 售后单
......
...@@ -4382,7 +4382,12 @@ public class OrderServiceImpl implements Orderservice { ...@@ -4382,7 +4382,12 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
} }
// 【1】. 查询订单详情 // 【1.1】. 校验订单数据
BaseResponse checkOrderDataResponse = orderInvoiceAdapter.checkOrderData(request);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, checkOrderDataResponse.getCode())) {
return checkOrderDataResponse;
}
// 【1.2】. 查询订单详情
QueryOrdersResponse orderResponse = this.getOrderList(request.getOrderCodes()); QueryOrdersResponse orderResponse = this.getOrderList(request.getOrderCodes());
if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, orderResponse.getErrcode())){ if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, orderResponse.getErrcode())){
return ResponseUtil.error(orderResponse.getErrcode()+"", orderResponse.getErrmsg()); return ResponseUtil.error(orderResponse.getErrcode()+"", orderResponse.getErrmsg());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment