|
@@ -9,8 +9,18 @@ import com.qs.mp.admin.domain.Ticket;
|
|
import com.qs.mp.admin.domain.TicketBox;
|
|
import com.qs.mp.admin.domain.TicketBox;
|
|
import com.qs.mp.admin.service.ITicketBoxService;
|
|
import com.qs.mp.admin.service.ITicketBoxService;
|
|
import com.qs.mp.admin.service.ITicketService;
|
|
import com.qs.mp.admin.service.ITicketService;
|
|
|
|
+import com.qs.mp.channel.domain.Channel;
|
|
|
|
+import com.qs.mp.channel.domain.ChannelCommission;
|
|
|
|
+import com.qs.mp.channel.domain.ChannelMoneyLog;
|
|
|
|
+import com.qs.mp.channel.domain.ChannelOrderDetail;
|
|
import com.qs.mp.channel.domain.ChannelUserRel;
|
|
import com.qs.mp.channel.domain.ChannelUserRel;
|
|
|
|
+import com.qs.mp.channel.service.IChannelCommissionService;
|
|
|
|
+import com.qs.mp.channel.service.IChannelMoneyLogService;
|
|
|
|
+import com.qs.mp.channel.service.IChannelOrderDetailService;
|
|
|
|
+import com.qs.mp.channel.service.IChannelService;
|
|
import com.qs.mp.channel.service.IChannelUserRelService;
|
|
import com.qs.mp.channel.service.IChannelUserRelService;
|
|
|
|
+import com.qs.mp.common.enums.ChannelMoneyBizTypeEnum;
|
|
|
|
+import com.qs.mp.common.enums.ChannelMoneyEnum;
|
|
import com.qs.mp.common.enums.CommStatusEnum;
|
|
import com.qs.mp.common.enums.CommStatusEnum;
|
|
import com.qs.mp.common.enums.MqTopicType;
|
|
import com.qs.mp.common.enums.MqTopicType;
|
|
import com.qs.mp.common.enums.TicketBoxStatusEnum;
|
|
import com.qs.mp.common.enums.TicketBoxStatusEnum;
|
|
@@ -34,10 +44,10 @@ import com.qs.mp.user.mapper.UserTicketOrderMapper;
|
|
import com.qs.mp.user.service.IUserCouponService;
|
|
import com.qs.mp.user.service.IUserCouponService;
|
|
import com.qs.mp.user.service.IUserTicketOrderItemService;
|
|
import com.qs.mp.user.service.IUserTicketOrderItemService;
|
|
import com.qs.mp.user.service.IUserTicketOrderService;
|
|
import com.qs.mp.user.service.IUserTicketOrderService;
|
|
|
|
+import java.math.BigDecimal;
|
|
import java.util.Arrays;
|
|
import java.util.Arrays;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
-import org.apache.pulsar.client.api.PulsarClient;
|
|
|
|
import org.apache.pulsar.client.api.PulsarClientException;
|
|
import org.apache.pulsar.client.api.PulsarClientException;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -69,6 +79,9 @@ public class UserTicketOrderServiceImpl extends
|
|
@Autowired
|
|
@Autowired
|
|
private IChannelUserRelService channelUserRelService;
|
|
private IChannelUserRelService channelUserRelService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IChannelOrderDetailService channelOrderDetailService;
|
|
|
|
+
|
|
@Autowired
|
|
@Autowired
|
|
private IUserTicketOrderItemService userTicketOrderItemService;
|
|
private IUserTicketOrderItemService userTicketOrderItemService;
|
|
|
|
|
|
@@ -78,13 +91,22 @@ public class UserTicketOrderServiceImpl extends
|
|
@Autowired
|
|
@Autowired
|
|
private PulsarClientService pulsarClientService;
|
|
private PulsarClientService pulsarClientService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IChannelService channelService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IChannelCommissionService channelCommissionService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IChannelMoneyLogService channelMoneyLogService;
|
|
|
|
+
|
|
@Autowired
|
|
@Autowired
|
|
private BizIdGenerator bizIdGenerator;
|
|
private BizIdGenerator bizIdGenerator;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO) {
|
|
public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO) {
|
|
- if (StringUtils.isNotBlank(orderSettleVO.getBoxId())) {
|
|
|
|
|
|
+ if (StringUtils.isBlank(orderSettleVO.getTicketId())) {
|
|
return createOnlineOrder(userId, orderSettleVO);
|
|
return createOnlineOrder(userId, orderSettleVO);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -133,12 +155,13 @@ public class UserTicketOrderServiceImpl extends
|
|
} else {
|
|
} else {
|
|
userTicketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
|
|
userTicketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
|
|
}
|
|
}
|
|
- save(userTicketOrder);
|
|
|
|
-
|
|
|
|
// 查询用户的所属经销商,线上票直接查询
|
|
// 查询用户的所属经销商,线上票直接查询
|
|
ChannelUserRel channelUserRel = channelUserRelService.getOne(
|
|
ChannelUserRel channelUserRel = channelUserRelService.getOne(
|
|
new LambdaQueryWrapper<ChannelUserRel>()
|
|
new LambdaQueryWrapper<ChannelUserRel>()
|
|
.eq(ChannelUserRel::getUserId, userId));
|
|
.eq(ChannelUserRel::getUserId, userId));
|
|
|
|
+ userTicketOrder.setChannelId(null == channelUserRel ? null : channelUserRel.getChannelId());
|
|
|
|
+ save(userTicketOrder);
|
|
|
|
+
|
|
for (int i = 0; i < orderSettleVO.getOrderNum(); i++) {
|
|
for (int i = 0; i < orderSettleVO.getOrderNum(); i++) {
|
|
UserTicketOrderItem orderItem = new UserTicketOrderItem();
|
|
UserTicketOrderItem orderItem = new UserTicketOrderItem();
|
|
orderItem.setItemId(bizIdGenerator.newId());
|
|
orderItem.setItemId(bizIdGenerator.newId());
|
|
@@ -146,7 +169,6 @@ public class UserTicketOrderServiceImpl extends
|
|
orderItem.setUserId(userId);
|
|
orderItem.setUserId(userId);
|
|
orderItem.setBoxId(ticketBox.getBoxId());
|
|
orderItem.setBoxId(ticketBox.getBoxId());
|
|
orderItem.setTicketId(null); // 付款成功后再分配具体盲票
|
|
orderItem.setTicketId(null); // 付款成功后再分配具体盲票
|
|
- orderItem.setChannelId(null == channelUserRel ? null : channelUserRel.getChannelId());
|
|
|
|
userTicketOrderItemService.save(orderItem);
|
|
userTicketOrderItemService.save(orderItem);
|
|
}
|
|
}
|
|
return userTicketOrder.getOrderId();
|
|
return userTicketOrder.getOrderId();
|
|
@@ -178,19 +200,24 @@ public class UserTicketOrderServiceImpl extends
|
|
ticketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
|
|
ticketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
|
|
ticketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
|
|
ticketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
|
|
}
|
|
}
|
|
|
|
+ // 查询用户的所属经销商,线下票根据票包查询
|
|
|
|
+ ChannelOrderDetail channelOrderDetail = channelOrderDetailService.getOne(
|
|
|
|
+ new LambdaQueryWrapper<ChannelOrderDetail>()
|
|
|
|
+ .eq(ChannelOrderDetail::getPkgId, ticket.getPkgId()));
|
|
|
|
+ if (null == channelOrderDetail) {
|
|
|
|
+ LogUtil.error(logger, "线下票,根据票包ID查询购买渠道为空。ticketId:{0}, pkgId{1}",
|
|
|
|
+ ticket.getTicketId(), ticket.getPkgId());
|
|
|
|
+ } else {
|
|
|
|
+ ticketOrder.setChannelId(channelOrderDetail.getChannelId());
|
|
|
|
+ }
|
|
save(ticketOrder);
|
|
save(ticketOrder);
|
|
|
|
|
|
- // 查询用户的所属经销商,线上票直接查询
|
|
|
|
- ChannelUserRel channelUserRel = channelUserRelService.getOne(
|
|
|
|
- new LambdaQueryWrapper<ChannelUserRel>()
|
|
|
|
- .eq(ChannelUserRel::getUserId, userId));
|
|
|
|
UserTicketOrderItem orderItem = new UserTicketOrderItem();
|
|
UserTicketOrderItem orderItem = new UserTicketOrderItem();
|
|
orderItem.setItemId(bizIdGenerator.newId());
|
|
orderItem.setItemId(bizIdGenerator.newId());
|
|
orderItem.setOrderId(ticketOrder.getOrderId());
|
|
orderItem.setOrderId(ticketOrder.getOrderId());
|
|
orderItem.setUserId(userId);
|
|
orderItem.setUserId(userId);
|
|
orderItem.setBoxId(ticket.getBoxId());
|
|
orderItem.setBoxId(ticket.getBoxId());
|
|
orderItem.setTicketId(ticket.getTicketId());
|
|
orderItem.setTicketId(ticket.getTicketId());
|
|
- orderItem.setChannelId(null == channelUserRel ? null : channelUserRel.getChannelId());
|
|
|
|
userTicketOrderItemService.save(orderItem);
|
|
userTicketOrderItemService.save(orderItem);
|
|
return ticketOrder.getOrderId();
|
|
return ticketOrder.getOrderId();
|
|
}
|
|
}
|
|
@@ -279,15 +306,20 @@ public class UserTicketOrderServiceImpl extends
|
|
ticket = ticketService.getById(orderItem.getTicketId());
|
|
ticket = ticketService.getById(orderItem.getTicketId());
|
|
}
|
|
}
|
|
// 开幸运数字,更新ticket状态为已激活
|
|
// 开幸运数字,更新ticket状态为已激活
|
|
- ticket.setPlainLuckyNum(Integer.valueOf(RSAUtil.decrypt(ticket.getCipherLuckyNum())));
|
|
|
|
- ticket.setStatus(TicketStatusEnum.ACTIVATED);
|
|
|
|
- boolean rtn = ticketService.updateById(ticket);
|
|
|
|
|
|
+ boolean rtn = ticketService.update(
|
|
|
|
+ new LambdaUpdateWrapper<Ticket>().set(Ticket::getPlainLuckyNum,
|
|
|
|
+ Integer.valueOf(RSAUtil.decrypt(ticket.getCipherLuckyNum())))
|
|
|
|
+ .set(Ticket::getStatus, TicketStatusEnum.ACTIVATED)
|
|
|
|
+ .eq(Ticket::getTicketId, ticket.getTicketId()));
|
|
Assert.isTrue(rtn, "支付回调用户购票订单处理,更新盲票状态失败,ticketId:" + ticket.getTicketId());
|
|
Assert.isTrue(rtn, "支付回调用户购票订单处理,更新盲票状态失败,ticketId:" + ticket.getTicketId());
|
|
}
|
|
}
|
|
|
|
|
|
// 更新订单状态为已完成
|
|
// 更新订单状态为已完成
|
|
- ticketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
|
|
|
|
- boolean updateRst = updateById(ticketOrder);
|
|
|
|
|
|
+ boolean updateRst = update(
|
|
|
|
+ new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getStatus,
|
|
|
|
+ UserTicketOrderStatusEnum.FINISHED)
|
|
|
|
+ .eq(UserTicketOrder::getOrderId, ticketOrder.getOrderId())
|
|
|
|
+ .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY));
|
|
Assert.isTrue(updateRst, "支付回调用户购票订单处理,更新订单状态失败,orderId:" + ticketOrder.getOrderId());
|
|
Assert.isTrue(updateRst, "支付回调用户购票订单处理,更新订单状态失败,orderId:" + ticketOrder.getOrderId());
|
|
|
|
|
|
try {
|
|
try {
|
|
@@ -300,7 +332,85 @@ public class UserTicketOrderServiceImpl extends
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional
|
|
public boolean commToChannel(String orderId) {
|
|
public boolean commToChannel(String orderId) {
|
|
- return false;
|
|
|
|
|
|
+ UserTicketOrder ticketOrder = getById(orderId);
|
|
|
|
+ Assert.isTrue(ticketOrder.getCommStatus() == CommStatusEnum.DOING,
|
|
|
|
+ "结佣处理,结佣状态异常,不是结佣中。orderId=" + orderId);
|
|
|
|
+
|
|
|
|
+ if (null != ticketOrder.getChannelId()) {
|
|
|
|
+ // 线下购票,优先给当前票的经销商渠道分润
|
|
|
|
+ TicketBox ticketBox = ticketBoxService.getById(ticketOrder.getBoxId());
|
|
|
|
+ Channel channel = channelService.getById(ticketOrder.getChannelId());
|
|
|
|
+ ChannelCommission siteCommission = saveSiteCommAmt(ticketOrder, ticketBox, channel);
|
|
|
|
+ // 经销商账户余额增加
|
|
|
|
+ changeMoney(channel, siteCommission);
|
|
|
|
+
|
|
|
|
+ int sumCommAmt = siteCommission.getCommAmt();
|
|
|
|
+ // 渠道分润
|
|
|
|
+ while (channel.getParentId() > 0) {
|
|
|
|
+ channel = channelService.getById(channel.getParentId());
|
|
|
|
+ ChannelCommission channelCommission = new ChannelCommission();
|
|
|
|
+ channelCommission.setChannelId(channel.getChannelId());
|
|
|
|
+ channelCommission.setOrderId(siteCommission.getOrderId());
|
|
|
|
+ channelCommission.setBoxId(siteCommission.getBoxId());
|
|
|
|
+ channelCommission.setSaleAmt(siteCommission.getSaleAmt());
|
|
|
|
+ channelCommission.setSaleCommRate(siteCommission.getSaleCommRate());
|
|
|
|
+ channelCommission.setSaleCommAmt(siteCommission.getSaleCommAmt());
|
|
|
|
+ channelCommission.setCommRate(channel.getCommRate());
|
|
|
|
+ channelCommission.setCommAmt(new BigDecimal(channelCommission.getSaleCommAmt()).multiply(
|
|
|
|
+ channelCommission.getCommRate()).intValue() - sumCommAmt);
|
|
|
|
+ channelCommissionService.save(channelCommission);
|
|
|
|
+ sumCommAmt += channelCommission.getCommAmt();
|
|
|
|
+ }
|
|
|
|
+ // 线下票如果用户没被绑定,则保存经销商用户绑定关系
|
|
|
|
+ ChannelUserRel channelUserRel = channelUserRelService.getOne(
|
|
|
|
+ new LambdaQueryWrapper<ChannelUserRel>()
|
|
|
|
+ .eq(ChannelUserRel::getUserId, ticketOrder.getUserId()));
|
|
|
|
+ if (null == channelUserRel) {
|
|
|
|
+ channelUserRel = new ChannelUserRel();
|
|
|
|
+ channelUserRel.setChannelId(ticketOrder.getChannelId());
|
|
|
|
+ channelUserRel.setUserId(ticketOrder.getUserId());
|
|
|
|
+ channelUserRelService.save(channelUserRel);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ LogUtil.info(logger, "渠道结佣时,订单对应的渠道不存在,无需结佣。orderId:{0}",
|
|
|
|
+ ticketOrder.getOrderId());
|
|
|
|
+ }
|
|
|
|
+ boolean rst = update(
|
|
|
|
+ new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getCommStatus,
|
|
|
|
+ CommStatusEnum.YES)
|
|
|
|
+ .eq(UserTicketOrder::getOrderId, orderId)
|
|
|
|
+ .eq(UserTicketOrder::getCommStatus, CommStatusEnum.DOING));
|
|
|
|
+ Assert.isTrue(rst, "渠道结佣完成,更新订单状态失败。orderId:" + orderId);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void changeMoney(Channel channel, ChannelCommission siteCommission) {
|
|
|
|
+ ChannelMoneyLog moneyLog = new ChannelMoneyLog();
|
|
|
|
+ moneyLog.setChannelId(channel.getChannelId());
|
|
|
|
+ moneyLog.setType(ChannelMoneyEnum.COMMISSION);
|
|
|
|
+ moneyLog.setLogMoney(siteCommission.getCommAmt());
|
|
|
|
+ moneyLog.setBizTime(new Date());
|
|
|
|
+ moneyLog.setRefType(ChannelMoneyBizTypeEnum.COMMISSION);
|
|
|
|
+ moneyLog.setRefId(String.valueOf(siteCommission.getId()));
|
|
|
|
+ channelMoneyLogService.changeMoney(moneyLog);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private ChannelCommission saveSiteCommAmt(UserTicketOrder ticketOrder, TicketBox ticketBox,
|
|
|
|
+ Channel channel) {
|
|
|
|
+ ChannelCommission siteCommission = new ChannelCommission();
|
|
|
|
+ siteCommission.setChannelId(channel.getChannelId());
|
|
|
|
+ siteCommission.setOrderId(ticketOrder.getOrderId());
|
|
|
|
+ siteCommission.setBoxId(ticketOrder.getBoxId());
|
|
|
|
+ siteCommission.setSaleAmt(ticketOrder.getPayAmt());
|
|
|
|
+ siteCommission.setSaleCommRate(ticketBox.getSaleCommRate());
|
|
|
|
+ siteCommission.setSaleCommAmt(new BigDecimal(siteCommission.getSaleAmt()).multiply(
|
|
|
|
+ siteCommission.getSaleCommRate()).intValue());
|
|
|
|
+ siteCommission.setCommRate(channel.getCommRate());
|
|
|
|
+ siteCommission.setCommAmt(new BigDecimal(siteCommission.getSaleCommAmt()).multiply(
|
|
|
|
+ siteCommission.getCommRate()).intValue());
|
|
|
|
+ channelCommissionService.save(siteCommission);
|
|
|
|
+ return siteCommission;
|
|
}
|
|
}
|
|
}
|
|
}
|