Commit 42a0a81e by 陈斌

解决代码合并冲突

parents 27752ba3 5eef2c3d
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.QueryInvoiceByCodesResponse;
import cn.freemud.entities.dto.pay.InvoiceCreateRequest;
import cn.freemud.entities.dto.pay.InvoiceProductDetailRequest;
import cn.freemud.entities.dto.pay.OrderInvoiceRequest;
import cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest;
import cn.freemud.entities.vo.order.CreateOrderInvoiceRequest;
import cn.freemud.enums.InvoiceTypeCodeEnum;
import cn.freemud.enums.OrderStatus;
import cn.freemud.enums.ResponseResult;
import cn.freemud.service.thirdparty.OrderServiceClient;
import cn.freemud.utils.ResponseUtil;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Component
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 = "非码订单开票";
// 单张发票订单数量限制
public static final Integer ORDER_INVOICE_NUM_LIMIT = 30;
// 可开发票订单状态
public static final List<Integer> canOpenOrderInvoiceStatus = Arrays.asList(
OrderStatus.COMPLETE.getCode()
);
/**
* 校验订单数据
* @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
*/
public BaseResponse checkOrderOpenInvoiceData(List<OrderBeanV1> orders, CreateOrderInvoiceRequest request, AssortmentCustomerInfoVo userLoginInfoDto){
// 【1】 前端传的订单有误,部分订单查不到详情
if(CollectionUtils.isEmpty(orders) || orders.size() != request.getOrderCodes().size()){
return ResponseUtil.error(ResponseResult.ORDER_QUERY_ANY_ERR);
}
// 【2】 过滤订单状态&&实付金额是否符合开票原则
List<OrderBeanV1> orderBeanV1List = orders.stream()
.filter(x -> canOpenOrderInvoiceStatus.contains(x.getStatus()))
.filter(x -> x.getActualPayAmount() != null).collect(Collectors.toList());
if(CollectionUtils.isEmpty(orderBeanV1List)){
return ResponseUtil.error(ResponseResult.ORDER_INVOICE_OPEN_ERR);
}
Long totalActualPayAmount = orderBeanV1List.stream().map(e -> e.getActualPayAmount()).reduce(Long::sum).get();
// 【3】 实际支付金额为0,不能开票
if(null == totalActualPayAmount || totalActualPayAmount == 0 ){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ZERO);
}
// 【4】 将前端传的实际支付金额和服务端查出订单【可开票状态】实际支付金额对比,如果不相等,不予开票
if(totalActualPayAmount != request.getTotalActualPayAmount()){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_IS_ERROR);
}
// 【5】 单张发票最大限制1000元,超过最大限额不能开票
double actualPayAmount2yuan = new BigDecimal(totalActualPayAmount)
.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
if(actualPayAmount2yuan > CommonsConstant.CONSTANTS_ONE_THOUSAND){
return ResponseUtil.error(ResponseResult.ACTUALPAYAMOUNT_OUT_OF_ONE_THOUSAND);
}
// 【6】 查询请求订单号是否开过发票,如果存在订单已开过发票,不予处理
QueryInvoiceByCodesRequest queryInvoiceByCodesRequest = new QueryInvoiceByCodesRequest();
queryInvoiceByCodesRequest.setPartnerId(request.getPartnerId());
queryInvoiceByCodesRequest.setOrderCodes(request.getOrderCodes());
queryInvoiceByCodesRequest.setUserId(userLoginInfoDto.getMemberId());
BaseResponse<QueryInvoiceByCodesResponse> queryInvoiceResponse = orderServiceClient.queryInvoiceByCodes(queryInvoiceByCodesRequest);
if(!ResponseResult.SUCCESS.getCode().equals(queryInvoiceResponse.getCode())){
return ResponseUtil.error(queryInvoiceResponse.getCode(), queryInvoiceResponse.getMessage());
}
if(null == queryInvoiceResponse.getResult()){
return ResponseUtil.error(ResponseResult.ORDER_INVOICE_QUERY_ERROR);
}
QueryInvoiceByCodesResponse orderInvoice = queryInvoiceResponse.getResult();
if(!orderInvoice.getCheckPass() || CollectionUtils.isNotEmpty(orderInvoice.getInvoicedList())){
return ResponseUtil.error(ResponseResult.ORDER_INVOICE_IS_OPENED);
}
return ResponseUtil.success();
}
public InvoiceCreateRequest convert2InvoiceCreateRequest(List<OrderBeanV1> orders, CreateOrderInvoiceRequest createRequest){
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.setInvoiceNo(UUID.randomUUID().toString().replaceAll("-", ""));
request.setDrawer(createRequest.getDrawer());
// 订单商品明细
List<InvoiceProductDetailRequest> productDetailList = new ArrayList<>();
// 支付总金额
BigDecimal actualPayAmount = new BigDecimal(0);
for(OrderBeanV1 orderBean : orders){
actualPayAmount = new BigDecimal(orderBean.getActualPayAmount()).add(actualPayAmount);
}
// 分转元
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.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));
BigDecimal goodsTotalTax = invoiceDetailRequest.getGoodsTotalPrice()
.multiply(invoiceDetailRequest.getGoodsTaxRate()).setScale(2, BigDecimal.ROUND_HALF_UP);
invoiceDetailRequest.setGoodsTotalTax(goodsTotalTax);
productDetailList.add(invoiceDetailRequest);
request.setProductDetailList(productDetailList);
return request;
}
public OrderInvoiceRequest convert2OrderInvoiceRequest(InvoiceCreateRequest invoiceCreateRequest, InvoiceCreateResponse invoiceData
, List<String> orderCodes, String memberId ){
OrderInvoiceRequest request = new OrderInvoiceRequest();
request.setPartnerId(invoiceCreateRequest.getPartnerId());
request.setInvoiceType(InvoiceTypeCodeEnum.ELECTRONIC_INVOICE.getFmType());
request.setContent(INVOICE_CONTENT);
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.setPickUpNo(invoiceData.getCode());
request.setEndingDate(DateUtil.convert2String(invoiceData.getEndingDate(),DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
request.setOrderCodes(orderCodes);
return request;
}
/**
* 发票格式处理
* @param scanUrl
*/
public String handleInvoiceData(String scanUrl){
if(StringUtils.isEmpty(scanUrl)){
return null;
}
if(scanUrl.startsWith("<![CDATA[")){
scanUrl = scanUrl.substring(9,scanUrl.length());
}
if(scanUrl.endsWith("]]>")){
scanUrl = scanUrl.substring(0,scanUrl.length()-3);
}
return scanUrl;
}
}
......@@ -10,5 +10,17 @@ public class CommonsConstant {
public static final String ORDER_COMPLAIN_CLOSE = "close";
public static final String one_thousand = "close";
public static final int CONSTANTS_ONE_THOUSAND = 1000;
public static final Integer CONSTANTS_ZERO_INTEGER = 0;
public static final Integer CONSTANTS_ONE_INTEGER = 1;
public static final String CONSTANTS_TWO_STRING = "2";
public static final Integer CONSTANTS_TWO_INTEGER = 2;
}
\ No newline at end of file
......@@ -14,9 +14,11 @@ package cn.freemud.controller;
import cn.freemud.annotations.IsConvertEN;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.order.InvoiceCreateResponseVo;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
import cn.freemud.entities.vo.order.CreateOrderInvoiceRequest;
import cn.freemud.entities.vo.order.OrderAppealVo;
import cn.freemud.handler.OrderReportJobHandler;
import cn.freemud.monitorcenter.tools.HealthUtil;
......@@ -446,5 +448,16 @@ public class OrderController {
return ResponseUtil.success();
}
/**
* 开订单发票,对接百望
* @param
* @return
*/
@ApiAnnotation(logMessage = "createOrderInvoice")
@PostMapping("/createOrderInvoice")
public BaseResponse<InvoiceCreateResponseVo> createOrderInvoice(@Validated @LogParams @RequestBody CreateOrderInvoiceRequest request) {
return orderservice.createAndGetOrderInvoice(request);
}
}
package cn.freemud.entities.dto.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class InvoiceCreateResponse {
@ApiModelProperty(value = "扫码开票url地址")
private String scanUrl;
@ApiModelProperty(value = "发票id")
private String invoiceId;
@ApiModelProperty(value = "提取码")
private String code;
@ApiModelProperty(value = "扫码开票截至时间")
private Date endingDate;
}
package cn.freemud.entities.dto.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class InvoiceCreateResponseVo {
@ApiModelProperty(value = "扫码开票url地址")
private String scanUrl;
}
package cn.freemud.entities.dto.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class QueryInvoiceByCodesResponse {
@ApiModelProperty("true全都未开票,false有开票订单号,默认值false")
private Boolean checkPass = false;
@ApiModelProperty("未开票订单号")
private List<String> unInvoicedList;
@ApiModelProperty("开过票订单号")
private List<String> invoicedList;
}
package cn.freemud.entities.dto.pay;
import cn.freemud.enums.InvoiceTypeCodeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class InvoiceCreateRequest {
@ApiModelProperty(value = "商户编号")
private String partnerId;
@ApiModelProperty(value = "开票终端代码,1纸票,2电票")
private String invoiceTerminalCode;
@ApiModelProperty(value = "机构代码,如果为空则上传至税号对应的机构下,如果维护了机构则按照机构归属待开信息")
private String orgCode;
@ApiModelProperty(value = "推送渠道标识,0为微信扫码url,默认为null")
private Integer pushChannelType;
/**
* @see InvoiceTypeCodeEnum
*/
@ApiModelProperty(value = "发票类型,1:增值税专用发票;2:增值税普通发票;3:增值税电子发票;4:增值税卷式发票;5:增值税专用电子发票")
@NotEmpty(message = "发票类型不能为空")
private String invoiceTypeCode;
@ApiModelProperty(value = "开票流水号")
@NotEmpty(message = "开票流水号不能为空")
private String invoiceNo;
@ApiModelProperty(value = "开票人")
@NotEmpty(message = "开票人不能为空")
private String drawer;
@ApiModelProperty(value = "发票明细")
private List<InvoiceProductDetailRequest> productDetailList;
}
package cn.freemud.entities.dto.pay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
@Data
public class InvoiceProductDetailRequest {
@ApiModelProperty(value = "税收分类编码")
@NotEmpty(message = "税收分类编码不能为空")
private String productCode;
@ApiModelProperty(value = "商品名称")
@NotEmpty(message = "商品名称不能为空")
private String productName;
@ApiModelProperty(value = "规格型号")
private String productSpecification;
@ApiModelProperty(value = "计量单位")
private String goodsUnit;
@ApiModelProperty(value = "商品数量")
private Integer goodsQuantity;
@ApiModelProperty(value = "商品单价")
private BigDecimal goodsPrice;
@ApiModelProperty(value = "商品总价,保留两位小数")
@NotEmpty(message = "商品总价不能为空")
private BigDecimal goodsTotalPrice;
@ApiModelProperty(value = "税额,保留两位小数")
private BigDecimal goodsTotalTax;
@ApiModelProperty(value = "税率")
@NotEmpty(message = "税率不能为空")
private BigDecimal goodsTaxRate;
}
package cn.freemud.entities.dto.pay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class OrderInvoiceRequest {
@ApiModelProperty("商户号")
@NotEmpty(message = "商户号不能为空")
private String partnerId;
@ApiModelProperty("发票类型")
@NotNull(message = "发票类型不能为空")
private Integer invoiceType;
@ApiModelProperty("发票抬头")
private String title;
@ApiModelProperty("发票内容")
@NotBlank(message = "发票内容不能为空")
private String content;
@ApiModelProperty("税号")
private String taxNo;
@ApiModelProperty("发票金额 单位分")
@NotNull(message = "发票金额不能为空")
private Integer amount;
@ApiModelProperty("发票地址")
private String address;
@ApiModelProperty("电话号码")
private String phoneNo;
@ApiModelProperty("银行账号")
private String bankCardNo;
@ApiModelProperty("开户行")
private String invoiceBank;
@ApiModelProperty("发票URL地址")
@NotBlank(message = "发票URL地址不能为空")
private String invoiceUrl;
@ApiModelProperty("用户Id")
@NotBlank(message = "用户Id不能为空")
private String userId;
@ApiModelProperty("开票流水号")
@NotBlank(message = "开票流水号不能为空")
private String invoiceNo;
@ApiModelProperty("税率")
@NotBlank(message = "税率不能为空")
private String taxRate;
@ApiModelProperty("提取号")
@NotBlank(message = "提取号不能为空")
private String pickUpNo;
@ApiModelProperty("扫码开票截至时间")
@NotBlank(message = "扫码开票截至时间不能为空")
private String endingDate;
@ApiModelProperty("关联订单号")
@NotNull(message = "关联订单号不能为空")
private List<String> orderCodes;
}
package cn.freemud.entities.dto.pay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class QueryInvoiceByCodesRequest {
@ApiModelProperty("用户Id")
@NotBlank(message = "用户Id不能为空")
private String userId;
@ApiModelProperty("商户号")
@NotBlank(message = "商户号不能为空")
private String partnerId;
@ApiModelProperty("订单号集合")
@NotNull(message = "订单号集合不能为空")
private List<String> orderCodes;
}
package cn.freemud.entities.vo.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
public class CreateOrderInvoiceRequest {
@ApiModelProperty("会话Id")
@NotEmpty(message = "会话Id不能为空")
private String sessionId;
@ApiModelProperty("商户号")
@NotEmpty(message = "商户号不能为空")
private String partnerId;
@ApiModelProperty("订单编号")
@NotNull(message = "订单编号不能为空")
@Size(max = 30,message = "单张发票限制30个订单,超过限额不能开票")
private List<String> orderCodes;
@ApiModelProperty(value = "开票人")
@NotEmpty(message = "开票人不能为空")
private String drawer;
@ApiModelProperty(value = "开票金额,单位:分")
@NotNull(message = "开票金额不能为空")
private Long totalActualPayAmount;
}
package cn.freemud.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum InvoiceTypeCodeEnum {
SPECIAL_INVOICE(4, "004", "增值税专用发票"),
COMMON_INVOICE(7, "007", "增值税普通发票"),
ELECTRONIC_INVOICE(26, "026", "增值税电子发票"),
ROLL_INVOICE(25, "025", "增值税卷式发票"),
SPECIAL_ELECTRONIC_INVOICE(28, "028", "增值税专用电子发票"),
;
/**
* 非码类型
*/
private Integer fmType;
/**
* 百望类型
*/
private String bwType;
private String desc;
}
......@@ -179,6 +179,16 @@ public enum ResponseResult {
STORE_NO_OPEN("45072", "选择时间不在门店营业时间范围内",""),
STORE_SELF_ERROR_10("45073", "请在营业结束时间前10分钟下单",""),
ORDER_APPEAL_ERR("45074", "申诉失败",""),
ORDER_QUERY_ERR("45075", "订单查询失败",""),
ACTUALPAYAMOUNT_IS_ZERO("45076", "实际支付金额为0,不能开票",""),
ACTUALPAYAMOUNT_OUT_OF_ONE_THOUSAND("45077", "单张发票最大限制1000元,超过最大限额不能开票",""),
ORDER_INVOINVE_LIMIT_30("45078", "单张发票限制30个订单,超过限额不能开票",""),
ACTUALPAYAMOUNT_IS_ERROR("45079", "实际支付金额有误,不予开票",""),
ORDER_QUERY_ANY_ERR("45080", "部分订单查询失败",""),
ORDER_INVOICE_OPEN_ERR("45081", "订单状态不符合开票原则",""),
ORDER_INVOICE_QUERY_ERROR("45082", "订单发票查询失败",""),
ORDER_INVOICE_IS_OPENED("45083", "存在选中的订单已开过发票,请重新选择订单",""),
ORDER_CODES_REPEAT("45084", "同一次开票,选中的订单不能重复,请重新选择订单",""),
/**
* 售后单
......
......@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.CreateOrderInvoiceRequest;
import cn.freemud.entities.vo.order.OrderAppealVo;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
......@@ -187,4 +188,6 @@ public interface Orderservice {
BaseResponse queryOrderAppeal(OrderAppealVo orderAppealVo);
BaseResponse createAndGetOrderInvoice(CreateOrderInvoiceRequest request);
}
......@@ -30,10 +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.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.order.FacePayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.pay.svc.SVCCardAmountRequestDto;
import cn.freemud.entities.dto.pay.svc.SVCCardAmountResponseDto;
......@@ -46,6 +43,7 @@ import cn.freemud.entities.dto.shoppingCart.CollageOrderDto;
import cn.freemud.entities.dto.shoppingCart.NewShoppingCartClearDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.CreateOrderInvoiceRequest;
import cn.freemud.entities.vo.order.OrderAppealVo;
import cn.freemud.entities.vo.order.QueryOrderAppealResponseVo;
import cn.freemud.enums.OrderType;
......@@ -330,6 +328,12 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private OrderManager orderManager;
@Autowired
private OrderServiceClient orderServiceClient;
@Autowired
OrderInvoiceAdapter orderInvoiceAdapter;
@Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
......@@ -4371,5 +4375,55 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseVo);
}
@Override
public BaseResponse<InvoiceCreateResponseVo> createAndGetOrderInvoice(CreateOrderInvoiceRequest request){
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(request.getSessionId());
if (userLoginInfoDto == null || StringUtils.isEmpty(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
// 【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());
if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, orderResponse.getErrcode())){
return ResponseUtil.error(orderResponse.getErrcode()+"", orderResponse.getErrmsg());
}
QueryOrdersResponse.DataBean dataBean = orderResponse.getData();
if(null == dataBean || CollectionUtils.isEmpty(dataBean.getOrders())){
return ResponseUtil.error(ResponseResult.ORDER_QUERY_ERR);
}
// 【2】. 校验订单开票数据
BaseResponse checkResponse = orderInvoiceAdapter.checkOrderOpenInvoiceData(dataBean.getOrders(), request, userLoginInfoDto);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, checkResponse.getCode())) {
return checkResponse;
}
// 【3】. 调用支付接口开订单发票,非码支付系统内部再调用三方-百望系统开票
InvoiceCreateRequest invoiceCreateRequest = orderInvoiceAdapter.convert2InvoiceCreateRequest(dataBean.getOrders(), request);
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());
}
InvoiceCreateResponse invoiceData = invoiceResponse.getData();
// 【3.1】.发票格式处理
invoiceData.setScanUrl(orderInvoiceAdapter.handleInvoiceData(invoiceData.getScanUrl()));
// 【4】. 录入发票记录,修改订单发票状态
OrderInvoiceRequest orderInvoiceRequest = orderInvoiceAdapter.convert2OrderInvoiceRequest(invoiceCreateRequest, invoiceData,
request.getOrderCodes(), userLoginInfoDto.getMemberId());
BaseResponse orderInvoiceResponse = orderServiceClient.createInvoice(orderInvoiceRequest);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, orderInvoiceResponse.getCode())) {
return orderInvoiceResponse;
}
InvoiceCreateResponseVo responseVo = new InvoiceCreateResponseVo();
responseVo.setScanUrl(invoiceData.getScanUrl());
return ResponseUtil.success(responseVo);
}
}
package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse;
import cn.freemud.entities.dto.pay.OrderInvoiceRequest;
import cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "order-service",url = "${order.service.url:}")
@RequestMapping(consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public interface OrderServiceClient {
/**
* 创建订单开票记录
*/
@LogIgnoreFeign(logMessage="createInvoice")
@PostMapping("/order/v2/invoice/create")
BaseResponse createInvoice(@RequestBody OrderInvoiceRequest orderCounts);
/**
* 查询用户订单号是否已开票
*/
@LogIgnoreFeign(logMessage="queryByCodes")
@PostMapping("/order/v2/invoice/queryByCodes")
BaseResponse<QueryInvoiceByCodesResponse> queryInvoiceByCodes(@RequestBody QueryInvoiceByCodesRequest request);
}
......@@ -4,6 +4,8 @@ import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.constant.ResponseCodeKeyConstant;
import cn.freemud.entities.dto.order.FacePayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.order.InvoiceCreateResponse;
import cn.freemud.entities.dto.pay.InvoiceCreateRequest;
import cn.freemud.entities.dto.pay.UnifiedOrderRequestDto;
import cn.freemud.entities.dto.order.RefundQueryResponseDto;
import org.springframework.cloud.openfeign.FeignClient;
......@@ -48,4 +50,12 @@ public interface PaymentNewClient {
@PostMapping("paymentcenter/refundQuery")
com.freemud.application.sdk.api.base.BaseResponse<RefundQueryResponseDto> refundQuery(@RequestBody FacePayRequestDto orderPayDto);
/**
* 开订单发票
*/
@LogIgnoreFeign(logMessage="paymentcenter/invoice/create",statusCodeFieldName= ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping("paymentcenter/invoice/create")
com.freemud.application.sdk.api.base.BaseResponse<InvoiceCreateResponse> createInvoice(@RequestBody InvoiceCreateRequest request);
}
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