记得上下班打卡 | 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; ...@@ -5,32 +5,16 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
@ApiModel(value = "KylinStationCheckDataParam", description = "上载验票入参") @ApiModel(value = "KylinStationCheckDataParam", description = "上载验票入参")
@Data @Data
public class KylinStationCheckOrderParam implements Serializable { public class KylinStationCheckOrderParam implements Serializable {
private static final long serialVersionUID = 2312115659117282564L; private static final long serialVersionUID = 2312115659117282564L;
@ApiModelProperty(position = 10, value = "演出ID[64]") @ApiModelProperty(position = 11, value = "演出ID[64]")
private String performanceId; private String performanceId;
@ApiModelProperty(position = 11, value = "订单号") @ApiModelProperty(position = 13, value = "出票端:(验票app)android/ios")
private String orderCode; private String checkClient;
@ApiModelProperty(position = 12, value = "二维码地址") @ApiModelProperty(position = 14, value = "出票`orderTicketEntitiesId`列表")
private String qrCode; private List<String> checkedEntitiesIdList;
@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;
} }
...@@ -18,4 +18,8 @@ public class PayAgainParam { ...@@ -18,4 +18,8 @@ public class PayAgainParam {
private String deviceFrom; private String deviceFrom;
@ApiModelProperty(value = "openId") @ApiModelProperty(value = "openId")
private String openId; private String openId;
@ApiModelProperty(value = "showUrl")
private String showUrl;
@ApiModelProperty(value = "returnUrl")
private String returnUrl;
} }
...@@ -21,9 +21,9 @@ public class PayOrderParam { ...@@ -21,9 +21,9 @@ public class PayOrderParam {
@NotNull(message = "必传") @NotNull(message = "必传")
private Integer number; private Integer number;
@ApiModelProperty(value = "是否学生票") // @ApiModelProperty(value = "是否学生票")
@NotNull(message = "必传") // @NotNull(message = "必传")
private Integer isStudent; // private Integer isStudent;
@ApiModelProperty(value = "是否电子票") @ApiModelProperty(value = "是否电子票")
@NotNull(message = "必传") @NotNull(message = "必传")
private Integer isElectronic; private Integer isElectronic;
......
...@@ -42,10 +42,16 @@ public class TicketCreateParam implements Serializable { ...@@ -42,10 +42,16 @@ public class TicketCreateParam implements Serializable {
@NotNull(message = "不能为空") @NotNull(message = "不能为空")
private Integer isElectronic; private Integer isElectronic;
@ApiModelProperty(value = "是否电子票", example = "0")
private String expressDescribes;
@ApiModelProperty(value = "是否快递票", example = "0") @ApiModelProperty(value = "是否快递票", example = "0")
@NotNull(message = "不能为空") @NotNull(message = "不能为空")
private Integer isExpress; private Integer isExpress;
@ApiModelProperty(value = "是否电子票", example = "0")
private String electronicDescribe;
@ApiModelProperty(value = "价格", example = "100.00") @ApiModelProperty(value = "价格", example = "100.00")
@NotNull(message = "不能为空") @NotNull(message = "不能为空")
private BigDecimal price; private BigDecimal price;
......
...@@ -27,4 +27,7 @@ public class KylinOrderTicketEntitiesVo implements Serializable { ...@@ -27,4 +27,7 @@ public class KylinOrderTicketEntitiesVo implements Serializable {
private String ticketTitle; private String ticketTitle;
private String useStart; private String useStart;
private String useEnd; private String useEnd;
private String createdAt;
private String updatedAt;
} }
...@@ -10,33 +10,24 @@ import java.io.Serializable; ...@@ -10,33 +10,24 @@ import java.io.Serializable;
@Data @Data
public class KylinStationCheckOrderVo implements Serializable { public class KylinStationCheckOrderVo implements Serializable {
private static final long serialVersionUID = 7450966265904643147L; 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; private String performanceId;
@ApiModelProperty(position = 11, value = "订单号") @ApiModelProperty(position = 12, value = "订单ID")
private String orderCode; private String orderId;
@ApiModelProperty(position = 12, value = "二维码地址")
private String qrCode;
@ApiModelProperty(position = 13, value = "用户昵称") @ApiModelProperty(position = 13, value = "用户昵称")
private String userName; private String enterName;
@ApiModelProperty(position = 14, value = "用户手机号") @ApiModelProperty(position = 14, value = "用户手机号")
private String userMobile; private String enterMobile;
@ApiModelProperty(position = 16, value = "付款张数") @ApiModelProperty(position = 15, value = "出票状态:0-未出票,1-已出票")
private Integer number;
@ApiModelProperty(position = 17, value = "退款张数")
private Integer refundNumber;
@ApiModelProperty(position = 18, value = "订单状态:0-待付款,1-已付款,2-已关闭,3-正在退款,4-已退款,5-待关闭,6-部分退款")
private Integer status; private Integer status;
@ApiModelProperty(position = 19, value = "支付状态:0-未支付,1-已支付,2-支付失败") @ApiModelProperty(position = 16, value = "支付状态:0-未支付,1-已支付,2-退款中,3-已退款")
private Integer payStatus; private Integer isPayment;
@ApiModelProperty(position = 20, value = "是否学生票[1-是,2-否]") @ApiModelProperty(position = 17, value = "出票端:(验票app)android/ios")
private Integer isStudent; private String checkClient;
@ApiModelProperty(position = 21, value = "购买者是否是会员[0-否,1-是]") @ApiModelProperty(position = 18, value = "二维身份CODE")
private Integer isMember; private String qrCode;
@ApiModelProperty(position = 30, value = "*验票张数")
private Integer checkedNumber;
@ApiModelProperty(position = 31, value = "*是否已同步[0-否,1-是]")
private Integer synced;
private static final KylinStationCheckOrderVo obj = new KylinStationCheckOrderVo(); 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; ...@@ -12,7 +12,7 @@ import java.util.List;
public class KylinStationPerformanceVo implements Serializable, Cloneable { public class KylinStationPerformanceVo implements Serializable, Cloneable {
private static final long serialVersionUID = -4994363974994478286L; private static final long serialVersionUID = -4994363974994478286L;
@ApiModelProperty(position = 10, value = "演出ID[64]") @ApiModelProperty(position = 10, value = "演出ID[64]")
private String performanceId; private String performancesId;
@ApiModelProperty(position = 11, value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]") @ApiModelProperty(position = 11, value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]")
private Integer type; private Integer type;
@ApiModelProperty(position = 12, value = "演出标题[255]") @ApiModelProperty(position = 12, value = "演出标题[255]")
...@@ -21,9 +21,13 @@ public class KylinStationPerformanceVo implements Serializable, Cloneable { ...@@ -21,9 +21,13 @@ public class KylinStationPerformanceVo implements Serializable, Cloneable {
private String timeStart; private String timeStart;
@ApiModelProperty(position = 14, value = "结束时间[yyyy/MM/dd]") @ApiModelProperty(position = 14, value = "结束时间[yyyy/MM/dd]")
private String timeEnd; 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; private List<KylinStationTicketVo> ticketVoList;
@ApiModelProperty(position = 16, value = "可下载时间") @ApiModelProperty(position = 18, value = "可下载时间")
private String canDownTime; private String canDownTime;
private static final KylinStationPerformanceVo obj = new KylinStationPerformanceVo(); private static final KylinStationPerformanceVo obj = new KylinStationPerformanceVo();
...@@ -38,7 +42,7 @@ public class KylinStationPerformanceVo implements Serializable, Cloneable { ...@@ -38,7 +42,7 @@ public class KylinStationPerformanceVo implements Serializable, Cloneable {
public KylinStationPerformanceVo copy(KylinPerformanceVo source) { public KylinStationPerformanceVo copy(KylinPerformanceVo source) {
if (null == source) return this; if (null == source) return this;
this.performanceId = source.getPerformancesId(); this.performancesId = source.getPerformancesId();
this.type = source.getType(); this.type = source.getType();
this.title = source.getTitle(); this.title = source.getTitle();
this.timeStart = source.getTimeStart(); this.timeStart = source.getTimeStart();
......
...@@ -12,24 +12,22 @@ import java.math.BigDecimal; ...@@ -12,24 +12,22 @@ import java.math.BigDecimal;
public class KylinStationTicketVo implements Serializable, Cloneable { public class KylinStationTicketVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1303234075649915021L; private static final long serialVersionUID = 1303234075649915021L;
@ApiModelProperty(position = 10, value = "票种ID[64]") @ApiModelProperty(position = 10, value = "票种ID[64]")
private String ticketsId; private String ticketId;
@ApiModelProperty(position = 11, value = "类型[1-单日票,2-通票]") @ApiModelProperty(position = 11, value = "名称[32]")
private String type;
@ApiModelProperty(position = 12, value = "名称[32]")
private String title; private String title;
@ApiModelProperty(position = 13, value = "单价(8,2)") @ApiModelProperty(position = 12, value = "单价(8,2)")
private BigDecimal price; private BigDecimal price;
@ApiModelProperty(position = 14, value = "适用开始时间") @ApiModelProperty(position = 13, value = "适用开始时间")
private String useStart; private String useStart;
@ApiModelProperty(position = 15, value = "适用结束时间") @ApiModelProperty(position = 14, value = "适用结束时间")
private String useEnd; private String useEnd;
@ApiModelProperty(position = 16, value = "票房") @ApiModelProperty(position = 15, value = "票房")
private BigDecimal priceSum; private BigDecimal priceSum;
@ApiModelProperty(position = 17, value = "票量[9]") @ApiModelProperty(position = 16, value = "票量[9]")
private Integer number; private Integer number;
@ApiModelProperty(position = 18, value = "已验票量[9]") @ApiModelProperty(position = 17, value = "已验票量[9]")
private Integer checkedNum; private Integer checkedNum;
@ApiModelProperty(position = 19, value = "余量[9]") @ApiModelProperty(position = 18, value = "余量[9]")
private Integer remainderNum; private Integer remainderNum;
private static final KylinStationTicketVo obj = new KylinStationTicketVo(); private static final KylinStationTicketVo obj = new KylinStationTicketVo();
......
...@@ -22,4 +22,6 @@ public class PayDataVo implements Serializable { ...@@ -22,4 +22,6 @@ public class PayDataVo implements Serializable {
private long timestamp; private long timestamp;
private String redirect_url;
private String order_str;
} }
...@@ -18,6 +18,10 @@ public class PayResultVo implements Serializable { ...@@ -18,6 +18,10 @@ public class PayResultVo implements Serializable {
private String order_id; private String order_id;
private String showUrl;
private String returnUrl;
private BigDecimal price; private BigDecimal price;
private PayDataVo pay_data; private PayDataVo pay_data;
......
...@@ -63,6 +63,12 @@ public class KylinTicketPartnerVo implements Serializable { ...@@ -63,6 +63,12 @@ public class KylinTicketPartnerVo implements Serializable {
@ApiModelProperty(value = "票种说明", example = "这是票种说明") @ApiModelProperty(value = "票种说明", example = "这是票种说明")
private String describes; 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") @ApiModelProperty(value = "票状态 -1删除;0未提交;1审核中;2审核中(自动在售);3审核通过;4审核未通过;6在售;7停售;8售罄;9未开始;10已结束", example = "0")
private Integer status; private Integer status;
......
package com.liquidnet.service.kylin.service; package com.liquidnet.service.kylin.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.kylin.dto.param.KylinStationCheckOrderParam;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities; import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
/** /**
...@@ -13,4 +14,5 @@ import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities; ...@@ -13,4 +14,5 @@ import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
*/ */
public interface IKylinOrderTicketEntitiesService extends IService<KylinOrderTicketEntities> { public interface IKylinOrderTicketEntitiesService extends IService<KylinOrderTicketEntities> {
void updateByStation(KylinStationCheckOrderParam checkDataParam);
} }
...@@ -43,6 +43,10 @@ public interface IKylinOrderTicketsService extends IService<KylinOrderTickets> { ...@@ -43,6 +43,10 @@ public interface IKylinOrderTicketsService extends IService<KylinOrderTickets> {
//TASK 倒计时 //TASK 倒计时
boolean checkOrderTime(String userId); boolean checkOrderTime(String userId);
//TASK 订单状态
ResponseDto<Integer> checkOrderResult(String orderId);
// 下单接口(无订单->待支付->可支付) // 下单接口(无订单->待支付->可支付)
// 删除订单 // 删除订单
// 代理票务 可买状态判断 // 代理票务 可买状态判断
......
...@@ -101,6 +101,17 @@ ...@@ -101,6 +101,17 @@
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
</dependency> </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> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -6,6 +6,8 @@ import java.util.Arrays; ...@@ -6,6 +6,8 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import javax.sql.DataSource; import javax.sql.DataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.io.VFS; import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionFactoryBean;
...@@ -122,7 +124,7 @@ public class MyBatisConfig ...@@ -122,7 +124,7 @@ public class MyBatisConfig
typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
VFS.addImplClass(SpringBootVFS.class); VFS.addImplClass(SpringBootVFS.class);
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource); sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage(typeAliasesPackage); sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
......
...@@ -56,11 +56,19 @@ public class KylinPerformancesController extends BaseController { ...@@ -56,11 +56,19 @@ public class KylinPerformancesController extends BaseController {
return prefix + "/details"; 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") @RequiresPermissions("kylin:performances:change")
@PostMapping(value = "/isShow") @PostMapping(value = "/isShow")
@ResponseBody @ResponseBody
public AjaxResult setIsShow(String performancesId, Integer isShow) { public AjaxResult setIsShow(String performancesId, Integer isShow) {
return toAjax(kylinPerformancesService.setIsShow(performancesId,isShow)); return toAjax(kylinPerformancesService.setIsShow(performancesId, isShow));
} }
// //
......
...@@ -36,13 +36,13 @@ spring: ...@@ -36,13 +36,13 @@ spring:
uri: mongodb://root:S&y$6d*JwJ@39.106.122.201:27017/?authSource=admin&waitQueueMultiple=100 uri: mongodb://root:S&y$6d*JwJ@39.106.122.201:27017/?authSource=admin&waitQueueMultiple=100
sslEnabled: false sslEnabled: false
database: dev_ln_scene database: dev_ln_scene
redis: redis:
port: 6379 port: 6379
host: 39.106.122.201 host: 39.106.122.201
password: 3Xa%8p password: 3Xa%8p
lettuce: lettuce:
pool: pool:
max-active: 8 max-active: 8
max-wait: -1 max-wait: -1
max-idle: 8 max-idle: 8
min-idle: 0 min-idle: 0
\ No newline at end of file \ No newline at end of file
...@@ -112,6 +112,8 @@ ...@@ -112,6 +112,8 @@
<div th:each="dict : ${kylinPerformanceMisVo.ticketTimes}"> <div th:each="dict : ${kylinPerformanceMisVo.ticketTimes}">
<div th:each="dict2 : ${dict.ticket}"> <div th:each="dict2 : ${dict.ticket}">
<br/>
<br/>
<div> <div>
<span>票种名称:</span> <span>票种名称:</span>
<span th:text="${dict2.title}"></span> <span th:text="${dict2.title}"></span>
...@@ -130,14 +132,14 @@ ...@@ -130,14 +132,14 @@
<span>票种说明:</span> <span>票种说明:</span>
<span th:text="${dict2.title}"></span> <span th:text="${dict2.title}"></span>
</div> </div>
<div> <!-- <div>-->
<span>电子票说明:</span> <!-- <span>电子票说明:</span>-->
<span th:text="${dict2.title}"></span> <!-- <span th:text="${dict2.describeElectronic}"></span>-->
</div> <!-- </div>-->
<div> <!-- <div>-->
<span>学生票说明说明:</span> <!-- <span>快递票说明:</span>-->
<span th:text="${dict2.title}"></span> <!-- <span th:text="${dict2.describesExpress}"></span>-->
</div> <!-- </div>-->
<div> <div>
<span>限购:</span> <span>限购:</span>
<span th:text="${dict2.limitCount}"></span> <span th:text="${dict2.limitCount}"></span>
...@@ -158,19 +160,40 @@ ...@@ -158,19 +160,40 @@
<span>是否学生票:</span> <span>是否学生票:</span>
<span th:text="${dict2.isStudent}"></span> <span th:text="${dict2.isStudent}"></span>
</div> </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> <div>
<span>取票方式:</span> <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> </div>
</div> </div>
</form> </form>
</div> </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> </div>
<button type="button" class="btn btn-w-m btn-success" name="isShowBtn"
onclick="">审核
</button>
</div> </div>
...@@ -190,15 +213,32 @@ ...@@ -190,15 +213,32 @@
document.getElementsByName("isShowCheck")[1].checked = true; document.getElementsByName("isShowCheck")[1].checked = true;
} }
//修改 演出是否显示
function submitHandler() { function submitHandler() {
var param = { var param = {
"isShow": document.getElementsByName("isShowCheck")[0].checked ? 1 : 0, "isShow": document.getElementsByName("auditCheck")[0].checked ? 1 : 0,
"performancesId": '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", "") "performancesId": '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", "")
}; };
$.operate.post(prefix + "/isShow", param, function (res) { $.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"); const type = document.getElementById("type");
var typeInt = '[[${kylinPerformanceMisVo.type}]]'; var typeInt = '[[${kylinPerformanceMisVo.type}]]';
......
...@@ -61,9 +61,19 @@ public abstract class DateUtil { ...@@ -61,9 +61,19 @@ public abstract class DateUtil {
} }
public String format(LocalDate localDate) { public String format(LocalDate localDate) {
if (localDate == null) {
return null;
}
return formatter.format(localDate); 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: ...@@ -26,7 +26,7 @@ liquidnet:
port: 6379 port: 6379
password: 3Xa%8p password: 3Xa%8p
mongodb: mongodb:
host: 39.106.122.201 host: 39.106.122.201:27017
port: 27017 port: 27017
user: root user: root
pwd: S&y$6d*JwJ pwd: S&y$6d*JwJ
......
...@@ -22,12 +22,11 @@ liquidnet: ...@@ -22,12 +22,11 @@ liquidnet:
knife4j: knife4j:
disable: false disable: false
redis: redis:
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com host: r-2zefzyjbij5vbez65y.redis.rds.aliyuncs.com
port: 6380 port: 6380
password: PO@B!Iud32 password: PO@B!Iud32
mongodb: 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 port: 3717
user: root user: root
pwd: $hAh4SGcDQ pwd: $hAh4SGcDQ
#application-test-end \ No newline at end of file
\ No newline at end of file
...@@ -2,8 +2,8 @@ server: ...@@ -2,8 +2,8 @@ server:
port: ${liquidnet.info.port} port: ${liquidnet.info.port}
tomcat: tomcat:
uri-encoding: UTF-8 uri-encoding: UTF-8
maxThreads: 2000 #默认200 maxThreads: 200 #默认200
minSpareThreads: 100 #默认10 minSpareThreads: 30 #默认10
maxConnections: 12000 #默认10000 maxConnections: 12000 #默认10000
acceptCount: 5000 #默认100 acceptCount: 5000 #默认100
processorCache: 200 #默认200 processorCache: 200 #默认200
...@@ -75,29 +75,9 @@ spring: ...@@ -75,29 +75,9 @@ spring:
password: ${liquidnet.rabbitmq.password} password: ${liquidnet.rabbitmq.password}
data: data:
mongodb: mongodb:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}:${liquidnet.mongodb.port}/?authSource=admin&waitQueueMultiple=100 uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=4000&waitQueueMultiple=100
sslEnabled: false sslEnabled: false
database: ${spring.data.mongodb.database} 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
datasource: datasource:
name: ${liquidnet.mysql.database-name} name: ${liquidnet.mysql.database-name}
url: jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false url: jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
......
...@@ -2,8 +2,8 @@ server: ...@@ -2,8 +2,8 @@ server:
port: ${liquidnet.info.port} port: ${liquidnet.info.port}
tomcat: tomcat:
uri-encoding: UTF-8 uri-encoding: UTF-8
maxThreads: 2000 #默认200 maxThreads: 200 #默认200
minSpareThreads: 100 #默认10 minSpareThreads: 30 #默认10
maxConnections: 12000 #默认10000 maxConnections: 12000 #默认10000
acceptCount: 5000 #默认100 acceptCount: 5000 #默认100
processorCache: 200 #默认200 processorCache: 200 #默认200
...@@ -75,8 +75,7 @@ spring: ...@@ -75,8 +75,7 @@ spring:
password: ${liquidnet.rabbitmq.password} password: ${liquidnet.rabbitmq.password}
data: data:
mongodb: mongodb:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}:${liquidnet.mongodb.port}/?authSource=admin&waitQueueMultiple=100 uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=4000&waitQueueMultiple=100
# uri: mongodb://root:S&y$6d*JwJ@39.106.122.201:27017/ln_kylin_mdb
sslEnabled: false sslEnabled: false
database: ${spring.data.mongodb.database} database: ${spring.data.mongodb.database}
datasource: datasource:
......
...@@ -3,7 +3,7 @@ server: ...@@ -3,7 +3,7 @@ server:
tomcat: tomcat:
uri-encoding: UTF-8 uri-encoding: UTF-8
maxThreads: 2000 #默认200 maxThreads: 2000 #默认200
minSpareThreads: 500 #默认10 minSpareThreads: 200 #默认10
maxConnections: 20000 #默认10000 maxConnections: 20000 #默认10000
acceptCount: 5000 #默认100 acceptCount: 5000 #默认100
processorCache: 1000 #默认200 processorCache: 1000 #默认200
...@@ -93,7 +93,7 @@ ribbon: ...@@ -93,7 +93,7 @@ ribbon:
enabled: true # 为Ribbon禁用Eureka enabled: true # 为Ribbon禁用Eureka
ReadTimeout: 15000 ReadTimeout: 15000
SocketTimeout: 15000 SocketTimeout: 15000
MaxAutoRetries: 1 MaxAutoRetries: 0
MaxAutoRetriesNextServer: 0 MaxAutoRetriesNextServer: 0
#liquidnet-service-sequence: #liquidnet-service-sequence:
# ribbon: # ribbon:
......
...@@ -6,7 +6,7 @@ liquidnet: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-test-这里是配置信息基本值
spring: spring:
......
...@@ -6,7 +6,7 @@ liquidnet: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-test-这里是配置信息基本值
spring: spring:
......
...@@ -6,7 +6,7 @@ liquidnet: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-dev-这里是配置信息基本值
spring: spring:
......
...@@ -6,7 +6,7 @@ liquidnet: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-dev-这里是配置信息基本值
spring: spring:
......
...@@ -16,6 +16,7 @@ import io.swagger.annotations.ApiResponse; ...@@ -16,6 +16,7 @@ import io.swagger.annotations.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List; import java.util.List;
/** /**
...@@ -70,6 +71,18 @@ public class KylinOrderTicketsController { ...@@ -70,6 +71,18 @@ public class KylinOrderTicketsController {
return ResponseDto.success(orderTicketsService.orderDetails(orderId)); 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") @GetMapping("checkOrderTime")
@ApiOperation("订单过期脚本") @ApiOperation("订单过期脚本")
@ApiResponse(code = 200, message = "接口返回对象参数") @ApiResponse(code = 200, message = "接口返回对象参数")
......
...@@ -2,16 +2,13 @@ package com.liquidnet.service.kylin.controller; ...@@ -2,16 +2,13 @@ package com.liquidnet.service.kylin.controller;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.core.JwtValidator; import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.commons.lang.util.CurrentUtil; import com.liquidnet.commons.lang.util.*;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ErrorMapping; import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.CheckPerformanceRelationParam; import com.liquidnet.service.kylin.dto.param.CheckPerformanceRelationParam;
import com.liquidnet.service.kylin.dto.param.KylinStationCheckOrderParam; import com.liquidnet.service.kylin.dto.param.KylinStationCheckOrderParam;
import com.liquidnet.service.kylin.dto.vo.*; import com.liquidnet.service.kylin.dto.vo.*;
import com.liquidnet.service.kylin.service.partner.IKylinCheckUserPartnerService; import com.liquidnet.service.kylin.service.IKylinOrderTicketEntitiesService;
import com.liquidnet.service.kylin.service.partner.IKylinCheckUserPerformancesPartnerService;
import com.liquidnet.service.kylin.utils.DataUtils; import com.liquidnet.service.kylin.utils.DataUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -21,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -21,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; 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.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
...@@ -31,7 +29,14 @@ import org.springframework.web.bind.annotation.*; ...@@ -31,7 +29,14 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*; 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 = "验票") @Api(tags = "验票")
@Slf4j @Slf4j
...@@ -48,14 +53,16 @@ public class KylinStationController { ...@@ -48,14 +53,16 @@ public class KylinStationController {
RedisUtil redisUtil; RedisUtil redisUtil;
@Autowired @Autowired
DataUtils dataUtils; DataUtils dataUtils;
@Autowired
IKylinOrderTicketEntitiesService kylinOrderTicketEntitiesService;
@ApiOperation(value = "手机号密码登录") @ApiOperation(value = "手机号密码登录")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "mobile", value = "手机号"), @ApiImplicitParam(type = "form", dataType = "String", name = "mobile", value = "手机号", example = "11122233344"),
@ApiImplicitParam(type = "form", dataType = "String", name = "passwd", value = "密码"), @ApiImplicitParam(type = "form", dataType = "String", name = "passwd", value = "密码", example = "123456"),
}) })
@PostMapping("login") @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); log.info("mobile:{},passwd:{}", mobile, passwd);
return this.loginVerification(mobile, passwd, true); return this.loginVerification(mobile, passwd, true);
...@@ -63,11 +70,11 @@ public class KylinStationController { ...@@ -63,11 +70,11 @@ public class KylinStationController {
@ApiOperation(value = "手机号验证码登录") @ApiOperation(value = "手机号验证码登录")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mobile", value = "手机号"), @ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mobile", value = "手机号", example = "11122233344"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "code", value = "验证码"), @ApiImplicitParam(type = "body", required = true, dataType = "String", name = "code", value = "验证码", example = "111111"),
}) })
@PostMapping("login/sms") @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); log.info("mobile:{},code:{}", mobile, code);
return this.loginVerification(mobile, code, false); return this.loginVerification(mobile, code, false);
...@@ -95,88 +102,214 @@ public class KylinStationController { ...@@ -95,88 +102,214 @@ public class KylinStationController {
@ApiOperation(value = "演出列表") @ApiOperation(value = "演出列表")
@ApiImplicitParams({ @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}") @GetMapping("performances/{mod}")
public ResponseDto<List<KylinStationPerformanceVo>> performances(@PathVariable String mod) { public ResponseDto<List<KylinStationPerformanceVo>> performances(@PathVariable String mod) {
List<KylinStationPerformanceVo> voList = new ArrayList<>(); List<KylinStationPerformanceVo> voList = new ArrayList<>();
log.info("mod:{}", mod); String currentUid = CurrentUtil.getCurrentUid();
try {
switch (mod) { switch (mod) {
case "recent": case "recent":
KylinCheckUserPerformanceVo checkUserRelationVo = dataUtils.getCheckUserRelationVo(CurrentUtil.getCurrentUid()); log.info(":::performances/recent:{}", currentUid);
// 查取当前用户下关联演出ID列表
if (null != checkUserRelationVo) { KylinCheckUserPerformanceVo checkUserRelationVo = dataUtils.getCheckUserRelationVo(currentUid);
List<CheckPerformanceRelationParam> relationParams = checkUserRelationVo.getRelationParams();
if (null != checkUserRelationVo) {
if (!CollectionUtils.isEmpty(relationParams)) { List<CheckPerformanceRelationParam> performanceRelationList = checkUserRelationVo.getRelationParams();
if (!CollectionUtils.isEmpty(performanceRelationList)) {
relationParams.forEach(r -> { LocalDateTime tmpDt = LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0, 0));
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(r.getPerformanceId()); String tmpDtStr = DateUtil.format(tmpDt, DateUtil.Formatter.yyyyMMddHHmmss);
KylinStationPerformanceVo vo = KylinStationPerformanceVo.getNew().copy(performanceVo); // 转换Map<performanceId, canDownTime>
Map<String, String> performanceRelationMap = performanceRelationList.stream().collect(Collectors.toMap(CheckPerformanceRelationParam::getPerformanceId, CheckPerformanceRelationParam::getCanDownTime));
vo.setCanDownTime(r.getCanDownTime());
// 查取指定条件的演出列表
// TODO: 2021/5/30 票种数据统计 Query performancesVoQuery = Query.query(Criteria.where("performancesId").in(
KylinStationTicketVo ticketVo = KylinStationTicketVo.getNew(); performanceRelationList.stream().map(CheckPerformanceRelationParam::getPerformanceId).toArray()
ticketVo.setTicketsId("1"); ).and("timeEnd").gt(tmpDtStr));
ticketVo.setType("1"); performancesVoQuery.with(Sort.by(Sort.Order.asc("timeEnd"), Sort.Order.desc("sort")));
ticketVo.setTitle("测试数据"); voList = mongoTemplate.find(performancesVoQuery, KylinStationPerformanceVo.class, KylinPerformanceVo.class.getSimpleName());
ticketVo.setPrice(BigDecimal.TEN);
ticketVo.setUseStart("2021-05-30"); // 查取演出对应的订单票明细
ticketVo.setUseEnd("2021-06-02"); Query orderTicketEntitiesVoQuery = Query.query(Criteria.where("performanceId").in(
ticketVo.setNumber(100); voList.stream().map(KylinStationPerformanceVo::getPerformancesId).toArray()
ticketVo.setPriceSum(ticketVo.getPrice().multiply(BigDecimal.valueOf(ticketVo.getNumber()))); ).and("isPayment").is(1));
ticketVo.setCheckedNum(0); List<KylinOrderTicketEntitiesVo> oteVoList = mongoTemplate.find(orderTicketEntitiesVoQuery, KylinOrderTicketEntitiesVo.class, KylinOrderTicketEntitiesVo.class.getSimpleName());
ticketVo.setRemainderNum(ticketVo.getNumber() - ticketVo.getCheckedNum()); // 转换订单票明细结构为Map<performanceId, List<KylinOrderTicketEntitiesVo>>
Map<String, List<KylinOrderTicketEntitiesVo>> oteVoMap = oteVoList.stream().collect(Collectors.groupingBy(KylinOrderTicketEntitiesVo::getPerformanceId));
vo.setTicketVoList(Arrays.asList(ticketVo, ticketVo));
// 查取订单对应票种
voList.add(vo); 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;
break; case "down":
case "down": log.info(":::performances/down:{}", currentUid);
break;
break; case "over":
case "over": log.info(":::performances/over:{}", currentUid);
break;
break; default:
default: log.info(":::performances/default:{}", currentUid);
break; break;
}
} catch (Exception e) {
log.error("验票:查取演出列表异常:/station/performances/?", e);
} }
return ResponseDto.success(voList); return ResponseDto.success(voList);
} }
@ApiOperation(value = "下载验票数据") @ApiOperation(value = "下载验票数据")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "type", value = "类型[101-音乐节,102小型演出(livehouse演出),103巡演]", allowableValues = "101,102,103"), @ApiImplicitParam(type = "path", 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 = "performanceId", value = "演出ID[64]"),
}) })
@GetMapping("download/{type}/{performanceId}") @GetMapping("download/{type}/{performanceId}")
public ResponseDto<List<KylinStationCheckOrderVo>> downloadTicketData(@PathVariable String type, @PathVariable String performanceId) { public ResponseDto<List<KylinStationCheckOrderVo>> downloadTicketData(@PathVariable String type, @PathVariable String performanceId) {
log.info("type:{},performanceId:{}", type, 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 = "上载验票数据") @ApiOperation(value = "上载验票数据")
@PostMapping("upload") @PostMapping("upload")
public ResponseDto<Boolean> uploadTicketData(@RequestBody List<KylinStationCheckOrderParam> checkDataParams) { public ResponseDto<Object> uploadTicketData(@RequestBody KylinStationCheckOrderParam checkDataParam) {
log.info("checkDataParams:{}", JsonUtils.toJson(checkDataParams)); 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 checkUserVo = mongoTemplate.findOne(Query.query(Criteria.where("mobile").is(mobile)),
KylinCheckUserVo.class, KylinCheckUserVo.class.getSimpleName()); KylinCheckUserVo.class, KylinCheckUserVo.class.getSimpleName());
...@@ -221,7 +354,7 @@ public class KylinStationController { ...@@ -221,7 +354,7 @@ public class KylinStationController {
} }
} }
private ResponseDto<String> loginAuthentication(KylinCheckUserVo checkUserVo) { private ResponseDto<KylinStationLoginVo> loginAuthentication(KylinCheckUserVo checkUserVo) {
String uid = checkUserVo.getCheckUserId(); String uid = checkUserVo.getCheckUserId();
String ssoKeyUid = jwtValidator.getSsoRedisKey().concat(uid); String ssoKeyUid = jwtValidator.getSsoRedisKey().concat(uid);
...@@ -237,6 +370,16 @@ public class KylinStationController { ...@@ -237,6 +370,16 @@ public class KylinStationController {
redisUtil.set(ssoKeyUidM5Token, true, jwtValidator.getExpireTtl() * 60); 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; 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.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketEntitiesMapper; import com.liquidnet.service.kylin.mapper.KylinOrderTicketEntitiesMapper;
import com.liquidnet.service.kylin.service.IKylinOrderTicketEntitiesService; import com.liquidnet.service.kylin.service.IKylinOrderTicketEntitiesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.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> * <p>
...@@ -16,5 +35,38 @@ import org.springframework.stereotype.Service; ...@@ -16,5 +35,38 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class KylinOrderTicketEntitiesServiceImpl extends ServiceImpl<KylinOrderTicketEntitiesMapper, KylinOrderTicketEntities> implements IKylinOrderTicketEntitiesService { 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 ...@@ -80,14 +80,15 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
public ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam) { public ResponseDto<PayResultVo> checkCanOrder(PayOrderParam payOrderParam) {
boolean isDownGeneral = false; boolean isDownGeneral = false;
String uid = CurrentUtil.getCurrentUid(); String uid = CurrentUtil.getCurrentUid();
if(!RedisLockUtil.tryLock("userId:" + uid,2,2)){
return ResponseDto.failure("请求频繁");//参数错误
}
RLock lock = RedisLockUtil.lock("userId:" + uid, 2); RLock lock = RedisLockUtil.lock("userId:" + uid, 2);
try { try {
if (lock.isLocked()) {
return ResponseDto.failure("请求频繁");//参数错误
}
KylinPerformanceVo performanceData = dataUtils.getPerformanceVo(payOrderParam.getPerformanceId()); KylinPerformanceVo performanceData = dataUtils.getPerformanceVo(payOrderParam.getPerformanceId());
KylinTicketTimesVo ticketTimesData = dataUtils.getTicketTimesVo(payOrderParam.getTimeId()); KylinTicketTimesVo ticketTimesData = dataUtils.getTicketTimesVo(payOrderParam.getTimeId());
KylinTicketVo ticketData = dataUtils.getTicketVo(payOrderParam.getTicketId()); KylinTicketVo ticketData = dataUtils.getTicketVo(payOrderParam.getTicketId());
Integer isStudent = ticketData.getIsStudent();
if (performanceData == null || ticketTimesData == null || ticketData == null) { if (performanceData == null || ticketTimesData == null || ticketData == null) {
lock.unlock(); lock.unlock();
return ResponseDto.failure("参数错误");//参数错误 return ResponseDto.failure("参数错误");//参数错误
...@@ -154,13 +155,15 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -154,13 +155,15 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
} }
//快递票判断 //快递票判断
if (payOrderParam.getIsExpress() == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeExpressEnd) == 1) { if(payOrderParam.getIsExpress()!=null) {
lock.unlock(); if (payOrderParam.getIsExpress() == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeExpressEnd) == 1) {
return ResponseDto.failure("已超过快递票截止时间");//快递票不卖 lock.unlock();
} return ResponseDto.failure("已超过快递票截止时间");//快递票不卖
if (payOrderParam.getIsExpress() == 1 && payOrderParam.getAddressId().isEmpty()) { }
lock.unlock(); if (payOrderParam.getIsExpress() == 1 && payOrderParam.getAddressId().isEmpty()) {
return ResponseDto.failure("快递票未填写收货地址");//快递票未填写收货地址 lock.unlock();
return ResponseDto.failure("快递票未填写收货地址");//快递票未填写收货地址
}
} }
//实名判断 //实名判断
if (isTrueName == 1 && payOrderParam.getEnterIdList().size() <= 0) { if (isTrueName == 1 && payOrderParam.getEnterIdList().size() <= 0) {
...@@ -183,7 +186,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -183,7 +186,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
//学生票 判断 //学生票 判断
List<AdamEntersVo> entersVoList = new ArrayList<>(); List<AdamEntersVo> entersVoList = new ArrayList<>();
if (null != payOrderParam.getIsStudent() && payOrderParam.getIsStudent() == 1) { if (isStudent == 1) {
for (String enterId : payOrderParam.getEnterIdList()) { for (String enterId : payOrderParam.getEnterIdList()) {
AdamEntersVo adamEnters = feignAdamBaseClient.queryEnters(enterId, uid).getData(); AdamEntersVo adamEnters = feignAdamBaseClient.queryEnters(enterId, uid).getData();
entersVoList.add(adamEnters); entersVoList.add(adamEnters);
...@@ -273,7 +276,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -273,7 +276,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
} }
} }
lock.unlock(); lock.unlock();
return order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList); return order(payOrderParam, uid, isMember, isTrueName, performanceData, ticketData, entersVoList,isStudent);
} }
} catch (Exception e) { } catch (Exception e) {
if (isDownGeneral) { if (isDownGeneral) {
...@@ -285,7 +288,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -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<String> sqls = new LinkedList<>();
LinkedList<Object[]> paramsList = new LinkedList<>(); LinkedList<Object[]> paramsList = new LinkedList<>();
String source = CurrentUtil.getCliSource(); String source = CurrentUtil.getCliSource();
...@@ -350,7 +353,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -350,7 +353,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketStatus.setExpressType(payOrderParam.getExpressType()); orderTicketStatus.setExpressType(payOrderParam.getExpressType());
orderTicketStatus.setTransferStatus(0); orderTicketStatus.setTransferStatus(0);
orderTicketStatus.setStatus(0); orderTicketStatus.setStatus(0);
orderTicketStatus.setIsStudent(payOrderParam.getIsStudent()); orderTicketStatus.setIsStudent(isStudent);
orderTicketStatus.setPayStatus(0); orderTicketStatus.setPayStatus(0);
orderTicketStatus.setCreatedAt(LocalDateTime.now()); orderTicketStatus.setCreatedAt(LocalDateTime.now());
orderTicketStatus.setUpdatedAt(null); orderTicketStatus.setUpdatedAt(null);
...@@ -406,6 +409,8 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -406,6 +409,8 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle()); orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart()); orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd()); 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()); mongoTemplate.insert(orderTicketEntitiesVo, KylinOrderTicketEntitiesVo.class.getSimpleName());
} }
} else { } else {
...@@ -436,6 +441,8 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -436,6 +441,8 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle()); orderTicketEntitiesVo.setTicketTitle(ticketData.getTitle());
orderTicketEntitiesVo.setUseStart(ticketData.getUseStart()); orderTicketEntitiesVo.setUseStart(ticketData.getUseStart());
orderTicketEntitiesVo.setUseEnd(ticketData.getUseEnd()); 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()); mongoTemplate.insert(orderTicketEntitiesVo, KylinOrderTicketEntitiesVo.class.getSimpleName());
} }
} }
...@@ -464,6 +471,10 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -464,6 +471,10 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
payResultVo.setOrder_id(orderTicketId); payResultVo.setOrder_id(orderTicketId);
payResultVo.setPrice(orderTickets.getPriceActual()); payResultVo.setPrice(orderTickets.getPriceActual());
orderTickets.setPayCode(payResultVo.getCode()); orderTickets.setPayCode(payResultVo.getCode());
if (payOrderParam.getPayType().equals("alipay") && payOrderParam.getDeviceFrom().equals("wap")) {
payResultVo.setShowUrl(payOrderParam.getShowUrl());
payResultVo.setReturnUrl(payOrderParam.getReturnUrl());
}
// 生成vo // 生成vo
KylinOrderTicketVo orderTicketVo = new KylinOrderTicketVo(); KylinOrderTicketVo orderTicketVo = new KylinOrderTicketVo();
orderTicketVo.setOrderTicket(orderTickets); orderTicketVo.setOrderTicket(orderTickets);
...@@ -525,13 +536,20 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -525,13 +536,20 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
httpData.add("expire_time", orderTicketData.getPayCountdownMinute().toString()); httpData.add("expire_time", orderTicketData.getPayCountdownMinute().toString());
httpData.add("open_id", payAgainParam.getOpenId()); 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); String returnData = HttpUtil.post(payUrl + payAgainParam.getDeviceFrom() + "/" + payAgainParam.getPayType(), httpData);
PayResultVo payResultVo = JsonUtils.fromJson(returnData, PayResultVo.class); PayResultVo payResultVo = JsonUtils.fromJson(returnData, PayResultVo.class);
payResultVo.setOrder_id(orderTicketData.getOrderTicketsId()); payResultVo.setOrder_id(orderTicketData.getOrderTicketsId());
payResultVo.setPrice(orderTicketData.getPriceActual()); 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(); KylinOrderTickets orderTickets = new KylinOrderTickets();
orderTickets.setOrderTicketsId(payAgainParam.getOrderId()); orderTickets.setOrderTicketsId(payAgainParam.getOrderId());
...@@ -567,10 +585,11 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -567,10 +585,11 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
//支付时间 //支付时间
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
RLock lock = RedisLockUtil.lock("order_lock:" + syncOrderParam.getOrder_code(), 240); if(!RedisLockUtil.tryLock("order_lock:" + syncOrderParam.getOrder_code(),240,240)){
if (lock.isLocked()) { return "fail";//参数错误
return "fail";
} }
RLock lock = RedisLockUtil.lock("order_lock:" + syncOrderParam.getOrder_code(), 240);
String timePay = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); 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()); 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 ...@@ -774,10 +793,10 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName()); KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
for (KylinOrderTicketVo item : orderTicketVo) { for (KylinOrderTicketVo item : orderTicketVo) {
RLock lock = redisLockUtil.lock("order_lock:" + item.getOrderCode(), 2); if(!RedisLockUtil.tryLock("order_lock:" + item.getOrderCode(),240,240)){
if (lock.isLocked()) {
continue; continue;
} }
RLock lock = redisLockUtil.lock("order_lock:" + item.getOrderCode(), 240);
KylinOrderTicketVo itemData = dataUtils.getOrderTicketVo(item.getOrderTicketsId()); KylinOrderTicketVo itemData = dataUtils.getOrderTicketVo(item.getOrderTicketsId());
if (itemData.getStatus() == 0) { if (itemData.getStatus() == 0) {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
...@@ -822,6 +841,22 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM ...@@ -822,6 +841,22 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
return true; 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) { public boolean checkAgent(String agentId, KylinTicketVo ticketData) {
boolean isAgent = ticketData.getIsAgent() == 1; boolean isAgent = ticketData.getIsAgent() == 1;
if (isAgent) { if (isAgent) {
......
...@@ -116,6 +116,12 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp ...@@ -116,6 +116,12 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
kylinTicketPartnerVo.setType(kylinTicketTimesPartnerVo.getType()); kylinTicketPartnerVo.setType(kylinTicketTimesPartnerVo.getType());
kylinTicketPartnerVo.setStatus(0); kylinTicketPartnerVo.setStatus(0);
kylinTicketPartnerVo.setDefault(); kylinTicketPartnerVo.setDefault();
if(ticketCreateParam.getIsExpress()==1){
kylinTicketPartnerVo.setDescribesExpress(ticketCreateParam.getExpressDescribes());
}
if(ticketCreateParam.getIsElectronic()==1){
kylinTicketPartnerVo.setDescribeElectronic(ticketCreateParam.getElectronicDescribe());
}
if (ticketCreateParam.getIsExpress() == 1) { if (ticketCreateParam.getIsExpress() == 1) {
kylinTicketPartnerVo.setTimeEndExpress(ticketCreateParam.getTimeEndExpress().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); kylinTicketPartnerVo.setTimeEndExpress(ticketCreateParam.getTimeEndExpress().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
...@@ -156,6 +162,12 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp ...@@ -156,6 +162,12 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
kylinTicketPartnerVo.setUseStart(kylinTicketTimesPartnerVo.getUseStart()); kylinTicketPartnerVo.setUseStart(kylinTicketTimesPartnerVo.getUseStart());
kylinTicketPartnerVo.setUseEnd(kylinTicketTimesPartnerVo.getUseEnd()); kylinTicketPartnerVo.setUseEnd(kylinTicketTimesPartnerVo.getUseEnd());
kylinTicketPartnerVo.setType(kylinTicketTimesPartnerVo.getType()); kylinTicketPartnerVo.setType(kylinTicketTimesPartnerVo.getType());
if(ticketCreateParam.getIsExpress()==1){
kylinTicketPartnerVo.setDescribesExpress(ticketCreateParam.getExpressDescribes());
}
if(ticketCreateParam.getIsElectronic()==1){
kylinTicketPartnerVo.setDescribeElectronic(ticketCreateParam.getElectronicDescribe());
}
kylinTicketPartnerVo.setStatus(-2); kylinTicketPartnerVo.setStatus(-2);
kylinTicketPartnerVo.setDefault(); kylinTicketPartnerVo.setDefault();
...@@ -199,6 +211,13 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp ...@@ -199,6 +211,13 @@ public class KylinTicketsPartnerServiceImpl extends ServiceImpl<KylinTicketsMapp
kylinTicketPartnerVo.setTimeEnd(ticketCreateParam.getTimeEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); kylinTicketPartnerVo.setTimeEnd(ticketCreateParam.getTimeEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
kylinTicketPartnerVo.setTimesId(null); kylinTicketPartnerVo.setTimesId(null);
kylinTicketPartnerVo.setStatus(null); kylinTicketPartnerVo.setStatus(null);
if(ticketCreateParam.getIsExpress()==1){
kylinTicketPartnerVo.setDescribesExpress(ticketCreateParam.getExpressDescribes());
}
if(ticketCreateParam.getIsElectronic()==1){
kylinTicketPartnerVo.setDescribeElectronic(ticketCreateParam.getElectronicDescribe());
}
kylinTicketPartnerVo.setDefault(); kylinTicketPartnerVo.setDefault();
if (ticketCreateParam.getIsExpress() == 1) { if (ticketCreateParam.getIsExpress() == 1) {
kylinTicketPartnerVo.setTimeEndExpress(ticketCreateParam.getTimeEndExpress().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); kylinTicketPartnerVo.setTimeEndExpress(ticketCreateParam.getTimeEndExpress().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
......
...@@ -400,6 +400,10 @@ public class PerformanceVoTask { ...@@ -400,6 +400,10 @@ public class PerformanceVoTask {
tickets.setTimeEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketItem.getTimeEnd()))); tickets.setTimeEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketItem.getTimeEnd())));
if (ticketItem.getIsExpress() == 1) { if (ticketItem.getIsExpress() == 1) {
tickets.setTimeEndExpress(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketItem.getTimeEndExpress()))); 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.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()))); tickets.setUseEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketTimeItem.getUseEnd())));
......
package com.liquidnet.service.kylin.utils; package com.liquidnet.service.kylin.utils;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 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.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.kylin.constant.KylinRedisConst; import com.liquidnet.service.kylin.constant.KylinRedisConst;
...@@ -64,7 +65,11 @@ public class DataUtils { ...@@ -64,7 +65,11 @@ public class DataUtils {
* @return 普通剩余库存 * @return 普通剩余库存
*/ */
public int changeSurplusGeneral(String ticketId, int surplusGeneral) { 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 { ...@@ -95,7 +100,11 @@ public class DataUtils {
* @return 兑换剩余库存 * @return 兑换剩余库存
*/ */
public int changeSurplusExchange(String ticketId, int surplusExchange) { 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: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-dev-这里是配置信息基本值
spring: spring:
......
...@@ -36,4 +36,10 @@ ...@@ -36,4 +36,10 @@
# 专业版APP # 专业版APP
20601=账号不存在 20601=账号不存在
20602=密码错误 20602=密码错误
\ No newline at end of file 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.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 = ? kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ? WHERE order_tickets_id = ?
\ No newline at end of file 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: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-dev-这里是配置信息基本值
spring: spring:
......
...@@ -11,7 +11,7 @@ liquidnet: ...@@ -11,7 +11,7 @@ liquidnet:
path: ./logs path: ./logs
name: support-config name: support-config
eureka: eureka:
host: 172.17.207.177:7001 host: 172.17.207.177:7001,172.17.121.158:7001,172.17.121.157:7001
rabbitmq: rabbitmq:
host: 127.0.0.1 host: 127.0.0.1
port: 5672 port: 5672
......
...@@ -56,4 +56,12 @@ ...@@ -56,4 +56,12 @@
</exclusions> </exclusions>
</dependency> </dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project> </project>
...@@ -6,7 +6,7 @@ liquidnet: ...@@ -6,7 +6,7 @@ liquidnet:
username: user username: user
password: user123 password: user123
eureka: 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-这里是配置信息基本值 # end-test-这里是配置信息基本值
spring: spring:
......
...@@ -9,14 +9,14 @@ ...@@ -9,14 +9,14 @@
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <!-- <modules>-->
<module>liquidnet-bus-common</module> <!-- <module>liquidnet-bus-common</module>-->
<module>liquidnet-bus-do</module> <!-- <module>liquidnet-bus-do</module>-->
<module>liquidnet-bus-api</module> <!-- <module>liquidnet-bus-api</module>-->
<module>liquidnet-bus-service</module> <!-- <module>liquidnet-bus-service</module>-->
<module>liquidnet-bus-support</module> <!-- <module>liquidnet-bus-support</module>-->
<module>liquidnet-bus-client</module> <!-- <module>liquidnet-bus-client</module>-->
</modules> <!-- </modules>-->
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <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