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

Commit 2753f2af authored by 胡佳晨's avatar 胡佳晨

添加 order-impl

parent 9f9ca7ad
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liquidnet-bus-service</artifactId>
<groupId>com.liquidnet</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-service-order-impl</artifactId>
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-cache-redis</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-mq</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-cache-redisson</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-kylin-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>taobao-sdk2-impl</groupId>
<artifactId>taobao-sdk2-impl</artifactId>
<version>0.0.3</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${basedir}/lib/taobao-sdk-java-auto_1600401599540-20210607-impl.jar</systemPath>
</dependency>
<!-- other -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
</project>
package com.liquidnet.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.core.env.Environment;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
@Slf4j
@EnableFeignClients
@SpringBootApplication(scanBasePackages = {"com.liquidnet"})
public class ServiceKylinApplication implements CommandLineRunner {
@Autowired
private Environment environment;
public static void main(String[] args) {
SpringApplication.run(ServiceKylinApplication.class, args);
}
@Override
public void run(String... strings) throws Exception {
try {
log.info("\n----------------------------------------------------------\n\t" +
"Application '{}' is running! Access URLs:\n\t" +
"Local: \t\thttp://127.0.0.1:{}\n\t" +
"External: \thttp://{}:{}\n\t" +
"Profile(s): \t{}\n----------------------------------------------------------",
environment.getProperty("spring.application.name"),
environment.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
environment.getProperty("server.port"),
Arrays.toString(environment.getActiveProfiles()));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
// @Bean
// MongoTransactionManager transactionManager(MongoDbFactory factory){
// return new MongoTransactionManager(factory);
// }
}
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
/**
* <p>
* 订单 前端控制器
* </p>
*
* @author liquidnet
* @since 2021-05-20
*/
@Api(tags = "前端-订单相关")
@RestController
@RequestMapping("order")
@Validated
public class KylinOrderTicketsController {
@Autowired
IKylinOrderTicketsService orderTicketsService;
@PostMapping("pre")
@ApiOperation("下单")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PayResultVo> checkCanOrder(@RequestBody @Valid PayOrderParam payOrderParam) {
return orderTicketsService.checkCanOrder(payOrderParam);
}
@PostMapping("payAgain")
@ApiOperation("再次支付")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PayResultVo> payAgain(@RequestBody @Valid PayAgainParam payAgainParam) {
PayResultVo vo = orderTicketsService.payAgain(payAgainParam).getData();
if (null == vo) {
return ResponseDto.failure(ErrorMapping.get("20024"));
} else {
return ResponseDto.success(vo);
}
}
@PostMapping("syncOrder")
@ApiOperation("支付回调")
@ApiResponse(code = 200, message = "接口返回对象参数")
public String syncOrder(@ModelAttribute @Valid SyncOrderParam syncOrderParam) {
return orderTicketsService.syncOrder(syncOrderParam);
}
@GetMapping("list")
@ApiOperation("订单列表")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PageInfo<List<KylinOrderListVo>>> orderList() {
return ResponseDto.success(orderTicketsService.orderList());
}
@GetMapping("details")
@ApiOperation("订单详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<OrderDetailsVo> orderDetails(@RequestParam(value = "orderId", required = false) @NotNull(message = "订单id不能为空") String orderId) {
OrderDetailsVo vo = orderTicketsService.orderDetails(orderId);
if (null == vo) {
return ResponseDto.failure(ErrorMapping.get("20003"));
} else {
return ResponseDto.success(vo);
}
}
@GetMapping("toOrderRefundDetails")
@ApiOperation("想要退款订单详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(@RequestParam(value = "orderId", required = false) @NotNull(message = "订单id不能为空") String orderId) {
KylinOrderTicketPreVo vo = orderTicketsService.toOrderRefundDetails(orderId);
if (null == vo) {
return ResponseDto.failure(ErrorMapping.get("20003"));
} else {
return ResponseDto.success(vo);
}
}
@PostMapping("sendOrderRefunds")
@ApiOperation("发起退款申请")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap<String,String>> sendOrderRefund(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@RequestParam(value = "orderTicketEntitiesId", required = true) @NotNull(message = "票单id不能为空") String orderTicketEntitiesId,
@RequestParam(value = "reason", required = true) @NotNull(message = "退款原因不能为空") String reason,
@RequestParam(value = "picList", required = false) String picList) {
String orderRefundId = orderTicketsService.sendOrderRefund(orderId, orderTicketEntitiesId, reason, picList).getData();
HashMap<String,String> map = new HashMap<String,String>();
map.put("orderRefundsId",orderRefundId);
return ResponseDto.success(map);
}
@GetMapping("orderRefundDetails")
@ApiOperation("退款申请详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<OrderRefundVo> orderRefundDetails(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单id不能为空") String orderRefundId) {
return ResponseDto.success(orderTicketsService.orderRefundDetails(orderId, orderRefundId));
}
@PostMapping("orderRefundWithdraw")
@ApiOperation("发起退款撤回")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<Boolean> orderRefundWithdraw(@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单id不能为空") String orderRefundId) {
return orderTicketsService.orderRefundWithdraw(orderRefundId);
}
@GetMapping("checkPayment")
@ApiOperation("订单状态")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap> checkOrderResult(@RequestParam("orderId") @NotNull(message = "订单id不能为空") String orderId) {
Integer status = orderTicketsService.checkOrderResult(orderId).getData();
if (null == status) {
return ResponseDto.failure(ErrorMapping.get("20003"));
} else {
HashMap<String, Integer> map = new HashMap<>();
map.put("status", status);
return ResponseDto.success(map);
}
}
@GetMapping("orderUnPayCount")
@ApiOperation("待支付演出订单数量")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap> orderUnPayCount() {
Integer unPayCount = orderTicketsService.orderUnPayCount().getData();
HashMap<String, Integer> map = new HashMap<>();
map.put("unPayCount", unPayCount);
return ResponseDto.success(map);
}
}
package com.liquidnet.service.order.service.impl;
import com.alibaba.fastjson.JSON;
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.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.KylinRedisConst;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
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.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.service.IKylinOrderTicketsService;
import com.liquidnet.service.order.utils.DataUtils;
import com.liquidnet.service.order.utils.MongoVoUtils;
import com.liquidnet.service.order.utils.OrderUtils;
import com.liquidnet.service.order.utils.OtherUtils;
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.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.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.*;
/**
* <p>
* 订单 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-05-20
*/
@Service
@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) {
//支付时间
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";
}
@Override
public PageInfo<List<KylinOrderListVo>> orderList() {
//TODO 缺快递
PageInfo<List<KylinOrderListVo>> mPageInfo = null;
String uid = CurrentUtil.getCurrentUid();
// checkOrderTime(uid);
try {
List<KylinOrderListVo> voList = dataUtils.getOrderList(uid);
for (int i = 0; i < voList.size(); i++) {
KylinOrderListVo item = voList.get(i);
//TODO 顺丰快递
Object expresses = null;
if (null != expresses) {
item.setExpress_number("");//expresses.getNumber()
item.setExpress_company("");//expresses.getName()
item.setKuaidi_status(-2);//expresses.getStatus()
} else {
item.setExpress_number("");
item.setExpress_company("");
item.setKuaidi_status(-2);
}
if (item.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
try {
item.setRestTime(DateUtil.intervalSeconds(
DateUtil.parse(item.getOverdueAt(), "yyyy-MM-dd HH:mm:ss"),
DateUtil.parse(DateUtil.getNowTime(), "yyyy-MM-dd HH:mm:ss")
));
if (item.getRestTime() <= 0L) {
item.setRestTime(0L);
}
} catch (Exception e) {
e.printStackTrace();
}
log.debug("item.getOverdueAt() = " + item.getOverdueAt());
log.debug("DateUtil.getNowTime() = " + DateUtil.getNowTime());
log.debug("item.getRestTime() = " + item.getRestTime());
} else {
item.setRestTime(0L);
}
if (i >= 40) {
break;
}
}
mPageInfo = new PageInfo(voList);
mPageInfo.setTotal(voList.size());
log.info(UserPathDto.setData("订单列表", "", voList));
return mPageInfo;
} catch (Exception e) {
e.printStackTrace();
return mPageInfo;
}
}
@Override
public OrderDetailsVo orderDetails(String orderId) {
OrderDetailsVo vo = new OrderDetailsVo();
try {
String uid = CurrentUtil.getCurrentUid();
// checkOrderTime(uid);
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
}
if (null != orderTicketVo) {
//TODO 顺丰快递
Object expresses = null;
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = orderTicketVo.getEntitiesVoList();
KylinTicketVo ticketVo = null;
//获取购票数据
for (int x = 0; x < performanceVo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = performanceVo.getTicketTimeList().get(x);
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(orderTicketVo.getTicketId())) {
ticketVo = ticketItem;
break;
}
}
}
orderTicketVo.setIsTrueName(ticketVo.getIsTrueName());
orderTicketVo.setNoticeImage(performanceVo.getNoticeImage());
orderTicketVo.setNotice(performanceVo.getNotice());
orderTicketVo.setTicketType(ticketVo.getType());
orderTicketVo.setFieldName(performanceVo.getFieldName());
if (ticketVo.getIsShowCode() == 1 && orderTicketVo.getStatus() != 0 && orderTicketVo.getStatus() != 2 && orderTicketVo.getStatus() != 4) {
LocalDateTime date = DateUtil.Formatter.yyyyMMddHHmmss.parse(ticketVo.getQrCodeShowTime());
if (LocalDateTime.now().isAfter(date)) {
orderTicketVo.setQrCode(orderTicketVo.getQrCode());
} else {
orderTicketVo.setQrCode("");
}
} else {
orderTicketVo.setQrCode("");
}
// 数据脱敏
for (KylinOrderTicketEntitiesVo item : kylinOrderTicketEntitiesVoList) {
if (item.getEnterIdCode().length() == 18) {
item.setEnterIdCode(item.getEnterIdCode().substring(0, 3) + "*************" + item.getEnterIdCode().substring(16));
}
if (item.getEnterMobile().length() == 11) {
item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
}
}
//计算 倒计时
Date nowDate = DateUtil.parse(DateUtil.getNowTime(), "yyyy-MM-dd HH:mm:ss");
if (orderTicketVo.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
vo.setRestTime(DateUtil.intervalSeconds(
DateUtil.parse(orderTicketVo.getOverdueAt(), "yyyy-MM-dd HH:mm:ss"),
nowDate
));
if (vo.getRestTime() <= 0L) {
vo.setRestTime(0L);
}
} else {
vo.setRestTime(0L);
}
//快递
if (null != expresses) {
vo.setExpress_number("");//expresses.getNumber()
vo.setExpress_company("");//expresses.getName()
vo.setKuaidi_status(-2);//expresses.getStatus()
} else {
vo.setExpress_number("");
vo.setExpress_company("");
vo.setKuaidi_status(-2);
}
if (null != performanceVo.getIsCanRefund() && performanceVo.getIsCanRefund() == 1) {
LocalDateTime refundOpenDate = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getRefundOpenTime());
LocalDateTime refundCloseDate = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getRefundCloseTime());
if (LocalDateTime.now().isAfter(refundOpenDate) && LocalDateTime.now().isBefore(refundCloseDate)) {
vo.setIsCanRefund(1);
} else {
vo.setIsCanRefund(0);
}
} else {
vo.setIsCanRefund(0);
}
List<KylinOrderRefundsOrderCodeVo> orderRefundsVoBaseList = new ArrayList<>();
for (KylinOrderRefundsVo item : dataUtils.getOrderRefundVoByOrderId(orderId)) {
KylinOrderRefundsOrderCodeVo data = new KylinOrderRefundsOrderCodeVo();
data.setOrderRefundsId(item.getOrderRefundsId());
data.setOrderRefundCode(item.getOrderRefundCode());
data.setStatus(item.getStatus());
}
List<KylinOrderRefundsVo> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderId);
List<OrderRefundListVo> orderRefundListVos = new ArrayList<>();
for (KylinOrderRefundsVo item : orderRefundsVoList) {
OrderRefundListVo data = new OrderRefundListVo();
data.setOrderRefundCode(item.getOrderRefundCode().substring(item.getOrderRefundCode().length() - 10));
data.setOrderRefundsId(item.getOrderRefundsId());
data.setStatus(item.getStatus());
orderRefundListVos.add(data);
}
orderTicketVo.setOrderRefundListVos(orderRefundListVos);
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
vo.setOrderRefundsVoList(orderRefundsVoBaseList);
vo.setOrderTicketVo(orderTicketVo);
vo.setEnterDescribe(dataUtils.getEnterInfo("1"));
}
log.info(UserPathDto.setData("订单详情", orderId, vo));
return vo;
} catch (Exception e) {
e.printStackTrace();
return vo;
}
}
@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();
List<KylinOrderListVo> voList = dataUtils.getOrderList(uid);
int unPayCount = 0;
for (KylinOrderListVo item : voList) {
if (item.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
item.setRestTime(DateUtil.intervalSeconds(
DateUtil.parse(item.getOverdueAt(), "yyyy-MM-dd HH:mm:ss"),
DateUtil.parse(DateUtil.getNowTime(), "yyyy-MM-dd HH:mm:ss")
));
if (item.getRestTime() <= 0L) {
item.setRestTime(0L);
} else {
unPayCount += 1;
}
} else {
item.setRestTime(0L);
}
}
return ResponseDto.success(unPayCount);
}
@Override
public KylinOrderTicketPreVo toOrderRefundDetails(String orderId) {
try {
KylinOrderTicketPreVo vo = new KylinOrderTicketPreVo();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
}
List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = orderTicketVo.getEntitiesVoList();
List<KylinOrderTicketEntitiesPreRefundVo> kylinOrderTicketEntitiesPreRefundVos = new ArrayList<>();
// 数据脱敏
for (KylinOrderTicketEntitiesVo item : kylinOrderTicketEntitiesVoList) {
KylinOrderTicketEntitiesPreRefundVo refundVo = new KylinOrderTicketEntitiesPreRefundVo();
if (item.getEnterIdCode().length() == 18) {
item.setEnterIdCode(item.getEnterIdCode().substring(0, 3) + "*************" + item.getEnterIdCode().substring(16));
}
if (item.getEnterMobile().length() == 11) {
item.setEnterMobile(item.getEnterMobile().substring(0, 3) + "****" + item.getEnterMobile().substring(7));
}
item.setPriceActual(orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(new BigDecimal(orderTicketVo.getNumber())));
item.setPriceCanRefund(dataUtils.getCanRefundOrderEntitiesPrice(orderTicketVo, kylinOrderRefundsVoBaseList, item.getOrderTicketEntitiesId()));
BeanUtils.copyProperties(item, refundVo);
kylinOrderTicketEntitiesPreRefundVos.add(refundVo);
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
BeanUtils.copyProperties(orderTicketVo, vo);
vo.setIsTrueName(performanceVo.getIsTrueName());
vo.setEntitiesPreRefundVos(kylinOrderTicketEntitiesPreRefundVos);
return vo;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public OrderRefundVo orderRefundDetails(String orderId, String orderRefundId) {
OrderRefundVo vo = new OrderRefundVo();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
return vo;
}
@Override
public ResponseDto<String> sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
KylinOrderTicketEntitiesVo orderTicketEntitiesVo = null;
try {
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
if (!orderTicketVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
}
List<KylinOrderTicketEntitiesVo> entitiesVos = orderTicketVo.getEntitiesVoList();
for (KylinOrderTicketEntitiesVo item : entitiesVos) {
if (item.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
orderTicketEntitiesVo = item;
}
}
if (null == orderTicketEntitiesVo) {
return ResponseDto.failure(ErrorMapping.get("20004"));
}
BigDecimal refundSinglePrice = dataUtils.getCanRefundOrderEntitiesPrice(orderTicketVo, kylinOrderRefundsVoBaseList, orderTicketEntitiesId);
if (refundSinglePrice.doubleValue() <= 0) {
return ResponseDto.failure(ErrorMapping.get("20022"));
}
Map token = CurrentUtil.getTokenClaims();
String username = StringUtils.defaultString(((String) token.get("nickname")), "");
// String result = refundsStatusService.userOrderTicketRefunding(orderTicketVo, refundSinglePrice.doubleValue(), orderTicketEntitiesId, reason, picList, uid, username, kylinOrderRefundsVoBaseList.size());
// if (result != "") {
// return ResponseDto.success(result);
// } else {
return ResponseDto.failure(ErrorMapping.get("20019"));
// }
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get("20019"));
}
}
@Override
public ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId) {
LinkedList<String> sqls = new LinkedList<>();
LinkedList<Object[]> sqlsDataA = new LinkedList<>();
LinkedList<Object[]> sqlsDataB = new LinkedList<>();
LinkedList<Object[]> sqlsDataC = new LinkedList<>();
LocalDateTime time = LocalDateTime.now();
String strTime = DateUtil.Formatter.yyyyMMddHHmmss.format(time);
try {
KylinOrderRefundsVo orderRefundsVo = dataUtils.getOrderRefundVo(orderRefundsId);
if (!orderRefundsVo.getStatus().equals(0)) {
return ResponseDto.failure(ErrorMapping.get("20020"));
}
List<KylinOrderRefundEntitiesVo> refundEntities = orderRefundsVo.getOrderRefundEntitiesVoList();
String orderTicketsId = orderRefundsVo.getOrderTicketsId();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderTicketsId);
// 更新数据
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newStatus;
int refundingCount = 0;
List<KylinOrderRefundsVo> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderTicketsId);
for (KylinOrderRefundsVo item : orderRefundsVoList) {
int status = item.getStatus();
if (status != 2 && status != 4 && status != 6 && !item.getOrderRefundsId().equals(orderRefundsId)) {
refundingCount += 1;
}
}
if (refundingCount > 0) { // 存在其他正在退款的订单
newStatus = KylinTableStatusConst.ORDER_STATUS3;
} else {
if (orderTicketVo.getPriceRefund().doubleValue() > 0) { // 已经有退完的 那就是部分退款了
newStatus = KylinTableStatusConst.ORDER_STATUS6;
} else if (orderTicketVo.getStatus() != 2) {
newStatus = KylinTableStatusConst.ORDER_STATUS1;
} else {
newStatus = KylinTableStatusConst.ORDER_STATUS2;
}
}
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
orderStatusTable.setStatus(newStatus);
orderStatusTable.setUpdatedAt(time);
sqlsDataA.add(new Object[]{
orderStatusTable.getStatus(), orderStatusTable.getUpdatedAt(), orderTicketsId, orderTicketVo.getChangeDate(), orderTicketVo.getChangeDate()
});
KylinOrderTicketVo kylinOrderTicketVo = new KylinOrderTicketVo();
kylinOrderTicketVo.setStatus(newStatus);
kylinOrderTicketVo.setUpdatedAt(strTime);
kylinOrderTicketVo.setChangeDate(time);
BasicDBObject orderObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketVo)));
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderTicketsId)).getQueryObject(),
orderObject
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderTicketVo.getUserId(), 2, orderTicketsId, null);
// 入场人
for (KylinOrderRefundEntitiesVo item : refundEntities) {
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newIsPayment = 0;
int refundingEntitiesCount = 0;
for (KylinOrderRefundsVo item2 : orderRefundsVoList) {
int status = item2.getStatus();
if (!item2.getOrderRefundsId().equals(orderRefundsId) && (status != 2 && status != 4 && status != 6)) {
for (KylinOrderRefundEntitiesVo item3 : item2.getOrderRefundEntitiesVoList()) {
if (item3.getOrderTicketEntitiesId().equals(item.getOrderTicketEntitiesId())) {
refundingEntitiesCount += 1;
}
}
}
}
KylinOrderTicketEntitiesVo entitiesVo = null;
for (KylinOrderTicketEntitiesVo entitiesVo1 : orderTicketVo.getEntitiesVoList()) {
if (entitiesVo1.getOrderTicketEntitiesId().equals(item.getOrderTicketEntitiesId())) {
entitiesVo = entitiesVo1;
break;
}
}
if (refundingEntitiesCount > 0) { // 存在其他正在退款的该入场人订单
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT2;
} else {
if (entitiesVo.getRefundPrice().doubleValue() > 0) { // 已经有退完的 那就是部分退款了
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT4;
} else {
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT1;
}
}
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
entitiesTable.setIsPayment(newIsPayment);
entitiesTable.setUpdatedAt(time);
sqlsDataB.add(new Object[]{
entitiesTable.getIsPayment(), entitiesTable.getUpdatedAt(), item.getOrderTicketEntitiesId(), entitiesVo.getChangeDate(), entitiesVo.getChangeDate()
});
KylinOrderTicketEntitiesVo kylinOrderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
kylinOrderTicketEntitiesVo.setIsPayment(newIsPayment);
kylinOrderTicketEntitiesVo.setUpdatedAt(strTime);
kylinOrderTicketEntitiesVo.setChangeDate(time);
BasicDBObject entitiesObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketEntitiesVo)));
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketEntitiesId").is(item.getOrderTicketEntitiesId())).getQueryObject(),
entitiesObject
);
dataUtils.delOrderTicketEntitiesRedis(item.getOrderTicketEntitiesId());
}
// 退款细节取消
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
KylinOrderRefundsVo orderRefundsVoBase = new KylinOrderRefundsVo();
orderRefundsVoBase.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
orderRefundsVoBase.setUpdatedAt(time);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVoBase)));
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)).getQueryObject(),
refundObject
);
sqlsDataC.add(new Object[]{
orderRefundsVoBase.getStatus(), orderRefundsVoBase.getUpdatedAt(), orderRefundsId
});
dataUtils.delOrderRefundVo(orderRefundsId);
dataUtils.delOrderRefundVoByOrderId(orderTicketsId);
sqls.add(SqlMapping.get("kylin_order_ticket_status.withDraw"));
sqls.add(SqlMapping.get("kylin_order_ticket_entities.withDraw"));
sqls.add(SqlMapping.get("kylin_order_refund.withDraw"));
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_WITHDRAW, MQConst.ROUTING_KEY_SQL_ORDER_WITHDRAW,
SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC));
return ResponseDto.success(true);
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get("20020"));
}
}
@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
KylinOrderRefundsVo orderRefundsVo = new KylinOrderRefundsVo();
orderRefundsVo.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
orderRefundsVo.setUpdatedAt(time);
orderRefundsVo.setApplicantAt(time);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVo)));
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundVo.getOrderRefundsId())).getQueryObject(),
refundObject
);
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.order.utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
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.mongo.*;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.regex.Pattern;
@Component
public class DataUtils {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private RedisUtil redisUtil;
@Autowired
private MongoVoUtils mongoVoUtils;
@Autowired
private RedisTemplate redisTemplate;
/**
* 初始化普通库存
*
* @param ticketId 票id
* @param totalGeneral 普通库存
*/
public void setSurplusGeneral(String ticketId, int totalGeneral) {
redisUtil.set(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, totalGeneral);
}
/**
* 获取普通剩余库存
*
* @param ticketId 票id
* @return 普通剩余库存
*/
public int getSurplusGeneral(String ticketId) {
return (int) redisUtil.get(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL);
}
/**
* 修改普通库存 并 返回修改后的数量
*
* @param ticketId 票id
* @param surplusGeneral 普通库存
* @return 普通剩余库存
*/
public int changeSurplusGeneral(String ticketId, int surplusGeneral) {
if (surplusGeneral > 0) {
return (int) redisUtil.incr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, surplusGeneral);
} else {
return (int) redisUtil.decr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, Math.abs(surplusGeneral));
}
}
/**
* 判断 当前库存是否售罄
*
* @param ticketId 票id
* @return boolean
*/
public boolean ticketIsSoldOut(String ticketId) {
if (0 >= getSurplusGeneral(ticketId)) {
return true;
} else {
return false;
}
}
/**
* 初始化兑换库存
*
* @param ticketId 票id
* @param totalExchange 兑换库存
*/
public void setSurplusExchange(String ticketId, int totalExchange) {
redisUtil.set(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE, totalExchange);
}
/**
* 获取兑换剩余库存
*
* @param ticketId 票id
* @return 兑换剩余库存
*/
public int getSurplusExchange(String ticketId) {
return (int) redisUtil.get(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE);
}
/**
* 变更兑换库存 并 返回 修改后的数量
*
* @param ticketId 票id
* @param surplusExchange 普通库存
* @return 兑换剩余库存
*/
public int changeSurplusExchange(String ticketId, int surplusExchange) {
if (surplusExchange > 0) {
return (int) redisUtil.incr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE, surplusExchange);
} else {
return (int) redisUtil.decr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_EXCHANGE, Math.abs(surplusExchange));
}
}
public void setOrderList(String userId, List<KylinOrderListVo> vo) {
redisUtil.set(KylinRedisConst.ORDER_LIST + userId, vo);
}
public List<KylinOrderListVo> getOrderList(String userId) {
if (redisUtil.hasKey(KylinRedisConst.ORDER_LIST + userId)) {
} else {
List<KylinOrderListVo> voList = mongoTemplate.find(Query.query(Criteria.where("userId").is(userId))
.with(Sort.by(Sort.Direction.DESC, "createdAt")).limit(40),
KylinOrderListVo.class, KylinOrderTicketVo.class.getSimpleName());
redisUtil.set(KylinRedisConst.ORDER_LIST + userId, voList);
}
return (List<KylinOrderListVo>) redisUtil.get(KylinRedisConst.ORDER_LIST + userId);
}
/**
* 根据订单id 获取 订单vo 详情
*
* @param orderId
* @return
*/
public KylinOrderTicketVo getOrderTicketVo(String orderId) {
if (redisUtil.hasKey(KylinRedisConst.ORDER + orderId)) {
} else {
KylinOrderTicketVo ticketData = mongoTemplate.findOne(Query.query(Criteria.where("orderTicketsId").is(orderId)), KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderId").is(orderId)), KylinOrderTicketEntitiesVo.class, KylinOrderTicketEntitiesVo.class.getSimpleName());
ticketData.setEntitiesVoList(kylinOrderTicketEntitiesVoList);
redisUtil.set(KylinRedisConst.ORDER + orderId, ticketData);
}
return (KylinOrderTicketVo) redisUtil.get(KylinRedisConst.ORDER + orderId);
}
/**
* 删除订单redis
*
* @param orderId
*/
public void delOrderTicketRedis(String orderId) {
redisUtil.del(KylinRedisConst.ORDER + orderId);
}
/**
* 获取 验票账号 vo
*
* @param checkUserId
* @return
*/
public KylinCheckUserVo getCheckUserVo(String checkUserId) {
if (redisUtil.hasKey(KylinRedisConst.CHECK_USER + checkUserId)) {
} else {
KylinCheckUserVo ticketData = mongoTemplate.findOne(Query.query(Criteria.where("checkUserId").is(checkUserId)), KylinCheckUserVo.class, KylinCheckUserVo.class.getSimpleName());
redisUtil.set(KylinRedisConst.CHECK_USER + checkUserId, ticketData);
}
return (KylinCheckUserVo) redisUtil.get(KylinRedisConst.CHECK_USER + checkUserId);
}
/**
* 删除 验票账号 redis
*
* @param checkUserId
*/
public void delCheckUserRedis(String checkUserId) {
redisUtil.del(KylinRedisConst.CHECK_USER + checkUserId);
}
/**
* 获取 验票账号关系 vo
*
* @param checkUserId
* @return
*/
public KylinCheckUserPerformanceVo getCheckUserRelationVo(String checkUserId) {
if (redisUtil.hasKey(KylinRedisConst.CHECK_USER_RELATION + checkUserId)) {
} else {
KylinCheckUserPerformanceVo ticketData = mongoTemplate.findOne(Query.query(Criteria.where("checkUserId").is(checkUserId)), KylinCheckUserPerformanceVo.class, KylinCheckUserPerformanceVo.class.getSimpleName());
redisUtil.set(KylinRedisConst.CHECK_USER_RELATION + checkUserId, ticketData);
}
return (KylinCheckUserPerformanceVo) redisUtil.get(KylinRedisConst.CHECK_USER_RELATION + checkUserId);
}
/**
* 删除 验票账号关系 vo
*
* @param checkUserId
*/
public void delCheckUserRelationRedis(String checkUserId) {
redisUtil.del(KylinRedisConst.CHECK_USER_RELATION + checkUserId);
}
/**
* 获取入场须知
*
* @param enterInfoId
* @return
*/
public String getEnterInfo(String enterInfoId) {
if (redisUtil.hasKey(KylinRedisConst.ENTER_INFO + enterInfoId)) {
} else {
return "入场须知";
}
return (String) redisUtil.get(KylinRedisConst.ENTER_INFO + enterInfoId);
}
public void updatePerformanceMongo(String performanceIds, KylinPerformanceVo paramVo) {
//查询 mysql 数据
KylinPerformanceVo vo;
vo = paramVo;
if (vo != null) {
try {
//删除 mongo数据
mongoTemplate.remove(Query.query(Criteria.where("performancesId").is(performanceIds)), KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
} catch (Exception e) {
e.printStackTrace();
}
try {
//新增 mongo数据
mongoTemplate.insert(vo, KylinPerformanceVo.class.getSimpleName());
} catch (Exception e) {
e.printStackTrace();
}
try {
//删除redis
redisUtil.del(KylinRedisConst.PERFORMANCES + performanceIds);
// 大龙相关 演出列表
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_CITYNAME + vo.getCityName());
redisUtil.del(KylinRedisConst.PERFORMANCES_ROADLIST + vo.getRoadShowId());
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_SYSTEM_RECOMMEND);
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_RECOMMEND);
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_NOTICE);
redisUtil.del(KylinRedisConst.PERFORMANCES_LIST_EXCLUSIVE);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("创建Vo异常");
}
}
/**
* @param performanceId 演出id
* @param ticketId 票种id
* @param buyCount 购买数量 大于 0 增加 小于 0 减少 对应 支付 退款表
*/
public void changeBuyInfo(String userId, String idCard, String performanceId, String ticketId, int buyCount) {
String redisKey;
KylinPerformanceVo vo = getPerformanceVo(performanceId);
int isTrueName = vo.getIsTrueName();
String useTime = "";
HashMap<String, ArrayList<String>> allTicketId = new HashMap<>();
for (int x = 0; x < vo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = vo.getTicketTimeList().get(x);
ArrayList<String> ticketList = new ArrayList<>();
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getType() == 1) {
ticketList.add(ticketItem.getTicketsId());
}
if (ticketItem.getTicketsId().equals(ticketId)) {
useTime = ticketItem.getUseStart();
}
}
allTicketId.put(timeItem.getUseStart(), ticketList);
}
if (0 == isTrueName) {
redisKey = KylinRedisConst.USERID_BUY_INFO + userId;
} else {
redisKey = KylinRedisConst.IDCARD_BUY_INFO + idCard;
}
String performanceIdKey = redisKey + ":" + KylinRedisConst.PERFORMANCE_ID + ":" + performanceId;
String ticketIdKey = redisKey + ":" + KylinRedisConst.TICKET_ID + ":" + ticketId;
String ticketUseTimeKey = ticketIdKey + ":" + KylinRedisConst.USE_TIME;
redisUtil.set(ticketUseTimeKey, useTime);
if (buyCount > 0) {
redisUtil.incr(ticketIdKey, buyCount);
redisUtil.incr(performanceIdKey, buyCount);
}else{
redisUtil.decr(ticketIdKey, Math.abs(buyCount));
redisUtil.decr(performanceIdKey, Math.abs(buyCount));
}
}
// 获取 用户维度 演出购买数量
public int getUserPBuyCount(String userId, String performanceId) {
try {
return (int) redisUtil.get(KylinRedisConst.USERID_BUY_INFO + userId + ":" + KylinRedisConst.PERFORMANCE_ID + ":" + performanceId);
} catch (Exception e) {
return 0;
}
}
// 获取 用户维度 票种购买数量
public int getUserTBuyCount(String userId, String ticketId) {
try {
return (int) redisUtil.get(KylinRedisConst.USERID_BUY_INFO + userId + ":" + KylinRedisConst.TICKET_ID + ":" + ticketId);
} catch (Exception e) {
return 0;
}
}
// 获取 证件维度 演出购买数量
public int getIdCardPBuyCount(String idCard, String performanceId) {
try {
return (int) redisUtil.get(KylinRedisConst.IDCARD_BUY_INFO + idCard + ":" + KylinRedisConst.PERFORMANCE_ID + ":" + performanceId);
} catch (Exception e) {
return 0;
}
}
// 获取 证件维度 票种购买数量
public int getIdCardTBuyCount(String idCard, String ticketId) {
try {
return (int) redisUtil.get(KylinRedisConst.IDCARD_BUY_INFO + idCard + ":" + KylinRedisConst.TICKET_ID + ":" + ticketId);
} catch (Exception e) {
return 0;
}
}
/**
* 删除订单redis
*
* @param orderEntitiesId
*/
public void delOrderTicketEntitiesRedis(String orderEntitiesId) {
redisUtil.del(KylinRedisConst.ORDER_ENTITIES + orderEntitiesId);
}
/**
* 根据演出id 获取 演出vo 详情
*
* @param performanceId
* @return
*/
public KylinPerformanceVo getPerformanceVo(String performanceId) {
if (redisUtil.hasKey(KylinRedisConst.PERFORMANCES + performanceId)) {
} else {
KylinPerformanceVo performanceData = mongoTemplate.findOne(Query.query(Criteria.where("performancesId").is(performanceId)), KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
redisUtil.set(KylinRedisConst.PERFORMANCES + performanceId, performanceData);
}
return (KylinPerformanceVo) redisUtil.get(KylinRedisConst.PERFORMANCES + performanceId);
}
/**
* 获取分销用户名字
*
* @param agentId
* @return
*/
public String getAgentInfoName(String agentId) {
String redisKey = KylinRedisConst.PERFORMANCES_AGENT_INFO.concat(agentId);
// String name = (String) redisUtil.hget(redisKey, "name");
String name = "";
return name;
}
/**
* 获取演出列表redis
*
* @param cityName
*/
public List<KylinPerformanceVo> getPerformancesListOfcityName(String cityName) {
String redisKey = KylinRedisConst.PERFORMANCES_LIST_CITYNAME.concat(cityName);
if (!redisUtil.hasKey(redisKey)) {
// 固定查询条件
Query query = getCommonWhere();
// 其他条件
Pattern cityNameCompile = Pattern.compile("^.*" + cityName + ".*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("cityName").regex(cityNameCompile));
// 排序
Sort sortName = Sort.by(Sort.Direction.ASC, "timeStart");
query.with(sortName);
// 不要查询的字段
query.fields().exclude("details");
query.fields().exclude("noticeImage");
query.fields().exclude("ticketTimeList");
query.fields().exclude("describeElectronic");
List<KylinPerformanceVo> performancesList = mongoTemplate.find(query, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
redisUtil.set(redisKey, performancesList);
}
return (List<KylinPerformanceVo>) redisUtil.get(redisKey);
}
/**
* 获取系统推荐演出列表redis
*/
public List<KylinPerformanceVo> getPerformancesListIsSystemRecommend() {
String redisKey = KylinRedisConst.PERFORMANCES_LIST_SYSTEM_RECOMMEND;
if (!redisUtil.hasKey(redisKey)) {
// 固定条件
Query query = getCommonWhere();
// 排序
Sort sortName = Sort.by(Sort.Direction.ASC, "timeStart");
Pageable pageable = PageRequest.of(0, 8, sortName);
query.with(pageable);
// 不要查询的字段
query.fields().exclude("details");
query.fields().exclude("noticeImage");
query.fields().exclude("ticketTimeList");
query.fields().exclude("describeElectronic");
// 推荐
List<KylinPerformanceVo> systemRecommendList = mongoTemplate.find(query, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
redisUtil.set(redisKey, systemRecommendList);
}
return (List<KylinPerformanceVo>) redisUtil.get(redisKey);
}
/**
* 获取演出预告列表redis
*/
public HashMap<String, Object> getPerformancesListNotice() {
String redisKey = KylinRedisConst.PERFORMANCES_LIST_NOTICE;
if (!redisUtil.hasKey(redisKey)) {
// 固定条件
Query query = getCommonWhere();
// 今天的
HashMap toDayTime = DateUtil.oneDayStartEnd();
String nowTimeTStr = (String) toDayTime.get("startStr");
String toDayEndTimeStr = (String) toDayTime.get("endStr");
query.addCriteria(Criteria.where("sellTime").gte(nowTimeTStr).lt(toDayEndTimeStr));
query.fields().exclude("details");
query.fields().exclude("noticeImage");
query.fields().exclude("ticketTimeList");
query.fields().exclude("describeElectronic");
List<KylinPerformanceVo> toDayList = mongoTemplate.find(query, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
// 固定条件
Query queryT = getCommonWhere();
// 三天的
Calendar cal = Calendar.getInstance();
cal.setTime((Date) toDayTime.get("end"));
Date beforeDayEnd = DateUtil.getBeforeDayEnd(cal, 3);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String threeDaysLaterStr = sdf.format(beforeDayEnd);
queryT.addCriteria(Criteria.where("sellTime").gte(toDayEndTimeStr).lt(threeDaysLaterStr));
queryT.fields().exclude("details");
queryT.fields().exclude("noticeImage");
queryT.fields().exclude("ticketTimeList");
queryT.fields().exclude("describeElectronic");
List<KylinPerformanceVo> threeDaysList = mongoTemplate.find(queryT, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
HashMap<String, Object> info = new HashMap<>();
info.put("toDayList", toDayList);
info.put("threeDaysList", threeDaysList);
redisUtil.set(redisKey, info);
}
return (HashMap<String, Object>) redisUtil.get(redisKey);
}
/**
* 获取推荐演出列表redis
*/
public List<KylinPerformanceVo> getPerformancesListIsRecommend() {
String redisKey = KylinRedisConst.PERFORMANCES_LIST_RECOMMEND;
if (!redisUtil.hasKey(redisKey)) {
// 固定条件
Query query = getCommonWhere();
// 排序
Sort sortName = Sort.by(Sort.Direction.DESC, "isRecommend");
query.with(sortName);
// 不要查询的字段
query.fields().exclude("details");
query.fields().exclude("noticeImage");
query.fields().exclude("ticketTimeList");
query.fields().exclude("describeElectronic");
// 推荐
query.addCriteria(Criteria.where("isRecommend").gte(1));
List<KylinPerformanceVo> recommendList = mongoTemplate.find(query, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
redisUtil.set(redisKey, recommendList);
}
return (List<KylinPerformanceVo>) redisUtil.get(redisKey);
}
/**
* 获取会员专属演出列表redis
*/
public List<KylinPerformanceVo> getPerformancesListIsExclusive() {
String redisKey = KylinRedisConst.PERFORMANCES_LIST_EXCLUSIVE;
if (!redisUtil.hasKey(redisKey)) {
// 固定条件
Query query = getCommonWhere();
// 不要查询的字段
query.fields().exclude("details");
query.fields().exclude("noticeImage");
query.fields().exclude("ticketTimeList");
query.fields().exclude("describeElectronic");
// 推荐
query.addCriteria(Criteria.where("isExclusive").is(1));
List<KylinPerformanceVo> exclusiveList = mongoTemplate.find(query, KylinPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
redisUtil.set(redisKey, exclusiveList);
}
return (List<KylinPerformanceVo>) redisUtil.get(redisKey);
}
/**
* 获取所有城市演出列表redis
*/
public List<KylinPerformanceVo> getPerformancesListAll() {
List<KylinPerformanceVo> list = new ArrayList<>();
Set<String> keys = redisTemplate.keys(KylinRedisConst.PERFORMANCES_LIST_ALL);
for (String key : keys) {
List<KylinPerformanceVo> OneCityList = (List<KylinPerformanceVo>) redisUtil.get(key);
list.addAll(OneCityList);
}
return list;
}
/**
* 获取巡演列表redis
*/
public List<KylinPerformanceVo> getRoadList(String roadShowId) {
String redisKey = KylinRedisConst.PERFORMANCES_ROADLIST.concat(roadShowId);
if (!redisUtil.hasKey(redisKey)) {
List<KylinPerformanceVo> roadList = mongoTemplate.find(
Query.query(Criteria.where("roadShowId").is(roadShowId)),
KylinPerformanceVo.class,
KylinPerformanceVo.class.getSimpleName()
);
redisUtil.set(redisKey, roadList);
}
return (List<KylinPerformanceVo>) redisUtil.get(redisKey);
}
/**
* 演出搜索固定参数
*/
public Query getCommonWhere() {
// 固定条件
Query query = new Query();
LocalDateTime nowTime = LocalDateTime.now();
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime);
query.addCriteria(Criteria.where("timeEnd").gte(nowTimeStr));
query.addCriteria(Criteria.where("appStatus").in(6, 8, 9, 10));
query.addCriteria(Criteria.where("isShow").is(1));
return query;
}
public KylinOrderRefundsVo getOrderRefundVo(String orderRefundsId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND + orderRefundsId)) {
} else {
KylinOrderRefundsVo orderRefundsVo = mongoTemplate.findOne(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName());
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
orderRefundsVo.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
orderRefundsVo.setOrderRefundPicVos(picVos);
redisUtil.set(KylinRedisConst.ORDER_REFUND + orderRefundsId, orderRefundsVo);
}
return (KylinOrderRefundsVo) redisUtil.get(KylinRedisConst.ORDER_REFUND + orderRefundsId);
}
public List<KylinOrderRefundsVo> getOrderRefundVoByOrderId(String orderId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId)) {
} else {
List<KylinOrderRefundsVo> orderRefundsVoList = new ArrayList<>();
List<KylinOrderRefundsVo> data = mongoTemplate.find(Query.query(Criteria.where("orderTicketsId").is(orderId)), KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName());
for (KylinOrderRefundsVo item : data) {
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
if(kylinOrderTicketEntitiesVoList.size()>1){
continue;
}
item.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
item.setOrderRefundPicVos(picVos);
orderRefundsVoList.add(item);
}
redisUtil.set(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId, orderRefundsVoList);
}
return (List<KylinOrderRefundsVo>) redisUtil.get(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
public void delOrderRefundVo(String orderRefundsId){
redisUtil.del(KylinRedisConst.ORDER_REFUND + orderRefundsId);
}
public void delOrderRefundVoByOrderId(String orderId){
redisUtil.del(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
/**
* 获取可退款票单价格
* @param orderTicketVo 订单vo数据
* @param orderTicketEntitiesId 票单id
* @return
*/
public BigDecimal getCanRefundOrderEntitiesPrice(KylinOrderTicketVo orderTicketVo, List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList, String orderTicketEntitiesId){
//单票实付价格
BigDecimal singlePrice = orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber()));
//单票剩余未退款金额
BigDecimal canRefundSinglePrice = new BigDecimal("0.00");
for (KylinOrderTicketEntitiesVo item : orderTicketVo.getEntitiesVoList()) {
if (item.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
canRefundSinglePrice = singlePrice.subtract(item.getRefundPrice()==null?BigDecimal.valueOf(0.00):item.getRefundPrice());
}
}
//订单锁定金额
BigDecimal orderLockPrice = new BigDecimal("0.00");
for (KylinOrderRefundsVo refundVo : kylinOrderRefundsVoBaseList) {
int status = refundVo.getStatus();
if (status == 0 || status == 3 || status == 5 || status == 7) { //退款流程未完成 金额锁定
List<KylinOrderRefundEntitiesVo> refundEntitiesVos = refundVo.getOrderRefundEntitiesVoList();
for (KylinOrderRefundEntitiesVo refundEntitiesVo : refundEntitiesVos) {
if (refundEntitiesVo.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
orderLockPrice = orderLockPrice.add(refundEntitiesVo.getRefundPrice());
}
}
}
}
//订单可退金额
BigDecimal refundSinglePrice = canRefundSinglePrice.subtract(orderLockPrice);
//是否包含快递费
if (orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).subtract(orderTicketVo.getPriceRefund()).compareTo(canRefundSinglePrice) == 0) {
refundSinglePrice = refundSinglePrice.add(orderTicketVo.getPriceExpress());
}
return refundSinglePrice;
}
}
package com.liquidnet.service.order.utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class MongoVoUtils {
@Autowired
private RedisUtil redisUtil;
@Autowired
private DataUtils dataUtils;
@Autowired
private MongoTemplate mongoTemplate;
/**
* @param userId 用户id
* @param type 1新增 2修改
* @param orderId 订单id [需要新增或者修改的订单id]
*/
public Boolean resetOrderListVo(String userId, Integer type, String orderId, KylinOrderTicketVo dataSingle) {
List<KylinOrderListVo> vo = new ArrayList<>();
List<KylinOrderListVo> redisVo = new ArrayList();
KylinOrderListVo voItem = new KylinOrderListVo();
KylinOrderTicketVo data;
if (dataSingle == null) {
data = dataUtils.getOrderTicketVo(orderId);
} else {
data = dataSingle;
}
BeanUtils.copyProperties(data, voItem);
List<KylinOrderListVo> redisData = dataUtils.getOrderList(userId);
if (type == 1) {
redisVo.add(voItem);
if (redisData.size() > 0) {
if (redisData.get(0).getOrderTicketsId().equals(orderId)) {
redisData.remove(0);
}
}
}
redisVo.addAll(redisData);
switch (type) {
case 1:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (i == 0) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
if (redisVo.size() == 0) {
vo.add(voItem);
}
dataUtils.setOrderList(userId, vo);
return true;
case 2:
for (int i = 0; i < redisVo.size(); i++) {
if (i == 40) {
break;
}
if (redisVo.get(i).getOrderTicketsId().equals(orderId)) {
vo.add(voItem);
} else {
vo.add(redisVo.get(i));
}
}
dataUtils.setOrderList(userId, vo);
return true;
default:
return false;
}
}
}
package com.liquidnet.service.order.utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class OrderUtils {
@Autowired
private DataUtils dataUtils;
@Autowired
private RedisUtil redisUtil;
public String judgeOrderLimit(
int type,
String userId,
String idCard,
String performanceId,
String ticketId,
int performanceLimitCount,
int performanceMemberLimitCount,
int ticketLimitCount,
int ticketMemberLimitCount,
int performanceBuyCount,
int ticketBuyCount,
int memberType,
int isTrueName
) {
Integer[] integers;
System.out.println("TYPE = " + type);
if (101 == type) {
integers = festivalOrderLimit(userId, idCard, performanceId, ticketId, performanceBuyCount, ticketBuyCount, isTrueName);
} else {
integers = roadShowOrderLimit(userId, idCard, performanceId, ticketId, performanceBuyCount, ticketBuyCount, isTrueName);
}
System.out.println("integers PERFORMANCE= " + integers[0]);
System.out.println("integers TICKETS= " + integers[1]);
return judgeMemberType(performanceLimitCount, performanceMemberLimitCount, ticketLimitCount, ticketMemberLimitCount, memberType, integers[0], integers[1]);
}
public Integer[] roadShowOrderLimit(
String userId,
String idCard,
String performanceId,
String ticketId,
int performanceBuyCount,
int ticketBuyCount,
int isTrueName
) {
if (1 == isTrueName) {//实名
performanceBuyCount += dataUtils.getIdCardPBuyCount(idCard, performanceId);
ticketBuyCount += dataUtils.getIdCardTBuyCount(idCard, ticketId);
} else {//非实名
performanceBuyCount += dataUtils.getUserPBuyCount(userId, performanceId);
ticketBuyCount += dataUtils.getUserTBuyCount(userId, ticketId);
}
return new Integer[]{performanceBuyCount, ticketBuyCount};
}
public Integer[] festivalOrderLimit(
String userId,
String idCard,
String performanceId,
String ticketId,
int performanceBuyCount,
int ticketBuyCount,
int isTrueName
) {
if (1 == isTrueName) {//实名
performanceBuyCount += dataUtils.getIdCardPBuyCount(idCard, performanceId);
ticketBuyCount += dataUtils.getIdCardTBuyCount(idCard, ticketId);
} else {//非实名
performanceBuyCount += dataUtils.getUserPBuyCount(userId, performanceId);
ticketBuyCount += dataUtils.getUserTBuyCount(userId, ticketId);
}
return new Integer[]{performanceBuyCount, ticketBuyCount};
}
public String judgeMemberType(int performanceLimitCount, int performanceMemberLimitCount, int ticketLimitCount, int ticketMemberLimitCount, int memberType, int performanceBuyCount, int ticketBuyCount) {
if (memberType == 1 || memberType == 2) {
if (performanceBuyCount > performanceMemberLimitCount && performanceMemberLimitCount != 0) {
return "该演出只能购买" + performanceMemberLimitCount + "张";//超过演出维度购买量
}
if (ticketBuyCount > ticketMemberLimitCount && ticketMemberLimitCount != 0) {
return "该票种只能购买" + ticketMemberLimitCount + "张";//超过票维度购买量
}
} else {//非会员区间
if (performanceBuyCount > performanceLimitCount && performanceLimitCount != 0) {
return "该演出只能购买" + performanceLimitCount + "张";//超过演出维度购买量
}
if (ticketBuyCount > ticketLimitCount && ticketLimitCount != 0) {
return "该票种只能购买" + ticketLimitCount + "张";//超过票维度购买量
}
}
return "";
}
public boolean isMember(String uid) {
String rk = AdamRedisConst.INFO_USER_MEMBER.concat(uid);
AdamUserMemberVo vo = (AdamUserMemberVo) redisUtil.get(rk);
return null != vo && vo.isActive();
}
public AdamAddressesVo getAddress(String uid, String addressesId) {
String rk = AdamRedisConst.INFO_ADDRESSES.concat(uid);
List<AdamAddressesVo> vos = (List<AdamAddressesVo>) redisUtil.get(rk);
return vos.stream().filter(r -> r.getAddressesId().equals(addressesId)).findAny().orElse(null);
}
public AdamEntersVo getEnters(String uid, String entersId) {
String rk = AdamRedisConst.INFO_ENTERS.concat(uid);
List<AdamEntersVo> vos = (List<AdamEntersVo>) redisUtil.get(rk);
return vos.stream().filter(r -> r.getEntersId().equals(entersId)).findAny().orElse(null);
}
}
package com.liquidnet.service.order.utils;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.kylin.dto.vo.middle.message.MessageConfigVo;
import com.liquidnet.service.kylin.dto.vo.middle.message.MessageDataVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.MessageDigest;
@Service
@Slf4j
public class OtherUtils {
@Value("${liquidnet.url-service.url}")
private String serviceUrl;
//发短信
public boolean sendMessage(String mobile, MessageDataVo data, MessageConfigVo configVo, Integer sign_id) {
try {
if (null != configVo && null != configVo.getStatus() && configVo.getStatus()) {
LinkedMultiValueMap<String, String> httpData = new LinkedMultiValueMap<>();
httpData.add("mobile", mobile);
httpData.add("templateId", configVo.getId());
httpData.add("signId", sign_id.toString());
httpData.add("data", JsonUtils.toJson(data));
String sign = Ksort(httpData);
sign = sign.concat("&key=").concat("R7tXY9smPQPG9Ku5yI0u6sfnlckmk04V");
sign = sign.toUpperCase();
httpData.add("sign", sign);
System.out.println("data = = = "+httpData.toString());
String returnData = HttpUtil.post(serviceUrl + "sendSmsMessage", httpData);
JsonNode postResultNew = JsonUtils.fromJson(returnData, JsonNode.class);
if (!postResultNew.get("message").toString().equals("OK")) {
return false;
} else {
return true;
}
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public String Ksort(MultiValueMap<String, String> map) {
String sb = "";
String[] key = new String[map.size()];
int index = 0;
for (String k : map.keySet()) {
key[index] = k;
index++;
}
for (String s : key) {
sb += s + "=" + map.get(s).get(0) + "&";
}
sb = sb.substring(0, sb.length() - 1);
// 将得到的字符串进行处理得到目标格式的字符串
try {
sb = URLDecoder.decode(sb, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 使用常见的UTF-8编码
sb = sb.replace("%3D", "=").replace("%26", "&");
return sb;
}
public static String md5s(String txt) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(txt.getBytes("GBK")); //问题主要出在这里,Java的字符串是unicode编码,不受源码文件的编码影响;而PHP的编码是和源码文件的编码一致,受源码编码影响。
StringBuilder buf = new StringBuilder();
for (byte b : md.digest()) {
buf.append(String.format("%02x", b & 0xff));
}
return buf.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
40001=非法TOKEN
40002=被踢下线喽
40003=TOKEN失效
# ------------------------ 4开头错误码作系统保留
#APP ERROR
20001=验证码发送失败
20002=验证码无效
20003=无权查看
20004=参数错误
20005=手机号获取失败,请更换登录方式
20006=第三方账号未注册
20007=数量错误
20008=无权购买
20009=非会员用户暂不可购买
20010=当前不可购买
20011=未开始售卖
20012=售卖已结束
20013=已超过快递票截止时间
20014=快递票未填写收货地址
20015=入场人数量错误
20016=库存不足
20017=年龄不符合
20018=下单失败
20019=申请失败
20020=当前状态不可撤回
20021=退款金额不能为0
20022=申请金额不得小于0
20023=请求频繁
20024=订单不存在
20025=订单已支付
20026=订单已关闭
20028=订单已失效
20027=您已支付请刷新再试
20029=未选择支付方式
#APP PARTNER
20101=添加失败
20102=删除失败
20103=修改失败
20104=查询失败
20105=创建失败
20106=不可删除
20107=复制失败
20108=上线失败
20109=下线失败
20110=不可上线
20111=不可下线
20112=不可修改
20113=未创建场次
20114=有场次未创建票种
20115=提交失败
20116=不可撤回
20117=撤回失败
20118=日期有误
#APP JDM
20201=
# 专业版APP
20601=账号不存在
20602=密码错误
20603=
20604=
20605=
20606=当前账号无关联演出数据
20607=当前账号未关联当前演出
20608=当前演出还未开放下载
# 演出
20700=演出详情获取失败
20701=巡演获取失败
20702=获取演出场次票种失败
20703=获取支付前详情失败
kylin_order_ticket_entities.updateStatusByStation=UPDATE kylin_order_ticket_entities SET `status`=?,check_client=?,updated_at=? WHERE order_ticket_entities_id=?
# ------------------------缺票登记(不用考虑并发)----------------------------
kylin_lack_register.insert=INSERT INTO `kylin_lack_registers`(`lack_registers_id` ,`performance_id` ,`ticket_id` ,`user_id` ,`user_name` ,`user_mobile` ,`send_status` ,`ip_address` ,`created_at`)VALUES(? ,? ,? ,? ,? ,? ,? ,? ,?);
# ------------------------创建订单----------------------------
kylin_order_ticket.add=INSERT INTO kylin_order_tickets(order_tickets_id,user_id,user_name,user_mobile,performance_title,order_code,qr_code,order_type,order_version,`number`,price,price_member,price_total,price_voucher,price_actual,price_express,price_refund,refund_number,pay_type,payment_type,time_pay,express_contacts,express_address,express_phone,coupon_type,get_ticket_type,get_ticket_describe,pay_countdown_minute,`comment`,created_at,updated_at,pay_code)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_ticket_relation.add=INSERT INTO kylin_order_ticket_relations(order_ticket_relations_id ,order_id ,transfer_id ,live_id ,agent_id ,is_member ,performance_id ,time_id ,ticket_id ,created_at ,updated_at)VALUES(?,?,?,?,?,?,?,?,?,?,?)
kylin_order_ticket_status.add=INSERT INTO kylin_order_ticket_status(order_ticket_status_id ,order_id ,express_type ,is_student ,transfer_status ,`status` ,pay_status ,created_at ,updated_at)VALUES(?,?,?,?,?,?,?,?,?)
kylin_order_ticket_entities.add=INSERT INTO kylin_order_ticket_entities(order_ticket_entities_id ,order_id ,ticket_id ,user_id ,time_id ,performance_id ,enter_type ,enter_name ,enter_mobile,enter_id_code,`status`,sys_damai,check_client,is_payment,`comment`,created_at,updated_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
# ------------------------再次支付----------------------------
kylin_order_ticket.payAgain=UPDATE kylin_order_tickets SET updated_at = ? , pay_code = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_status.payAgain=UPDATE kylin_order_ticket_status SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_relation.payAgain=UPDATE kylin_order_ticket_relations SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_entities.payAgain=UPDATE kylin_order_ticket_entities SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
# ------------------------支付回调----------------------------
kylin_order_ticket.synPay=UPDATE kylin_order_tickets SET payment_type = ? ,pay_code = ? , time_pay = ?, qr_code = ? , updated_at = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_status.synPay=UPDATE kylin_order_ticket_status SET `status` = ?,pay_status = ?,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_relation.synPay=UPDATE kylin_order_ticket_relations SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ?,sys_damai = 1 WHERE order_id = ? and (updated_at <= ? or created_at = ?)
# ------------------------订单关闭----------------------------
kylin_order_ticket.close=UPDATE kylin_order_tickets SET updated_at = ? WHERE order_tickets_id = ?
kylin_order_ticket_status.close=UPDATE kylin_order_ticket_status SET `status` = ?,updated_at = ? WHERE order_id = ?
kylin_order_ticket_relation.close=UPDATE kylin_order_ticket_relations SET updated_at = ? WHERE order_id = ?
# ------------------------用户发起订单退款----------------------------
kylin_order_ticket_status.refund=UPDATE kylin_order_ticket_status SET status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_entities.refund=UPDATE kylin_order_ticket_entities SET is_payment = ? ,updated_at = ? WHERE order_ticket_entities_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_refund.refund=INSERT INTO kylin_order_refunds (order_refunds_id,order_tickets_id,order_refund_code,price,price_express,status,type,applicant_id,applicant_name,applicant_at,reason,refund_cate,created_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_refund_entities.refund=INSERT INTO kylin_order_refund_entities (order_refunds_entities_id,order_refunds_id,refund_price,order_ticket_entities_id,created_at) VALUES(?,?,?,?,?)
kylin_order_refund_pic.refund=INSERT INTO kylin_order_refund_pic (refund_pic_id,order_refunds_id,pic_url,created_at) VALUES (?,?,?,?)
# ------------------------用户发起订单退款撤回----------------------------
kylin_order_ticket_status.withDraw=UPDATE kylin_order_ticket_status SET status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_entities.withDraw=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ?,sys_damai = 1 WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_refund.withDraw=UPDATE kylin_order_refunds SET status = ? ,updated_at = ? WHERE order_refunds_id = ?
# ------------------------超时支付申请退款----------------------------
kylin_order_ticket_status.overtimeRefund=UPDATE kylin_order_ticket_status SET status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_entities.overtimeRefund=UPDATE kylin_order_ticket_entities SET is_payment = ? ,updated_at = ? WHERE order_ticket_entities_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_refund.overtimeRefund=INSERT INTO kylin_order_refunds (order_refunds_id,order_tickets_id,order_refund_code,price,price_express,status,type,applicant_id,applicant_name,applicant_at,reason,refund_cate,created_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_refund_entities.overtimeRefund=INSERT INTO kylin_order_refund_entities (order_refunds_entities_id,order_refunds_id,refund_price,order_ticket_entities_id,created_at) VALUES(?,?,?,?,?)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liquidnet-bus-service</artifactId>
<groupId>com.liquidnet</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-service-order</artifactId>
<packaging>pom</packaging>
<modules>
<module>liquidnet-service-order-impl</module>
</modules>
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
</dependency>
</dependencies>
</project>
......@@ -34,7 +34,10 @@
<module>liquidnet-service-platform</module>
<module>liquidnet-service-consumer</module>
<module>liquidnet-service-executor-all</module>
<!-- <module>liquidnet-service-example</module>-->
<module>liquidnet-service-order</module>
<module>liquidnet-service-order-impl</module>
<module>liquidnet-service-order/liquidnet-service-order-impl</module>
<!-- <module>liquidnet-service-example</module>-->
<!-- <module>liquidnet-service-sequence</module>-->
<!-- <module>liquidnet-service-account</module>-->
<!-- <module>liquidnet-service-bank</module>-->
......
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