记得上下班打卡 | git大法好,push需谨慎

Commit 02899791 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/dev' into dev

parents aaf952c2 5d89f8c3
package com.liquidnet.service.kylin.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.PayAgainParam;
import com.liquidnet.service.kylin.dto.param.PayOrderParam;
import com.liquidnet.service.kylin.dto.param.SyncOrderParam;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import java.util.List;
/**
* <p>
* 订单 服务类
* </p>
*
* @author liquidnet
* @since 2021-05-20
*/
public interface IKylinOrderTicketsOrderService {
// 下单前判断接口(判断是否可锁定库存)(无订单->待支付->可支付)
ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam);
// 再次支付(待支付->可支付->倒计时结束释放库存)
ResponseDto<PayResultVo> payAgain(PayAgainParam payAgainParam);
// 支付回调(待支付->已支付->中断倒计时)
String syncOrder(SyncOrderParam syncOrderParam);
//去 PHP pay检查 订单状态
ResponseDto<Integer> checkOrderResult(String orderId);
}
......@@ -22,26 +22,12 @@ import java.util.List;
*/
public interface IKylinOrderTicketsService {
// 下单前判断接口(判断是否可锁定库存)(无订单->待支付->可支付)
ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam);
// 再次支付(待支付->可支付->倒计时结束释放库存)
ResponseDto<PayResultVo> payAgain(PayAgainParam payAgainParam);
// 支付回调(待支付->已支付->中断倒计时)
String syncOrder(SyncOrderParam syncOrderParam);
// 同步大麦数据接口
//订单列表(状态 待支付 已支付 倒计时 已失效)
PageInfo<List<KylinOrderListVo>> orderList();
//订单详情
OrderDetailsVo orderDetails(String orderId);
//去 PHP pay检查 订单状态
ResponseDto<Integer> checkOrderResult(String orderId);
//订单未支付数量
ResponseDto<Integer> orderUnPayCount();
......@@ -63,15 +49,4 @@ public interface IKylinOrderTicketsService {
//退款撤回
ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId);
//退款再次申请
Boolean orderRefundAgain(String orderRefundsId);
// 下单接口(无订单->待支付->可支付)
// 删除订单
// 代理票务 可买状态判断
// 取消支付(待支付->订单失效->释放库存->中断倒计时)
// ResponseDto<PayResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData,Object adamEntersList);
}
......@@ -33,14 +33,6 @@
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- other -->
<dependency>
<groupId>taobao-sdk-impl</groupId>
<artifactId>taobao-sdk-impl</artifactId>
<version>0.0.2</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${basedir}/lib/taobao-sdk-java-auto_1600401599540-20210607-impl.jar</systemPath>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-kylin-api</artifactId>
......
package com.liquidnet.service.kylin.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.base.*;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dao.OrderScriptDto;
import com.liquidnet.service.kylin.dto.param.PayAgainParam;
import com.liquidnet.service.kylin.dto.param.PayOrderParam;
import com.liquidnet.service.kylin.dto.param.SyncOrderParam;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.middle.message.MessageConfigVo;
import com.liquidnet.service.kylin.dto.vo.middle.message.MessageDataVo;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderRefundEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketRelationsMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketsMapper;
import com.liquidnet.service.kylin.entity.KylinOrderRefunds;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.entity.KylinOrderTicketStatus;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.kylin.utils.*;
import com.liquidnet.service.kylin.utils.DataUtils;
import com.liquidnet.service.kylin.utils.MongoVoUtils;
import com.mongodb.BasicDBObject;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaDamaiMevOpenBatchpushticketRequest;
import com.taobao.api.response.AlibabaDamaiMevOpenBatchpushticketResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
......@@ -67,795 +53,17 @@ import java.util.*;
@Slf4j
public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Value("${liquidnet.url-pay.pay}")
private String payUrl;
@Value("${liquidnet.url-pay.check}")
private String checkUrl;
@Value("${liquidnet.url-pay.localUrl}")
private String synUrl;
@Autowired
private DataUtils dataUtils;
@Autowired
private RedisUtil redisUtil;
@Autowired
private OrderUtils orderUtils;
@Autowired
private OtherUtils otherUtils;
@Autowired
private RedisLockUtil redisLockUtil;
@Autowired
private MongoVoUtils mongoVoUtils;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private MongoConverter mongoConverter;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private TaobaoTicketUtils taobaoTicketUtils;
@Autowired
private OrderRefundOvertimeServiceImpl orderRefundsCallbackService;
@Autowired
private KylinRefundsStatusServiceImpl refundsStatusService;
ArrayList<Integer> canBuyStatus = new ArrayList() {{
add(6);
add(8);
add(9);
add(10);
}};
@Override
public ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam) {
Long currentTime;
boolean isDownGeneral = false;
Long startTime = System.currentTimeMillis();
String uid = CurrentUtil.getCurrentUid();
String lock = "userId:" + uid;
// if (!redisLockUtil.tryLock(lock, 1, 5)) {
// return ResponseDto.failure(ErrorMapping.get("20023"));//参数错误
// }
try {
currentTime = System.currentTimeMillis();
KylinPerformanceVo performanceData = dataUtils.getPerformanceVo(payOrderParam.getPerformanceId());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 获取演出详情 -> time:" + currentTime + "毫秒");
KylinTicketTimesVo ticketTimesData = null;
KylinTicketVo ticketData = null;
for (int x = 0; x < performanceData.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = performanceData.getTicketTimeList().get(x);
if (timeItem.getTimeId().equals(payOrderParam.getTimeId())) {
ticketTimesData = timeItem;
for (int y = 0; y < ticketTimesData.getTicketList().size(); y++) {
KylinTicketVo ticketItem = ticketTimesData.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(payOrderParam.getTicketId())) {
ticketData = ticketItem;
break;
}
}
break;
}
}
if (performanceData == null || ticketTimesData == null || ticketData == null) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20004"));//参数错误
}
if (!ticketData.getTimeId().equals(payOrderParam.getTimeId()) || !ticketTimesData.getPerformanceId().equals(payOrderParam.getPerformanceId())) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20004"));//参数错误
}
if (payOrderParam.getNumber() % ticketData.getCounts() != 0) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20007"));//数量错误
}
//判断代理
if (!checkAgent(payOrderParam.getAgentId(), ticketData)) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20008"));//无权购买
}
Integer isStudent = ticketData.getIsStudent();
//会员时间获取
String memberTimeStart = ticketData.getMemberTimeStart(); // 会员开售时间
String timeStart = ticketData.getTimeStart(); // 普通开售时间
String timeEnd = ticketData.getTimeEnd(); // 购票停售时间
String timeExpressEnd = ticketData.getTimeEndExpress(); // 快递停售时间
currentTime = System.currentTimeMillis();
boolean isMember = orderUtils.isMember(uid);//feignAdamBaseClient.isMember(uid).getData();//获取是否是会员
currentTime = System.currentTimeMillis() - currentTime;
log.debug("fegin 会员 -> time:" + (currentTime) + "毫秒");
int memberType; //会员状态 不需要判断会员 1判断会员逻辑 2会员专属
if (ticketData.getIsExclusive() == 1) {
memberType = 2;
if (!isMember) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20009"));//没有会员权限
}
} else {
if (DateUtil.compareStrDay(DateUtil.getNowTime(), memberTimeStart) == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeStart) == -1 && ticketData.getIsMember() == 1) {
// 会员购买逻辑
memberType = 1;
if (!isMember) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20009"));//没有会员权限
}
} else {
// 普通用户购买逻辑
memberType = 0;
}
}
// 获取限购 实名
int ticketLimit = ticketData.getLimitCount();//普通票种限购
int ticketMemberLimit = ticketData.getLimitCountMember();//会员票种限购
int performanceLimit = performanceData.getLimitCount();//普通演出限购
int performanceMemberLimit = performanceData.getLimitCountMember();//会员演出限购
int isTrueName = ticketData.getIsTrueName();//是否演出实名
if (!canBuyStatus.contains(performanceData.getAppStatus())) {
redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20010"));//当前不可购买
}
if (!canBuyStatus.contains(performanceData.getAppStatus())) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20010"));//当前不可购买
}
//通用判断时间
if (isMember) {
if (DateUtil.compareStrDay(DateUtil.getNowTime(), memberTimeStart) == -1) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20011"));//未开始
}
} else {
if (DateUtil.compareStrDay(DateUtil.getNowTime(), timeStart) == -1) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20011"));//未开始
}
}
if (DateUtil.compareStrDay(DateUtil.getNowTime(), timeEnd) == 1) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20012"));//已结束
}
//快递票判断
if (payOrderParam.getIsExpress() != null) {
if (payOrderParam.getIsExpress() == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeExpressEnd) == 1) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20013"));//快递票不卖
}
if (payOrderParam.getIsExpress() == 1 && payOrderParam.getAddressId().isEmpty()) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20014"));//快递票未填写收货地址
}
}
//实名判断
if (isTrueName == 1 && payOrderParam.getEnterIdList().size() <= 0) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20015"));//需要实名 未实名
}
if (isTrueName == 1 && payOrderParam.getEnterIdList().size() != payOrderParam.getNumber()) {
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20015"));//入场人数量错误
}
// 判断库存
currentTime = System.currentTimeMillis();
int surplusGeneral = dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), -payOrderParam.getNumber());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 获取库存 -> time:" + (currentTime) + "毫秒");
if (surplusGeneral < 0) {//库存回滚
currentTime = System.currentTimeMillis();
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改库存 售罄 -> time:" + (currentTime) + "毫秒");
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20016"));//没抢到
} else {
isDownGeneral = true;
//学生票 判断
List<AdamEntersVo> entersVoList = new ArrayList<>();
if (isTrueName == 1) {
currentTime = System.currentTimeMillis();
for (String enterId : payOrderParam.getEnterIdList()) {
AdamEntersVo adamEnters = orderUtils.getEnters(uid, enterId);//feignAdamBaseClient.queryEnters(enterId, uid).getData();
entersVoList.add(adamEnters);
if (isStudent == 1) {
int age = IDCard.getAgeByIdCard(adamEnters.getIdCard());
if (age > 25) {
// redisLockUtil.unlock(lock);
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
return ResponseDto.failure(ErrorMapping.get("20017"));//年龄超了
}
}
}
currentTime = System.currentTimeMillis() - currentTime;
log.debug("获取 feign 入场人 -> time:" + (currentTime) + "毫秒");
}
//限购判断 如果实名 则身份证维度限购 如果不实名则数量限购
if (entersVoList.size() > 0) {
currentTime = System.currentTimeMillis();
for (int i = 0; i < entersVoList.size(); i++) {
String res1 = orderUtils.judgeOrderLimit(performanceData.getType(), uid, entersVoList.get(i).getIdCard(), payOrderParam.getPerformanceId(), payOrderParam.getTicketId(), performanceLimit, performanceMemberLimit, ticketLimit, ticketMemberLimit, 1, 1, memberType, isTrueName);
log.debug("redis 判断库存 -> time:" + (currentTime) + "毫秒");
if (!res1.equals("")) {
// redisLockUtil.unlock(lock);
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
return ResponseDto.failure(res1);//乱七八糟异常
}
}
currentTime = System.currentTimeMillis() - currentTime;
} else {
log.debug("redis 判断库存 -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis();
String res1 = orderUtils.judgeOrderLimit(performanceData.getType(), uid, "", payOrderParam.getPerformanceId(), payOrderParam.getTicketId(), performanceLimit, performanceMemberLimit, ticketLimit, ticketMemberLimit, payOrderParam.getNumber(), payOrderParam.getNumber(), memberType, isTrueName);
currentTime = System.currentTimeMillis() - currentTime;
if (!res1.equals("")) {
// redisLockUtil.unlock(lock);
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
return ResponseDto.failure(res1);//乱七八糟异常
}
currentTime = System.currentTimeMillis() - currentTime;
}
ResponseDto<PayResultVo> resultData = order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList, isStudent, ticketTimesData, currentTime);
// redisLockUtil.unlock(lock);
log.debug("总耗时 ->" + (System.currentTimeMillis() - startTime) + "毫秒");
return resultData;
}
} catch (Exception e) {
if (isDownGeneral) {
currentTime = System.currentTimeMillis();
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改库存 异常 -> time:" + (currentTime) + "毫秒");
}
e.printStackTrace();
log.error("Kylin Order Pay Error = " + e.getMessage());
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20018"));//乱七八糟异常
}
}
private ResponseDto<PayResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData, List<AdamEntersVo> entersVoList, Integer isStudent, KylinTicketTimesVo ticketTimesData, Long currentTime) {
LinkedList<String> sqls = new LinkedList<>();
String source = CurrentUtil.getCliSource() == null ? "" : CurrentUtil.getCliSource();
String version = CurrentUtil.getCliVersion() == null ? "" : CurrentUtil.getCliVersion();
LocalDateTime now = LocalDateTime.now();
//生成订单 order_ticket
KylinOrderTickets orderTickets = new KylinOrderTickets();
String orderTicketId = IDGenerator.nextSnowId();
orderTickets.setOrderTicketsId(orderTicketId);
orderTickets.setUserId(uid);
Map token = CurrentUtil.getTokenClaims();
orderTickets.setUserName(StringUtils.defaultString(((String) token.get("nickname")), ""));
orderTickets.setUserMobile(StringUtils.defaultString(((String) token.get("mobile")), ""));
orderTickets.setPerformanceTitle(performanceData.getTitle());
orderTickets.setOrderCode(IDGenerator.ticketOrderCode(orderTicketId));
orderTickets.setPayCode("");
orderTickets.setQrCode("");
orderTickets.setOrderType(source);
orderTickets.setOrderVersion(version);
orderTickets.setNumber(payOrderParam.getNumber());
orderTickets.setPrice(ticketData.getPrice());
orderTickets.setPriceMember(ticketData.getMemberPrice());
if (isMember) {
orderTickets.setPriceTotal(ticketData.getMemberPrice().multiply(new BigDecimal(payOrderParam.getNumber())).add(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : new BigDecimal("0")));
} else {
orderTickets.setPriceTotal(ticketData.getPrice().multiply(new BigDecimal(payOrderParam.getNumber())).add(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : new BigDecimal("0")));
}
orderTickets.setPriceActual(orderTickets.getPriceTotal());
orderTickets.setPriceVoucher(new BigDecimal("0.0"));
orderTickets.setPriceExpress(ticketData.getPriceExpress());
orderTickets.setPriceRefund(new BigDecimal(0.0));
orderTickets.setRefundNumber(0);
orderTickets.setPayType(payOrderParam.getPayType());
orderTickets.setPaymentType(null);
orderTickets.setTimePay(null);
if (payOrderParam.getIsExpress() == 1) {
currentTime = System.currentTimeMillis();
AdamAddressesVo addressesVo = orderUtils.getAddress(uid, payOrderParam.getAddressId());//feignAdamBaseClient.queryAddresses(payOrderParam.getAddressId(), uid).getData();
orderTickets.setExpressContacts(addressesVo.getName());
orderTickets.setExpressAddress(addressesVo.getProvince() + addressesVo.getCity() + addressesVo.getCounty() + addressesVo.getAddress());
orderTickets.setExpressPhone(addressesVo.getPhone());
orderTickets.setCity(addressesVo.getCity());
orderTickets.setProvince(addressesVo.getProvince());
orderTickets.setCounty(addressesVo.getCounty());
orderTickets.setGetTicketType("express");
currentTime = System.currentTimeMillis() - currentTime;
log.debug("feign 获取入场人 -> time:" + (currentTime) + "毫秒");
} else {
orderTickets.setExpressContacts("");
orderTickets.setExpressAddress("");
orderTickets.setExpressPhone("");
orderTickets.setCity("");
orderTickets.setProvince("");
orderTickets.setCounty("");
orderTickets.setGetTicketType("electronic");
}
orderTickets.setCouponType("no");
orderTickets.setGetTicketDescribe("");
orderTickets.setPayCountdownMinute(performanceData.getPayCountdownMinute());
orderTickets.setCreatedAt(now);
orderTickets.setUpdatedAt(null);
//生成订单 order_ticket_status
KylinOrderTicketStatus orderTicketStatus = new KylinOrderTicketStatus();
String orderTicketStatusId = IDGenerator.nextSnowId().toString();
orderTicketStatus.setOrderTicketStatusId(orderTicketStatusId);
orderTicketStatus.setOrderId(orderTicketId);
orderTicketStatus.setExpressType(payOrderParam.getExpressType());
orderTicketStatus.setTransferStatus(KylinTableStatusConst.ORDER_TRANSFER_STATUS0);
orderTicketStatus.setStatus(KylinTableStatusConst.ORDER_STATUS0);
orderTicketStatus.setIsStudent(isStudent);
orderTicketStatus.setPayStatus(KylinTableStatusConst.ORDER_PAY_STATUS0);
orderTicketStatus.setCreatedAt(now);
orderTicketStatus.setUpdatedAt(null);
sqls.add(SqlMapping.get("kylin_order_ticket_status.add"));
LinkedList<Object[]> sqlsDataB = new LinkedList<Object[]>();
sqlsDataB.add(orderTicketStatus.getAddObject());
//生成订单 order_ticket_relation
KylinOrderTicketRelations orderTicketRelations = new KylinOrderTicketRelations();
String orderTicketRelationId = IDGenerator.nextSnowId();
orderTicketRelations.setOrderTicketRelationsId(orderTicketRelationId);
orderTicketRelations.setOrderId(orderTicketId);
orderTicketRelations.setTransferId("");
orderTicketRelations.setLiveId("");
orderTicketRelations.setAgentId(payOrderParam.getAgentId());
orderTicketRelations.setIsMember(isMember ? 1 : 0);
orderTicketRelations.setPerformanceId(payOrderParam.getPerformanceId());
orderTicketRelations.setTimeId(payOrderParam.getTimeId());
orderTicketRelations.setTicketId(payOrderParam.getTicketId());
orderTicketRelations.setCreatedAt(now);
orderTicketRelations.setUpdatedAt(null);
sqls.add(SqlMapping.get("kylin_order_ticket_relation.add"));
LinkedList<Object[]> sqlsDataC = new LinkedList<Object[]>();
sqlsDataC.add(orderTicketRelations.getAddObject());
//生成票
KylinOrderTicketEntities orderTicketEntities = new KylinOrderTicketEntities();
LinkedList<Object[]> sqlsDataD = null;
sqlsDataD = new LinkedList<Object[]>();
sqls.add(SqlMapping.get("kylin_order_ticket_entities.add"));
if (isTrueName == 1) {
for (AdamEntersVo enters : entersVoList) {
String orderTicketEntitiesId = IDGenerator.nextSnowId().toString();
orderTicketEntities.setOrderTicketEntitiesId(orderTicketEntitiesId);
orderTicketEntities.setOrderId(orderTicketId);
orderTicketEntities.setTicketId(payOrderParam.getTicketId());
orderTicketEntities.setUserId(uid);
orderTicketEntities.setPerformanceId(payOrderParam.getPerformanceId());
orderTicketEntities.setTimeId(payOrderParam.getTimeId());
orderTicketEntities.setEnterType(enters.getType());
orderTicketEntities.setEnterName(enters.getName());
orderTicketEntities.setEnterMobile(enters.getMobile());
orderTicketEntities.setEnterIdCode(enters.getIdCard());
orderTicketEntities.setStatus(KylinTableStatusConst.ENTITIES_STATUS0);
orderTicketEntities.setSysDamai(ticketData.getSysDamai());
orderTicketEntities.setCheckClient("");
orderTicketEntities.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT0);
orderTicketEntities.setRefundPrice(BigDecimal.valueOf(0.0));
orderTicketEntities.setComment("");
orderTicketEntities.setCreatedAt(now);
orderTicketEntities.setUpdatedAt(null);
sqlsDataD.add(orderTicketEntities.getAddObject());
// 生成vo
KylinOrderTicketEntitiesVo orderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
BeanUtils.copyProperties(orderTicketEntities, orderTicketEntitiesVo);
orderTicketEntitiesVo.setPerformanceTitle(performanceData.getTitle());
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd());
orderTicketEntitiesVo.setTicketsmId(ticketData.getMid());
orderTicketEntitiesVo.setTimemId(ticketTimesData.getMid());
orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketEntitiesVo.setUpdatedAt(null);
orderTicketEntitiesVo.setChangeDate(orderTicketEntities.getCreatedAt());
currentTime = System.currentTimeMillis();
mongoTemplate.insert(orderTicketEntitiesVo, KylinOrderTicketEntitiesVo.class.getSimpleName());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("mongo 添加入场人 -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis();
dataUtils.changeBuyInfo(orderTicketEntitiesVo.getUserId(), orderTicketEntitiesVo.getEnterIdCode(), orderTicketEntitiesVo.getPerformanceId(), orderTicketEntitiesVo.getTicketId(), 1);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改 限购 -> time:" + (currentTime) + "毫秒");
}
} else {
for (int i = 0; i < payOrderParam.getNumber(); i++) {
String orderTicketEntitiesId = IDGenerator.nextSnowId().toString();
orderTicketEntities.setOrderTicketEntitiesId(orderTicketEntitiesId);
orderTicketEntities.setOrderId(orderTicketId);
orderTicketEntities.setTicketId(payOrderParam.getTicketId());
orderTicketEntities.setUserId(uid);
orderTicketEntities.setPerformanceId(payOrderParam.getPerformanceId());
orderTicketEntities.setTimeId(payOrderParam.getTimeId());
orderTicketEntities.setEnterType(0);
orderTicketEntities.setEnterName("");
orderTicketEntities.setEnterMobile("");
orderTicketEntities.setEnterIdCode("");
orderTicketEntities.setStatus(KylinTableStatusConst.ENTITIES_STATUS0);
orderTicketEntities.setSysDamai(ticketData.getSysDamai());
orderTicketEntities.setCheckClient("");
orderTicketEntities.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT0);
orderTicketEntities.setComment("");
orderTicketEntities.setCreatedAt(now);
orderTicketEntities.setUpdatedAt(null);
sqlsDataD.add(orderTicketEntities.getAddObject());
// 生成vo
KylinOrderTicketEntitiesVo orderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
BeanUtils.copyProperties(orderTicketEntities, orderTicketEntitiesVo);
orderTicketEntitiesVo.setPerformanceTitle(performanceData.getTitle());
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd());
orderTicketEntitiesVo.setTicketsmId(ticketData.getMid());
orderTicketEntitiesVo.setTimemId(ticketTimesData.getMid());
orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketEntitiesVo.setUpdatedAt(null);
orderTicketEntitiesVo.setChangeDate(orderTicketEntities.getCreatedAt());
currentTime = System.currentTimeMillis();
mongoTemplate.insert(orderTicketEntitiesVo, KylinOrderTicketEntitiesVo.class.getSimpleName());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("mongo 添加入场人 -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis();
dataUtils.changeBuyInfo(orderTicketEntitiesVo.getUserId(), orderTicketEntitiesVo.getEnterIdCode(), orderTicketEntitiesVo.getPerformanceId(), orderTicketEntitiesVo.getTicketId(), 1);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改限购 -> time:" + (currentTime) + "毫秒");
}
}
// 调用支付
String time1 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseStart()), DateUtil.Formatter.MM_dd_zh);
String time2 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseEnd()), DateUtil.Formatter.MM_dd_zh);
String useTime = ticketData.getType() == 2 ? time1 + "~" + time2 : time2;
LinkedMultiValueMap<String, String> httpData = new LinkedMultiValueMap<String, String>();
httpData.add("type", "TICKET");
httpData.add("price", orderTickets.getPriceActual().toString());
httpData.add("name", useTime + ticketData.getTitle() + "-" + performanceData.getTitle());
httpData.add("detail", performanceData.getTitle() + "-" + ticketData.getTitle() + "-" + useTime);
httpData.add("order_code", orderTickets.getOrderCode());
httpData.add("client_ip", CurrentUtil.getCliIpAddr());
httpData.add("notify_url", synUrl);
httpData.add("create_date", orderTickets.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
httpData.add("expire_time", (orderTickets.getPayCountdownMinute()) + "");
if (payOrderParam.getDeviceFrom().equals("js") || payOrderParam.getDeviceFrom().equals("applet")) {
httpData.add("open_id", payOrderParam.getOpenId());
}
if (payOrderParam.getPayType().equals("alipay") && payOrderParam.getDeviceFrom().equals("wap")) {
httpData.add("show_url", payOrderParam.getShowUrl() + orderTicketId);
httpData.add("return_url", payOrderParam.getReturnUrl() + orderTicketId);
}
currentTime = System.currentTimeMillis();
String returnData = HttpUtil.post(payUrl + payOrderParam.getDeviceFrom() + "/" + payOrderParam.getPayType(), httpData);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("调用 PHP 支付 -> time:" + (currentTime) + "毫秒");
PayResultVo payResultVo = JsonUtils.fromJson(returnData, PayResultVo.class);
payResultVo.setOrder_id(orderTicketId);
payResultVo.setPrice(orderTickets.getPriceActual());
orderTickets.setPayCode(payResultVo.getCode());
sqls.add(SqlMapping.get("kylin_order_ticket.add"));
LinkedList<Object[]> sqlsDataA = new LinkedList<>();
sqlsDataA.add(orderTickets.getAddObject());
if (payOrderParam.getPayType().equals("alipay") && payOrderParam.getDeviceFrom().equals("wap")) {
payResultVo.setShowUrl(payOrderParam.getShowUrl() + orderTicketId);
payResultVo.setReturnUrl(payOrderParam.getReturnUrl() + orderTicketId);
}
// 生成vo
KylinOrderTicketVo orderTicketVo = new KylinOrderTicketVo();
orderTicketVo.setOrderTicket(orderTickets);
orderTicketVo.setOrderTicketStatus(orderTicketStatus);
orderTicketVo.setOrderTicketRelation(orderTicketRelations);
orderTicketVo.setPerformanceImg(performanceData.getImgPoster());
orderTicketVo.setTicketTitle(ticketData.getTitle());
orderTicketVo.setUseStart(ticketData.getUseStart());
orderTicketVo.setTimeStart(performanceData.getTimeStart());
orderTicketVo.setOverdueAt(orderTickets.getCreatedAt().plusMinutes(performanceData.getPayCountdownMinute()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketVo.setCreatedAt(orderTickets.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketVo.setChangeDate(orderTickets.getCreatedAt());
currentTime = System.currentTimeMillis();
mongoTemplate.insert(orderTicketVo, KylinOrderTicketVo.class.getSimpleName());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("mongo 添加 订单 -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis();
mongoVoUtils.resetOrderListVo(uid, 1, orderTicketVo.getOrderTicketsId(), orderTicketVo);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改订单列表 -> time:" + (currentTime) + "毫秒");
// 执行sql
String sqlData = SqlMapping.gets(sqls, sqlsDataB, sqlsDataC, sqlsDataD, sqlsDataA);
currentTime = System.currentTimeMillis();
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_CREADE, MQConst.ROUTING_KEY_SQL_ORDER_CREATE,
sqlData);
currentTime = System.currentTimeMillis() - currentTime;
log.debug("MQ 发送 -> time:" + (currentTime) + "毫秒");
log.info(UserPathDto.setData("下单(唤起支付)", payOrderParam, payResultVo));
return ResponseDto.success(payResultVo);
}
@Override
public ResponseDto<PayResultVo> payAgain(PayAgainParam payAgainParam) {
try {
String uid = CurrentUtil.getCurrentUid();
// checkOrderTime(uid);
//检查订单时间 是否关闭
KylinOrderTicketVo orderTicketData = dataUtils.getOrderTicketVo(payAgainParam.getOrderId());
if (!orderTicketData.getUserId().equals(uid)) {
return null;
}
if (orderTicketData == null) {
return ResponseDto.failure(ErrorMapping.get("20024"));
}
if (orderTicketData.getStatus() == KylinTableStatusConst.ORDER_STATUS1) {
return ResponseDto.failure(ErrorMapping.get("20025"));
} else {
if (orderTicketData.getStatus() != KylinTableStatusConst.ORDER_STATUS0) {
return ResponseDto.failure(ErrorMapping.get("20026"));
}
}
String returnCheckData = HttpUtil.get(checkUrl + "?code=" + orderTicketData.getPayCode(), null);
PayResultVo checkVo = JsonUtils.fromJson(returnCheckData, PayResultVo.class);
if (checkVo.getStatus() == 1) {
return ResponseDto.failure(ErrorMapping.get("20027"));
}
if (!orderTicketData.getPayType().equals("no")) {
if (orderTicketData.getEntitiesVoList().size() == 0) {
return ResponseDto.failure(ErrorMapping.get("20004"));
}
KylinOrderTicketEntitiesVo entitiesData = orderTicketData.getEntitiesVoList().get(0);
LinkedMultiValueMap<String, String> httpData = new LinkedMultiValueMap<String, String>();
httpData.add("type", "TICKET");
httpData.add("price", orderTicketData.getPriceActual().toString());
httpData.add("name", entitiesData.getUseStart() + "" + entitiesData.getPerformanceTitle());
httpData.add("detail", entitiesData.getPerformanceTitle() + "-" + entitiesData.getTicketTitle() + "-" + entitiesData.getUseStart());
httpData.add("order_code", orderTicketData.getOrderCode());
httpData.add("client_ip", CurrentUtil.getCliIpAddr());
httpData.add("notify_url", synUrl);
httpData.add("create_date", orderTicketData.getCreatedAt());
httpData.add("expire_time", orderTicketData.getPayCountdownMinute().toString());
httpData.add("open_id", payAgainParam.getOpenId());
if (payAgainParam.getPayType().equals("alipay") && payAgainParam.getDeviceFrom().equals("wap")) {
httpData.add("show_url", payAgainParam.getShowUrl() + payAgainParam.getOrderId());
httpData.add("return_url", payAgainParam.getReturnUrl() + payAgainParam.getOrderId());
}
String returnData = HttpUtil.post(payUrl + payAgainParam.getDeviceFrom() + "/" + payAgainParam.getPayType(), httpData);
PayResultVo payResultVo = JsonUtils.fromJson(returnData, PayResultVo.class);
payResultVo.setOrder_id(orderTicketData.getOrderTicketsId());
payResultVo.setPrice(orderTicketData.getPriceActual());
if (payAgainParam.getPayType().equals("alipay") && payAgainParam.getDeviceFrom().equals("wap")) {
payResultVo.setShowUrl(payAgainParam.getShowUrl());
payResultVo.setReturnUrl(payAgainParam.getReturnUrl());
}
KylinOrderTickets orderTickets = new KylinOrderTickets();
orderTickets.setOrderTicketsId(payAgainParam.getOrderId());
orderTickets.setUpdatedAt(LocalDateTime.now());
orderTickets.setPayCode(payResultVo.getCode());
orderTickets.setPayType(payAgainParam.getPayType());
//改vo
HashMap<String, Object> map = new HashMap<>();
map.put("payType", payAgainParam.getPayType());
map.put("payCode", payResultVo.getCode());
map.put("updatedAt", DateUtil.Formatter.yyyyMMddHHmmss.format(orderTickets.getUpdatedAt()));
map.put("changeDate", orderTickets.getUpdatedAt());
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(payAgainParam.getOrderId())).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(map))
);
LocalDateTime strTime = orderTicketData.getChangeDate();
dataUtils.delOrderTicketRedis(orderTickets.getOrderTicketsId());
LinkedList<String> sqls = new LinkedList<>();
sqls.add(SqlMapping.get("kylin_order_ticket.payAgain"));
LinkedList<Object[]> sqlsDataA = new LinkedList<>();
sqlsDataA.add(orderTickets.getPayAgainObject(strTime, strTime));
sqls.add(SqlMapping.get("kylin_order_ticket_status.payAgain"));
LinkedList<Object[]> sqlsDataB = new LinkedList<>();
sqlsDataB.add(new Object[]{orderTickets.getUpdatedAt(), orderTickets.getOrderTicketsId(), strTime, strTime});
sqls.add(SqlMapping.get("kylin_order_ticket_relation.payAgain"));
LinkedList<Object[]> sqlsDataC = new LinkedList<>();
sqlsDataC.add(new Object[]{orderTickets.getUpdatedAt(), orderTickets.getOrderTicketsId(), strTime, strTime});
sqls.add(SqlMapping.get("kylin_order_ticket_entities.payAgain"));
LinkedList<Object[]> sqlsDataD = new LinkedList<>();
sqlsDataD.add(new Object[]{orderTickets.getUpdatedAt(), orderTickets.getOrderTicketsId(), strTime, strTime});
String sqlData = SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC, sqlsDataD);
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_AGAIN, MQConst.ROUTING_KEY_SQL_ORDER_AGAIN, sqlData);
log.info(UserPathDto.setData("再次支付", payAgainParam, payResultVo));
return ResponseDto.success(payResultVo);
}
return ResponseDto.failure(ErrorMapping.get("20029"));
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get("20028"));
}
}
@Override
public String syncOrder(SyncOrderParam syncOrderParam) {
try {
//支付时间
LocalDateTime now = LocalDateTime.now();
String lock = "order_lock:" + syncOrderParam.getOrder_code();
if (!redisLockUtil.tryLock(lock, 1, 5)) {
return "fail";//参数错误
}
String timePay = DateUtil.Formatter.yyyyMMddHHmmss.format(now);
KylinOrderTicketVo orderTicketData = mongoTemplate.findOne(Query.query(Criteria.where("orderCode").is(syncOrderParam.getOrder_code())), KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
if (orderTicketData == null) {
redisLockUtil.unlock(lock);
return "fail";//订单不存在
}
if (orderTicketData.getStatus() != KylinTableStatusConst.ORDER_STATUS0) {
if (orderTicketData.getPayCode().equals(syncOrderParam.getCode()) && orderTicketData.getStatus() == KylinTableStatusConst.ORDER_STATUS1) {
redisLockUtil.unlock(lock);
return "success";//已经支付
}
if (!orderTicketData.getPayCode().equals(syncOrderParam.getCode())) {
redisLockUtil.unlock(lock);
return "fail";//重复支付
}
}
if (orderTicketData.getPriceActual().compareTo(syncOrderParam.getPrice()) != 0) {
redisLockUtil.unlock(lock);
return "fail";//价格不符
}
LinkedList<String> sqls = new LinkedList<>();
LinkedList<Object[]> sqlsDataA = new LinkedList<>();
LinkedList<Object[]> sqlsDataB = new LinkedList<>();
LinkedList<Object[]> sqlsDataC = new LinkedList<>();
LinkedList<Object[]> sqlsDataD = new LinkedList<>();
LocalDateTime strTime = orderTicketData.getChangeDate();
KylinOrderTickets orderTickets = new KylinOrderTickets();
KylinOrderTicketStatus orderTicketStatus = new KylinOrderTicketStatus();
KylinOrderTicketEntities orderTicketEntities = new KylinOrderTicketEntities();
if (orderTicketData.getStatus() == 2) {
mongoVoUtils.resetOrderListVo(orderTicketData.getUserId(), 2, orderTicketData.getOrderTicketsId(), null);
log.error("订单号位 {} 的订单超时支付", syncOrderParam.getOrder_code());
orderRefundsCallbackService.refundApply(orderTicketData.getOrderTicketsId());
} else if (orderTicketData.getStatus() == 3 || orderTicketData.getStatus() == 4) {
log.error("订单号位 {} 的订单正在退款 或者已退款", syncOrderParam.getOrder_code());
} else {
orderTickets.setOrderTicketsId(orderTicketData.getOrderTicketsId());
orderTickets.setPaymentType(syncOrderParam.getPayment_type());
orderTickets.setPayCode(syncOrderParam.getCode());
orderTickets.setTimePay(timePay);
orderTickets.setQrCode(IDGenerator.ticketQrCode(orderTicketData.getOrderTicketsId()));
orderTickets.setUpdatedAt(now);
sqls.add(SqlMapping.get("kylin_order_ticket.synPay"));
sqlsDataA.add(orderTickets.getSynOrderObject(strTime, strTime));
orderTicketStatus.setOrderId(orderTicketData.getOrderTicketsId());
orderTicketStatus.setStatus(KylinTableStatusConst.ORDER_STATUS1);
orderTicketStatus.setPayStatus(syncOrderParam.getStatus());
orderTicketStatus.setUpdatedAt(orderTickets.getUpdatedAt());
sqls.add(SqlMapping.get("kylin_order_ticket_status.synPay"));
sqlsDataB.add(orderTicketStatus.getSynOrderObject(strTime, strTime));
sqls.add(SqlMapping.get("kylin_order_ticket_relation.synPay"));
sqlsDataC.add(new Object[]{orderTickets.getUpdatedAt(), orderTickets.getOrderTicketsId(), strTime, strTime});
orderTicketEntities.setOrderId(orderTicketData.getOrderTicketsId());
orderTicketEntities.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT1);
orderTicketEntities.setUpdatedAt(orderTickets.getUpdatedAt());
sqls.add(SqlMapping.get("kylin_order_ticket_entities.synPay"));
sqlsDataD.add(orderTicketEntities.getSynOrderObject(strTime, strTime));
//vo
HashMap<String, Object> orderTicketVo = new HashMap<>();
orderTicketVo.put("paymentType", orderTickets.getPaymentType());
orderTicketVo.put("payCode", orderTickets.getPayCode());
orderTicketVo.put("timePay", orderTickets.getTimePay());
orderTicketVo.put("qrCode", orderTickets.getQrCode());
orderTicketVo.put("status", KylinTableStatusConst.ORDER_STATUS1);
orderTicketVo.put("payStatus", orderTicketStatus.getStatus());
orderTicketVo.put("updatedAt", timePay);
orderTicketVo.put("changeDate", now);
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderTickets.getOrderTicketsId())).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(orderTicketVo))
);
HashMap<String, Object> orderTicketEntitiesVo = new HashMap<>();
orderTicketEntitiesVo.put("isPayment", KylinTableStatusConst.ENTITIES_IS_PAYMENT1);
orderTicketEntitiesVo.put("updatedAt", timePay);
orderTicketEntitiesVo.put("changeDate", now);
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("orderId").is(orderTicketData.getOrderTicketsId())).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(orderTicketEntitiesVo))
);
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_PAY, MQConst.ROUTING_KEY_SQL_ORDER_PAY,
SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC, sqlsDataD));
//生成vo redis
dataUtils.delOrderTicketRedis(orderTickets.getOrderTicketsId());
mongoVoUtils.resetOrderListVo(orderTicketData.getUserId(), 2, orderTicketData.getOrderTicketsId(), null);
// 发短信
KylinPerformanceVo performanceData = dataUtils.getPerformanceVo(orderTicketData.getPerformanceId());
KylinTicketTimesVo ticketTimesData = null;
KylinTicketVo ticketData = null;
for (int x = 0; x < performanceData.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = performanceData.getTicketTimeList().get(x);
if (timeItem.getTimeId().equals(orderTicketData.getTimeId())) {
ticketTimesData = timeItem;
for (int y = 0; y < ticketTimesData.getTicketList().size(); y++) {
KylinTicketVo ticketItem = ticketTimesData.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(orderTicketData.getTicketId())) {
ticketData = ticketItem;
break;
}
}
break;
}
}
MessageDataVo dataVo = new MessageDataVo();
dataVo.setName(orderTicketData.getPerformanceTitle());
String time1 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketData.getUseStart()), DateUtil.Formatter.yyyy_MM_dd);
String time2 = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceData.getTimeStart()), DateUtil.Formatter.HHmm);
dataVo.setTime(time1 + " " + time2);
MessageConfigVo configVo = new MessageConfigVo();
configVo.setStatus(true);
if (orderTicketData.getGetTicketType().equals("express")) {
configVo.setId("SMS_181490473");
} else if (orderTicketData.getGetTicketType().equals("electronic")) {
configVo.setId(ticketData.getIsShowCode() == 1 ? "SMS_171358560" : "SMS_181500419");
}
// otherUtils.sendMessage(orderTicketData.getUserMobile(), dataVo, configVo, 1);
// 大麦回调
sycDamaiOrder(orderTickets.getOrderTicketsId());
}
redisLockUtil.unlock(lock);
log.info(UserPathDto.setData("订单支付成功回调", syncOrderParam, ""));
return "success";
} catch (Exception e) {
log.error("SYNCE ORDER E = " + e.getMessage());
e.printStackTrace();
return "fail";
}
}
@Override
public PageInfo<List<KylinOrderListVo>> orderList() {
//TODO 缺快递
......@@ -1037,26 +245,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
}
@Override
public ResponseDto<Integer> checkOrderResult(String orderId) {
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketData = dataUtils.getOrderTicketVo(orderId);
if (!orderTicketData.getUserId().equals(uid)) {
return null;
}
if (orderTicketData == null) {
return ResponseDto.failure(ErrorMapping.get("20024"));
} else {
String returnCheckData = HttpUtil.get(checkUrl + "?code=" + orderTicketData.getPayCode(), null);
PayResultVo checkVo = JsonUtils.fromJson(returnCheckData, PayResultVo.class);
if (checkVo.getStatus() == 1) {
return ResponseDto.success(1);
} else {
return ResponseDto.success(0);
}
}
}
@Override
public ResponseDto<Integer> orderUnPayCount() {
String uid = CurrentUtil.getCurrentUid();
......@@ -1354,120 +542,4 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
}
@Override
public Boolean orderRefundAgain(String orderRefundsId) {
LocalDateTime time = LocalDateTime.now();
String strTime = DateUtil.Formatter.yyyyMMddHHmmss.format(time);
String uid = CurrentUtil.getCurrentUid();
KylinOrderRefundsVo orderRefundVo = dataUtils.getOrderRefundVo(orderRefundsId);
// 订单状态表 MQ
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
orderStatusTable.setStatus(KylinTableStatusConst.ORDER_STATUS3);
orderStatusTable.setUpdatedAt(time);
// 订单入场人表 MQ
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
entitiesTable.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT2);
entitiesTable.setUpdatedAt(time);
// 订单退款表
KylinOrderRefunds orderRefunds = new KylinOrderRefunds();
orderRefunds.setUpdatedAt(time);
orderRefunds.setApplicantAt(time);
orderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
//订单状态表 MONGO
KylinOrderTicketVo kylinOrderTicketVo = new KylinOrderTicketVo();
kylinOrderTicketVo.setStatus(KylinTableStatusConst.ORDER_STATUS3);
kylinOrderTicketVo.setUpdatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(time));
BasicDBObject orderObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketVo)));
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderRefundVo.getOrderTicketsId())).getQueryObject(),
orderObject
);
dataUtils.delOrderTicketRedis(orderRefundVo.getOrderTicketsId());
mongoVoUtils.resetOrderListVo(uid, 2, orderRefundVo.getOrderTicketsId(), null);
// 订单入场人表 MONGO
KylinOrderTicketEntitiesVo kylinOrderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
kylinOrderTicketEntitiesVo.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT2);
kylinOrderTicketEntitiesVo.setUpdatedAt(strTime);
BasicDBObject entitiesObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketEntitiesVo)));
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketEntitiesId").is(orderRefundVo.getOrderRefundEntitiesVoList().get(0).getOrderTicketEntitiesId())).getQueryObject(),
entitiesObject
);
dataUtils.delOrderTicketEntitiesRedis(orderRefundVo.getOrderRefundEntitiesVoList().get(0).getOrderTicketEntitiesId());
// 订单退款表 MONGO
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundVo.getOrderRefundsId())).getQueryObject(),
new Document("$set", new Document("status", KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY)
.append("updatedAt", time)
.append("applicantAt",time))
);
return null;
}
public boolean checkAgent(String agentId, KylinTicketVo ticketData) {
boolean isAgent = ticketData.getIsAgent() == 1;
if (isAgent) {
return redisUtil.sHasKey(KylinRedisConst.AGENT, agentId);
} else {
return true;
}
}
private boolean sycDamaiOrder(String orderId) {
try {
KylinOrderTicketVo orderData = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo vo = dataUtils.getPerformanceVo(orderData.getPerformanceId());
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
int isSysDamai = 0;
for (int x = 0; x < vo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = vo.getTicketTimeList().get(x);
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(orderData.getTicketId())) {
isSysDamai = ticketItem.getSysDamai();
break;
}
}
}
if (isSysDamai == 1) {
KylinOrderTicketVo orderVo = dataUtils.getOrderTicketVo(orderId);
List<KylinOrderTicketEntitiesVo> listData = orderVo.getEntitiesVoList();
AlibabaDamaiMevOpenBatchpushticketRequest req = new AlibabaDamaiMevOpenBatchpushticketRequest();
List<AlibabaDamaiMevOpenBatchpushticketRequest.ThirdTicketPushOpenParam> list2 = new ArrayList<AlibabaDamaiMevOpenBatchpushticketRequest.ThirdTicketPushOpenParam>();
for (int i = 0; i < listData.size(); i++) {
KylinOrderTicketEntitiesVo item = listData.get(i);
AlibabaDamaiMevOpenBatchpushticketRequest.ThirdTicketPushOpenParam obj3 = new AlibabaDamaiMevOpenBatchpushticketRequest.ThirdTicketPushOpenParam();
list2.add(obj3);
obj3.setUserName(item.getEnterName());//用户名 入场人姓名
obj3.setCertificateNo(item.getEnterIdCode());//证件号 入场人身份证
obj3.setOrderUserMobile(item.getEnterMobile());//用户手机号 入场人手机号
obj3.setCertificateType(item.getEnterType().longValue());//证件内容 入场人证件type
obj3.setPayTime(DateUtils.parseDate(orderData.getTimePay(), new String[]{"yyyy-MM-dd HH:mm:ss"}));//支付时间
obj3.setPerformId(item.getTimemId().longValue());//场次id
obj3.setTicketItemId(item.getTicketsmId().longValue());
obj3.setVoucherId(item.getMid().longValue());//票单号 入场人id
obj3.setOrderId(Long.parseLong(orderData.getOrderTicketsId()));//订单id orderId
obj3.setMediumType(orderData.getGetTicketType().equals("express") ? 1L : 2L);//票类型 快递 电子
obj3.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj3.setSystemId(taobaoTicketUtils.getSystemId());
obj3.setSeatType(1L);
obj3.setTicketType(1L);//票类型
}
req.setThirdTicketSetOpenParamList(list2);
if (list2.size() == 0) {
return true;
} else {
AlibabaDamaiMevOpenBatchpushticketResponse rsp = client.execute(req);
return rsp.getResult().getSuccess();
}
}
return true;
} catch (Exception e) {
return false;
}
}
}
package com.liquidnet.service.kylin.utils;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import org.springframework.stereotype.Service;
@Service
public class TaobaoTicketUtils {
private String URL = "http://gw.api.taobao.com/router/rest";
private String APPKEY = "27542597";
private String SECRET = "900025efc616fd2446344bb8fa21d039";
private String SUPPLIER_SECRET= "444d0752439f921a75eaf5951a8bc03c";
private Long SYSTEM_ID= 15669L;
// private String url = "http://gw.api.tbsandbox.com/router/rest";
// private String appkey = "4272";
// private String secret = "0ebbcccfee18d7ad1aebc5b135ffa906";
private TaobaoClient client = null;
public TaobaoClient initTaobaoClient() {
if (client == null) {
client = new DefaultTaobaoClient(URL, APPKEY, SECRET);
}
return client;
}
public String getSupplierSecret(){
return SUPPLIER_SECRET;
}
public Long getSystemId(){
return SYSTEM_ID;
}
}
package com.liquidnet.service.order.controller;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.PayAgainParam;
import com.liquidnet.service.kylin.dto.param.PayOrderParam;
import com.liquidnet.service.kylin.dto.param.SyncOrderParam;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
......@@ -19,7 +18,6 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
/**
* <p>
......@@ -36,20 +34,20 @@ import java.util.List;
public class KylinOrderTicketsController {
@Autowired
IKylinOrderTicketsService orderTicketsService;
IKylinOrderTicketsOrderService orderTicketsOrderService;
@PostMapping("pre")
@ApiOperation("下单")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PayResultVo> checkCanOrder(@RequestBody @Valid PayOrderParam payOrderParam) {
return orderTicketsService.checkCanOrder(payOrderParam);
return orderTicketsOrderService.checkCanOrder(payOrderParam);
}
@PostMapping("payAgain")
@ApiOperation("再次支付")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PayResultVo> payAgain(@RequestBody @Valid PayAgainParam payAgainParam) {
PayResultVo vo = orderTicketsService.payAgain(payAgainParam).getData();
PayResultVo vo = orderTicketsOrderService.payAgain(payAgainParam).getData();
if (null == vo) {
return ResponseDto.failure(ErrorMapping.get("20024"));
} else {
......@@ -61,14 +59,14 @@ public class KylinOrderTicketsController {
@ApiOperation("支付回调")
@ApiResponse(code = 200, message = "接口返回对象参数")
public String syncOrder(@ModelAttribute @Valid SyncOrderParam syncOrderParam) {
return orderTicketsService.syncOrder(syncOrderParam);
return orderTicketsOrderService.syncOrder(syncOrderParam);
}
@GetMapping("checkPayment")
@ApiOperation("订单状态")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap> checkOrderResult(@RequestParam("orderId") @NotNull(message = "订单id不能为空") String orderId) {
Integer status = orderTicketsService.checkOrderResult(orderId).getData();
Integer status = orderTicketsOrderService.checkOrderResult(orderId).getData();
if (null == status) {
return ResponseDto.failure(ErrorMapping.get("20003"));
} else {
......
......@@ -27,6 +27,7 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsOrderService;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.order.utils.*;
import com.mongodb.BasicDBObject;
......@@ -63,7 +64,7 @@ import java.util.*;
*/
@Service
@Slf4j
public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderService {
@Value("${liquidnet.url-pay.pay}")
private String payUrl;
......@@ -95,7 +96,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Autowired
private OrderRefundOvertimeServiceImpl orderRefundsCallbackService;
ArrayList<Integer> canBuyStatus = new ArrayList() {{
add(6);
add(8);
......@@ -103,7 +103,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
add(10);
}};
@Override
public ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam) {
Long currentTime;
......@@ -951,44 +950,4 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
return false;
}
}
@Override
public PageInfo<List<KylinOrderListVo>> orderList() {
return null;
}
@Override
public OrderDetailsVo orderDetails(String orderId) {
return null;
}
@Override
public ResponseDto<Integer> orderUnPayCount() {
return null;
}
@Override
public KylinOrderTicketPreVo toOrderRefundDetails(String orderId) {
return null;
}
@Override
public OrderRefundVo orderRefundDetails(String orderId, String orderRefundId) {
return null;
}
@Override
public String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
return null;
}
@Override
public ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId) {
return null;
}
@Override
public Boolean orderRefundAgain(String orderRefundsId) {
return null;
}
}
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