Commit 9bd2415e by 陈斌

订单开票

parent b7bebd44
...@@ -11,12 +11,14 @@ import cn.freemud.enums.ResponseResult; ...@@ -11,12 +11,14 @@ import cn.freemud.enums.ResponseResult;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.NewOrderStatus; import com.freemud.application.sdk.api.ordercenter.enums.NewOrderStatus;
import org.apache.commons.collections4.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
public class OrderInvoiceAdapter { public class OrderInvoiceAdapter {
...@@ -46,25 +48,28 @@ public class OrderInvoiceAdapter { ...@@ -46,25 +48,28 @@ public class OrderInvoiceAdapter {
if(orders.size() > ORDER_INVOICE_NUM_LIMIT){ if(orders.size() > ORDER_INVOICE_NUM_LIMIT){
return ResponseUtil.error(ResponseResult.ORDER_INVOINVE_LIMIT_30); return ResponseUtil.error(ResponseResult.ORDER_INVOINVE_LIMIT_30);
} }
Long totalActualPayAmount = orders.stream() // 【3】 过滤订单状态&&实付金额是否符合开票原则
.filter(x->canOpenOrderInvoiceStatus.contains(x.getStatus())) List<OrderBeanV1> orderBeanV1List = orders.stream().filter(x -> canOpenOrderInvoiceStatus.contains(x.getStatusV2()))
.filter(x -> x.getActualPayAmount() != null) .filter(x -> x.getActualPayAmount() != null).collect(Collectors.toList());
.map(e -> e.getActualPayAmount()).reduce(Long::sum).get(); if(CollectionUtils.isEmpty(orderBeanV1List)){
// 【3】 实际支付金额为0,不能开票 return ResponseUtil.error(ResponseResult.ORDER_INVOICE_OPEN_ERR);
}
Long totalActualPayAmount = orderBeanV1List.stream().map(e -> e.getActualPayAmount()).reduce(Long::sum).get();
// 【4】 实际支付金额为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);
} }
// 【4】 将前端传的实际支付金额和服务端查出订单【可开票状态】实际支付金额对比,如果不相等,不予开票 // 【5】 将前端传的实际支付金额和服务端查出订单【可开票状态】实际支付金额对比,如果不相等,不予开票
if(totalActualPayAmount != request.getTotalActualPayAmount()){ if(totalActualPayAmount != request.getTotalActualPayAmount()){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ERROR); return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ERROR);
} }
// 【5】 单张发票最大限制1000元,超过最大限额不能开票 // 【6】 单张发票最大限制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);
} }
// 【6】 单张发票金额最小限制???元,低于最小限制不能开票 // 【7】 单张发票金额最小限制???元,低于最小限制不能开票
return ResponseUtil.success(); return ResponseUtil.success();
......
...@@ -185,6 +185,7 @@ public enum ResponseResult { ...@@ -185,6 +185,7 @@ public enum ResponseResult {
ORDER_INVOINVE_LIMIT_30("45078", "单张发票限制30个订单,超过限额不能开票",""), ORDER_INVOINVE_LIMIT_30("45078", "单张发票限制30个订单,超过限额不能开票",""),
ACTUALPAYAMOUNT_IS_ERROR("45079", "实际支付金额有误,不予开票",""), ACTUALPAYAMOUNT_IS_ERROR("45079", "实际支付金额有误,不予开票",""),
ORDER_QUERY_ANY_ERR("45080", "部分订单查询失败",""), ORDER_QUERY_ANY_ERR("45080", "部分订单查询失败",""),
ORDER_INVOICE_OPEN_ERR("45081", "订单状态不符合开票原则",""),
/** /**
* 售后单 * 售后单
......
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