|
|
|
@@ -1,183 +1,183 @@ |
|
|
|
package com.iformall.service.msg.impl; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.iformall.common.ErrorCode; |
|
|
|
import com.iformall.domain.po.*; |
|
|
|
import com.iformall.domain.po.msg.BaseMsg; |
|
|
|
import com.iformall.domain.po.msg.FmInsideOrderPushMsg; |
|
|
|
import com.iformall.enums.*; |
|
|
|
import com.iformall.exception.MallinkException; |
|
|
|
import com.iformall.mapper.TtCUserMapper; |
|
|
|
import com.iformall.mapper.TtOrderPushErrorMapper; |
|
|
|
import com.iformall.mapper.WxPayOrderMapper; |
|
|
|
import com.iformall.service.*; |
|
|
|
import com.iformall.service.msg.MsgSendService; |
|
|
|
import com.iformall.service.pay.PayServiceFactory; |
|
|
|
import com.iformall.service.pay.service.pay.entity.PayAdapterResult; |
|
|
|
import com.iformall.utils.DateUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
|
* @author Stormeye Wu |
|
|
|
* @date 2019/5/10 |
|
|
|
*/ |
|
|
|
@Service |
|
|
|
public class FmInsideOrderPushMsgServiceImpl implements MsgSendService { |
|
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass()); |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private WxOrderService orderService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxAppinfoService wxAppinfoService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
PayServiceFactory payServiceFactory; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxPayOrderService wxPayOrderService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
TtCUserMapper ttCUserMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxPayOrderMapper wxPayOrderMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
TtOrderPushErrorMapper ttOrderPushErrorMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private String fmExceptionEmails; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private MailService mailService; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public void send(BaseMsg baseMsg) throws Exception{ |
|
|
|
FmInsideOrderPushMsg msg = (FmInsideOrderPushMsg)baseMsg; |
|
|
|
|
|
|
|
try{ |
|
|
|
Thread.currentThread().sleep(1000);//延时秒 |
|
|
|
}catch(Exception e){} |
|
|
|
|
|
|
|
WxBatchOrder border = new WxBatchOrder(); |
|
|
|
border.setTenantId(msg.getTenantId()); |
|
|
|
border.setParentTenantId(msg.getParentTenantId()); |
|
|
|
border.setId(msg.getBatchOrderId()); |
|
|
|
WxBatchOrder batchOrder = orderService.batchOrderDetail(border); |
|
|
|
if(batchOrder == null){ |
|
|
|
logger.error("主订单未找到: " + msg.getBatchOrderId()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "主订单未找到" + msg.getBatchOrderId()); |
|
|
|
} |
|
|
|
|
|
|
|
if(EnumPayWay.PAY_WAY_TT.getCode().equals(batchOrder.getPayVendor()) |
|
|
|
&& EnumComposeOrder.SINGLE.getCode().equals(batchOrder.getOrderType()) |
|
|
|
&& batchOrder.getOrders().size() == 1){ |
|
|
|
WxAppinfo appinfo = wxAppinfoService.getCAppInfo(batchOrder,EnumPayWay.PAY_WAY_TT.getPlat()); |
|
|
|
try{ |
|
|
|
payOrderPush(appinfo,batchOrder); |
|
|
|
}catch(Exception e){ |
|
|
|
logger.error("订单同步异常batchOrderId"+batchOrder.getId()+"{}"+e.getMessage()); |
|
|
|
// String[] receivers = fmExceptionEmails.split(","); |
|
|
|
// StringBuilder sb = new StringBuilder(); |
|
|
|
// sb.append(DateUtils.date2String(new Date())); |
|
|
|
// sb.append("\n"); |
|
|
|
// sb.append("tenantId="+batchOrder.getTenantId()); |
|
|
|
// sb.append("\n"); |
|
|
|
// sb.append(e.getMessage()); |
|
|
|
// sb.append("\n"); |
|
|
|
// sb.append("batchOrderId="+batchOrder.getId()); |
|
|
|
// //发送邮件 |
|
|
|
// mailService.sendSimpleMail(receivers, batchOrder.getTenantId()+"订单同步异常", sb.toString()); |
|
|
|
|
|
|
|
TtOrderPushError pushError = new TtOrderPushError(); |
|
|
|
pushError.setId(batchOrder.getId()); |
|
|
|
pushError.updateTenantInfo(batchOrder); |
|
|
|
pushError.setErrMsg(e.getMessage()); |
|
|
|
saveOrUpdate(pushError); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// WxOrderCouponVo wxOrderCouponVo = batchOrder.getOrders().get(0); |
|
|
|
// if(EnumPayType.PAY_PAYMENT.getCode().equals(wxOrderCouponVo.getPaymentType())){ |
|
|
|
//package com.iformall.service.msg.impl; |
|
|
|
// |
|
|
|
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
//import com.iformall.common.ErrorCode; |
|
|
|
//import com.iformall.domain.po.*; |
|
|
|
//import com.iformall.domain.po.msg.BaseMsg; |
|
|
|
//import com.iformall.domain.po.msg.FmInsideOrderPushMsg; |
|
|
|
//import com.iformall.enums.*; |
|
|
|
//import com.iformall.exception.MallinkException; |
|
|
|
//import com.iformall.mapper.TtCUserMapper; |
|
|
|
//import com.iformall.mapper.TtOrderPushErrorMapper; |
|
|
|
//import com.iformall.mapper.WxPayOrderMapper; |
|
|
|
//import com.iformall.service.*; |
|
|
|
//import com.iformall.service.msg.MsgSendService; |
|
|
|
//import com.iformall.service.pay.PayServiceFactory; |
|
|
|
//import com.iformall.service.pay.service.pay.entity.PayAdapterResult; |
|
|
|
//import com.iformall.utils.DateUtils; |
|
|
|
//import org.apache.commons.lang3.StringUtils; |
|
|
|
//import org.slf4j.Logger; |
|
|
|
//import org.slf4j.LoggerFactory; |
|
|
|
//import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
//import org.springframework.stereotype.Service; |
|
|
|
// |
|
|
|
//import java.util.Date; |
|
|
|
//import java.util.List; |
|
|
|
// |
|
|
|
///** |
|
|
|
// * |
|
|
|
// * @author Stormeye Wu |
|
|
|
// * @date 2019/5/10 |
|
|
|
// */ |
|
|
|
//@Service |
|
|
|
//public class FmInsideOrderPushMsgServiceImpl implements MsgSendService { |
|
|
|
// private final Logger logger = LoggerFactory.getLogger(this.getClass()); |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// private WxOrderService orderService; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// WxAppinfoService wxAppinfoService; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// PayServiceFactory payServiceFactory; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// WxPayOrderService wxPayOrderService; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// TtCUserMapper ttCUserMapper; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// WxPayOrderMapper wxPayOrderMapper; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// TtOrderPushErrorMapper ttOrderPushErrorMapper; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// private String fmExceptionEmails; |
|
|
|
// |
|
|
|
// @Autowired |
|
|
|
// private MailService mailService; |
|
|
|
// |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public void send(BaseMsg baseMsg) throws Exception{ |
|
|
|
// FmInsideOrderPushMsg msg = (FmInsideOrderPushMsg)baseMsg; |
|
|
|
// |
|
|
|
// try{ |
|
|
|
// Thread.currentThread().sleep(1000);//延时秒 |
|
|
|
// }catch(Exception e){} |
|
|
|
// |
|
|
|
// WxBatchOrder border = new WxBatchOrder(); |
|
|
|
// border.setTenantId(msg.getTenantId()); |
|
|
|
// border.setParentTenantId(msg.getParentTenantId()); |
|
|
|
// border.setId(msg.getBatchOrderId()); |
|
|
|
// WxBatchOrder batchOrder = orderService.batchOrderDetail(border); |
|
|
|
// if(batchOrder == null){ |
|
|
|
// logger.error("主订单未找到: " + msg.getBatchOrderId()); |
|
|
|
// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "主订单未找到" + msg.getBatchOrderId()); |
|
|
|
// } |
|
|
|
// |
|
|
|
// if(EnumPayWay.PAY_WAY_TT.getCode().equals(batchOrder.getPayVendor()) |
|
|
|
// && EnumComposeOrder.SINGLE.getCode().equals(batchOrder.getOrderType()) |
|
|
|
// && batchOrder.getOrders().size() == 1){ |
|
|
|
// WxAppinfo appinfo = wxAppinfoService.getCAppInfo(batchOrder,EnumPayWay.PAY_WAY_TT.getPlat()); |
|
|
|
// try{ |
|
|
|
// payOrderPush(appinfo,batchOrder); |
|
|
|
// }else{ |
|
|
|
// //退款 |
|
|
|
// //通过退款订单找支付订单 |
|
|
|
// WxOrder ref_order = orderService.getById(wxOrderCouponVo.getOrderNumber(), wxOrderCouponVo.getTenantId()); |
|
|
|
// WxBatchOrder ref_border = new WxBatchOrder(); |
|
|
|
// ref_border.setTenantId(ref_order.getTenantId()); |
|
|
|
// ref_border.setParentTenantId(ref_order.getParentTenantId()); |
|
|
|
// ref_border.setId(ref_order.getComposeOrderId()); |
|
|
|
// WxBatchOrder ref_batchOrder = orderService.batchOrderDetail(ref_border); |
|
|
|
// if(ref_batchOrder == null){ |
|
|
|
// logger.error("退款 主订单未找到: " + ref_order.getComposeOrderId()); |
|
|
|
// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "退款 主订单未找到" + ref_order.getComposeOrderId()); |
|
|
|
// } |
|
|
|
// if(EnumPayWay.PAY_WAY_TT.getCode().equals(ref_batchOrder.getPayVendor()) |
|
|
|
// && EnumComposeOrder.SINGLE.getCode().equals(ref_batchOrder.getOrderType()) |
|
|
|
// && ref_batchOrder.getOrders().size() == 1){ |
|
|
|
// for (WxOrderCouponVo ref_vo:ref_batchOrder.getOrders()) { |
|
|
|
// ref_vo.setOrderStatus(wxOrderCouponVo.getOrderStatus()); |
|
|
|
// } |
|
|
|
// payOrderPush(appinfo,ref_batchOrder); |
|
|
|
// } |
|
|
|
// }catch(Exception e){ |
|
|
|
// logger.error("订单同步异常batchOrderId"+batchOrder.getId()+"{}"+e.getMessage()); |
|
|
|
//// String[] receivers = fmExceptionEmails.split(","); |
|
|
|
//// StringBuilder sb = new StringBuilder(); |
|
|
|
//// sb.append(DateUtils.date2String(new Date())); |
|
|
|
//// sb.append("\n"); |
|
|
|
//// sb.append("tenantId="+batchOrder.getTenantId()); |
|
|
|
//// sb.append("\n"); |
|
|
|
//// sb.append(e.getMessage()); |
|
|
|
//// sb.append("\n"); |
|
|
|
//// sb.append("batchOrderId="+batchOrder.getId()); |
|
|
|
//// //发送邮件 |
|
|
|
//// mailService.sendSimpleMail(receivers, batchOrder.getTenantId()+"订单同步异常", sb.toString()); |
|
|
|
// |
|
|
|
// TtOrderPushError pushError = new TtOrderPushError(); |
|
|
|
// pushError.setId(batchOrder.getId()); |
|
|
|
// pushError.updateTenantInfo(batchOrder); |
|
|
|
// pushError.setErrMsg(e.getMessage()); |
|
|
|
// saveOrUpdate(pushError); |
|
|
|
// |
|
|
|
// } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void saveOrUpdate(TtOrderPushError pushError){ |
|
|
|
Date now = new Date(); |
|
|
|
TtOrderPushError pushError1 = ttOrderPushErrorMapper.selectById(pushError.getId()); |
|
|
|
if(pushError1 != null){ |
|
|
|
pushError1.setErrMsg(pushError.getErrMsg()); |
|
|
|
pushError1.setUpdateDate(now); |
|
|
|
ttOrderPushErrorMapper.updateById(pushError1); |
|
|
|
}else{ |
|
|
|
pushError.setCreateDate(now); |
|
|
|
pushError.setUpdateDate(now); |
|
|
|
ttOrderPushErrorMapper.insert(pushError); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void payOrderPush(WxAppinfo appinfo, WxBatchOrder batchOrder) throws Exception{ |
|
|
|
WxPayOrder orderq = new WxPayOrder(); |
|
|
|
orderq.setOrderId(batchOrder.getId()); |
|
|
|
orderq.updateTenantInfo(batchOrder); |
|
|
|
WxPayOrder payOrder = wxPayOrderService.getByObj(orderq); |
|
|
|
if(payOrder == null){ |
|
|
|
logger.error("支付订单未找到: " + batchOrder.getId()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "支付订单未找到" + batchOrder.getId()); |
|
|
|
} |
|
|
|
if(StringUtils.isBlank(payOrder.getTransactionId())){ |
|
|
|
logger.error("担保支付订单未找到: " + batchOrder.getId()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "担保支付订单未找到" + batchOrder.getId()); |
|
|
|
} |
|
|
|
List<String> openIds = ttCUserMapper.findOpenIdList(batchOrder.getCUserId(),batchOrder.getTenantId()); |
|
|
|
if(openIds == null || openIds.size() > 1){ |
|
|
|
logger.error("支付订单找到多个用户 同步失败: " + batchOrder.getId()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "支付订单找到多个用户" + batchOrder.getId()); |
|
|
|
} |
|
|
|
|
|
|
|
PayAdapterResult payAdapterResult = payServiceFactory.getPayAdapterService(EnumPayWay.PAY_WAY_TT.getCode()) |
|
|
|
.payOrderPush(openIds.get(0), appinfo, batchOrder, payOrder); |
|
|
|
|
|
|
|
if(payAdapterResult.isSuccess()){ |
|
|
|
ttOrderPushErrorMapper.deleteById(batchOrder.getId()); |
|
|
|
}else{ |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), payAdapterResult.getMsg() + batchOrder.getId()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// |
|
|
|
// |
|
|
|
//// WxOrderCouponVo wxOrderCouponVo = batchOrder.getOrders().get(0); |
|
|
|
//// if(EnumPayType.PAY_PAYMENT.getCode().equals(wxOrderCouponVo.getPaymentType())){ |
|
|
|
//// payOrderPush(appinfo,batchOrder); |
|
|
|
//// }else{ |
|
|
|
//// //退款 |
|
|
|
//// //通过退款订单找支付订单 |
|
|
|
//// WxOrder ref_order = orderService.getById(wxOrderCouponVo.getOrderNumber(), wxOrderCouponVo.getTenantId()); |
|
|
|
//// WxBatchOrder ref_border = new WxBatchOrder(); |
|
|
|
//// ref_border.setTenantId(ref_order.getTenantId()); |
|
|
|
//// ref_border.setParentTenantId(ref_order.getParentTenantId()); |
|
|
|
//// ref_border.setId(ref_order.getComposeOrderId()); |
|
|
|
//// WxBatchOrder ref_batchOrder = orderService.batchOrderDetail(ref_border); |
|
|
|
//// if(ref_batchOrder == null){ |
|
|
|
//// logger.error("退款 主订单未找到: " + ref_order.getComposeOrderId()); |
|
|
|
//// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "退款 主订单未找到" + ref_order.getComposeOrderId()); |
|
|
|
//// } |
|
|
|
//// if(EnumPayWay.PAY_WAY_TT.getCode().equals(ref_batchOrder.getPayVendor()) |
|
|
|
//// && EnumComposeOrder.SINGLE.getCode().equals(ref_batchOrder.getOrderType()) |
|
|
|
//// && ref_batchOrder.getOrders().size() == 1){ |
|
|
|
//// for (WxOrderCouponVo ref_vo:ref_batchOrder.getOrders()) { |
|
|
|
//// ref_vo.setOrderStatus(wxOrderCouponVo.getOrderStatus()); |
|
|
|
//// } |
|
|
|
//// payOrderPush(appinfo,ref_batchOrder); |
|
|
|
//// } |
|
|
|
//// |
|
|
|
//// } |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// private void saveOrUpdate(TtOrderPushError pushError){ |
|
|
|
// Date now = new Date(); |
|
|
|
// TtOrderPushError pushError1 = ttOrderPushErrorMapper.selectById(pushError.getId()); |
|
|
|
// if(pushError1 != null){ |
|
|
|
// pushError1.setErrMsg(pushError.getErrMsg()); |
|
|
|
// pushError1.setUpdateDate(now); |
|
|
|
// ttOrderPushErrorMapper.updateById(pushError1); |
|
|
|
// }else{ |
|
|
|
// pushError.setCreateDate(now); |
|
|
|
// pushError.setUpdateDate(now); |
|
|
|
// ttOrderPushErrorMapper.insert(pushError); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// |
|
|
|
// private void payOrderPush(WxAppinfo appinfo, WxBatchOrder batchOrder) throws Exception{ |
|
|
|
// WxPayOrder orderq = new WxPayOrder(); |
|
|
|
// orderq.setOrderId(batchOrder.getId()); |
|
|
|
// orderq.updateTenantInfo(batchOrder); |
|
|
|
// WxPayOrder payOrder = wxPayOrderService.getByObj(orderq); |
|
|
|
// if(payOrder == null){ |
|
|
|
// logger.error("支付订单未找到: " + batchOrder.getId()); |
|
|
|
// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "支付订单未找到" + batchOrder.getId()); |
|
|
|
// } |
|
|
|
// if(StringUtils.isBlank(payOrder.getTransactionId())){ |
|
|
|
// logger.error("担保支付订单未找到: " + batchOrder.getId()); |
|
|
|
// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "担保支付订单未找到" + batchOrder.getId()); |
|
|
|
// } |
|
|
|
// List<String> openIds = ttCUserMapper.findOpenIdList(batchOrder.getCUserId(),batchOrder.getTenantId()); |
|
|
|
// if(openIds == null || openIds.size() > 1){ |
|
|
|
// logger.error("支付订单找到多个用户 同步失败: " + batchOrder.getId()); |
|
|
|
// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "支付订单找到多个用户" + batchOrder.getId()); |
|
|
|
// } |
|
|
|
// |
|
|
|
// PayAdapterResult payAdapterResult = payServiceFactory.getPayAdapterService(EnumPayWay.PAY_WAY_TT.getCode()) |
|
|
|
// .payOrderPush(openIds.get(0), appinfo, batchOrder, payOrder); |
|
|
|
// |
|
|
|
// if(payAdapterResult.isSuccess()){ |
|
|
|
// ttOrderPushErrorMapper.deleteById(batchOrder.getId()); |
|
|
|
// }else{ |
|
|
|
// throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), payAdapterResult.getMsg() + batchOrder.getId()); |
|
|
|
// } |
|
|
|
// } |
|
|
|
//} |