Commit 0969b437 by xiaoer.li@freemud.com

指定订单数据写入mq及补推订单数据工具

parent 3f671fe9
......@@ -33,6 +33,9 @@ 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_EXCHANGE = "invoice-report-topic-exchange";
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 +99,20 @@ public class OrderCallBackConfig {
return new OrderCallBackMQService();
}
/**
* 发票queue绑定设置
* @return
*/
@Bean(name = "invoiceExchange")
public Exchange invoiceExchange() {
return ExchangeBuilder.topicExchange(INVOICE_EXCHANGE).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();
}
}
......@@ -36,11 +36,13 @@ 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;
......@@ -50,6 +52,7 @@ 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 +66,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 +82,8 @@ public class OrderCallBackMQService {
}
//微信数据上传(创建新订单&支付成功时上传)
sendWechatReportMQ(body);
//上报发票信息
sendnvoiceReportMQ(body);
}
private void sendWechatReportMQ(OrderCallBackRequestVo body) {
try {
......@@ -214,4 +221,37 @@ public class OrderCallBackMQService {
wechatReportOrderDto.setDishList(dishList);
return wechatReportOrderDto;
}
/**
* 上报指定商户已支付的订单到MQ
* 只上报普通订单
* @param body
*/
private void sendnvoiceReportMQ(OrderCallBackRequestVo 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
|| !NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderInfoReqs.getOrderState())
|| orderInfoReqs.getBizType()!=1
)
&& !InvoicePartnerIds.contains(orderInfoReqs.getPartnerId())
) {
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.INVOICE_EXCHANGE, OrderCallBackConfig.INVOICE_ROUTE_KEY, message);
} catch (Exception e) {
log.error("setInvoice,orderCode={}",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.INVOICE_EXCHANGE, 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