Commit fda07180 by 陈斌

订单发票二期

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