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

Commit 4e78b875 authored by jiangxiulong's avatar jiangxiulong

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

parents 962c7ac9 1d85d266
......@@ -5,32 +5,16 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "KylinStationCheckDataParam", description = "上载验票入参")
@Data
public class KylinStationCheckOrderParam implements Serializable {
private static final long serialVersionUID = 2312115659117282564L;
@ApiModelProperty(position = 10, value = "演出ID[64]")
@ApiModelProperty(position = 11, value = "演出ID[64]")
private String performanceId;
@ApiModelProperty(position = 11, value = "订单号")
private String orderCode;
@ApiModelProperty(position = 12, value = "二维码地址")
private String qrCode;
@ApiModelProperty(position = 13, value = "付款张数")
private Integer number;
@ApiModelProperty(position = 14, value = "退款张数")
private Integer refundNumber;
@ApiModelProperty(position = 16, value = "订单状态:0-待付款,1-已付款,2-已关闭,3-正在退款,4-已退款,5-待关闭,6-部分退款")
private Integer status;
@ApiModelProperty(position = 17, value = "支付状态:0-未支付,1-已支付,2-支付失败")
private Integer payStatus;
@ApiModelProperty(position = 18, value = "是否学生票[1-是,2-否]")
private Integer isStudent;
@ApiModelProperty(position = 19, value = "购买者是否是会员[0-否,1-是]")
private Integer isMember;
@ApiModelProperty(position = 30, value = "*验票张数")
private Integer checkedNumber;
@ApiModelProperty(position = 31, value = "*是否已同步[0-否,1-是]")
private Integer synced;
@ApiModelProperty(position = 13, value = "出票端:(验票app)android/ios")
private String checkClient;
@ApiModelProperty(position = 14, value = "出票`orderTicketEntitiesId`列表")
private List<String> checkedEntitiesIdList;
}
......@@ -18,4 +18,8 @@ public class PayAgainParam {
private String deviceFrom;
@ApiModelProperty(value = "openId")
private String openId;
@ApiModelProperty(value = "showUrl")
private String showUrl;
@ApiModelProperty(value = "returnUrl")
private String returnUrl;
}
......@@ -21,9 +21,9 @@ public class PayOrderParam {
@NotNull(message = "必传")
private Integer number;
@ApiModelProperty(value = "是否学生票")
@NotNull(message = "必传")
private Integer isStudent;
// @ApiModelProperty(value = "是否学生票")
// @NotNull(message = "必传")
// private Integer isStudent;
@ApiModelProperty(value = "是否电子票")
@NotNull(message = "必传")
private Integer isElectronic;
......
......@@ -42,10 +42,16 @@ public class TicketCreateParam implements Serializable {
@NotNull(message = "不能为空")
private Integer isElectronic;
@ApiModelProperty(value = "是否电子票", example = "0")
private String expressDescribes;
@ApiModelProperty(value = "是否快递票", example = "0")
@NotNull(message = "不能为空")
private Integer isExpress;
@ApiModelProperty(value = "是否电子票", example = "0")
private String electronicDescribe;
@ApiModelProperty(value = "价格", example = "100.00")
@NotNull(message = "不能为空")
private BigDecimal price;
......
......@@ -27,4 +27,7 @@ public class KylinOrderTicketEntitiesVo implements Serializable {
private String ticketTitle;
private String useStart;
private String useEnd;
private String createdAt;
private String updatedAt;
}
......@@ -10,33 +10,24 @@ import java.io.Serializable;
@Data
public class KylinStationCheckOrderVo implements Serializable {
private static final long serialVersionUID = 7450966265904643147L;
@ApiModelProperty(position = 10, value = "演出ID[64]")
@ApiModelProperty(position = 10, value = "ID[64]")
private String orderTicketEntitiesId;
@ApiModelProperty(position = 11, value = "演出ID[64]")
private String performanceId;
@ApiModelProperty(position = 11, value = "订单号")
private String orderCode;
@ApiModelProperty(position = 12, value = "二维码地址")
private String qrCode;
@ApiModelProperty(position = 12, value = "订单ID")
private String orderId;
@ApiModelProperty(position = 13, value = "用户昵称")
private String userName;
private String enterName;
@ApiModelProperty(position = 14, value = "用户手机号")
private String userMobile;
@ApiModelProperty(position = 16, value = "付款张数")
private Integer number;
@ApiModelProperty(position = 17, value = "退款张数")
private Integer refundNumber;
@ApiModelProperty(position = 18, value = "订单状态:0-待付款,1-已付款,2-已关闭,3-正在退款,4-已退款,5-待关闭,6-部分退款")
private String enterMobile;
@ApiModelProperty(position = 15, value = "出票状态:0-未出票,1-已出票")
private Integer status;
@ApiModelProperty(position = 19, value = "支付状态:0-未支付,1-已支付,2-支付失败")
private Integer payStatus;
@ApiModelProperty(position = 20, value = "是否学生票[1-是,2-否]")
private Integer isStudent;
@ApiModelProperty(position = 21, value = "购买者是否是会员[0-否,1-是]")
private Integer isMember;
@ApiModelProperty(position = 30, value = "*验票张数")
private Integer checkedNumber;
@ApiModelProperty(position = 31, value = "*是否已同步[0-否,1-是]")
private Integer synced;
@ApiModelProperty(position = 16, value = "支付状态:0-未支付,1-已支付,2-退款中,3-已退款")
private Integer isPayment;
@ApiModelProperty(position = 17, value = "出票端:(验票app)android/ios")
private String checkClient;
@ApiModelProperty(position = 18, value = "二维身份CODE")
private String qrCode;
private static final KylinStationCheckOrderVo obj = new KylinStationCheckOrderVo();
......
package com.liquidnet.service.kylin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "KylinStationLoginVo", description = "专业版登录成功响应数据")
@Data
public class KylinStationLoginVo implements Serializable, Cloneable {
private static final long serialVersionUID = 9097515630202255297L;
@ApiModelProperty(position = 10, value = "ID[64]")
private String uid;
@ApiModelProperty(position = 11, value = "手机号[11]")
private String mobile;
@ApiModelProperty(position = 12, value = "姓名[20]")
private String name;
@ApiModelProperty(position = 13, value = "TOKEN[255]")
private String token;
private static final KylinStationLoginVo obj = new KylinStationLoginVo();
public static KylinStationLoginVo getNew() {
try {
return (KylinStationLoginVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinStationLoginVo();
}
}
}
......@@ -12,7 +12,7 @@ import java.util.List;
public class KylinStationPerformanceVo implements Serializable, Cloneable {
private static final long serialVersionUID = -4994363974994478286L;
@ApiModelProperty(position = 10, value = "演出ID[64]")
private String performanceId;
private String performancesId;
@ApiModelProperty(position = 11, value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]")
private Integer type;
@ApiModelProperty(position = 12, value = "演出标题[255]")
......@@ -21,9 +21,13 @@ public class KylinStationPerformanceVo implements Serializable, Cloneable {
private String timeStart;
@ApiModelProperty(position = 14, value = "结束时间[yyyy/MM/dd]")
private String timeEnd;
@ApiModelProperty(position = 15, value = "票种列表信息")
@ApiModelProperty(position = 15, value = "城市名称")
private String cityName;
@ApiModelProperty(position = 16, value = "场地名称")
private String fieldName;
@ApiModelProperty(position = 17, value = "票种列表信息")
private List<KylinStationTicketVo> ticketVoList;
@ApiModelProperty(position = 16, value = "可下载时间")
@ApiModelProperty(position = 18, value = "可下载时间")
private String canDownTime;
private static final KylinStationPerformanceVo obj = new KylinStationPerformanceVo();
......@@ -38,7 +42,7 @@ public class KylinStationPerformanceVo implements Serializable, Cloneable {
public KylinStationPerformanceVo copy(KylinPerformanceVo source) {
if (null == source) return this;
this.performanceId = source.getPerformancesId();
this.performancesId = source.getPerformancesId();
this.type = source.getType();
this.title = source.getTitle();
this.timeStart = source.getTimeStart();
......
......@@ -12,24 +12,22 @@ import java.math.BigDecimal;
public class KylinStationTicketVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1303234075649915021L;
@ApiModelProperty(position = 10, value = "票种ID[64]")
private String ticketsId;
@ApiModelProperty(position = 11, value = "类型[1-单日票,2-通票]")
private String type;
@ApiModelProperty(position = 12, value = "名称[32]")
private String ticketId;
@ApiModelProperty(position = 11, value = "名称[32]")
private String title;
@ApiModelProperty(position = 13, value = "单价(8,2)")
@ApiModelProperty(position = 12, value = "单价(8,2)")
private BigDecimal price;
@ApiModelProperty(position = 14, value = "适用开始时间")
@ApiModelProperty(position = 13, value = "适用开始时间")
private String useStart;
@ApiModelProperty(position = 15, value = "适用结束时间")
@ApiModelProperty(position = 14, value = "适用结束时间")
private String useEnd;
@ApiModelProperty(position = 16, value = "票房")
@ApiModelProperty(position = 15, value = "票房")
private BigDecimal priceSum;
@ApiModelProperty(position = 17, value = "票量[9]")
@ApiModelProperty(position = 16, value = "票量[9]")
private Integer number;
@ApiModelProperty(position = 18, value = "已验票量[9]")
@ApiModelProperty(position = 17, value = "已验票量[9]")
private Integer checkedNum;
@ApiModelProperty(position = 19, value = "余量[9]")
@ApiModelProperty(position = 18, value = "余量[9]")
private Integer remainderNum;
private static final KylinStationTicketVo obj = new KylinStationTicketVo();
......
......@@ -22,4 +22,6 @@ public class PayDataVo implements Serializable {
private long timestamp;
private String redirect_url;
private String order_str;
}
......@@ -18,6 +18,10 @@ public class PayResultVo implements Serializable {
private String order_id;
private String showUrl;
private String returnUrl;
private BigDecimal price;
private PayDataVo pay_data;
......
......@@ -63,6 +63,12 @@ public class KylinTicketPartnerVo implements Serializable {
@ApiModelProperty(value = "票种说明", example = "这是票种说明")
private String describes;
@ApiModelProperty(value = "快递票种说明", example = "这是票种说明")
private String describesExpress;
@ApiModelProperty(value = "电子票种说明", example = "这是票种说明")
private String describeElectronic;
@ApiModelProperty(value = "票状态 -1删除;0未提交;1审核中;2审核中(自动在售);3审核通过;4审核未通过;6在售;7停售;8售罄;9未开始;10已结束", example = "0")
private Integer status;
......
package com.liquidnet.service.kylin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.kylin.dto.param.KylinStationCheckOrderParam;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
/**
......@@ -13,4 +14,5 @@ import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
*/
public interface IKylinOrderTicketEntitiesService extends IService<KylinOrderTicketEntities> {
void updateByStation(KylinStationCheckOrderParam checkDataParam);
}
......@@ -43,6 +43,10 @@ public interface IKylinOrderTicketsService extends IService<KylinOrderTickets> {
//TASK 倒计时
boolean checkOrderTime(String userId);
//TASK 订单状态
ResponseDto<Integer> checkOrderResult(String orderId);
// 下单接口(无订单->待支付->可支付)
// 删除订单
// 代理票务 可买状态判断
......
......@@ -101,6 +101,17 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -6,6 +6,8 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import javax.sql.DataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
......@@ -122,7 +124,7 @@ public class MyBatisConfig
typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
VFS.addImplClass(SpringBootVFS.class);
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
......
......@@ -56,11 +56,19 @@ public class KylinPerformancesController extends BaseController {
return prefix + "/details";
}
@PostMapping(value = "/audit")
@RequiresPermissions("kylin:performances:audit")
@ResponseBody
public AjaxResult performanceAudit(@RequestParam("performancesId") String performancesId, @RequestParam("status") int status, @RequestParam(value = "rejectTxt", required = false) String rejectTxt) {
boolean result = kylinPerformancesService.performanceAudit(performancesId, status, rejectTxt);
return toAjax(result);
}
@RequiresPermissions("kylin:performances:change")
@PostMapping(value = "/isShow")
@ResponseBody
public AjaxResult setIsShow(String performancesId, Integer isShow) {
return toAjax(kylinPerformancesService.setIsShow(performancesId,isShow));
return toAjax(kylinPerformancesService.setIsShow(performancesId, isShow));
}
//
......
......@@ -36,13 +36,13 @@ spring:
uri: mongodb://root:S&y$6d*JwJ@39.106.122.201:27017/?authSource=admin&waitQueueMultiple=100
sslEnabled: false
database: dev_ln_scene
redis:
port: 6379
host: 39.106.122.201
password: 3Xa%8p
lettuce:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
\ No newline at end of file
redis:
port: 6379
host: 39.106.122.201
password: 3Xa%8p
lettuce:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
\ No newline at end of file
......@@ -112,6 +112,8 @@
<div th:each="dict : ${kylinPerformanceMisVo.ticketTimes}">
<div th:each="dict2 : ${dict.ticket}">
<br/>
<br/>
<div>
<span>票种名称:</span>
<span th:text="${dict2.title}"></span>
......@@ -130,14 +132,14 @@
<span>票种说明:</span>
<span th:text="${dict2.title}"></span>
</div>
<div>
<span>电子票说明:</span>
<span th:text="${dict2.title}"></span>
</div>
<div>
<span>学生票说明说明:</span>
<span th:text="${dict2.title}"></span>
</div>
<!-- <div>-->
<!-- <span>电子票说明:</span>-->
<!-- <span th:text="${dict2.describeElectronic}"></span>-->
<!-- </div>-->
<!-- <div>-->
<!-- <span>快递票说明:</span>-->
<!-- <span th:text="${dict2.describesExpress}"></span>-->
<!-- </div>-->
<div>
<span>限购:</span>
<span th:text="${dict2.limitCount}"></span>
......@@ -158,19 +160,40 @@
<span>是否学生票:</span>
<span th:text="${dict2.isStudent}"></span>
</div>
<div>
<span>是否显示二维码:</span>
<span th:text="${dict2.isShowCode}"></span>
</div>
<div>
<span>二维码显示时间:</span>
<span th:if="${dict2.isShowCode==1}" th:text="${dict2.qrCodeShowTime}"></span>
</div>
<div>
<span>取票方式:</span>
<span th:text="${dict2.title}"></span>
<span th:text="${dict2.isElectronic}"></span>
<span th:text="${dict2.isExpress}"></span>
</div>
<div>
<span>快递票停售时间:</span>
<span th:text="${dict2.timeEndExpress}"></span>
</div>
</div>
</div>
</form>
</div>
<div class="panel-body" th:width="max" style="margin-top: 10px">
<div class="radio check-box">
<input type="radio" value="1" name="auditCheck"> 同意</label>
</div>
<div class="radio check-box">
<input type="radio" value="0" name="auditCheck"> 拒绝</label>
</div>
<input name="rejectTxt" class="form-control" type="text"/>
<button type="button" class="btn btn-w-m btn-success" name="isShowBtn" style="margin-top: 10px"
onclick="aduitHandler()">审核
</button>
</div>
</div>
<button type="button" class="btn btn-w-m btn-success" name="isShowBtn"
onclick="">审核
</button>
</div>
......@@ -190,15 +213,32 @@
document.getElementsByName("isShowCheck")[1].checked = true;
}
//修改 演出是否显示
function submitHandler() {
var param = {
"isShow": document.getElementsByName("isShowCheck")[0].checked ? 1 : 0,
"isShow": document.getElementsByName("auditCheck")[0].checked ? 1 : 0,
"performancesId": '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", "")
};
$.operate.post(prefix + "/isShow", param, function (res) {
});
}
//演出审核
function aduitHandler() {
const auditStatus = document.getElementsByName("isShowCheck")[0].checked ? 3 : 4;
var auditRejectTxt = ""
if(4 === auditStatus){
auditRejectTxt = document.getElementsByName("rejectTxt")[0].textContent;
}
var param = {
"status": auditStatus,
"performancesId": '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", ""),
"rejectTxt":auditRejectTxt
};
$.operate.post(prefix + "/audit", param, function (res) {
});
}
//演出信息
const type = document.getElementById("type");
var typeInt = '[[${kylinPerformanceMisVo.type}]]';
......
......@@ -61,9 +61,19 @@ public abstract class DateUtil {
}
public String format(LocalDate localDate) {
if (localDate == null) {
return null;
}
return formatter.format(localDate);
}
public LocalDateTime parse(String str) {
if (null == str || str.trim().length() <= 0) {
return null;
}
return LocalDateTime.parse(str, formatter);
}
}
/**
......
......@@ -26,7 +26,7 @@ liquidnet:
port: 6379
password: 3Xa%8p
mongodb:
host: 39.106.122.201
host: 39.106.122.201:27017
port: 27017
user: root
pwd: S&y$6d*JwJ
......
......@@ -22,12 +22,11 @@ liquidnet:
knife4j:
disable: false
redis:
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com
host: r-2zefzyjbij5vbez65y.redis.rds.aliyuncs.com
port: 6380
password: PO@B!Iud32
mongodb:
host: s-2ze49872ed6aeb14.mongodb.rds.aliyuncs.com
host: s-2zef656730e5a1d4.mongodb.rds.aliyuncs.com:3717,s-2ze49872ed6aeb14.mongodb.rds.aliyuncs.com:3717
port: 3717
user: root
pwd: $hAh4SGcDQ
#application-test-end
\ No newline at end of file
pwd: $hAh4SGcDQ
\ No newline at end of file
......@@ -2,8 +2,8 @@ server:
port: ${liquidnet.info.port}
tomcat:
uri-encoding: UTF-8
maxThreads: 2000 #默认200
minSpareThreads: 100 #默认10
maxThreads: 200 #默认200
minSpareThreads: 30 #默认10
maxConnections: 12000 #默认10000
acceptCount: 5000 #默认100
processorCache: 200 #默认200
......@@ -75,29 +75,9 @@ spring:
password: ${liquidnet.rabbitmq.password}
data:
mongodb:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}:${liquidnet.mongodb.port}/?authSource=admin&waitQueueMultiple=100
sslEnabled: false
database: ${spring.data.mongodb.database}
# address: ${liquidnet.mongodb.host}:${liquidnet.mongodb.port}
# username: ${liquidnet.mongodb.user}
# password: ${liquidnet.mongodb.pwd}
# authenticationDatabase: admin #[设置你的认证数据库,如果有的话]
# # 连接池配置
# clientName: ${spring.application.name} # 客户端的标识,用于定位请求来源等
# connectionTimeoutMs: 10000 # TCP连接超时,毫秒
# readTimeoutMs: 15000 # TCP读取超时,毫秒
# poolMaxWaitTimeMs: 3000 #当连接池无可用连接时客户端阻塞等待的时长,单位毫秒
# connectionMaxIdleTimeMs: 60000 #TCP连接闲置时间,单位毫秒
# connectionMaxLifeTimeMs: 120000 #TCP连接最多可以使用多久,单位毫秒
# heartbeatFrequencyMs: 20000 #心跳检测发送频率,单位毫秒
# minHeartbeatFrequencyMs: 8000 #最小的心跳检测发送频率,单位毫秒
# heartbeatConnectionTimeoutMs: 10000 #心跳检测TCP连接超时,单位毫秒
# heartbeatReadTimeoutMs: 15000 #心跳检测TCP连接读取超时,单位毫秒
# connectionsPerHost: 20 # 每个host的TCP连接数
# minConnectionsPerHost: 8 #每个host的最小TCP连接数
# #计算允许多少个线程阻塞等待可用TCP连接时的乘数,算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost,当前配置允许10*20个线程阻塞
# threadsAllowedToBlockForConnectionMultiplier: 10
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=4000&waitQueueMultiple=100
sslEnabled: false
database: ${spring.data.mongodb.database}
datasource:
name: ${liquidnet.mysql.database-name}
url: jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
......
......@@ -2,8 +2,8 @@ server:
port: ${liquidnet.info.port}
tomcat:
uri-encoding: UTF-8
maxThreads: 2000 #默认200
minSpareThreads: 100 #默认10
maxThreads: 200 #默认200
minSpareThreads: 30 #默认10
maxConnections: 12000 #默认10000
acceptCount: 5000 #默认100
processorCache: 200 #默认200
......@@ -75,8 +75,7 @@ spring:
password: ${liquidnet.rabbitmq.password}
data:
mongodb:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}:${liquidnet.mongodb.port}/?authSource=admin&waitQueueMultiple=100
# uri: mongodb://root:S&y$6d*JwJ@39.106.122.201:27017/ln_kylin_mdb
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=4000&waitQueueMultiple=100
sslEnabled: false
database: ${spring.data.mongodb.database}
datasource:
......
......@@ -3,7 +3,7 @@ server:
tomcat:
uri-encoding: UTF-8
maxThreads: 2000 #默认200
minSpareThreads: 500 #默认10
minSpareThreads: 200 #默认10
maxConnections: 20000 #默认10000
acceptCount: 5000 #默认100
processorCache: 1000 #默认200
......@@ -93,7 +93,7 @@ ribbon:
enabled: true # 为Ribbon禁用Eureka
ReadTimeout: 15000
SocketTimeout: 15000
MaxAutoRetries: 1
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 0
#liquidnet-service-sequence:
# ribbon:
......
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.17.207.177:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-test-这里是配置信息基本值
spring:
......
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.17.207.177:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-test-这里是配置信息基本值
spring:
......
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.18.0.2:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-dev-这里是配置信息基本值
spring:
......
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.17.207.177:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-dev-这里是配置信息基本值
spring:
......
......@@ -16,6 +16,7 @@ import io.swagger.annotations.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
/**
......@@ -70,6 +71,18 @@ public class KylinOrderTicketsController {
return ResponseDto.success(orderTicketsService.orderDetails(orderId));
}
@GetMapping("checkPayment")
@ApiOperation("订单详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap> checkOrderResult(@RequestParam("orderId") String orderId) {
Integer status = orderTicketsService.checkOrderResult(orderId).getData();
HashMap<String,Integer> map = new HashMap<>();
map.put("status",status);
return ResponseDto.success(map);
}
@GetMapping("checkOrderTime")
@ApiOperation("订单过期脚本")
@ApiResponse(code = 200, message = "接口返回对象参数")
......
......@@ -2,16 +2,13 @@ package com.liquidnet.service.kylin.controller;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.CheckPerformanceRelationParam;
import com.liquidnet.service.kylin.dto.param.KylinStationCheckOrderParam;
import com.liquidnet.service.kylin.dto.vo.*;
import com.liquidnet.service.kylin.service.partner.IKylinCheckUserPartnerService;
import com.liquidnet.service.kylin.service.partner.IKylinCheckUserPerformancesPartnerService;
import com.liquidnet.service.kylin.service.IKylinOrderTicketEntitiesService;
import com.liquidnet.service.kylin.utils.DataUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -21,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
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;
......@@ -31,7 +29,14 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@Api(tags = "验票")
@Slf4j
......@@ -48,14 +53,16 @@ public class KylinStationController {
RedisUtil redisUtil;
@Autowired
DataUtils dataUtils;
@Autowired
IKylinOrderTicketEntitiesService kylinOrderTicketEntitiesService;
@ApiOperation(value = "手机号密码登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "form", dataType = "String", name = "passwd", value = "密码"),
@ApiImplicitParam(type = "form", dataType = "String", name = "mobile", value = "手机号", example = "11122233344"),
@ApiImplicitParam(type = "form", dataType = "String", name = "passwd", value = "密码", example = "123456"),
})
@PostMapping("login")
public ResponseDto<String> login(@RequestParam String mobile, @RequestParam String passwd) {
public ResponseDto<KylinStationLoginVo> login(@RequestParam String mobile, @RequestParam String passwd) {
log.info("mobile:{},passwd:{}", mobile, passwd);
return this.loginVerification(mobile, passwd, true);
......@@ -63,11 +70,11 @@ public class KylinStationController {
@ApiOperation(value = "手机号验证码登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "code", value = "验证码"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mobile", value = "手机号", example = "11122233344"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "code", value = "验证码", example = "111111"),
})
@PostMapping("login/sms")
public ResponseDto<String> loginBySms(@RequestParam String mobile, @RequestParam String code) {
public ResponseDto<KylinStationLoginVo> loginBySms(@RequestParam String mobile, @RequestParam String code) {
log.info("mobile:{},code:{}", mobile, code);
return this.loginVerification(mobile, code, false);
......@@ -95,88 +102,214 @@ public class KylinStationController {
@ApiOperation(value = "演出列表")
@ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mod", value = "模块[recent-近期的,down-已下载,over-历史]", allowableValues = "recent,down,over"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mod", value = "模块[recent-近期的]", allowableValues = "recent"),
})
@GetMapping("performances/{mod}")
public ResponseDto<List<KylinStationPerformanceVo>> performances(@PathVariable String mod) {
List<KylinStationPerformanceVo> voList = new ArrayList<>();
log.info("mod:{}", mod);
switch (mod) {
case "recent":
KylinCheckUserPerformanceVo checkUserRelationVo = dataUtils.getCheckUserRelationVo(CurrentUtil.getCurrentUid());
if (null != checkUserRelationVo) {
List<CheckPerformanceRelationParam> relationParams = checkUserRelationVo.getRelationParams();
if (!CollectionUtils.isEmpty(relationParams)) {
relationParams.forEach(r -> {
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(r.getPerformanceId());
KylinStationPerformanceVo vo = KylinStationPerformanceVo.getNew().copy(performanceVo);
vo.setCanDownTime(r.getCanDownTime());
// TODO: 2021/5/30 票种数据统计
KylinStationTicketVo ticketVo = KylinStationTicketVo.getNew();
ticketVo.setTicketsId("1");
ticketVo.setType("1");
ticketVo.setTitle("测试数据");
ticketVo.setPrice(BigDecimal.TEN);
ticketVo.setUseStart("2021-05-30");
ticketVo.setUseEnd("2021-06-02");
ticketVo.setNumber(100);
ticketVo.setPriceSum(ticketVo.getPrice().multiply(BigDecimal.valueOf(ticketVo.getNumber())));
ticketVo.setCheckedNum(0);
ticketVo.setRemainderNum(ticketVo.getNumber() - ticketVo.getCheckedNum());
vo.setTicketVoList(Arrays.asList(ticketVo, ticketVo));
voList.add(vo);
});
String currentUid = CurrentUtil.getCurrentUid();
try {
switch (mod) {
case "recent":
log.info(":::performances/recent:{}", currentUid);
// 查取当前用户下关联演出ID列表
KylinCheckUserPerformanceVo checkUserRelationVo = dataUtils.getCheckUserRelationVo(currentUid);
if (null != checkUserRelationVo) {
List<CheckPerformanceRelationParam> performanceRelationList = checkUserRelationVo.getRelationParams();
if (!CollectionUtils.isEmpty(performanceRelationList)) {
LocalDateTime tmpDt = LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0, 0));
String tmpDtStr = DateUtil.format(tmpDt, DateUtil.Formatter.yyyyMMddHHmmss);
// 转换Map<performanceId, canDownTime>
Map<String, String> performanceRelationMap = performanceRelationList.stream().collect(Collectors.toMap(CheckPerformanceRelationParam::getPerformanceId, CheckPerformanceRelationParam::getCanDownTime));
// 查取指定条件的演出列表
Query performancesVoQuery = Query.query(Criteria.where("performancesId").in(
performanceRelationList.stream().map(CheckPerformanceRelationParam::getPerformanceId).toArray()
).and("timeEnd").gt(tmpDtStr));
performancesVoQuery.with(Sort.by(Sort.Order.asc("timeEnd"), Sort.Order.desc("sort")));
voList = mongoTemplate.find(performancesVoQuery, KylinStationPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
// 查取演出对应的订单票明细
Query orderTicketEntitiesVoQuery = Query.query(Criteria.where("performanceId").in(
voList.stream().map(KylinStationPerformanceVo::getPerformancesId).toArray()
).and("isPayment").is(1));
List<KylinOrderTicketEntitiesVo> oteVoList = mongoTemplate.find(orderTicketEntitiesVoQuery, KylinOrderTicketEntitiesVo.class, KylinOrderTicketEntitiesVo.class.getSimpleName());
// 转换订单票明细结构为Map<performanceId, List<KylinOrderTicketEntitiesVo>>
Map<String, List<KylinOrderTicketEntitiesVo>> oteVoMap = oteVoList.stream().collect(Collectors.groupingBy(KylinOrderTicketEntitiesVo::getPerformanceId));
// 查取订单对应票种
Query performanceTicketVoQuery = Query.query(Criteria.where("ticketsId").in(
oteVoList.stream().filter(distinctByKey(KylinOrderTicketEntitiesVo::getTicketId)).map(KylinOrderTicketEntitiesVo::getTicketId).toArray()
));
List<KylinTicketVo> performanceTicketVoList = mongoTemplate.find(performanceTicketVoQuery, KylinTicketVo.class, KylinTicketVo.class.getSimpleName());
// 转换票种信息结构为Map<ticketsId, ticketVo>
Map<String, KylinTicketVo> performanceTicketMap = performanceTicketVoList.stream().collect(Collectors.toMap(KylinTicketVo::getTicketsId, Function.identity(), (k1, k2) -> k2));
// 补充演出列表票种统计
voList.forEach(r -> {
// 演出的所有订单票明细
List<KylinOrderTicketEntitiesVo> performanceTicketEntitiesVoList = oteVoMap.get(r.getPerformancesId());
// 订单票明细按票种分组
Map<String, List<KylinOrderTicketEntitiesVo>> performanceTicketEntitiesVoMap = performanceTicketEntitiesVoList.stream().collect(Collectors.groupingBy(KylinOrderTicketEntitiesVo::getTicketId));
List<KylinStationTicketVo> ticketVoList = new ArrayList<>();
for (Map.Entry<String, List<KylinOrderTicketEntitiesVo>> entry : performanceTicketEntitiesVoMap.entrySet()) {
KylinTicketVo ticketVo = performanceTicketMap.get(entry.getKey());
KylinStationTicketVo stationTicketVo = KylinStationTicketVo.getNew();
stationTicketVo.setTicketId(ticketVo.getTicketsId());
stationTicketVo.setTitle(ticketVo.getTitle());
stationTicketVo.setPrice(ticketVo.getPrice());
stationTicketVo.setUseStart(ticketVo.getUseStart());
stationTicketVo.setUseEnd(ticketVo.getUseEnd());
List<KylinOrderTicketEntitiesVo> subPerformanceTicketEntitiesVoList = entry.getValue();
// 订单票明细按出票状态分组
Map<Integer, List<KylinOrderTicketEntitiesVo>> subStatusPerformanceTicketEntitiesVoMap
= subPerformanceTicketEntitiesVoList.stream().collect(Collectors.groupingBy(KylinOrderTicketEntitiesVo::getStatus));
stationTicketVo.setNumber(subPerformanceTicketEntitiesVoList.size());
stationTicketVo.setPriceSum(stationTicketVo.getPrice().multiply(BigDecimal.valueOf(stationTicketVo.getNumber())));
List<KylinOrderTicketEntitiesVo> checkedEntitiesVoList = subStatusPerformanceTicketEntitiesVoMap.get(1);
stationTicketVo.setCheckedNum(CollectionUtils.isEmpty(checkedEntitiesVoList) ? 0 : checkedEntitiesVoList.size());
List<KylinOrderTicketEntitiesVo> remainderEntitiesVoList = subStatusPerformanceTicketEntitiesVoMap.get(0);
stationTicketVo.setRemainderNum(CollectionUtils.isEmpty(remainderEntitiesVoList) ? 0 : remainderEntitiesVoList.size());
ticketVoList.add(stationTicketVo);
}
r.setTicketVoList(ticketVoList);
r.setCanDownTime(performanceRelationMap.get(r.getPerformancesId()));
});
}
}
}
break;
case "down":
break;
case "over":
break;
default:
break;
break;
case "down":
log.info(":::performances/down:{}", currentUid);
break;
case "over":
log.info(":::performances/over:{}", currentUid);
break;
default:
log.info(":::performances/default:{}", currentUid);
break;
}
} catch (Exception e) {
log.error("验票:查取演出列表异常:/station/performances/?", e);
}
return ResponseDto.success(voList);
}
@ApiOperation(value = "下载验票数据")
@ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "type", value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]", allowableValues = "101,102,103"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "performanceId", value = "演出ID[64]"),
@ApiImplicitParam(type = "path", required = true, dataType = "String", name = "type", value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]", allowableValues = "101,102,103"),
@ApiImplicitParam(type = "path", required = true, dataType = "String", name = "performanceId", value = "演出ID[64]"),
})
@GetMapping("download/{type}/{performanceId}")
public ResponseDto<List<KylinStationCheckOrderVo>> downloadTicketData(@PathVariable String type, @PathVariable String performanceId) {
log.info("type:{},performanceId:{}", type, performanceId);
String currentUid = CurrentUtil.getCurrentUid();
// 查取当前用户下关联演出ID列表
KylinCheckUserPerformanceVo checkUserRelationVo = dataUtils.getCheckUserRelationVo(currentUid);
List<CheckPerformanceRelationParam> relationParams;
if (null == checkUserRelationVo || CollectionUtils.isEmpty(relationParams = checkUserRelationVo.getRelationParams())) {
return ResponseDto.failure(ErrorMapping.get("20606"));
}
Optional<CheckPerformanceRelationParam> optional = relationParams.stream().findFirst().filter(r -> r.getPerformanceId().equals(performanceId));
if (!optional.isPresent()) {
return ResponseDto.failure(ErrorMapping.get("20607"));
}
CheckPerformanceRelationParam relationParam = optional.get();
LocalDateTime canDownDt = DateUtil.Formatter.yyyyMMddHHmmss.parse(relationParam.getCanDownTime());
if (canDownDt.isAfter(LocalDateTime.now())) {
return ResponseDto.failure(ErrorMapping.get("20608"));
}
List<KylinStationCheckOrderVo> voList = new ArrayList<>();
// 查取演出对应的订单票明细
Query orderTicketEntitiesVoQuery = Query.query(Criteria.where("performanceId").is(performanceId).and("isPayment").is(1));
voList = mongoTemplate.find(orderTicketEntitiesVoQuery, KylinStationCheckOrderVo.class, KylinOrderTicketEntitiesVo.class.getSimpleName());
Query query = Query.query(Criteria.where("orderTicketsId").in(
voList.stream().map(KylinStationCheckOrderVo::getOrderId).toArray()
));
query.fields().include("orderTicketsId").include("qrCode");
List<KylinOrderTicketVo> orderTicketVoList = mongoTemplate.find(query, KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
return ResponseDto.success(Collections.singletonList(KylinStationCheckOrderVo.getNew()));
for (KylinOrderTicketVo t : orderTicketVoList)
for (KylinStationCheckOrderVo r : voList)
if (r.getOrderId().equals(t.getOrderTicketsId())) r.setQrCode(t.getQrCode());
return ResponseDto.success(voList);
}
@ApiOperation(value = "上载验票数据")
@PostMapping("upload")
public ResponseDto<Boolean> uploadTicketData(@RequestBody List<KylinStationCheckOrderParam> checkDataParams) {
log.info("checkDataParams:{}", JsonUtils.toJson(checkDataParams));
public ResponseDto<Object> uploadTicketData(@RequestBody KylinStationCheckOrderParam checkDataParam) {
log.info("checkDataParams:{}", JsonUtils.toJson(checkDataParam));
kylinOrderTicketEntitiesService.updateByStation(checkDataParam);
return ResponseDto.success();
}
@ApiOperation(value = "刷新验票数据")
@ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "type", value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]", allowableValues = "101,102,103"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "performanceId", value = "演出ID[64]"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "latestUpdateAt", value = "最近更新时间[yyyy-MM-dd HH:mm:ss]"),
})
@PostMapping("refresh")
public ResponseDto<List<KylinStationCheckOrderVo>> refreshTicketData(@PathVariable String type,
@PathVariable String performanceId, @PathVariable String latestUpdateAt) {
log.info("refresh type:{},performanceId:{},latestUpdateAt:{}", type, performanceId, latestUpdateAt);
String currentUid = CurrentUtil.getCurrentUid();
// 查取当前用户下关联演出ID列表
KylinCheckUserPerformanceVo checkUserRelationVo = dataUtils.getCheckUserRelationVo(currentUid);
List<CheckPerformanceRelationParam> relationParams;
if (null == checkUserRelationVo || CollectionUtils.isEmpty(relationParams = checkUserRelationVo.getRelationParams())) {
return ResponseDto.failure(ErrorMapping.get("20606"));
}
Optional<CheckPerformanceRelationParam> optional = relationParams.stream().findFirst().filter(r -> r.getPerformanceId().equals(performanceId));
if (!optional.isPresent()) {
return ResponseDto.failure(ErrorMapping.get("20607"));
}
CheckPerformanceRelationParam relationParam = optional.get();
LocalDateTime canDownDt = DateUtil.Formatter.yyyyMMddHHmmss.parse(relationParam.getCanDownTime());
if (canDownDt.isAfter(LocalDateTime.now())) {
return ResponseDto.failure(ErrorMapping.get("20608"));
}
List<KylinStationCheckOrderVo> voList = new ArrayList<>();
// 查取演出对应的订单票明细
Query orderTicketEntitiesVoQuery = Query.query(
Criteria.where("performanceId").is(performanceId).and("updatedAt").gte(latestUpdateAt)
);
voList = mongoTemplate.find(orderTicketEntitiesVoQuery, KylinStationCheckOrderVo.class, KylinOrderTicketEntitiesVo.class.getSimpleName());
Query query = Query.query(Criteria.where("orderTicketsId").in(
voList.stream().map(KylinStationCheckOrderVo::getOrderId).toArray()
));
query.fields().include("orderTicketsId").include("qrCode");
List<KylinOrderTicketVo> orderTicketVoList = mongoTemplate.find(query, KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
for (KylinOrderTicketVo t : orderTicketVoList)
for (KylinStationCheckOrderVo r : voList)
if (r.getOrderId().equals(t.getOrderTicketsId())) r.setQrCode(t.getQrCode());
return ResponseDto.success(true);
return ResponseDto.success(voList);
}
/* ------------------------------------------------------------------ */
private ResponseDto<String> loginVerification(String mobile, String identity, boolean isPasswd) {
private ResponseDto<KylinStationLoginVo> loginVerification(String mobile, String identity, boolean isPasswd) {
KylinCheckUserVo checkUserVo = mongoTemplate.findOne(Query.query(Criteria.where("mobile").is(mobile)),
KylinCheckUserVo.class, KylinCheckUserVo.class.getSimpleName());
......@@ -221,7 +354,7 @@ public class KylinStationController {
}
}
private ResponseDto<String> loginAuthentication(KylinCheckUserVo checkUserVo) {
private ResponseDto<KylinStationLoginVo> loginAuthentication(KylinCheckUserVo checkUserVo) {
String uid = checkUserVo.getCheckUserId();
String ssoKeyUid = jwtValidator.getSsoRedisKey().concat(uid);
......@@ -237,6 +370,16 @@ public class KylinStationController {
redisUtil.set(ssoKeyUidM5Token, true, jwtValidator.getExpireTtl() * 60);
return ResponseDto.success(token);
KylinStationLoginVo stationLoginVo = KylinStationLoginVo.getNew();
stationLoginVo.setUid(checkUserVo.getCheckUserId());
stationLoginVo.setMobile(SensitizeUtil.custom(checkUserVo.getMobile(), 3, 4));
stationLoginVo.setName(SensitizeUtil.chineseName(checkUserVo.getName()));
stationLoginVo.setToken(token);
return ResponseDto.success(stationLoginVo);
}
private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
}
package com.liquidnet.service.kylin.service.impl;
import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.kylin.dto.param.KylinStationCheckOrderParam;
import com.liquidnet.service.kylin.dto.vo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketEntitiesMapper;
import com.liquidnet.service.kylin.service.IKylinOrderTicketEntitiesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mongodb.BasicDBObject;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
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.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* <p>
......@@ -16,5 +35,38 @@ import org.springframework.stereotype.Service;
*/
@Service
public class KylinOrderTicketEntitiesServiceImpl extends ServiceImpl<KylinOrderTicketEntitiesMapper, KylinOrderTicketEntities> implements IKylinOrderTicketEntitiesService {
@Autowired
MongoConverter mongoConverter;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
RabbitTemplate rabbitTemplate;
@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void updateByStation(KylinStationCheckOrderParam checkDataParam) {
String performanceId = checkDataParam.getPerformanceId();
KylinOrderTicketEntitiesVo updateVo = new KylinOrderTicketEntitiesVo();
updateVo.setCheckClient(checkDataParam.getCheckClient());
updateVo.setUpdatedAt(DateUtil.getNowTime());
updateVo.setStatus(1);// 1-已出票
List<String> checkedEntitiesIdList = checkDataParam.getCheckedEntitiesIdList();
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("performanceId").is(performanceId)
.and("orderTicketEntitiesId").in(checkedEntitiesIdList.toArray())
.and("status").is(0)
).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(updateVo))
);
LocalDateTime nowDt = LocalDateTime.now();
LinkedList<Object[]> paramsList = new LinkedList<>();
for (String id : checkedEntitiesIdList) {
paramsList.add(new Object[]{1, nowDt, id});
}
// rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL,
// SqlMapping.get("adam_user.add", paramsList));
}
}
......@@ -80,14 +80,15 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
public ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam) {
boolean isDownGeneral = false;
String uid = CurrentUtil.getCurrentUid();
if(!RedisLockUtil.tryLock("userId:" + uid,2,2)){
return ResponseDto.failure("请求频繁");//参数错误
}
RLock lock = RedisLockUtil.lock("userId:" + uid, 2);
try {
if (lock.isLocked()) {
return ResponseDto.failure("请求频繁");//参数错误
}
KylinPerformanceVo performanceData = dataUtils.getPerformanceVo(payOrderParam.getPerformanceId());
KylinTicketTimesVo ticketTimesData = dataUtils.getTicketTimesVo(payOrderParam.getTimeId());
KylinTicketVo ticketData = dataUtils.getTicketVo(payOrderParam.getTicketId());
Integer isStudent = ticketData.getIsStudent();
if (performanceData == null || ticketTimesData == null || ticketData == null) {
lock.unlock();
return ResponseDto.failure("参数错误");//参数错误
......@@ -154,13 +155,15 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
}
//快递票判断
if (payOrderParam.getIsExpress() == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeExpressEnd) == 1) {
lock.unlock();
return ResponseDto.failure("已超过快递票截止时间");//快递票不卖
}
if (payOrderParam.getIsExpress() == 1 && payOrderParam.getAddressId().isEmpty()) {
lock.unlock();
return ResponseDto.failure("快递票未填写收货地址");//快递票未填写收货地址
if(payOrderParam.getIsExpress()!=null) {
if (payOrderParam.getIsExpress() == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeExpressEnd) == 1) {
lock.unlock();
return ResponseDto.failure("已超过快递票截止时间");//快递票不卖
}
if (payOrderParam.getIsExpress() == 1 && payOrderParam.getAddressId().isEmpty()) {
lock.unlock();
return ResponseDto.failure("快递票未填写收货地址");//快递票未填写收货地址
}
}
//实名判断
if (isTrueName == 1 && payOrderParam.getEnterIdList().size() <= 0) {
......@@ -183,7 +186,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
//学生票 判断
List<AdamEntersVo> entersVoList = new ArrayList<>();
if (null != payOrderParam.getIsStudent() && payOrderParam.getIsStudent() == 1) {
if (isStudent == 1) {
for (String enterId : payOrderParam.getEnterIdList()) {
AdamEntersVo adamEnters = feignAdamBaseClient.queryEnters(enterId, uid).getData();
entersVoList.add(adamEnters);
......@@ -273,7 +276,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
}
}
lock.unlock();
return order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList);
return order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList,isStudent);
}
} catch (Exception e) {
if (isDownGeneral) {
......@@ -285,7 +288,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
}
}
private ResponseDto<PayResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData, List<AdamEntersVo> entersVoList) {
private ResponseDto<PayResultVo> order(PayOrderParam payOrderParam, String uid, boolean isMember, int isTrueName, KylinPerformanceVo performanceData, KylinTicketVo ticketData, List<AdamEntersVo> entersVoList,Integer isStudent) {
LinkedList<String> sqls = new LinkedList<>();
LinkedList<Object[]> paramsList = new LinkedList<>();
String source = CurrentUtil.getCliSource();
......@@ -350,7 +353,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketStatus.setExpressType(payOrderParam.getExpressType());
orderTicketStatus.setTransferStatus(0);
orderTicketStatus.setStatus(0);
orderTicketStatus.setIsStudent(payOrderParam.getIsStudent());
orderTicketStatus.setIsStudent(isStudent);
orderTicketStatus.setPayStatus(0);
orderTicketStatus.setCreatedAt(LocalDateTime.now());
orderTicketStatus.setUpdatedAt(null);
......@@ -406,6 +409,8 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd());
orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketEntitiesVo.setUpdatedAt(null);
mongoTemplate.insert(orderTicketEntitiesVo, KylinOrderTicketEntitiesVo.class.getSimpleName());
}
} else {
......@@ -436,6 +441,8 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd());
orderTicketEntitiesVo.setCreatedAt(orderTicketEntities.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
orderTicketEntitiesVo.setUpdatedAt(null);
mongoTemplate.insert(orderTicketEntitiesVo, KylinOrderTicketEntitiesVo.class.getSimpleName());
}
}
......@@ -464,6 +471,10 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
payResultVo.setOrder_id(orderTicketId);
payResultVo.setPrice(orderTickets.getPriceActual());
orderTickets.setPayCode(payResultVo.getCode());
if (payOrderParam.getPayType().equals("alipay") && payOrderParam.getDeviceFrom().equals("wap")) {
payResultVo.setShowUrl(payOrderParam.getShowUrl());
payResultVo.setReturnUrl(payOrderParam.getReturnUrl());
}
// 生成vo
KylinOrderTicketVo orderTicketVo = new KylinOrderTicketVo();
orderTicketVo.setOrderTicket(orderTickets);
......@@ -525,13 +536,20 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
httpData.add("expire_time", orderTicketData.getPayCountdownMinute().toString());
httpData.add("open_id", payAgainParam.getOpenId());
httpData.add("show_url", payAgainParam.getOpenId());
httpData.add("return_url", payAgainParam.getOpenId());
if (payAgainParam.getPayType().equals("alipay") && payAgainParam.getDeviceFrom().equals("wap")) {
httpData.add("show_url", payAgainParam.getShowUrl());
httpData.add("return_url", payAgainParam.getReturnUrl());
}
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());
......@@ -567,10 +585,11 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
//支付时间
LocalDateTime now = LocalDateTime.now();
RLock lock = RedisLockUtil.lock("order_lock:" + syncOrderParam.getOrder_code(), 240);
if (lock.isLocked()) {
return "fail";
if(!RedisLockUtil.tryLock("order_lock:" + syncOrderParam.getOrder_code(),240,240)){
return "fail";//参数错误
}
RLock lock = RedisLockUtil.lock("order_lock:" + syncOrderParam.getOrder_code(), 240);
String timePay = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
KylinOrderTicketVo orderTicketData = mongoTemplate.findOne(Query.query(Criteria.where("orderCode").is(syncOrderParam.getOrder_code())), KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
......@@ -774,10 +793,10 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
for (KylinOrderTicketVo item : orderTicketVo) {
RLock lock = redisLockUtil.lock("order_lock:" + item.getOrderCode(), 2);
if (lock.isLocked()) {
if(!RedisLockUtil.tryLock("order_lock:" + item.getOrderCode(),240,240)){
continue;
}
RLock lock = redisLockUtil.lock("order_lock:" + item.getOrderCode(), 240);
KylinOrderTicketVo itemData = dataUtils.getOrderTicketVo(item.getOrderTicketsId());
if (itemData.getStatus() == 0) {
LocalDateTime now = LocalDateTime.now();
......@@ -822,6 +841,22 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
return true;
}
@Override
public ResponseDto<Integer> checkOrderResult(String orderId) {
KylinOrderTicketVo orderTicketData = dataUtils.getOrderTicketVo(orderId);
if (orderTicketData == null) {
return ResponseDto.failure("订单不存在");
}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);
}
}
}
public boolean checkAgent(String agentId, KylinTicketVo ticketData) {
boolean isAgent = ticketData.getIsAgent() == 1;
if (isAgent) {
......
......@@ -116,6 +116,12 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
kylinTicketPartnerVo.setType(kylinTicketTimesPartnerVo.getType());
kylinTicketPartnerVo.setStatus(0);
kylinTicketPartnerVo.setDefault();
if(ticketCreateParam.getIsExpress()==1){
kylinTicketPartnerVo.setDescribesExpress(ticketCreateParam.getExpressDescribes());
}
if(ticketCreateParam.getIsElectronic()==1){
kylinTicketPartnerVo.setDescribeElectronic(ticketCreateParam.getElectronicDescribe());
}
if (ticketCreateParam.getIsExpress() == 1) {
kylinTicketPartnerVo.setTimeEndExpress(ticketCreateParam.getTimeEndExpress().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
......@@ -156,6 +162,12 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
kylinTicketPartnerVo.setUseStart(kylinTicketTimesPartnerVo.getUseStart());
kylinTicketPartnerVo.setUseEnd(kylinTicketTimesPartnerVo.getUseEnd());
kylinTicketPartnerVo.setType(kylinTicketTimesPartnerVo.getType());
if(ticketCreateParam.getIsExpress()==1){
kylinTicketPartnerVo.setDescribesExpress(ticketCreateParam.getExpressDescribes());
}
if(ticketCreateParam.getIsElectronic()==1){
kylinTicketPartnerVo.setDescribeElectronic(ticketCreateParam.getElectronicDescribe());
}
kylinTicketPartnerVo.setStatus(-2);
kylinTicketPartnerVo.setDefault();
......@@ -199,6 +211,13 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
kylinTicketPartnerVo.setTimeEnd(ticketCreateParam.getTimeEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
kylinTicketPartnerVo.setTimesId(null);
kylinTicketPartnerVo.setStatus(null);
if(ticketCreateParam.getIsExpress()==1){
kylinTicketPartnerVo.setDescribesExpress(ticketCreateParam.getExpressDescribes());
}
if(ticketCreateParam.getIsElectronic()==1){
kylinTicketPartnerVo.setDescribeElectronic(ticketCreateParam.getElectronicDescribe());
}
kylinTicketPartnerVo.setDefault();
if (ticketCreateParam.getIsExpress() == 1) {
kylinTicketPartnerVo.setTimeEndExpress(ticketCreateParam.getTimeEndExpress().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
......
......@@ -400,6 +400,10 @@ public class PerformanceVoTask {
tickets.setTimeEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketItem.getTimeEnd())));
if (ticketItem.getIsExpress() == 1) {
tickets.setTimeEndExpress(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketItem.getTimeEndExpress())));
tickets.setDescribeExpress(ticketItem.getDescribesExpress());
}
if(ticketItem.getIsElectronic() == 1){
tickets.setDescribeElectronic(ticketItem.getDescribeElectronic());
}
tickets.setUseStart(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketTimeItem.getUseStart())));
tickets.setUseEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketTimeItem.getUseEnd())));
......
package com.liquidnet.service.kylin.utils;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.google.zxing.common.detector.MathUtils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
......@@ -64,7 +65,11 @@ public class DataUtils {
* @return 普通剩余库存
*/
public int changeSurplusGeneral(String ticketId, int surplusGeneral) {
return (int) redisUtil.incr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, 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));
}
}
/**
......@@ -95,7 +100,11 @@ public class DataUtils {
* @return 兑换剩余库存
*/
public int changeSurplusExchange(String ticketId, int surplusExchange) {
return (int) redisUtil.incr(KylinRedisConst.PERFORMANCES_INVENTORY + ticketId + ":" + KylinRedisConst.SURPLUS_GENERAL, 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));
}
}
/**
......
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.17.207.177:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-dev-这里是配置信息基本值
spring:
......
......@@ -36,4 +36,10 @@
# 专业版APP
20601=账号不存在
20602=密码错误
\ No newline at end of file
20602=密码错误
20603=
20604=
20605=
20606=当前账号无关联演出数据
20607=当前账号未关联当前演出
20608=当前演出还未开放下载
\ No newline at end of file
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_entities.synPay=UPDATE kylin_order_ticket_status SET is_payment = ?,updated_at = ? WHERE order_tickets_id = ?
\ No newline at end of file
kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ? WHERE order_tickets_id = ?
kylin_order_ticket_entities.updateStatusByStation=UPDATE kylin_order_ticket_status SET `status`=?, updated_at=? WHERE order_ticket_entities_id =?
\ No newline at end of file
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.18.0.2:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-dev-这里是配置信息基本值
spring:
......
......@@ -11,7 +11,7 @@ liquidnet:
path: ./logs
name: support-config
eureka:
host: 172.17.207.177:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
rabbitmq:
host: 127.0.0.1
port: 5672
......
......@@ -56,4 +56,12 @@
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
......@@ -6,7 +6,7 @@ liquidnet:
username: user
password: user123
eureka:
host: 172.17.207.177:7001
host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
# end-test-这里是配置信息基本值
spring:
......
......@@ -9,14 +9,14 @@
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>liquidnet-bus-common</module>
<module>liquidnet-bus-do</module>
<module>liquidnet-bus-api</module>
<module>liquidnet-bus-service</module>
<module>liquidnet-bus-support</module>
<module>liquidnet-bus-client</module>
</modules>
<!-- <modules>-->
<!-- <module>liquidnet-bus-common</module>-->
<!-- <module>liquidnet-bus-do</module>-->
<!-- <module>liquidnet-bus-api</module>-->
<!-- <module>liquidnet-bus-service</module>-->
<!-- <module>liquidnet-bus-support</module>-->
<!-- <module>liquidnet-bus-client</module>-->
<!-- </modules>-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
......
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