Commit 3b4ec738 by xiaoer.li@freemud.com

Merge remote-tracking branch 'remotes/origin/feature/1.9.20_发票上报'

parents 89cdac29 a841bc91
......@@ -33,6 +33,8 @@ public class OrderCallBackConfig {
public static final String WECHAT_ORDER_REPORT_QUEUE_ROUTING_KEY="wechat-order-report-queue-routing-key";
public static final String WECHAT_ORDER_REPORT_QUEUE="wechat-order-report-queue";
public static final String INVOICE_QUEUE = "invoice-report-queue";
public static final String INVOICE_ROUTE_KEY = "invoice-report-queue-routing-key";
/**
* 定义基于Fanout 的Exchange。
* 基于这个代码,也可以非常方便的定义其他的Exchange类型。
......@@ -96,4 +98,20 @@ public class OrderCallBackConfig {
return new OrderCallBackMQService();
}
/**
* 发票queue绑定设置
* @return
*/
@Bean(name = "invoiceExchange")
public Exchange invoiceExchange() {
return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE_NAME).durable(true).build();
}
@Bean(name="invoiceQueue")
public Queue invoiceQueue() {
return QueueBuilder.durable(INVOICE_QUEUE).build();
}
@Bean
Binding bindingInvoiceQueue(@Qualifier("invoiceQueue") Queue invoiceQueue,@Qualifier("invoiceExchange") Exchange invoiceExchange) {
return BindingBuilder.bind(invoiceQueue).to(invoiceExchange).with(INVOICE_ROUTE_KEY).noargs();
}
}
......@@ -23,6 +23,7 @@ import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.WechatReportOrderDto;
import cn.freemud.entities.vo.OrderCallBackRequestVo;
import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformWxapp;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformWxappManager;
......@@ -36,20 +37,24 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderItemR
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.sdk.api.assortment.orderdistributor.request.DisRequest;
import com.freemud.sdk.api.assortment.orderdistributor.service.OrderDistributionService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
public class OrderCallBackMQService {
private static ApplicationContext context;
private static Logger logger = LoggerFactory.getLogger(OrderCallBackMQService.class);
......@@ -63,6 +68,8 @@ public class OrderCallBackMQService {
private RedisCache redisCache;
@Autowired
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Value("${saas.order.invoice.report.partnerIds}")
private String invoicePartnerIds;
public void sendOrderMQ(OrderCallBackRequestVo body) {
//发送订单回调
......@@ -77,6 +84,8 @@ public class OrderCallBackMQService {
}
//微信数据上传(创建新订单&支付成功时上传)
sendWechatReportMQ(body);
//上报发票信息
sendInvoiceReportMQ(body);
}
private void sendWechatReportMQ(OrderCallBackRequestVo body) {
try {
......@@ -214,4 +223,34 @@ public class OrderCallBackMQService {
wechatReportOrderDto.setDishList(dishList);
return wechatReportOrderDto;
}
/**
* 上报指定商户已支付的订单到MQ
* 只上报普通订单
* @param body
*/
private void sendInvoiceReportMQ(OrderCallBackRequestVo body) {
log.info("callback send invoice report MQ:{},{}",body.getOrderCode(), JSON.toJSONString(body));
if (!ObjectUtils.equals("1", body.getMsgType()) || body.getOperateType() == null || body.getOperateType() == 2) {
return ;
}
OrderInfoReqs orderInfoReqs = JSONObject.parseObject(body.getContent(), OrderInfoReqs.class);
if (orderInfoReqs==null
|| !Arrays.asList(invoicePartnerIds.split(",")).contains(orderInfoReqs.getPartnerId())
|| !NewOrderStatus.PLACE_AN_ORDER.getIndex().equals(orderInfoReqs.getOrderState())
|| orderInfoReqs.getBizType()!=1) {
return;
}
try {
Header header = new Header("report", "call-back-service-api",
OrderCallBackConfig.INVOICE_ROUTE_KEY, OrderCallBackConfig.INVOICE_QUEUE);
MQMessage<OrderInfoReqs> message = new MQMessage<>(header, orderInfoReqs);
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.INVOICE_ROUTE_KEY, message);
log.info("callback send invoice mq orderCode={},mqRequest={}",body.getOrderCode(), JSON.toJSONString(orderInfoReqs));
} catch (Exception e) {
log.error("callback set invoice mq orderCode={},exception={}",orderInfoReqs.getOrderCode(),e.toString());
}
}
}
package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.PushInvoiceRequestVo;
import cn.freemud.service.ToolsService;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import org.springframework.beans.factory.annotation.Autowired;
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;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.controller ToolController
* @Description: TDO 描述....
* @author: family
* @date: 2020/4/22
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RestController
@RequestMapping(value = "/tools", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class ToolsController {
@Autowired
private ToolsService toolsService;
@PostMapping("/push")
@ApiAnnotation(logMessage = "/push")
public BaseResponse push(@Valid @RequestBody @LogParams PushInvoiceRequestVo requestVo) {
return toolsService.push(requestVo);
}
}
package cn.freemud.entities.vo;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.entities PushInvoiceRequestVo
* @Description: TDO 描述....
* @author: family
* @date: 2020/4/22
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class PushInvoiceRequestVo {
private String partnerId;
private String startTime;
private String endTime;
private String send;
private List<String> orderCodes;
}
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.PushInvoiceRequestVo;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderCallBackService
* @Package cn.freemud.service
* @Description:
* @author: ping.wu
* @date: 2019/4/16 10:16
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public interface ToolsService {
BaseResponse push(PushInvoiceRequestVo requestVo);
}
package cn.freemud.service.impl;
import cn.freemud.amp.config.OrderCallBackConfig;
import cn.freemud.amqp.Header;
import cn.freemud.amqp.MQMessage;
import cn.freemud.amqp.MQService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.vo.PushInvoiceRequestVo;
import cn.freemud.service.ToolsService;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.impl ToolsServiceImpl
* @Description: TDO 描述....
* @author: family
* @date: 2020/4/22
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class ToolsServiceImpl implements ToolsService {
@Autowired
private OrderDownLoadSdkService orderDownLoadSdkService;
@Autowired
private MQService mqService;
@Override
public BaseResponse push(PushInvoiceRequestVo requestVo) {
long start = DateUtil.getTimestamp(requestVo.getStartTime(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
long end = DateUtil.getTimestamp(requestVo.getEndTime(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
OrderConditionsReq req = new OrderConditionsReq();
req.setPartnerId(requestVo.getPartnerId());
req.setStartTimestamp(start/1000);
req.setEndTimestamp(end/1000);
req.setPayStatuses(Arrays.asList(2));
req.setBizType(1);
req.setPageSize(1);
req.setPageNum(1);
if (requestVo.getOrderCodes()!=null) {
req.setOrderCodes(requestVo.getOrderCodes());
}
BaseDownLoadResponse<List<OrderInfoReqs>> response = orderDownLoadSdkService.queryOrderByConditions(req, LogThreadLocal.getTrackingNo());
if (!"100".equals(response.getCode()) || response.getResult()==null) {
return new BaseResponse("1","1","查询Es数据失败");
}
if (response.getTotalNum()==0) {
return new BaseResponse("1","100","在ES没查询到数据.");
}
//订单总数
Integer orderTotal = response.getTotalNum();
if (!"1".equals(requestVo.getSend())) {
return new BaseResponse("1","100","符合条件的订单数据:"+orderTotal+"条");
}
int pageSize = 500;
int pageTotal = (int) Math.ceil((double) orderTotal / (double) pageSize);
for (int i=0;i<pageTotal;i++) {
req.setPageSize(pageSize);
req.setPageNum(i+1);
response = orderDownLoadSdkService.queryOrderByConditions(req, LogTreadLocal.getTrackingNo());
for (OrderInfoReqs reqs : response.getResult()) {
Header header = new Header("report", "call-back-service-api",
OrderCallBackConfig.INVOICE_ROUTE_KEY, OrderCallBackConfig.INVOICE_QUEUE);
MQMessage<String> message = new MQMessage<>(header, JSON.toJSONString(reqs));
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.INVOICE_ROUTE_KEY, message);
}
}
return new BaseResponse("1","100","写入MQ:"+orderTotal);
}
}
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