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

Commit 6b4261b4 authored by 姜秀龙's avatar 姜秀龙

Merge branch 'refs/heads/jxl-260205-damai' into container-test

parents 82870da9 34349732
......@@ -54,6 +54,9 @@ public class PerformanceStep2Param implements Serializable,Cloneable {
@NotNull(message = "须知提醒不能为空")
private Integer noticeRemindStatus;
@ApiModelProperty(value = "是否开启大麦同步 0:关闭 1:开启", example = "0")
private Integer isSyncDamai;
private static final PerformanceStep2Param obj = new PerformanceStep2Param();
public static PerformanceStep2Param getNew() {
try {
......
package com.liquidnet.service.kylin.service.other;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.entity.KylinTicketTimes;
import com.liquidnet.service.kylin.entity.KylinTickets;
......@@ -15,4 +16,7 @@ public interface DamaiService {
//订单
Boolean sycOrder(long timeId, String ticketsId, long ticketsmId,long ticketIdMemberKey);
//定时同步大麦(扫描所有开启同步的演出)
ResponseDto<Boolean> scheduledSyncDamai();
}
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal;
......@@ -141,6 +142,26 @@ public class KylinOrderTicketEntities implements Serializable ,Cloneable {
};
}
private Integer isDamaiPushSynced;
private Integer isDamaiWithdrawSynced;
/** 以下字段均为非数据库字段,仅定时同步大麦查询时携带,不参与 MyBatis-Plus 自动 INSERT/UPDATE **/
@TableField(exist = false)
private Integer syncType;
@TableField(exist = false)
private String timePay;
@TableField(exist = false)
private Integer isMember;
@TableField(exist = false)
private String getTicketType;
@TableField(exist = false)
private Integer transferStatus;
private static final KylinOrderTicketEntities obj = new KylinOrderTicketEntities();
public static KylinOrderTicketEntities getNew() {
try {
......
......@@ -160,6 +160,12 @@ public class KylinPerformanceStatus implements Serializable ,Cloneable{
*/
private Integer fieldAuditStatus;
/** 是否开启大麦同步 0:关闭 1:开启 */
private Integer isSyncDamai;
/** 该演出的场地场次票种基础信息是否已推过大麦 0否 1是 */
private Integer isDamaiBasicSynced;
/**
* 创建时间
*/
......
......@@ -2,6 +2,7 @@ package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.dao.*;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import org.apache.ibatis.annotations.Param;
......@@ -61,4 +62,13 @@ public interface KylinOrderTicketsMapper extends BaseMapper<KylinOrderTickets> {
List<String> getAgentIdListByPerId(@Param("performancesId") String performancesId);
Map selectNumAndPrice(@Param("performancesId") String performancesId, @Param("ticketsId") String ticketsId);
List<KylinOrderTicketEntities> getDamaiOrderSyncList(@Param("performanceId") String performanceId);
int updateDamaiPushSyncStatus(@Param("ids") List<String> ids, @Param("status") Integer status);
int updateDamaiWithdrawSyncStatus(@Param("ids") List<String> ids, @Param("status") Integer status);
// 撤单场景:一次 SQL 同时更新推单和撤单状态(减少数据库操作)
int updateDamaiWithdrawAndPushSyncStatus(@Param("ids") List<String> ids, @Param("status") Integer status);
}
......@@ -5,6 +5,7 @@ import com.liquidnet.service.kylin.dao.*;
import com.liquidnet.service.kylin.dao.report.KylinPerformanceSubscribeStatisticalDao;
import com.liquidnet.service.kylin.dao.report.KylinPerformanceSubscribeTicketStatisticalDao;
import com.liquidnet.service.kylin.dao.report.KylinPerformancesDto;
import com.liquidnet.service.kylin.entity.KylinPerformanceStatus;
import com.liquidnet.service.kylin.entity.KylinPerformances;
import org.apache.ibatis.annotations.Param;
......@@ -126,4 +127,8 @@ public interface KylinPerformancesMapper extends BaseMapper<KylinPerformances> {
* @date 2024/3/21 18:02
*/
void updatePerformanceSubscribePushById(@Param("ids")List<Integer> ids);
List<KylinPerformanceStatus> getDamaiSyncPerformances();
int updateDamaiBasicSynced(@Param("performancesId") String performancesId, @Param("val") Integer val);
}
......@@ -577,4 +577,55 @@ WHERE kotr.performance_id = #{performanceId}
AND kots.status IN (1, 3, 6)
AND kots.transfer_status in (0, 1, 3, 5);
</select>
<select id="getDamaiOrderSyncList" resultType="com.liquidnet.service.kylin.entity.KylinOrderTicketEntities">
SELECT ote.order_ticket_entities_id, ote.time_id, ote.ticket_id, ote.performance_id,
ote.enter_name, ote.enter_id_code, ote.enter_type, ote.enter_mobile, ote.is_payment,
ote.is_damai_push_synced,
ot.time_pay, ot.order_tickets_id AS order_id, ot.get_ticket_type,
otr.is_member,
ots.transfer_status,
CASE
WHEN ote.is_payment = 1 AND ote.is_damai_push_synced = 0 THEN 1
WHEN (ote.is_payment IN (2, 3) OR ots.transfer_status IN (2, 6)) AND ote.is_damai_withdraw_synced = 0 THEN 2
END AS sync_type
FROM kylin_order_ticket_entities ote
LEFT JOIN kylin_order_tickets ot ON ote.order_id = ot.order_tickets_id
LEFT JOIN kylin_order_ticket_relations otr ON otr.order_id = ot.order_tickets_id
LEFT JOIN kylin_order_ticket_status ots ON ots.order_id = ot.order_tickets_id
WHERE ote.performance_id = #{performanceId}
AND (
(ote.is_payment = 1 AND ote.is_damai_push_synced = 0)
OR
((ote.is_payment IN (2, 3) OR ots.transfer_status IN (2, 6)) AND ote.is_damai_withdraw_synced = 0)
)
LIMIT 200
</select>
<update id="updateDamaiPushSyncStatus">
UPDATE kylin_order_ticket_entities
SET is_damai_push_synced = #{status}
WHERE order_ticket_entities_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="updateDamaiWithdrawSyncStatus">
UPDATE kylin_order_ticket_entities
SET is_damai_withdraw_synced = #{status}
WHERE order_ticket_entities_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<!-- 撤单场景:一次 SQL 同时更新推单和撤单状态,减少数据库操作 -->
<update id="updateDamaiWithdrawAndPushSyncStatus">
UPDATE kylin_order_ticket_entities
SET is_damai_withdraw_synced = #{status}, is_damai_push_synced = #{status}
WHERE order_ticket_entities_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>
......@@ -1327,4 +1327,16 @@ GROUP BY user_mobile,tickets_id;
#{id}
</foreach>
</update>
<select id="getDamaiSyncPerformances" resultType="com.liquidnet.service.kylin.entity.KylinPerformanceStatus">
SELECT kps.performance_id, kps.is_damai_basic_synced
FROM kylin_performance_status kps
LEFT JOIN kylin_performances kp ON kp.performances_id = kps.performance_id
WHERE kps.is_sync_damai = 1
AND kps.status IN (3, 6, 7, 8, 9, 10)
AND kp.time_end > NOW()
</select>
<update id="updateDamaiBasicSynced">
UPDATE kylin_performance_status SET is_damai_basic_synced = #{val} WHERE performance_id = #{performancesId}
</update>
</mapper>
......@@ -10,10 +10,8 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Component
@FeignClient(name = "liquidnet-service-platform",
contextId = "FeignPlatformTaskClient", path = "",
url = "${liquidnet.service.platform.url}",
// url = "",
@FeignClient(name = "liquidnet-service-platform", contextId = "FeignPlatformTaskClient", path = "", url = "${liquidnet.service.platform.url}",
// url = "",
fallback = FallbackFactory.Default.class)
public interface FeignPlatformTaskClient {
......@@ -34,6 +32,7 @@ public interface FeignPlatformTaskClient {
/**
* 定时开票提醒
*
* @author zjp
* @return: com.liquidnet.service.base.ResponseDto<java.lang.Boolean>
* @date 2024/3/21 18:03
......@@ -43,11 +42,19 @@ public interface FeignPlatformTaskClient {
/*
* @description: 自动处理退款失败
*
* @author: zjp
*
* @date: 2025/4/27 14:28
*
* @param: []
*
* @return: com.liquidnet.service.base.ResponseDto<java.lang.Boolean>
**/
@GetMapping("platform/refund/failRefund")
ResponseDto<Boolean> failRefund();
@PostMapping("platform/damai/scheduledSync")
ResponseDto<Boolean> scheduledSyncDamai();
}
......@@ -11,8 +11,10 @@ import org.springframework.stereotype.Component;
* XxlJob开发示例(Bean模式)
* <p>
* 开发步骤:
* 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"
* 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
* 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String
* param)"
* 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法",
* destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
* 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
*/
@Component
......@@ -56,7 +58,8 @@ public class KylinTaskHandler {
@XxlJob(value = "sev-platform:checkTransferOrderHandler")
public void checkTransferOrderHandler() {
try {
XxlJobHelper.handleSuccess("结果:" + feignPlatformTaskClient.checkTransferOrder(Integer.parseInt(XxlJobHelper.getJobParam())).getData());
XxlJobHelper.handleSuccess("结果:" + feignPlatformTaskClient
.checkTransferOrder(Integer.parseInt(XxlJobHelper.getJobParam())).getData());
} catch (Exception e) {
XxlJobHelper.log(e);
XxlJobHelper.handleFail();
......@@ -85,6 +88,7 @@ public class KylinTaskHandler {
/**
* 开票提醒定时推送
*
* @author zjp
* @param null
* @return: null
......@@ -102,6 +106,7 @@ public class KylinTaskHandler {
/**
* 退款失败自动处理
*
* @author zjp
* @param null
* @return: null
......@@ -116,4 +121,15 @@ public class KylinTaskHandler {
XxlJobHelper.handleFail();
}
}
@XxlJob(value = "sev-platform:scheduledSyncDamai")
public void scheduledSyncDamaiHandler() {
try {
XxlJobHelper.handleSuccess("定时大麦同步结果:" + feignPlatformTaskClient.scheduledSyncDamai().getData());
} catch (Exception e) {
XxlJobHelper.log(e);
XxlJobHelper.handleFail();
}
}
}
-- 1. 商演同步大麦开关设计及防复推
ALTER TABLE `kylin_performances`
ADD COLUMN `is_sync_damai` tinyint(2) DEFAULT 0 COMMENT '是否开启大麦同步 0:关闭 1:开启',
ADD COLUMN `is_damai_basic_synced` tinyint(2) DEFAULT 0 COMMENT '该演出的场地场次票种基础信息是否已推过大麦 0否 1是';
-- 2. 入场人基本门票粒度的分离式同步流转追踪设计
ALTER TABLE `kylin_order_ticket_entities`
ADD COLUMN `is_damai_push_synced` tinyint(2) DEFAULT 0 COMMENT '正向推单至大麦状态: 0=待推(默认) 1=推送中 2=推送成功 3=推送失败',
ADD COLUMN `is_damai_withdraw_synced` tinyint(2) DEFAULT 0 COMMENT '逆向撤单(退单/转赠)至大麦状态: 0=待推(默认/初始) 1=推送中 2=推送成功 3=推送失败';
......@@ -139,6 +139,20 @@
<artifactId>liquident-common-erp</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-kylin-do</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>taobao-sdk-id</groupId>
<artifactId>taobao-sdk</artifactId>
<version>1.0.0</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${project.basedir}/lib/taobao-sdk-java-auto_1600401599540-20210607.jar</systemPath>
</dependency>
</dependencies>
<build>
......
package com.liquidnet.service.platform.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.service.other.DamaiService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/platform/damai")
public class PlatformDamaiController {
@Autowired
private DamaiService damaiService;
@ApiOperation("定时同步大麦(扫描所有开启同步的演出)")
@PostMapping(value = "/scheduledSync")
public ResponseDto<Boolean> scheduledSyncDamai() {
return damaiService.scheduledSyncDamai();
}
}
package com.liquidnet.service.platform.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.liquidnet.client.admin.common.utils.DateUtils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dao.OrderPushDamaiDto;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.service.other.DamaiService;
import com.liquidnet.service.platform.utils.DataUtils;
import com.liquidnet.service.platform.utils.DateUtils;
import com.liquidnet.service.platform.utils.TaobaoTicketUtils;
import com.liquidnet.service.slime.entity.SlimeFields;
import com.liquidnet.service.slime.mapper.SlimeFieldsMapper;
import com.taobao.api.TaobaoClient;
import com.taobao.api.internal.util.StringUtils;
import com.taobao.api.request.*;
import com.taobao.api.request.AlibabaDamaiMevOpenBatchpushticketRequest.ThirdTicketPushOpenParam;
import com.taobao.api.request.AlibabaDamaiMevOpenPushitemRequest.PushTicketItemPushOpenParam;
import com.taobao.api.request.AlibabaDamaiMevOpenPushperformRequest.ThirdPerformPushOpenParam;
import com.taobao.api.request.AlibabaDamaiMevOpenPushprojectRequest.ThirdProjectPushOpenParam;
import com.taobao.api.response.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 巡演 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-05-11
*/
@Service
@Slf4j
public class PlatformDamaiServiceImpl extends ServiceImpl<KylinRoadShowsMapper, KylinRoadShows> implements DamaiService {
@Autowired
private TaobaoTicketUtils taobaoTicketUtils;
@Autowired
private KylinOrderTicketsMapper orderTicketsMapper;
@Autowired
private KylinPerformancesMapper performancesMapper;
@Autowired
private KylinPerformanceRelationsMapper performanceRelationsMapper;
@Autowired
private KylinTicketTimesMapper ticketTimesMapper;
@Autowired
private KylinTicketTimeRelationMapper ticketTimeRelationMapper;
@Autowired
private KylinTicketsMapper ticketsMapper;
@Autowired
private KylinTicketRelationsMapper ticketRelationsMapper;
@Autowired
private KylinTicketStatusMapper ticketStatusMapper;
@Autowired
private SlimeFieldsMapper slimeFieldsMapper;
@Autowired
private DataUtils dataUtils;
@Override
public Boolean sycPerformance(String performanceId) {
try {
// 大麦工具
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenPushprojectRequest req = new AlibabaDamaiMevOpenPushprojectRequest();
ThirdProjectPushOpenParam obj1 = new ThirdProjectPushOpenParam();
// 演出数据
KylinPerformances performanceData = performancesMapper.selectOne(
new UpdateWrapper<KylinPerformances>().eq("performances_id", performanceId)
);
KylinPerformanceRelations performanceRelationData = performanceRelationsMapper.selectOne(
new UpdateWrapper<KylinPerformanceRelations>().eq("performance_id", performanceId)
);
// 同步场地信息
Long venueId = sycField(performanceRelationData.getFieldId());
if (venueId <= 0) {
return false;
}
// 同步演出信息
obj1.setVenueId(venueId);
obj1.setPicUrl(performanceData.getImgPoster());
long performanceKey = IDGenerator.getDamaiCode(performanceData.getPerformancesId());
obj1.setProjectId(performanceKey);
obj1.setProjectName(performanceData.getTitle());
if (performanceData.getCityId().equals(6977)) {
obj1.setCityId(110100L);
} else if (performanceData.getCityId().equals(3833)) {
obj1.setCityId(520100L);
} else {//520100
String cityId = dataUtils.getFieldsVoByFieldId(performanceRelationData.getFieldId()).getCityId();
obj1.setCityId(Long.parseLong(cityId));
}
obj1.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj1.setSystemId(taobaoTicketUtils.getSystemId());
req.setPushProjectParam(obj1);
log.info("[同步演出] 演出名称 = " + performanceData.getTitle() + " 大麦演出id =" + performanceKey);
AlibabaDamaiMevOpenPushprojectResponse rsp = client.execute(req);
if (!rsp.getResult().getSuccess()) {
log.error("[同步演出] res [BODY = {}]", rsp.getBody());
return false;
}
// 同步场次
List<KylinTicketTimeRelation> timeRelation = ticketTimeRelationMapper.selectList(
new UpdateWrapper<KylinTicketTimeRelation>().eq("performance_id", performanceId)
);
for (KylinTicketTimeRelation relation : timeRelation) {
KylinTicketTimes timeData = ticketTimesMapper.selectOne(
new UpdateWrapper<KylinTicketTimes>().eq("ticket_times_id", relation.getTimesId())
);
boolean result = sycTimes(performanceKey, timeData, venueId);
if (!result) {
return false;
}
}
// 同步票种
List<String> timeIdList = timeRelation.stream().map(KylinTicketTimeRelation::getTimesId).collect(Collectors.toList());
List<KylinTicketRelations> ticketRelation = ticketRelationsMapper.selectList(
new UpdateWrapper<KylinTicketRelations>().in("times_id", timeIdList)
);
for (KylinTicketRelations ticketRelations : ticketRelation) {
long ticketTimesKey = IDGenerator.getDamaiCode(ticketRelations.getTimesId());
// 是否开启了同步的票种
// KylinTicketStatus ticketStatus = ticketStatusMapper.selectOne(
// new UpdateWrapper<KylinTicketStatus>().eq("ticket_id", ticketRelations.getTicketId()).eq("sync_damai", 1)
// );
// if (null != ticketStatus) {
KylinTickets ticketData = ticketsMapper.selectOne(
new UpdateWrapper<KylinTickets>().eq("tickets_id", ticketRelations.getTicketId())
);
boolean result = sycTicket(ticketTimesKey, ticketData);
if (!result) {
return false;
}
// }
}
// 同步订单
/*for (KylinTicketRelations ticketRelations : ticketRelation) {
long ticketTimesKey = IDGenerator.getDamaiCode(ticketRelations.getTimesId());
long ticketIdKey = IDGenerator.getDamaiCode(ticketRelations.getTicketId());
long ticketIdKey2 = Long.valueOf(ticketIdKey + "".concat("010"));
boolean result = sycOrder(ticketTimesKey, ticketRelations.getTicketId(), ticketIdKey, ticketIdKey2);
if (!result) {
return false;
}
}*/
// 所有同步完成
log.info("[ 同步大麦(演出/场次/票种)-完成 ]");
return true;
} catch (Exception e) {
log.error("[同步大麦(演出/场次/票种)] 异常:{}", e);
return false;
}
}
public Long sycField(String fieldId) {
try {
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenPushvenueRequest req = new AlibabaDamaiMevOpenPushvenueRequest();
AlibabaDamaiMevOpenPushvenueRequest.ThirdVenuePushOpenParam obj1 = new AlibabaDamaiMevOpenPushvenueRequest.ThirdVenuePushOpenParam();
// obj1.setPushTime(StringUtils.parseDateTime("2017-01-01 00:00:00"));
obj1.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj1.setSystemId(taobaoTicketUtils.getSystemId());
// if (performanceId.equals("299481167884001288936975")) {
// obj1.setVenueId(2774011L);
// obj1.setVenueName("北京世园公园");
//// obj1.setVenueAddress("foo");
// } else if (performanceId.equals("5936257")) {
// obj1.setVenueId(3238010L);
// obj1.setVenueName("贵阳奥林匹克体育中心");
//// obj1.setVenueAddress("foo");
// } else {
// return 0L;
// }
SlimeFields slimeFields = slimeFieldsMapper.selectOne(
Wrappers.lambdaQuery(SlimeFields.class)
.eq(SlimeFields::getFieldId, fieldId)
);
// SlimeFieldsVo fieldsVo = dataUtils.getFieldsVoByFieldId(fieldId);
obj1.setVenueId(slimeFields.getMid());
obj1.setVenueName(slimeFields.getName());
obj1.setVenueAddress(slimeFields.getAddress());
req.setPushVenueParam(obj1);
log.info("[同步场地] 场地名称 = " + obj1.getVenueName() + " 大麦场地id =" + obj1.getVenueId());
AlibabaDamaiMevOpenPushvenueResponse rsp = client.execute(req);
if (!rsp.getResult().getSuccess()) {
log.error("[同步场地] res [BODY = {}]", rsp.getBody());
return 0L;
}
return obj1.getVenueId();
} catch (Exception e) {
log.error("[同步场地] 异常:{}", e);
return 0L;
}
}
@Override
public Boolean sycTimes(long performancesmId, KylinTicketTimes timesData, Long venueId) {
try {
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenPushperformRequest req = new AlibabaDamaiMevOpenPushperformRequest();
ThirdPerformPushOpenParam obj1 = new ThirdPerformPushOpenParam();
long ticketTimesKey = IDGenerator.getDamaiCode(timesData.getTicketTimesId());
obj1.setPerformId(ticketTimesKey);
obj1.setPerformName(timesData.getTitle());
obj1.setProjectId(performancesmId);
obj1.setVenueId(venueId);
obj1.setStartTime(StringUtils.parseDateTime(timesData.getUseStart().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
obj1.setEndTime(StringUtils.parseDateTime(timesData.getUseEnd().plusDays(1).minusSeconds(1L).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
// obj1.setEndTime(StringUtils.parseDateTime(timesData.getUseEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
obj1.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj1.setSystemId(taobaoTicketUtils.getSystemId());
req.setPushPerformParam(obj1);
log.info("[同步场次] 场次名称 = " + timesData.getTitle() + " 大麦场次id =" + ticketTimesKey);
AlibabaDamaiMevOpenPushperformResponse rsp = client.execute(req);
if (!rsp.getResult().getSuccess()) {
log.error("[同步场次] res [BODY = {}]", rsp.getBody());
return false;
}
return true;
} catch (Exception e) {
log.error("[同步场次] 异常:{}", e);
return false;
}
}
@Override
public Boolean sycTicket(long timemId, KylinTickets ticketsData) {
try {
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenPushitemRequest req = new AlibabaDamaiMevOpenPushitemRequest();
PushTicketItemPushOpenParam obj1 = new PushTicketItemPushOpenParam();
long ticketIdKey = IDGenerator.getDamaiCode(ticketsData.getTicketsId());
obj1.setItemId(ticketIdKey);
obj1.setItemName(ticketsData.getTitle());
obj1.setItemPrice(ticketsData.getPrice().longValue() * 100);
obj1.setPerformId(timemId);
obj1.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj1.setSystemId(taobaoTicketUtils.getSystemId());
req.setPushItemParam(obj1);
log.info("[同步票种] 票种名称 = " + ticketsData.getTitle() + " 大麦票种id =" + ticketIdKey + " 票种价格 = " + ticketsData.getPrice());
AlibabaDamaiMevOpenPushitemResponse rsp = client.execute(req);
TaobaoClient client2 = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenPushitemRequest req2 = new AlibabaDamaiMevOpenPushitemRequest();
PushTicketItemPushOpenParam obj12 = new PushTicketItemPushOpenParam();
long ticketIdKey2 = Long.valueOf(ticketIdKey + "".concat("010"));
obj12.setItemId(ticketIdKey2);
obj12.setItemName(ticketsData.getTitle() + "-登登登VIP");
obj12.setItemPrice(ticketsData.getPrice().longValue() * 100);
obj12.setPerformId(timemId);
obj12.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj12.setSystemId(taobaoTicketUtils.getSystemId());
req2.setPushItemParam(obj12);
log.info("[同步VIP票种] 票种名称 = " + obj12.getItemName() + " 大麦票种id =" + ticketIdKey2 + " 票种价格 = " + ticketsData.getPrice());
AlibabaDamaiMevOpenPushitemResponse rsp2 = client2.execute(req2);
if (!rsp.getResult().getSuccess() || !rsp2.getResult().getSuccess()) {
log.error("[同步票种] res [BODY = {}]", rsp.getBody());
log.error("[同步VIP票种] res [BODY = {}]", rsp2.getBody());
return false;
}
return true;
} catch (Exception e) {
log.error("[同步票种] 异常:{}", e);
return false;
}
}
@Override
public Boolean sycOrder(long timemId, String ticketsId, long ticketsmId, long ticketIdMemberKey) {
try {
ArrayList<Long> orderTicketEntitiesKeyList = new ArrayList();
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenBatchpushticketRequest req = new AlibabaDamaiMevOpenBatchpushticketRequest();
List<OrderPushDamaiDto> data = orderTicketsMapper.pushDamaiDetailsList(ticketsId);
int dataSize = data.size();
log.info("[同步订单] 票种总张数 = " + dataSize + " 票种id =" + ticketsId);
int batchSize = 100;
int orderCount = 0;
int refundOrderCount = 0;
int transferRefundOrderCount = 0;
for (int i = 0; i < dataSize; i += batchSize) {
List<ThirdTicketPushOpenParam> paramList = new ArrayList<>();
// 使用 subList 方法获取当前批次的数据子列表
List<OrderPushDamaiDto> batch = data.subList(i, Math.min(i + batchSize, dataSize));
for (OrderPushDamaiDto item : batch) {
ThirdTicketPushOpenParam obj3 = new ThirdTicketPushOpenParam();
String ticketEntitiesId = item.getOrderTicketEntitiesId();
// 生成大麦票单 id
long orderTicketEntitiesKey;
if (item.getIsMember() == 1) {
orderTicketEntitiesKey = Long.valueOf(IDGenerator.getDamaiCode(ticketEntitiesId).toString().concat("010"));
} else {
orderTicketEntitiesKey = Long.valueOf(IDGenerator.getDamaiCode(ticketEntitiesId).toString().concat("020"));
}
// 可能orderTicketEntitiesKey有重复的吧 判断重复的加 1 但是也不准确 会不会有多个重复的
orderTicketEntitiesKey = checkAndIncrement(orderTicketEntitiesKeyList, orderTicketEntitiesKey, "1", ticketEntitiesId);
orderTicketEntitiesKeyList.add(orderTicketEntitiesKey);
// 同步所有订单信息 已支付 退款中 已退款的
long orderIdKey = IDGenerator.getDamaiCode(item.getOrderTicketsId());
if (item.getEnterType() == 0 || item.getEnterName().equals("")) {
log.error("[入场人信息错误] OrderTicketEntitiesId = " + item.getOrderTicketEntitiesId()
+ " 入场人 type = " + item.getEnterType() + " 入场人 name = " + item.getEnterName());
continue;
}
// 用户名 入场人姓名
obj3.setUserName(item.getEnterName());
// 证件号 入场人身份证
obj3.setCertificateNo(item.getEnterIdCode());
// 用户手机号 入场人手机号
obj3.setOrderUserMobile(item.getEnterMobile());
// 1大陆身份证 2港澳通行证 3台胞证 4护照 5军官证
// 证件内容 入场人证件type
// 大麦 1=身份证,2=学⽣证, 3=军官证,4=护照,5=港澳通⾏证,6=台胞证
switch (item.getEnterType()) {
case 1:
obj3.setCertificateType(1L);
break;
case 2:
obj3.setCertificateType(5L);
break;
case 3:
obj3.setCertificateType(6L);
break;
case 4:
obj3.setCertificateType(4L);
break;
case 5:
obj3.setCertificateType(3L);
break;
default:
log.error("[入场人类型错误] OrderTicketEntitiesId = " + item.getOrderTicketEntitiesId() + " 入场人 type = " + item.getEnterType());
continue;
}
// 支付时间
obj3.setPayTime(DateUtils.parseDate(item.getTimePay()));
// 场次id
obj3.setPerformId(timemId);
if (item.getIsMember() == 1) {
// obj3.setExt("登登登VIP");
obj3.setExt("");
obj3.setTicketItemId(ticketIdMemberKey);
} else {
obj3.setExt("");
// obj3.setExt("登登登VIP");
obj3.setTicketItemId(ticketsmId);
}
obj3.setQrCode("http://m.zhengzai.tv?c=" + IDGenerator.ticketQrCode(item.getOrderTicketEntitiesId()));
// 票单号 入场人id
obj3.setVoucherId(orderTicketEntitiesKey);
// 订单id orderId
obj3.setOrderId(orderIdKey);
// 票类型 快递 电子
obj3.setMediumType(item.getGetTicketType().equals("express") ? 1L : 2L);
obj3.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj3.setSystemId(taobaoTicketUtils.getSystemId());
obj3.setSeatType(1L);
//票类型
obj3.setTicketType(1L);
List<ThirdTicketPushOpenParam> paramList2 = new ArrayList<>();
paramList2.add(obj3);
req.setThirdTicketSetOpenParamList(paramList2);
AlibabaDamaiMevOpenBatchpushticketResponse rsp = client.execute(req);
if (!rsp.getResult().getSuccess()) {
log.error("[同步订单] res [BODY = {}]", rsp.getBody());
return false;
}
// 部分退款是不退的,但是阶梯退票客服手动申请的现在也是部分退款,用户自己申请的现在不确定
// 取消退款的貌似没处理 其实这块应该可以不用处理退款中的,因为印象中退款那里有接入同步大麦
// 0未支付 1已支付 2退款中 3已退款 4部分退款
// if (item.getIsPayment() == 3 || item.getIsPayment() == 2 || item.getIsPayment() == 4) {
if (item.getIsPayment() == 3 || item.getIsPayment() == 2) {
taobaoTicketUtils.withdrawDamaiOrder(timemId, orderTicketEntitiesKey);
refundOrderCount += 1;
// 已转赠是转出去了 被退回是被别人退回了 已退回是别人给我的我给退回了
// 0交易成功,1转增中,2已转赠,3转增订单,4待接收,5被退回 ,6已退回
} else if (item.getTransferStatus() == 2 || item.getTransferStatus() == 6) {
taobaoTicketUtils.withdrawDamaiOrder(timemId, orderTicketEntitiesKey);
transferRefundOrderCount += 1;
} else {
orderCount += 1;
}
}
/*if (paramList.size() == 0) {
return true;
} else {
req.setThirdTicketSetOpenParamList(paramList);
AlibabaDamaiMevOpenBatchpushticketResponse rsp = client.execute(req);
if (!rsp.getResult().getSuccess()) {
log.error("[同步订单] res [BODY = {}]", rsp.getBody());
return false;
}
}*/
}
int count = orderCount + transferRefundOrderCount + refundOrderCount;
log.info("[同步订单] 同步成功总张数 = " + count
+ " orderCount =" + orderCount + " refund =" + refundOrderCount + " transfer =" + transferRefundOrderCount + " 票种id =" + ticketsId);
return true;
} catch (Exception e) {
log.error("[同步订单] 异常:{}", e);
return null;
}
}
private Long checkAndIncrement(List<Long> list, Long value, String suffix, String ticketEntitiesId) {
// 如果列表中不包含该值,则返回该值
if (!list.contains(value)) {
return value;
} else {
log.error("[ order_ticket_entities_id重复 ] ticketEntitiesId = " + ticketEntitiesId);
// 生成新的值
Long newValue = Long.parseLong(value + suffix);
// 递归调用,尝试新值
return checkAndIncrement(list, newValue, suffix + "1", ticketEntitiesId);
}
}
public static void main(String[] args) {
Long a = IDGenerator.getDamaiCode("1360935572095672321307852");
System.out.println(a);
}
@Override
public ResponseDto<Boolean> scheduledSyncDamai() {
List<KylinPerformanceStatus> performancesList = performancesMapper.getDamaiSyncPerformances();
if (performancesList == null || performancesList.isEmpty()) {
log.info("[大麦定时同步] 无需要推送的演出");
return ResponseDto.success(true);
}
for (KylinPerformanceStatus performance : performancesList) {
String performancesId = performance.getPerformanceId();
try {
// 1. 基础信息未推送过,先推场地/场次/票种
if (performance.getIsDamaiBasicSynced() == null || performance.getIsDamaiBasicSynced() == 0) {
try {
sycPerformance(performancesId);
performancesMapper.updateDamaiBasicSynced(performancesId, 1);
} catch (Exception e) {
log.error("[大麦定时同步] 基础信息推送失败 performancesId={}", performancesId, e);
continue;
}
} else {
log.info("[大麦定时同步] 基础信息已存在 performancesId={}", performancesId);
}
// 2. 合并查询:推单(syncType=1) + 撤单(syncType=2),每次最多 LIMIT 200 条
List<KylinOrderTicketEntities> syncList = orderTicketsMapper.getDamaiOrderSyncList(performancesId);
if (syncList == null || syncList.isEmpty()) {
continue;
}
for (KylinOrderTicketEntities ote : syncList) {
Integer syncType = ote.getSyncType();
String oteId = ote.getOrderTicketEntitiesId();
Long damaiTimeId = IDGenerator.getDamaiCode(ote.getTimeId());
// 大麦票单号生成规则:会员票末尾拼 010,普通票末尾拼 020(与 sycOrder 保持一致)
long voucherId = Integer.valueOf(1).equals(ote.getIsMember())
? Long.parseLong(IDGenerator.getDamaiCode(oteId).toString().concat("010"))
: Long.parseLong(IDGenerator.getDamaiCode(oteId).toString().concat("020"));
try {
if (Integer.valueOf(1).equals(syncType)) {
// 推单(购买)
orderTicketsMapper.updateDamaiPushSyncStatus(java.util.Collections.singletonList(oteId), 1);
sycSingleTicketToDamai(ote, damaiTimeId, voucherId);
orderTicketsMapper.updateDamaiPushSyncStatus(java.util.Collections.singletonList(oteId), 2);
} else if (Integer.valueOf(2).equals(syncType)) {
// 撤单(退票/转赠)
// 大麦侧必须先有推单记录才能撤单,如果从未推过则先推
orderTicketsMapper.updateDamaiWithdrawSyncStatus(java.util.Collections.singletonList(oteId), 1);
if (Integer.valueOf(0).equals(ote.getIsDamaiPushSynced())) {
sycSingleTicketToDamai(ote, damaiTimeId, voucherId);
}
taobaoTicketUtils.withdrawDamaiOrder(damaiTimeId, voucherId);
// 撤单成功:一次 SQL 同时标记推单和撤单均为已处理
orderTicketsMapper.updateDamaiWithdrawAndPushSyncStatus(java.util.Collections.singletonList(oteId), 2);
}
} catch (Exception e) {
log.error("[大麦定时同步] 单票处理失败 oteId={} syncType={}", oteId, syncType, e);
if (Integer.valueOf(1).equals(syncType)) {
orderTicketsMapper.updateDamaiPushSyncStatus(java.util.Collections.singletonList(oteId), 3);
} else {
orderTicketsMapper.updateDamaiWithdrawSyncStatus(java.util.Collections.singletonList(oteId), 3);
}
}
}
} catch (Exception e) {
log.error("[大麦定时同步] 处理异常 performancesId={}", performancesId, e);
}
}
return ResponseDto.success(true);
}
/**
* 定时同步单张票推单到大麦(入场人维度)
* 复用 sycOrder 中单张票的参数构建逻辑
*/
private void sycSingleTicketToDamai(KylinOrderTicketEntities ote, long damaiTimeId, long voucherId) throws Exception {
if (ote.getEnterType() == null || ote.getEnterType() == 0
|| ote.getEnterName() == null || ote.getEnterName().equals("")) {
log.error("[大麦定时同步] 入场人信息错误 oteId={} enterType={} enterName={}", ote.getOrderTicketEntitiesId(), ote.getEnterType(), ote.getEnterName());
return;
}
TaobaoClient client = taobaoTicketUtils.initTaobaoClient();
AlibabaDamaiMevOpenBatchpushticketRequest req = new AlibabaDamaiMevOpenBatchpushticketRequest();
ThirdTicketPushOpenParam obj3 = new ThirdTicketPushOpenParam();
obj3.setUserName(ote.getEnterName());
obj3.setCertificateNo(ote.getEnterIdCode());
obj3.setOrderUserMobile(ote.getEnterMobile());
switch (ote.getEnterType()) {
case 1: obj3.setCertificateType(1L); break;
case 2: obj3.setCertificateType(5L); break;
case 3: obj3.setCertificateType(6L); break;
case 4: obj3.setCertificateType(4L); break;
case 5: obj3.setCertificateType(3L); break;
default:
log.error("[大麦定时同步] 入场人类型错误 oteId={} enterType={}", ote.getOrderTicketEntitiesId(), ote.getEnterType());
return;
}
obj3.setPayTime(DateUtils.parseDate(ote.getTimePay()));
obj3.setPerformId(damaiTimeId);
long damaiTicketId = IDGenerator.getDamaiCode(ote.getTicketId());
if (Integer.valueOf(1).equals(ote.getIsMember())) {
obj3.setTicketItemId(Long.valueOf(damaiTicketId + "".concat("010")));
} else {
obj3.setTicketItemId(damaiTicketId);
}
obj3.setExt("");
obj3.setQrCode("http://m.zhengzai.tv?c=" + IDGenerator.ticketQrCode(ote.getOrderTicketEntitiesId()));
obj3.setVoucherId(voucherId);
obj3.setOrderId(IDGenerator.getDamaiCode(ote.getOrderId()));
obj3.setMediumType("express".equals(ote.getGetTicketType()) ? 1L : 2L);
obj3.setSupplierSecret(taobaoTicketUtils.getSupplierSecret());
obj3.setSystemId(taobaoTicketUtils.getSystemId());
obj3.setSeatType(1L);
obj3.setTicketType(1L);
List<ThirdTicketPushOpenParam> paramList = new ArrayList<>();
paramList.add(obj3);
req.setThirdTicketSetOpenParamList(paramList);
AlibabaDamaiMevOpenBatchpushticketResponse rsp = client.execute(req);
if (!rsp.getResult().getSuccess()) {
log.error("[大麦定时同步] 推单失败 oteId={} body={}", ote.getOrderTicketEntitiesId(), rsp.getBody());
throw new RuntimeException("推单失败: " + rsp.getBody());
}
}
}
......@@ -524,4 +524,16 @@ public class DataUtils {
log.error("回退券ERROR:{}", e);
}
}
// 【场地】获取详情
public SlimeFieldsVo getFieldsVoByFieldId(String fieldId) {
String key = SlimeRedisConst.INFO_FIELD.concat(fieldId);
long s = System.currentTimeMillis();
SlimeFieldsVo vo = (SlimeFieldsVo) redisDataSourceUtil.getRedisKylinUtil().get(key);
if (null == vo) {
vo = mongoTemplate.findOne(Query.query(Criteria.where("fieldId").is(fieldId)), SlimeFieldsVo.class, SlimeFieldsVo.class.getSimpleName());
redisDataSourceUtil.getRedisKylinUtil().set(SlimeRedisConst.INFO_FIELD.concat(fieldId), vo);
}
return vo;
}
}
package com.liquidnet.service.platform.utils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 时间工具类
*
* @author ruoyi
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils
{
public static String YYYY = "yyyy";
public static String YYYY_MM = "yyyy-MM";
public static String YYYY_MM_DD = "yyyy-MM-dd";
public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
/**
* 获取当前Date型日期
*
* @return Date() 当前日期
*/
public static Date getNowDate()
{
return new Date();
}
/**
* 获取当前日期, 默认格式为yyyy-MM-dd
*
* @return String
*/
public static String getDate()
{
return dateTimeNow(YYYY_MM_DD);
}
public static final String getTime()
{
return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
}
public static final String dateTimeNow()
{
return dateTimeNow(YYYYMMDDHHMMSS);
}
public static final String dateTimeNow(final String format)
{
return parseDateToStr(format, new Date());
}
public static final String dateTime(final Date date)
{
return parseDateToStr(YYYY_MM_DD, date);
}
public static final String parseDateToStr(final String format, final Date date)
{
return new SimpleDateFormat(format).format(date);
}
public static final Date dateTime(final String format, final String ts)
{
try
{
return new SimpleDateFormat(format).parse(ts);
}
catch (ParseException e)
{
throw new RuntimeException(e);
}
}
/**
* 日期路径 即年/月/日 如2018/08/08
*/
public static final String datePath()
{
Date now = new Date();
return DateFormatUtils.format(now, "yyyy/MM/dd");
}
/**
* 日期路径 即年/月/日 如20180808
*/
public static final String dateTime()
{
Date now = new Date();
return DateFormatUtils.format(now, "yyyyMMdd");
}
/**
* 日期型字符串转化为日期 格式
*/
public static Date parseDate(Object str)
{
if (str == null)
{
return null;
}
try
{
return parseDate(str.toString(), parsePatterns);
}
catch (ParseException e)
{
return null;
}
}
/**
* 获取服务器启动时间
*/
public static Date getServerStartDate()
{
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return new Date(time);
}
/**
* 计算相差天数
*/
public static int differentDaysByMillisecond(Date date1, Date date2)
{
return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
}
/**
* 计算两个时间差
*/
public static String getDatePoor(Date endDate, Date nowDate)
{
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
// long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = endDate.getTime() - nowDate.getTime();
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
// long sec = diff % nd % nh % nm / ns;
return day + "天" + hour + "小时" + min + "分钟";
}
}
package com.liquidnet.service.platform.utils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaDamaiMevOpenWithdrawticketRequest;
import com.taobao.api.response.AlibabaDamaiMevOpenWithdrawticketResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
public class TaobaoTicketUtils {
private String URL = "http://gw.api.taobao.com/router/rest";
private String APPKEY = "27542597";
private String SECRET = "900025efc616fd2446344bb8fa21d039";
private String SUPPLIER_SECRET = "444d0752439f921a75eaf5951a8bc03c";
private Long SYSTEM_ID = 15669L;
// private String url = "http://gw.api.tbsandbox.com/router/rest";
// private String appkey = "4272";
// private String secret = "0ebbcccfee18d7ad1aebc5b135ffa906";
private TaobaoClient client = null;
public TaobaoClient initTaobaoClient() {
if (client == null) {
client = new DefaultTaobaoClient(URL, APPKEY, SECRET);
}
return client;
}
public String getSupplierSecret() {
return SUPPLIER_SECRET;
}
public Long getSystemId() {
return SYSTEM_ID;
}
/**
* @param timesId 场次的id
* @param orderEntitiesId 入场人的id
* @return
*/
public boolean withdrawDamaiOrder(long timesId, long orderEntitiesId) {
try {
TaobaoClient client = initTaobaoClient();
AlibabaDamaiMevOpenWithdrawticketRequest req = new AlibabaDamaiMevOpenWithdrawticketRequest();
AlibabaDamaiMevOpenWithdrawticketRequest.TicketIdOpenParam obj1 = new AlibabaDamaiMevOpenWithdrawticketRequest.TicketIdOpenParam();
obj1.setPerformId(timesId);// 场次id
obj1.setVoucherId(orderEntitiesId);// 票单号 入场人id
obj1.setSupplierSecret(SUPPLIER_SECRET);
obj1.setSystemId(SYSTEM_ID);
req.setTicketIdOpenParam(obj1);
AlibabaDamaiMevOpenWithdrawticketResponse rsp = client.execute(req);
return rsp.getResult().getSuccess();
} catch (Exception e) {
return false;
}
}
public boolean refundDamaiOrder(KylinOrderTicketVo orderData, KylinPerformanceVo vo) {
try {
int isSysDamai = 0;
for (int x = 0; x < vo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = vo.getTicketTimeList().get(x);
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(orderData.getTicketId())) {
isSysDamai = ticketItem.getSysDamai();
break;
}
}
}
if (isSysDamai == 1) {
List<KylinOrderTicketEntitiesVo> listData = orderData.getEntitiesVoList();
for (int i = 0; i < listData.size(); i++) {
KylinOrderTicketEntitiesVo item = listData.get(i);
long ticketTimesKey;
if (item.getTicketId().length() > 13) {
ticketTimesKey = Long.valueOf(IDGenerator.getDamaiCode(item.getTimeId()));
} else {
ticketTimesKey = Long.parseLong(item.getTimeId());
}
long orderTicketEntitiesKey;
// if (item.getOrderTicketEntitiesId().length() > 13) {
// orderTicketEntitiesKey =
// Long.valueOf(IDGenerator.getDamaiCode(item.getOrderTicketEntitiesId()));
// } else {
// orderTicketEntitiesKey = Long.valueOf(item.getOrderTicketEntitiesId());//票单号
// 入场人id
// }
if (orderData.getIsMember() == 1) {
orderTicketEntitiesKey = Long.valueOf(
IDGenerator.getDamaiCode(item.getOrderTicketEntitiesId()).toString().concat("010"));
} else {
orderTicketEntitiesKey = Long.valueOf(
IDGenerator.getDamaiCode(item.getOrderTicketEntitiesId()).toString().concat("020"));
}
if (item.getIsPayment() == 2) {
withdrawDamaiOrder(ticketTimesKey, orderTicketEntitiesKey);
}
}
return true;
}
return true;
} catch (Exception e) {
log.info("REFUND DAMAI ERROR = {}", e);
return false;
}
}
}
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