Commit fda07180 by 陈斌

订单发票二期

parent 083f9b96
package cn.freemud.adapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.CommonsConstant;
import cn.freemud.entities.dto.order.InvoiceCreateResponse;
import cn.freemud.entities.dto.order.OrderInvoiceResponse;
import cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse;
import cn.freemud.entities.dto.pay.InvoiceCreateRequest;
import cn.freemud.entities.dto.pay.InvoiceProductDetailRequest;
......@@ -24,7 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Component
......@@ -33,11 +36,11 @@ public class OrderInvoiceAdapter {
@Autowired
OrderServiceClient orderServiceClient;
// 开票参数
public static final String INVOICE_PRODUCTCODE = "3070401000000000000";
public static final String INVOICE_PRODUCTNAME = "餐饮类商品";
public static final String INVOICE_TAXRATE = "0.06";
public static final String INVOICE_CONTENT = "非码订单开票";
// 开票参数 从B端后台查询,根据商户自己建的配置开票
// public static final String INVOICE_PRODUCTCODE = "3070401000000000000";
// public static final String INVOICE_PRODUCTNAME = "餐饮类商品";
// public static final String INVOICE_TAXRATE = "0.06";
// public static final String INVOICE_CONTENT = "非码订单开票";
// 单张发票订单数量限制
public static final Integer ORDER_INVOICE_NUM_LIMIT = 30;
......@@ -120,13 +123,14 @@ public class OrderInvoiceAdapter {
}
public InvoiceCreateRequest convert2InvoiceCreateRequest(List<OrderBeanV1> orders, CreateOrderInvoiceRequest createRequest){
public InvoiceCreateRequest convert2InvoiceCreateRequest(List<OrderBeanV1> orders
, CreateOrderInvoiceRequest createRequest, OrderInvoiceResponse orderInvoiceConfig){
InvoiceCreateRequest request = new InvoiceCreateRequest();
request.setPartnerId(createRequest.getPartnerId());
request.setInvoiceTerminalCode(CommonsConstant.CONSTANTS_TWO_STRING);
request.setOrgCode(null);
request.setPushChannelType(null);
request.setInvoiceTypeCode(InvoiceTypeCodeEnum.ELECTRONIC_INVOICE.getBwType());
request.setInvoiceTypeCode(InvoiceTypeCodeEnum.getBwType(orderInvoiceConfig.getInvoiceType()));
request.setInvoiceNo(UUID.randomUUID().toString().replaceAll("-", ""));
request.setDrawer(createRequest.getDrawer());
request.setPriceTaxMark(CommonsConstant.CONSTANTS_ONE_STRING); //含税标记
......@@ -144,14 +148,14 @@ public class OrderInvoiceAdapter {
BigDecimal actualPayAmount2yuan = actualPayAmount.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
InvoiceProductDetailRequest invoiceDetailRequest = new InvoiceProductDetailRequest();
invoiceDetailRequest.setProductCode(INVOICE_PRODUCTCODE);
invoiceDetailRequest.setProductName(INVOICE_PRODUCTNAME);
invoiceDetailRequest.setProductCode(orderInvoiceConfig.getProductCode());
invoiceDetailRequest.setProductName(orderInvoiceConfig.getProductName());
invoiceDetailRequest.setProductSpecification("");
invoiceDetailRequest.setGoodsUnit("");
invoiceDetailRequest.setGoodsQuantity(CommonsConstant.CONSTANTS_ONE_INTEGER);
invoiceDetailRequest.setGoodsPrice(actualPayAmount2yuan);
invoiceDetailRequest.setGoodsTotalPrice(actualPayAmount2yuan);
invoiceDetailRequest.setGoodsTaxRate(new BigDecimal(INVOICE_TAXRATE).setScale(2, BigDecimal.ROUND_HALF_UP));
invoiceDetailRequest.setGoodsTaxRate(new BigDecimal(orderInvoiceConfig.getTaxRate()).setScale(2, BigDecimal.ROUND_HALF_UP));
BigDecimal goodsTotalTax = invoiceDetailRequest.getGoodsTotalPrice()
.multiply(invoiceDetailRequest.getGoodsTaxRate()).setScale(2, BigDecimal.ROUND_HALF_UP);
invoiceDetailRequest.setGoodsTotalTax(goodsTotalTax);
......@@ -161,16 +165,16 @@ public class OrderInvoiceAdapter {
}
public OrderInvoiceRequest convert2OrderInvoiceRequest(InvoiceCreateRequest invoiceCreateRequest, InvoiceCreateResponse invoiceData
, List<String> orderCodes, String memberId ){
, OrderInvoiceResponse orderInvoiceConfig, List<String> orderCodes, String memberId ){
OrderInvoiceRequest request = new OrderInvoiceRequest();
request.setPartnerId(invoiceCreateRequest.getPartnerId());
request.setInvoiceType(InvoiceTypeCodeEnum.ELECTRONIC_INVOICE.getFmType());
request.setContent(INVOICE_CONTENT);
request.setInvoiceType(orderInvoiceConfig.getInvoiceType());
request.setContent(orderInvoiceConfig.getContent());
request.setAmount(invoiceCreateRequest.getProductDetailList().get(0).getGoodsTotalPrice().multiply(new BigDecimal(100)).intValue());
request.setInvoiceUrl(invoiceData.getScanUrl());
request.setUserId(memberId);
request.setInvoiceNo(invoiceCreateRequest.getInvoiceNo());
request.setTaxRate(INVOICE_TAXRATE);
request.setTaxRate(orderInvoiceConfig.getTaxRate());
request.setPickUpNo(invoiceData.getCode());
request.setEndingDate(DateUtils.convert2Date(invoiceData.getEndingDate()));
request.setOrderCodes(orderCodes);
......
package cn.freemud.entities.dto.openplatform;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class QueryInvoiceConfigRequest {
@ApiModelProperty("商户号")
private String partnerId;
}
package cn.freemud.entities.dto.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class OrderInvoiceResponse {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("商户号")
private String partnerId;
@ApiModelProperty("渠道类型")
private String channelType;
@ApiModelProperty("渠道名称")
private String channelName;
@ApiModelProperty("税号")
private String taxNo;
@ApiModelProperty("发票类型,{4-增值税专用发票,7-增值税普通发票,26-增值税电子发票,25-增值税卷式发票,28-增值税专用电子发票}")
private Integer invoiceType;
@ApiModelProperty("appKey")
private String appKey;
@ApiModelProperty("appSercret")
private String appSercret;
@ApiModelProperty("token")
private String token;
@ApiModelProperty("userName")
private String userName;
@ApiModelProperty("盐值,加密盐")
private String salt;
@ApiModelProperty("发票说明")
private String remark;
@ApiModelProperty("状态 0启用 1禁用")
private Integer state;
@ApiModelProperty(value = "税收分类编码")
private String productCode;
@ApiModelProperty(value = "商品名称")
private String productName;
@ApiModelProperty("税率")
private String taxRate;
@ApiModelProperty("发票内容")
private String content;
}
......@@ -27,4 +27,31 @@ public enum InvoiceTypeCodeEnum {
private String bwType;
private String desc;
/**
* 根据fmType获取bwType
* @param fmType
* @return
*/
public static String getBwType(Integer fmType){
for (InvoiceTypeCodeEnum value : InvoiceTypeCodeEnum.values()) {
if (value.getFmType().equals(fmType)) {
return value.getBwType();
}
}
return null;
}
/**
* 根据fmType获取bwType
* @param bwType
* @return
*/
public static Integer getFmType(String bwType){
for (InvoiceTypeCodeEnum value : InvoiceTypeCodeEnum.values()) {
if (value.getBwType().equals(bwType)) {
return value.getFmType();
}
}
return null;
}
}
......@@ -189,6 +189,7 @@ public enum ResponseResult {
ORDER_INVOICE_QUERY_ERROR("45082", "订单发票查询失败",""),
ORDER_INVOICE_IS_OPENED("45083", "存在选中的订单已开过发票,请重新选择订单",""),
ORDER_CODES_REPEAT("45084", "同一次开票,选中的订单不能重复,请重新选择订单",""),
ORDER_INVOICE_CONFIG_IS_NULL("45085", "发票配置信息为空,不可开票",""),
/**
* 售后单
......
......@@ -30,6 +30,7 @@ import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseObj;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest;
import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.pay.svc.SVCCardAmountRequestDto;
......@@ -94,8 +95,8 @@ import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderC
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
......@@ -338,6 +339,9 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private OrderClient orderClient;
@Autowired
private MicroOpenplatformClient microOpenplatformClient;
@Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
......@@ -4446,8 +4450,20 @@ public class OrderServiceImpl implements Orderservice {
return checkResponse;
}
// 【3】. 调用支付接口开订单发票,非码支付系统内部再调用三方-百望系统开票
InvoiceCreateRequest invoiceCreateRequest = orderInvoiceAdapter.convert2InvoiceCreateRequest(dataBean.getOrders(), request);
// 【3.1】. 查询开票配置数据
QueryInvoiceConfigRequest configRequest = new QueryInvoiceConfigRequest();
configRequest.setPartnerId(request.getPartnerId());
BaseResponse<OrderInvoiceResponse> orderInvoiceConfigResponse = microOpenplatformClient.QueryInvoiceConfigByPartnerId(configRequest);
if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, orderInvoiceConfigResponse.getCode())){
return ResponseUtil.error(orderInvoiceConfigResponse.getCode(), orderInvoiceConfigResponse.getMessage());
}
OrderInvoiceResponse orderInvoiceConfig = orderInvoiceConfigResponse.getResult();
if(null == orderInvoiceConfig){
return ResponseUtil.error(ResponseResult.ORDER_INVOICE_CONFIG_IS_NULL);
}
// 【3.2】. 调用支付接口开订单发票,非码支付系统内部再调用三方-百望系统开票
InvoiceCreateRequest invoiceCreateRequest = orderInvoiceAdapter.convert2InvoiceCreateRequest(dataBean.getOrders(), request, orderInvoiceConfig);
com.freemud.application.sdk.api.base.BaseResponse<InvoiceCreateResponse> invoiceResponse = paymentNewClient.createInvoice(invoiceCreateRequest);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, invoiceResponse.getCode()) || null == invoiceResponse.getData()) {
return ResponseUtil.error(invoiceResponse.getCode(), invoiceResponse.getMessage());
......@@ -4459,7 +4475,7 @@ public class OrderServiceImpl implements Orderservice {
// 【4】. 录入发票记录,修改订单发票状态
OrderInvoiceRequest orderInvoiceRequest = orderInvoiceAdapter.convert2OrderInvoiceRequest(invoiceCreateRequest, invoiceData,
request.getOrderCodes(), userLoginInfoDto.getMemberId());
orderInvoiceConfig, request.getOrderCodes(), userLoginInfoDto.getMemberId());
BaseResponse orderInvoiceResponse = orderServiceClient.createInvoice(orderInvoiceRequest);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, orderInvoiceResponse.getCode())) {
return orderInvoiceResponse;
......
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